mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-23 18:16:20 +00:00
You can now assign spatial containers in bulk
This commit is contained in:
@@ -13,44 +13,45 @@ class AssignContainer(bpy.types.Operator):
|
|||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
self.file = IfcStore.get_file()
|
self.file = IfcStore.get_file()
|
||||||
related_element = (
|
related_elements = (
|
||||||
bpy.data.objects.get(self.related_element) if self.related_element else bpy.context.active_object
|
[bpy.data.objects.get(self.related_element)] if self.related_element else bpy.context.selected_objects
|
||||||
)
|
)
|
||||||
oprops = related_element.BIMObjectProperties
|
|
||||||
sprops = context.scene.BIMSpatialProperties
|
sprops = context.scene.BIMSpatialProperties
|
||||||
props = related_element.BIMObjectSpatialProperties
|
|
||||||
relating_structure = (
|
relating_structure = (
|
||||||
self.relating_structure or sprops.spatial_elements[sprops.active_spatial_element_index].ifc_definition_id
|
self.relating_structure or sprops.spatial_elements[sprops.active_spatial_element_index].ifc_definition_id
|
||||||
)
|
)
|
||||||
|
for related_element in related_elements:
|
||||||
|
oprops = related_element.BIMObjectProperties
|
||||||
|
props = related_element.BIMObjectSpatialProperties
|
||||||
|
|
||||||
ifcopenshell.api.run(
|
ifcopenshell.api.run(
|
||||||
"spatial.assign_container",
|
"spatial.assign_container",
|
||||||
self.file,
|
self.file,
|
||||||
**{
|
**{
|
||||||
"product": self.file.by_id(oprops.ifc_definition_id),
|
"product": self.file.by_id(oprops.ifc_definition_id),
|
||||||
"relating_structure": self.file.by_id(relating_structure),
|
"relating_structure": self.file.by_id(relating_structure),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
bpy.ops.bim.edit_object_placement(obj=related_element.name)
|
bpy.ops.bim.edit_object_placement(obj=related_element.name)
|
||||||
Data.load(IfcStore.get_file(), oprops.ifc_definition_id)
|
Data.load(IfcStore.get_file(), oprops.ifc_definition_id)
|
||||||
bpy.ops.bim.disable_editing_container(obj=related_element.name)
|
bpy.ops.bim.disable_editing_container(obj=related_element.name)
|
||||||
|
|
||||||
aggregate_collection = bpy.data.collections.get(related_element.name)
|
aggregate_collection = bpy.data.collections.get(related_element.name)
|
||||||
|
|
||||||
relating_structure_obj = IfcStore.id_map.get(relating_structure)
|
relating_structure_obj = IfcStore.id_map.get(relating_structure)
|
||||||
relating_collection = None
|
relating_collection = None
|
||||||
if relating_structure_obj:
|
if relating_structure_obj:
|
||||||
relating_collection = bpy.data.collections.get(relating_structure_obj.name)
|
relating_collection = bpy.data.collections.get(relating_structure_obj.name)
|
||||||
|
|
||||||
if aggregate_collection:
|
if aggregate_collection:
|
||||||
self.remove_collection(bpy.context.scene.collection, aggregate_collection)
|
self.remove_collection(bpy.context.scene.collection, aggregate_collection)
|
||||||
for collection in bpy.data.collections:
|
for collection in bpy.data.collections:
|
||||||
self.remove_collection(collection, aggregate_collection)
|
self.remove_collection(collection, aggregate_collection)
|
||||||
relating_collection.children.link(aggregate_collection)
|
relating_collection.children.link(aggregate_collection)
|
||||||
elif relating_collection:
|
elif relating_collection:
|
||||||
for collection in related_element.users_collection:
|
for collection in related_element.users_collection:
|
||||||
collection.objects.unlink(related_element)
|
collection.objects.unlink(related_element)
|
||||||
relating_collection.objects.link(related_element)
|
relating_collection.objects.link(related_element)
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
def remove_collection(self, parent, child):
|
def remove_collection(self, parent, child):
|
||||||
|
|||||||
Reference in New Issue
Block a user