58 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import bpy
 | |
| 
 | |
| from lnx.logicnode.lnx_nodes import *
 | |
| 
 | |
| 
 | |
| class SpawnCollectionNode(LnxLogicTreeNode):
 | |
|     """
 | |
|     Spawns a new instance of the selected `collection` from the given `scene`. 
 | |
|     If the `scene` is empty or null, the current active scene is used. Each spawned 
 | |
|     instance has an empty owner object to control the instance as a whole (like Blender
 | |
|     uses it for collection instances).
 | |
| 
 | |
|     @input Scene: Scene in which the collection belongs.
 | |
|     @input Collection: Collection to be spawned.
 | |
|     @input In: activates the node.
 | |
|     @input Transform: the transformation of the instance that should be
 | |
|         spawned. Please note that the collection's instance offset is
 | |
|         also taken into account.
 | |
| 
 | |
|     @output Out: activated when a collection instance was spawned. It is
 | |
|         not activated when no collection is selected.
 | |
|     @output Top-Level Objects: all objects in the last spawned
 | |
|         collection that are direct children of the owner object of the
 | |
|         collection's instance.
 | |
|     @output All Objects: all objects in the last spawned collection.
 | |
|     @output Owner Object: The owning object of the last spawned
 | |
|         collection's instance.
 | |
|     """
 | |
|     bl_idname = 'LNSpawnCollectionNode'
 | |
|     bl_label = 'Spawn Collection'
 | |
|     lnx_section = 'collection'
 | |
|     lnx_version = 2
 | |
| 
 | |
|     property0: HaxePointerProperty('property0', name='Collection', type=bpy.types.Collection)
 | |
| 
 | |
|     property1: HaxePointerProperty(
 | |
|         'property1',
 | |
|         type=bpy.types.Scene, name='Scene',
 | |
|         description='The scene from which to take the object')
 | |
| 
 | |
|     def lnx_init(self, context):
 | |
|         self.add_input('LnxNodeSocketAction', 'In')
 | |
|         self.add_input('LnxDynamicSocket', 'Transform')
 | |
| 
 | |
|         self.add_output('LnxNodeSocketAction', 'Out')
 | |
|         self.add_output('LnxNodeSocketArray', 'Top-Level Objects')
 | |
|         self.add_output('LnxNodeSocketArray', 'All Objects')
 | |
|         self.add_output('LnxNodeSocketObject', 'Owner Object')
 | |
| 
 | |
|     def draw_buttons(self, context, layout):
 | |
|         layout.prop_search(self, 'property1', bpy.data, "scenes")
 | |
|         layout.prop_search(self, 'property0', bpy.data, 'collections', icon='NONE', text='')
 | |
| 
 | |
|     def get_replacement_node(self, node_tree: bpy.types.NodeTree):
 | |
|         if self.lnx_version not in (0, 1):
 | |
|             raise LookupError()
 | |
| 
 | |
|         return NodeReplacement.Identity(self) |