Copying an opening now tracks it as a special objects in the scene

This commit is contained in:
Dion Moult
2022-10-05 20:04:19 +11:00
parent aeaef641bf
commit 49d3ee2f73
5 changed files with 11 additions and 39 deletions
+1 -1
View File
@@ -38,7 +38,7 @@ def copy_class(ifc, collector, geometry, root, obj=None):
)
collector.assign(obj)
if root.is_opening_element(element):
root.add_dynamic_opening_voids(element, obj)
root.add_tracked_opening(obj)
def assign_class(
+1 -1
View File
@@ -444,7 +444,7 @@ class Resource:
@interface
class Root:
def add_dynamic_opening_voids(cls, element, obj): pass
def add_tracked_opening(cls, obj): pass
def does_type_have_representations(cls, element): pass
def get_element_type(cls, element): pass
def get_object_name(cls, obj): pass
+3 -13
View File
@@ -26,19 +26,9 @@ from mathutils import Vector
class Root(blenderbim.core.tool.Root):
@classmethod
def add_dynamic_opening_voids(cls, element, obj):
for rel in element.VoidsElements:
building_obj = tool.Ifc.get_object(rel.RelatingBuildingElement)
try:
modifier = next(m for m in obj.modifiers if m.type == "BOOLEAN" and m.object == obj)
except StopIteration:
modifier = building_obj.modifiers.new("IfcOpeningElement", "BOOLEAN")
modifier.object = obj
finally:
modifier.operation = "DIFFERENCE"
modifier.solver = "EXACT"
modifier.use_self = True
modifier.operand_type = "OBJECT"
def add_tracked_opening(cls, obj):
new = bpy.context.scene.BIMModelProperties.openings.add()
new.obj = obj
@classmethod
def does_type_have_representations(cls, element):
+1 -1
View File
@@ -86,7 +86,7 @@ class TestCopyClass:
root.link_object_data("type_obj", "obj").should_be_called()
collector.assign("obj").should_be_called()
root.is_opening_element("element").should_be_called().will_return(True)
root.add_dynamic_opening_voids("element", "obj").should_be_called()
root.add_tracked_opening("obj").should_be_called()
subject.copy_class(ifc, collector, geometry, root, obj="obj")
+5 -23
View File
@@ -29,30 +29,12 @@ class TestImplementsTool(NewFile):
assert isinstance(subject(), blenderbim.core.tool.Root)
class TestAddDynamicOpeningVoids(NewFile):
class TestAddTrackedOpening(NewFile):
def test_run(self):
ifc = ifcopenshell.file()
tool.Ifc.set(ifc)
obj = bpy.data.objects.new("Object", bpy.data.meshes.new("Mesh"))
element = ifc.createIfcOpeningElement()
tool.Ifc.link(element, obj)
wall_obj = bpy.data.objects.new("Object", bpy.data.meshes.new("Mesh"))
wall_element = ifc.createIfcOpeningElement()
tool.Ifc.link(wall_element, wall_obj)
ifcopenshell.api.run("void.add_opening", ifc, opening=element, element=wall_element)
subject.add_dynamic_opening_voids(element, obj)
modifier = wall_obj.modifiers[0]
assert modifier.type == "BOOLEAN"
assert modifier.name == "IfcOpeningElement"
assert modifier.operation == "DIFFERENCE"
assert modifier.object == obj
assert modifier.solver == "EXACT"
assert modifier.use_self is True
obj = bpy.data.objects.new("Object", None)
subject.add_tracked_opening(obj)
props = bpy.context.scene.BIMModelProperties
assert props.openings[0].obj == obj
class TestDoesTypeHaveRepresentations(NewFile):