diff --git a/src/blenderbim/blenderbim/bim/module/brick/ui.py b/src/blenderbim/blenderbim/bim/module/brick/ui.py index bb8898b2c0..568c5a4ab5 100644 --- a/src/blenderbim/blenderbim/bim/module/brick/ui.py +++ b/src/blenderbim/blenderbim/bim/module/brick/ui.py @@ -51,7 +51,6 @@ class BIM_PT_brickschema(Panel): row = self.layout.row(align=True) prop_with_search(row, self.props, "namespace", text="") prop_with_search(row, self.props, "brick_equipment_class", text="") - row.prop(self.props, "brick_equipment_class", text="") row.operator("bim.add_brick", text="", icon="ADD") row = self.layout.row(align=True) diff --git a/src/blenderbim/blenderbim/bim/module/model/product.py b/src/blenderbim/blenderbim/bim/module/model/product.py index 0f5ef1da27..f8d5485cd4 100644 --- a/src/blenderbim/blenderbim/bim/module/model/product.py +++ b/src/blenderbim/blenderbim/bim/module/model/product.py @@ -324,6 +324,9 @@ class LoadTypeThumbnails(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): from PIL import Image, ImageDraw + if bpy.app.background: + return + props = bpy.context.scene.BIMModelProperties processing = set() # Only process at most one paginated class at a time. diff --git a/src/blenderbim/blenderbim/bim/module/model/profile.py b/src/blenderbim/blenderbim/bim/module/model/profile.py index 7c948e5213..e7d2101fa9 100644 --- a/src/blenderbim/blenderbim/bim/module/model/profile.py +++ b/src/blenderbim/blenderbim/bim/module/model/profile.py @@ -844,7 +844,7 @@ class DumbProfileRecalculator: queue.add((rel.RelatingElement, tool.Ifc.get_object(rel.RelatingElement))) joiner = DumbProfileJoiner() for element, profile in queue: - if element.is_a() in ("IfcColumn", "IfcBeam", "IfcMember") and profile: + if profile: joiner.recreate_profile(element, profile) diff --git a/src/blenderbim/blenderbim/bim/module/root/prop.py b/src/blenderbim/blenderbim/bim/module/root/prop.py index 34217ffc4a..95456da780 100644 --- a/src/blenderbim/blenderbim/bim/module/root/prop.py +++ b/src/blenderbim/blenderbim/bim/module/root/prop.py @@ -44,9 +44,9 @@ def get_ifc_predefined_types(self, context): def refresh_classes(self, context): - IfcClassData.load() enum = get_ifc_classes(self, context) context.scene.BIMRootProperties.ifc_class = enum[0][0] + IfcClassData.load() def refresh_predefined_types(self, context): diff --git a/src/blenderbim/blenderbim/bim/module/void/operator.py b/src/blenderbim/blenderbim/bim/module/void/operator.py index 721576867e..8caba417d6 100644 --- a/src/blenderbim/blenderbim/bim/module/void/operator.py +++ b/src/blenderbim/blenderbim/bim/module/void/operator.py @@ -52,8 +52,6 @@ class AddOpening(bpy.types.Operator, tool.Ifc.Operator): element1, element2 = element2, element1 if element1.is_a("IfcOpeningElement"): return {"FINISHED"} - if obj2 not in [o.obj for o in props.openings]: - return {"FINISHED"} if not obj1.data or not hasattr(obj1.data, "BIMMeshProperties"): return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/prop.py b/src/blenderbim/blenderbim/bim/prop.py index f688ee713a..74490ccad3 100644 --- a/src/blenderbim/blenderbim/bim/prop.py +++ b/src/blenderbim/blenderbim/bim/prop.py @@ -195,12 +195,20 @@ def update_attribute_value(self, context): self.is_null = False -def set_numerical_value(self, new_value): +def set_int_value(self, new_value): + set_numerical_value(self, "int_value", new_value) + + +def set_float_value(self, new_value): + set_numerical_value(self, "float_value", new_value) + + +def set_numerical_value(self, value_name, new_value): if self.value_min_constraint and new_value < self.value_min: new_value = self.value_min elif self.value_max_constraint and new_value > self.value_max: new_value = self.value_max - self[self.get_value_name()] = new_value + self[value_name] = new_value class Attribute(PropertyGroup): @@ -216,14 +224,14 @@ class Attribute(PropertyGroup): description=tooltip, update=update_attribute_value, get=lambda self: int(self.get("int_value", 0)), - set=set_numerical_value, + set=set_int_value, ) float_value: FloatProperty( name="Value", description=tooltip, update=update_attribute_value, get=lambda self: float(self.get("float_value", 0.0)), - set=set_numerical_value, + set=set_float_value, ) enum_items: StringProperty(name="Value") enum_descriptions: CollectionProperty(type=StrProperty) diff --git a/src/blenderbim/blenderbim/core/root.py b/src/blenderbim/blenderbim/core/root.py index 5919036335..3bf4171fa1 100644 --- a/src/blenderbim/blenderbim/core/root.py +++ b/src/blenderbim/blenderbim/core/root.py @@ -35,6 +35,7 @@ def copy_class(ifc, collector, geometry, root, obj=None): geometry.change_object_data(obj, data, is_global=True) geometry.rename_object(data, geometry.get_representation_name(new_representation)) geometry.link(new_representation, data) + root.assign_body_styles(new, obj) collector.assign(obj) if root.is_opening_element(new): root.add_tracked_opening(obj) diff --git a/src/blenderbim/blenderbim/core/tool.py b/src/blenderbim/blenderbim/core/tool.py index 2b4a7a27c6..2a82947dba 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -447,6 +447,7 @@ class Resource: @interface class Root: def add_tracked_opening(cls, obj): pass + def assign_body_styles(cls, element, obj): pass def copy_representation(cls, source, dest): pass def does_type_have_representations(cls, element): pass def get_decomposition_relationships(cls, objs): pass diff --git a/src/blenderbim/blenderbim/tool/root.py b/src/blenderbim/blenderbim/tool/root.py index b01db25689..bb0e9eaf93 100644 --- a/src/blenderbim/blenderbim/tool/root.py +++ b/src/blenderbim/blenderbim/tool/root.py @@ -18,6 +18,7 @@ import bpy import ifcopenshell +import ifcopenshell.util.representation import blenderbim.core.tool import blenderbim.core.geometry import blenderbim.tool as tool @@ -30,6 +31,23 @@ class Root(blenderbim.core.tool.Root): new = bpy.context.scene.BIMModelProperties.openings.add() new.obj = obj + @classmethod + def assign_body_styles(cls, element, obj): + # Should this even be here? Should it be in the geometry tool? + body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") + if body: + [ + tool.Geometry.run_style_add_style(obj=mat) + for mat in tool.Geometry.get_object_materials_without_styles(obj) + ] + ifcopenshell.api.run( + "style.assign_representation_styles", + tool.Ifc.get(), + shape_representation=body, + styles=tool.Geometry.get_styles(obj), + should_use_presentation_style_assignment=bpy.context.scene.BIMGeometryProperties.should_use_presentation_style_assignment, + ) + @classmethod def copy_representation(cls, source, dest): if dest.is_a("IfcProduct"): diff --git a/src/blenderbim/test/bim/feature/brick.feature b/src/blenderbim/test/bim/feature/brick.feature index 18597c8bdc..d7a86cab5e 100644 --- a/src/blenderbim/test/bim/feature/brick.feature +++ b/src/blenderbim/test/bim/feature/brick.feature @@ -40,7 +40,10 @@ Scenario: Convert brick project Scenario: Assign brick reference Given an empty IFC project And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')" - And I press "bim.view_brick_item(item='https://brickschema.org/schema/Brick#Chiller')" + And I set "scene.BIMBrickProperties.namespace" to "https://example.org/digitaltwin#" + And I set "scene.BIMBrickProperties.brick_equipment_class" to "https://brickschema.org/schema/Brick#Chiller" + And I press "bim.add_brick" + And I press "bim.view_brick_class(brick_class='Chiller')" And I add a cube And the object "Cube" is selected And I set "scene.BIMRootProperties.ifc_class" to "IfcChiller" diff --git a/src/blenderbim/test/bim/feature/debug.feature b/src/blenderbim/test/bim/feature/debug.feature index 904d69c1ce..7e330c47d5 100644 --- a/src/blenderbim/test/bim/feature/debug.feature +++ b/src/blenderbim/test/bim/feature/debug.feature @@ -11,3 +11,17 @@ Scenario: Parse express And I press "bim.select_express_file(filepath='{cwd}/test/files/test.exp')" When I press "bim.parse_express" Then nothing happens + +Scenario: Use the inspector - inspect from STEP ID + Given an empty Blender session + And I press "bim.create_project" + When I set "scene.BIMDebugProperties.active_step_id" to "1" + And I press "bim.inspect_from_step_id(step_id=1)" + Then nothing happens + +Scenario: Use the inspector - inspect from object + Given an empty Blender session + And I press "bim.create_project" + When the object "IfcProject/My Project" is selected + And I press "bim.inspect_from_object" + Then nothing happens diff --git a/src/blenderbim/test/bim/feature/geometry.feature b/src/blenderbim/test/bim/feature/geometry.feature index ee0cdedc39..d77f552f50 100644 --- a/src/blenderbim/test/bim/feature/geometry.feature +++ b/src/blenderbim/test/bim/feature/geometry.feature @@ -226,19 +226,12 @@ Scenario: Update representation - updating a profiled extrusion And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterialProfileSet" And I press "bim.assign_material" And I press "bim.enable_editing_assigned_material" + And I press "bim.add_profile_def" And the variable "profile_set" is "{ifc}.by_type("IfcMaterialProfileSet")[0].id()" And I press "bim.add_profile(profile_set={profile_set})" - And the variable "profile" is "{ifc}.by_type("IfcMaterialProfile")[0].id()" - And I press "bim.enable_editing_material_set_item(material_set_item={profile})" - And I set "active_object.BIMObjectMaterialProperties.profile_classes" to "IfcParameterizedProfileDef" - And I set "active_object.BIMObjectMaterialProperties.parameterized_profile_classes" to "IfcCircleProfileDef" - And I press "bim.assign_parameterized_profile(ifc_class='IfcCircleProfileDef', material_profile={profile})" - And I set "active_object.BIMObjectMaterialProperties.material_set_item_profile_attributes[2].float_value" to "0.2" - And I press "bim.edit_material_set_item(material_set_item={profile})" And I press "bim.edit_assigned_material(material_set={profile_set})" And the variable "type" is "{ifc}.by_type('IfcWallType')[0].id()" And I press "bim.assign_type(relating_type={type}, related_object='IfcWall/Cube')" - When I press "bim.update_representation(obj='IfcWall/Cube')" Then the object "IfcWall/Cube" has a "SweptSolid" representation of "Model/Body/MODEL_VIEW" Scenario: Get representation IFC parameters @@ -390,15 +383,9 @@ Scenario: Override duplicate move - copying a profiled extrusion And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterialProfileSet" And I press "bim.assign_material" And I press "bim.enable_editing_assigned_material" + And I press "bim.add_profile_def" And the variable "profile_set" is "{ifc}.by_type("IfcMaterialProfileSet")[0].id()" And I press "bim.add_profile(profile_set={profile_set})" - And the variable "profile" is "{ifc}.by_type("IfcMaterialProfile")[0].id()" - And I press "bim.enable_editing_material_set_item(material_set_item={profile})" - And I set "active_object.BIMObjectMaterialProperties.profile_classes" to "IfcParameterizedProfileDef" - And I set "active_object.BIMObjectMaterialProperties.parameterized_profile_classes" to "IfcCircleProfileDef" - And I press "bim.assign_parameterized_profile(ifc_class='IfcCircleProfileDef', material_profile={profile})" - And I set "active_object.BIMObjectMaterialProperties.material_set_item_profile_attributes[2].float_value" to "0.2" - And I press "bim.edit_material_set_item(material_set_item={profile})" And I press "bim.edit_assigned_material(material_set={profile_set})" And the variable "type" is "{ifc}.by_type('IfcWallType')[0].id()" And I press "bim.assign_type(relating_type={type}, related_object='IfcWall/Cube')" diff --git a/src/blenderbim/test/bim/feature/material.feature b/src/blenderbim/test/bim/feature/material.feature index 35b853c96b..7b4027ce16 100644 --- a/src/blenderbim/test/bim/feature/material.feature +++ b/src/blenderbim/test/bim/feature/material.feature @@ -68,7 +68,7 @@ Scenario: Unlink material When I press "bim.unlink_material" Then the material "Material" is not an IFC material -Scenario: Assign material - Assign a material +Scenario: Assign material - single material Given an empty IFC project And I add a cube And the object "Cube" is selected @@ -79,7 +79,58 @@ Scenario: Assign material - Assign a material And I press "bim.assign_material" Then the object "IfcWall/Cube" has the material "Default" -Scenario: Assign material - Assign a material layer set +Scenario: Unassign material - single material + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I press "bim.add_material(obj='')" + And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterial" + And I press "bim.assign_material" + When I press "bim.unassign_material" + Then nothing happens + +Scenario: Enable editing assigned material - single material + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I press "bim.add_material(obj='')" + And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterial" + And I press "bim.assign_material" + When I press "bim.enable_editing_assigned_material" + Then nothing happens + +Scenario: Disable editing assigned material - single material + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I press "bim.add_material(obj='')" + And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterial" + And I press "bim.assign_material" + And I press "bim.enable_editing_assigned_material" + When I press "bim.disable_editing_assigned_material" + Then nothing happens + +Scenario: Edit assigned material - single material + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I press "bim.add_material(obj='')" + And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterial" + And I press "bim.assign_material" + And I press "bim.enable_editing_assigned_material" + And the variable "material_set" is "{ifc}.by_type('IfcMaterial')[0].id()" + When I press "bim.edit_assigned_material(material_set={material_set})" + Then nothing happens + +Scenario: Assign material - material layer set Given an empty IFC project And I add a cube And the object "Cube" is selected @@ -95,7 +146,78 @@ Scenario: Assign material - Assign a material layer set And I press "bim.assign_material" Then nothing happens -Scenario: Assign material - Assign a material profile set +Scenario: Unassign material - material layer set + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I add an empty + And the object "Empty" is selected + And I set "scene.BIMRootProperties.ifc_product" to "IfcElementType" + And I set "scene.BIMRootProperties.ifc_class" to "IfcWallType" + And I press "bim.assign_class" + And I press "bim.add_material(obj='')" + And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterialLayerSet" + And I press "bim.assign_material" + When I press "bim.unassign_material" + Then nothing happens + +Scenario: Enable editing assigned material - material layer set + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I add an empty + And the object "Empty" is selected + And I set "scene.BIMRootProperties.ifc_product" to "IfcElementType" + And I set "scene.BIMRootProperties.ifc_class" to "IfcWallType" + And I press "bim.assign_class" + And I press "bim.add_material(obj='')" + And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterialLayerSet" + And I press "bim.assign_material" + When I press "bim.enable_editing_assigned_material" + Then nothing happens + +Scenario: Disable editing assigned material - material layer set + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I add an empty + And the object "Empty" is selected + And I set "scene.BIMRootProperties.ifc_product" to "IfcElementType" + And I set "scene.BIMRootProperties.ifc_class" to "IfcWallType" + And I press "bim.assign_class" + And I press "bim.add_material(obj='')" + And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterialLayerSet" + And I press "bim.assign_material" + And I press "bim.enable_editing_assigned_material" + When I press "bim.disable_editing_assigned_material" + Then nothing happens + +Scenario: Edit assigned material - material layer set + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I add an empty + And the object "Empty" is selected + And I set "scene.BIMRootProperties.ifc_product" to "IfcElementType" + And I set "scene.BIMRootProperties.ifc_class" to "IfcWallType" + And I press "bim.assign_class" + And I press "bim.add_material(obj='')" + And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterialLayerSet" + And I press "bim.assign_material" + And I press "bim.enable_editing_assigned_material" + And the variable "material_set" is "{ifc}.by_type('IfcMaterialLayerSet')[0].id()" + When I press "bim.edit_assigned_material(material_set={material_set})" + Then nothing happens + +Scenario: Assign material - material profile set Given an empty IFC project And I add a cube And the object "Cube" is selected @@ -111,7 +233,78 @@ Scenario: Assign material - Assign a material profile set And I press "bim.assign_material" Then nothing happens -Scenario: Assign material - Assign a material constituent set +Scenario: Unassign material - material profile set + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I add an empty + And the object "Empty" is selected + And I set "scene.BIMRootProperties.ifc_product" to "IfcElementType" + And I set "scene.BIMRootProperties.ifc_class" to "IfcWallType" + And I press "bim.assign_class" + And I press "bim.add_material(obj='')" + And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterialProfileSet" + And I press "bim.assign_material" + When I press "bim.unassign_material" + Then nothing happens + +Scenario: Enable editing assigned material - material profile set + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I add an empty + And the object "Empty" is selected + And I set "scene.BIMRootProperties.ifc_product" to "IfcElementType" + And I set "scene.BIMRootProperties.ifc_class" to "IfcWallType" + And I press "bim.assign_class" + And I press "bim.add_material(obj='')" + And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterialProfileSet" + And I press "bim.assign_material" + When I press "bim.enable_editing_assigned_material" + Then nothing happens + +Scenario: Disable editing assigned material - material profile set + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I add an empty + And the object "Empty" is selected + And I set "scene.BIMRootProperties.ifc_product" to "IfcElementType" + And I set "scene.BIMRootProperties.ifc_class" to "IfcWallType" + And I press "bim.assign_class" + And I press "bim.add_material(obj='')" + And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterialProfileSet" + And I press "bim.assign_material" + And I press "bim.enable_editing_assigned_material" + When I press "bim.disable_editing_assigned_material" + Then nothing happens + +Scenario: Edit assigned material - material profile set + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I add an empty + And the object "Empty" is selected + And I set "scene.BIMRootProperties.ifc_product" to "IfcElementType" + And I set "scene.BIMRootProperties.ifc_class" to "IfcWallType" + And I press "bim.assign_class" + And I press "bim.add_material(obj='')" + And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterialProfileSet" + And I press "bim.assign_material" + And I press "bim.enable_editing_assigned_material" + And the variable "material_set" is "{ifc}.by_type('IfcMaterialProfileSet')[0].id()" + When I press "bim.edit_assigned_material(material_set={material_set})" + Then nothing happens + +Scenario: Assign material - material constituent set Given an empty IFC project And I add a cube And the object "Cube" is selected @@ -122,6 +315,57 @@ Scenario: Assign material - Assign a material constituent set And I press "bim.assign_material" Then nothing happens +Scenario: Unassign material - material constituent set + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I press "bim.add_material(obj='')" + And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterialConstituentSet" + And I press "bim.assign_material" + When I press "bim.unassign_material" + Then nothing happens + +Scenario: Enable editing assigned material - material constituent set + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I press "bim.add_material(obj='')" + And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterialConstituentSet" + And I press "bim.assign_material" + When I press "bim.enable_editing_assigned_material" + Then nothing happens + +Scenario: Disable editing assigned material - material constituent set + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I press "bim.add_material(obj='')" + And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterialConstituentSet" + And I press "bim.assign_material" + And I press "bim.enable_editing_assigned_material" + When I press "bim.disable_editing_assigned_material" + Then nothing happens + +Scenario: Edit assigned material - material constituent set + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I press "bim.add_material(obj='')" + And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterialConstituentSet" + And I press "bim.assign_material" + And I press "bim.enable_editing_assigned_material" + And the variable "material_set" is "{ifc}.by_type('IfcMaterialConstituentSet')[0].id()" + When I press "bim.edit_assigned_material(material_set={material_set})" + Then nothing happens + Scenario: Select by material Given an empty IFC project And I press "bim.load_materials" diff --git a/src/blenderbim/test/bim/feature/model.feature b/src/blenderbim/test/bim/feature/model.feature index 51ca4d4fbd..e1a636a0c1 100644 --- a/src/blenderbim/test/bim/feature/model.feature +++ b/src/blenderbim/test/bim/feature/model.feature @@ -48,28 +48,10 @@ Scenario: Add type instance - add a mesh where existing instances have changed c Then the object "IfcWall/Wall" data is a "Annotation2D" representation of "Plan/Annotation/PLAN_VIEW" And the object "IfcWall/Wall.001" data is a "Annotation2D" representation of "Plan/Annotation/PLAN_VIEW" -Scenario: Preview one type on the Construction Type Browser - Given an empty IFC project - And I load the demo construction library - When I set "scene.BIMModelProperties.ifc_class" to "IfcColumnType" - And I set "scene.BIMModelProperties.relating_type" to "DEMO2" - Then construction type is DEMO2 - And objects starting with "IfcColumn/" do not exist - And the construction type "IfcColumnType"/"DEMO2" has a preview - -Scenario: Preview one class on the construction type browser - Given an empty IFC project - And I load the demo construction library - When I display the construction type browser - And I set "scene.BIMModelProperties.ifc_class_browser" to "IfcWallType" - Then objects starting with "IfcWall/" do not exist - And all construction types for "IfcWallType" have a preview - Scenario: Add one type from the Construction Type Browser Given an empty IFC project And I load the demo construction library When I set "scene.BIMModelProperties.ifc_class" to "IfcColumnType" - And I set "scene.BIMModelProperties.relating_type" to "DEMO2" And I add the construction type Then the object "IfcColumn/Column" exists diff --git a/src/blenderbim/test/bim/feature/pset.feature b/src/blenderbim/test/bim/feature/pset.feature index 11e06af296..b23f6b4797 100644 --- a/src/blenderbim/test/bim/feature/pset.feature +++ b/src/blenderbim/test/bim/feature/pset.feature @@ -59,22 +59,8 @@ Scenario: Enable pset editing - material Scenario: Enable pset editing - profile Given an empty IFC project - And I add an empty - And the object "Empty" is selected - And I set "scene.BIMRootProperties.ifc_product" to "IfcElementType" - And I set "scene.BIMRootProperties.ifc_class" to "IfcWallType" - And I press "bim.assign_class" - And I press "bim.add_material(obj='')" - And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterialProfileSet" - And I press "bim.assign_material" - And I press "bim.enable_editing_assigned_material()" - And the variable "profile_set" is "{ifc}.by_type('IfcMaterialProfileSet')[-1].id()" - And I press "bim.add_profile(profile_set={profile_set})" - And the variable "material_profile" is "{ifc}.by_type('IfcMaterialProfile')[-1].id()" - And I press "bim.enable_editing_material_set_item(material_set_item={material_profile})" - And I set "active_object.BIMObjectMaterialProperties.profile_classes" to "IfcParameterizedProfileDef" - And I press "bim.assign_parameterized_profile(ifc_class="IfcIShapeProfileDef", material_profile={material_profile})" And I press "bim.load_profiles" + And I press "bim.add_profile_def" And I set "scene.ProfilePsetProperties.pset_name" to "Pset_ProfileMechanical" And I press "bim.add_pset(obj_type='Profile')" And the variable "pset" is "{ifc}.by_type('IfcProfileProperties')[-1].id()" diff --git a/src/blenderbim/test/bim/feature/root.feature b/src/blenderbim/test/bim/feature/root.feature index 6d3bc39226..91acc14204 100644 --- a/src/blenderbim/test/bim/feature/root.feature +++ b/src/blenderbim/test/bim/feature/root.feature @@ -119,19 +119,3 @@ Scenario: Copy a storey And the object "IfcBuildingStorey/My Storey" is in the collection "IfcBuildingStorey/My Storey" And the object "IfcBuildingStorey/My Storey.001" is in the collection "IfcBuildingStorey/My Storey.001" And the collection "IfcBuildingStorey/My Storey.001" is in the collection "IfcBuilding/My Building" - -Scenario: Copy an opening - Given an empty IFC project - And I add a cube - When the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" - And I press "bim.assign_class" - And I add a cube - And the object "Cube" is selected - And additionally the object "IfcWall/Cube" is selected - And I press "bim.add_opening(opening='Cube', obj='IfcWall/Cube')" - And the object "IfcOpeningElement/Cube" is selected - And I duplicate the selected objects - Then the object "IfcOpeningElement/Cube" and "IfcOpeningElement/Cube.001" are different elements - And the object "IfcWall/Cube" has a boolean difference by "IfcOpeningElement/Cube" - And the object "IfcWall/Cube" has a boolean difference by "IfcOpeningElement/Cube.001" diff --git a/src/blenderbim/test/bim/feature/type.feature b/src/blenderbim/test/bim/feature/type.feature index bcde86e305..b274ab2bf4 100644 --- a/src/blenderbim/test/bim/feature/type.feature +++ b/src/blenderbim/test/bim/feature/type.feature @@ -72,15 +72,9 @@ Scenario: Assign type - assign to a type with a material profile set And I set "active_object.BIMObjectMaterialProperties.material_type" to "IfcMaterialProfileSet" And I press "bim.assign_material" And I press "bim.enable_editing_assigned_material" + And I press "bim.add_profile_def" And the variable "profile_set" is "{ifc}.by_type("IfcMaterialProfileSet")[0].id()" And I press "bim.add_profile(profile_set={profile_set})" - And the variable "profile" is "{ifc}.by_type("IfcMaterialProfile")[0].id()" - And I press "bim.enable_editing_material_set_item(material_set_item={profile})" - And I set "active_object.BIMObjectMaterialProperties.profile_classes" to "IfcParameterizedProfileDef" - And I set "active_object.BIMObjectMaterialProperties.parameterized_profile_classes" to "IfcCircleProfileDef" - And I press "bim.assign_parameterized_profile(ifc_class='IfcCircleProfileDef', material_profile={profile})" - And I set "active_object.BIMObjectMaterialProperties.material_set_item_profile_attributes[2].float_value" to "0.2" - And I press "bim.edit_material_set_item(material_set_item={profile})" And I press "bim.edit_assigned_material(material_set={profile_set})" When the variable "type" is "{ifc}.by_type('IfcWallType')[0].id()" And I press "bim.assign_type(relating_type={type}, related_object='IfcWall/Cube')" diff --git a/src/blenderbim/test/bim/feature/void.feature b/src/blenderbim/test/bim/feature/void.feature index 7e901d23f4..cdba961635 100644 --- a/src/blenderbim/test/bim/feature/void.feature +++ b/src/blenderbim/test/bim/feature/void.feature @@ -5,22 +5,20 @@ Feature: Void Scenario: Add an opening Given an empty IFC project And I add a cube - When the object "Cube" is selected + And the object "Cube" is selected And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" And I press "bim.assign_class" And I add a cube And the object "IfcWall/Cube" is selected And additionally the object "Cube" is selected - And I press "bim.add_opening(opening='Cube', obj='IfcWall/Cube')" - Then the object "IfcOpeningElement/Cube" is an "IfcOpeningElement" - And the object "IfcOpeningElement/Cube" should display as "WIRE" - And the object "IfcWall/Cube" has a boolean difference by "IfcOpeningElement/Cube" + When I press "bim.add_opening" + Then the object "Cube" does not exist And the object "IfcWall/Cube" is voided by "Cube" Scenario: Add an opening on an opening Given an empty IFC project And I add a cube - When the object "Cube" is selected + And the object "Cube" is selected And I set "scene.BIMRootProperties.ifc_class" to "IfcOpeningElement" And I press "bim.assign_class" And I add a cube @@ -29,286 +27,150 @@ Scenario: Add an opening on an opening And I press "bim.assign_class" And the object "IfcOpeningElement/Cube" is selected And additionally the object "IfcOpeningElement/Cube.001" is selected - And I press "bim.add_opening(opening='IfcOpeningElement/Cube', obj='IfcOpeningElement/Cube.001')" - Then the object "IfcOpeningElement/Cube" is an "IfcOpeningElement" - And the object "IfcOpeningElement/Cube" should display as "WIRE" - And the object "IfcOpeningElement/Cube" is not a void - Then the object "IfcOpeningElement/Cube.001" is an "IfcOpeningElement" - And the object "IfcOpeningElement/Cube.001" should display as "WIRE" - Then the object "IfcOpeningElement/Cube.001" has no boolean difference by "IfcOpeningElement/Cube" - And the object "IfcOpeningElement/Cube.001" is not voided by "Cube" - -Scenario: Add an opening on a null object - Given an empty IFC project - And I add a cube - When the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcOpeningElement" - And I press "bim.assign_class" - And I deselect all objects - And I press "bim.add_opening(opening='IfcOpeningElement/Cube')" - Then the object "IfcOpeningElement/Cube" is an "IfcOpeningElement" - And the object "IfcOpeningElement/Cube" should display as "WIRE" - And the object "IfcOpeningElement/Cube" is not a void + When I press "bim.add_opening" + Then the object "IfcOpeningElement/Cube" is not a void + And the object "IfcOpeningElement/Cube.001" is not a void Scenario: Add an opening on a non IFC object Given an empty IFC project And I add a cube - When the object "Cube" is selected + And the object "Cube" is selected And I set "scene.BIMRootProperties.ifc_class" to "IfcOpeningElement" And I press "bim.assign_class" And I add a cube And the object "Cube" is selected - And I press "bim.add_opening(opening='IfcOpeningElement/Cube', obj='Cube')" - Then the object "IfcOpeningElement/Cube" is an "IfcOpeningElement" - And the object "IfcOpeningElement/Cube" should display as "WIRE" - And the object "IfcOpeningElement/Cube" is not a void + When I press "bim.add_opening" + Then the object "IfcOpeningElement/Cube" is not a void And the object "Cube" is not an IFC element -Scenario: Add an opening with a null object +Scenario: Add an opening using the BIM tool Given an empty IFC project And I add a cube - When the object "Cube" is selected + And the object "Cube" is selected And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" And I press "bim.assign_class" - And I deselect all objects - And I press "bim.add_opening(obj='IfcWall/Cube')" - Then the object "IfcWall/Cube" is an "IfcWall" - And the object "IfcWall/Cube" is not voided + And I press "bim.add_potential_opening" + And the object "Opening" is selected + And additionally the object "IfcWall/Cube" is selected + When I press "bim.add_opening" + Then the object "Opening" does not exist + And the object "IfcWall/Cube" is voided by "Opening" + +Scenario: Show openings + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I press "bim.add_potential_opening" + And the object "Opening" is selected + And additionally the object "IfcWall/Cube" is selected + And I press "bim.add_opening" + And the object "IfcWall/Cube" is selected + When I press "bim.show_openings" + Then the object "IfcOpeningElement/Opening" is an "IfcOpeningElement" + And the object "IfcWall/Cube" is voided by "Opening" + +Scenario: Hide openings + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I press "bim.add_potential_opening" + And the object "Opening" is selected + And additionally the object "IfcWall/Cube" is selected + And I press "bim.add_opening" + And the object "IfcWall/Cube" is selected + And I press "bim.show_openings" + When I press "bim.hide_openings" + Then the object "IfcOpeningElement/Opening" does not exist + +Scenario: Edit openings + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I press "bim.add_potential_opening" + And the object "Opening" is selected + And additionally the object "IfcWall/Cube" is selected + And I press "bim.add_opening" + And the object "IfcWall/Cube" is selected + And I press "bim.show_openings" + When the object "IfcOpeningElement/Opening" is moved to "1,0,0" + And I press "bim.edit_openings" + Then the object "IfcOpeningElement/Opening" does not exist + And the object "IfcWall/Cube" is voided by "Opening" Scenario: Add an opening to Element B with a void that already voids Element A Given an empty IFC project And I add a cube - When the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" - And I press "bim.assign_class" - And I add a cube - And I press "bim.add_opening(opening='Cube', obj='IfcWall/Cube')" - And I add a cube And the object "Cube" is selected And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" And I press "bim.assign_class" - And I press "bim.add_opening(opening='IfcOpeningElement/Cube', obj='IfcWall/Cube.001')" - Then the object "IfcWall/Cube" is not voided - And the object "IfcWall/Cube" has no boolean difference by "IfcOpeningElement/Cube" - And the object "IfcWall/Cube.001" is voided by "Cube" - And the object "IfcWall/Cube.001" has a boolean difference by "IfcOpeningElement/Cube" - -Scenario: Remove an opening - Given an empty IFC project And I add a cube - When the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" - And I press "bim.assign_class" - And I add a cube of size "1" at "1,0,0" And the object "Cube" is selected + And I press "bim.assign_class" + And I press "bim.add_potential_opening" + And the object "Opening" is selected And additionally the object "IfcWall/Cube" is selected - And I press "bim.add_opening(opening='Cube', obj='IfcWall/Cube')" + And I press "bim.add_opening" + And the object "IfcWall/Cube" is selected + And I press "bim.show_openings" + When the object "IfcOpeningElement/Opening" is selected + And additionally the object "IfcWall/Cube.001" is selected + And I press "bim.add_opening" + Then the object "IfcWall/Cube" is voided by "Opening" + And the object "IfcWall/Cube.001" is not voided by "Opening" + +Scenario: Remove opening + Given an empty IFC project + And I add a cube + And the object "Cube" is selected + And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" + And I press "bim.assign_class" + And I press "bim.add_potential_opening" + And the object "Opening" is selected + And additionally the object "IfcWall/Cube" is selected + And I press "bim.add_opening" + And the object "IfcWall/Cube" is selected + And I press "bim.show_openings" + When the object "IfcOpeningElement/Opening" is selected And the variable "opening_id" is "IfcStore.get_file().by_type('IfcOpeningElement')[0].id()" - And I press "bim.remove_opening(opening_id={opening_id}, obj='IfcWall/Cube')" - Then the object "IfcWall/Cube" has no boolean difference by "IfcOpeningElement/Cube" - And the object "IfcWall/Cube" is not voided by "Cube" - And the object "Cube" is not an IFC element + And I press "bim.remove_opening(opening_id={opening_id})" + Then the object "Opening" is not an IFC element + And the object "IfcWall/Cube" is not voided by "Opening" -Scenario: Remove a non dynamic opening manually +Scenario: Remove opening - using deletion Given an empty IFC project And I add a cube - When the object "Cube" is selected + And the object "Cube" is selected And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" And I press "bim.assign_class" - And I add a cube of size "1" at "1,0,0" + And I press "bim.add_potential_opening" + And the object "Opening" is selected + And additionally the object "IfcWall/Cube" is selected + And I press "bim.add_opening" And the object "IfcWall/Cube" is selected - And additionally the object "Cube" is selected - And I press "bim.add_opening(opening='Cube', obj='IfcWall/Cube')" - And the object "IfcWall/Cube" is selected - And the variable "representation" is "IfcStore.get_file().by_type('IfcWall')[0].Representation.Representations[1].id()" - And I press "bim.switch_representation(ifc_definition_id={representation}, should_reload=True)" - Then the object "IfcWall/Cube" has no boolean difference by "IfcOpeningElement/Cube" - And the object "IfcWall/Cube" has "16" vertices - And the variable "opening_id" is "IfcStore.get_file().by_type('IfcOpeningElement')[0].id()" - When I press "bim.remove_opening(opening_id={opening_id}, obj='IfcWall/Cube')" - Then the object "IfcWall/Cube" has "8" vertices - And the object "Cube" is not an IFC element + And I press "bim.show_openings" + When the object "IfcOpeningElement/Opening" is selected + And I delete the selected objects + Then the object "Opening" does not exist + And the object "IfcWall/Cube" is not voided by "Opening" -Scenario: Remove an opening using deletion +Scenario: Remove opening - indirectly by deleting its building element Given an empty IFC project And I add a cube - When the object "Cube" is selected + And the object "Cube" is selected And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" And I press "bim.assign_class" - And I add a cube of size "1" at "1,0,0" + And I press "bim.add_potential_opening" + And the object "Opening" is selected + And additionally the object "IfcWall/Cube" is selected + And I press "bim.add_opening" And the object "IfcWall/Cube" is selected - And additionally the object "Cube" is selected - And I press "bim.add_opening(opening='Cube', obj='IfcWall/Cube')" - And the object "IfcOpeningElement/Cube" is selected + And I press "bim.show_openings" + When the object "IfcWall/Cube" is selected And I delete the selected objects - Then the object "IfcWall/Cube" has no boolean difference by "IfcOpeningElement/Cube" - And the object "IfcWall/Cube" is not voided by "Cube" - -Scenario: Remove and opening indirectly by deleting its building Element - Given an empty IFC project - And I add a cube - When the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcWall" - And I press "bim.assign_class" - And I add a cube of size "1" at "1,0,0" - And the object "IfcWall/Cube" is selected - And additionally the object "Cube" is selected - And I press "bim.add_opening(opening='Cube', obj='IfcWall/Cube')" - And the object "IfcWall/Cube" is selected - And I delete the selected objects - Then the object "Cube" is not an IFC element - -Scenario: Add a filling - Given an empty IFC project - And I add a cube - When the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcOpeningElement" - And I press "bim.assign_class" - And I add a cube - And the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcDoor" - And I press "bim.assign_class" - And the object "IfcOpeningElement/Cube" is selected - And I press "bim.add_filling(opening='IfcOpeningElement/Cube', obj='IfcDoor/Cube')" - Then the object "IfcOpeningElement/Cube" is an "IfcOpeningElement" - And the object "IfcOpeningElement/Cube" should display as "WIRE" - And the object "IfcDoor/Cube" is an "IfcDoor" - And the void "IfcOpeningElement/Cube" is filled by "Cube" - -Scenario: Add a filling on a null object - Given an empty IFC project - And I add a cube - When the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcDoor" - And I press "bim.assign_class" - And the object "IfcDoor/Cube" is selected - And I press "bim.add_filling(obj='IfcDoor/Cube')" - Then the object "IfcDoor/Cube" is an "IfcDoor" - And the object "IfcDoor/Cube" is not a filling - -Scenario: Add a filling on itself - Given an empty IFC project - And I add a cube - When the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcOpeningElement" - And I press "bim.assign_class" - And the object "IfcOpeningElement/Cube" is selected - And I press "bim.add_filling(opening='IfcOpeningElement/Cube', obj='IfcOpeningElement/Cube')" - Then the object "IfcOpeningElement/Cube" is an "IfcOpeningElement" - And the void "IfcOpeningElement/Cube" is not filled by "Cube" - And the object "IfcOpeningElement/Cube" is not a filling - -Scenario: Add a filling with a non IFC object - Given an empty IFC project - And I add a cube - When the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcOpeningElement" - And I press "bim.assign_class" - And I add a cube - And the object "IfcOpeningElement/Cube" is selected - And I press "bim.add_filling(opening='IfcOpeningElement/Cube', obj='Cube')" - Then the object "Cube" is not an IFC element - And the object "IfcOpeningElement/Cube" is an "IfcOpeningElement" - And the void "IfcOpeningElement/Cube" is not filled by "Cube" - -Scenario: Add a filling on a non IFC object - Given an empty IFC project - And I add a cube - When the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcDoor" - And I press "bim.assign_class" - And I add a cube - And the object "Cube" is selected - And I press "bim.add_filling(opening='Cube', obj='IfcDoor/Cube')" - Then the object "Cube" is not an IFC element - And the object "IfcDoor/Cube" is an "IfcDoor" - -Scenario: Add a filling on Opening B with a filling that already fills Opening A - Given an empty IFC project - And I add a cube - When the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcOpeningElement" - And I press "bim.assign_class" - And I add a cube - And the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcDoor" - And I press "bim.assign_class" - And I press "bim.add_filling(opening='IfcOpeningElement/Cube', obj='IfcDoor/Cube')" - And I add a cube - And the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcOpeningElement" - And I press "bim.assign_class" - And I press "bim.add_filling(opening='IfcOpeningElement/Cube.001', obj='IfcDoor/Cube')" - Then the void "IfcOpeningElement/Cube" is not filled by "Cube" - And the void "IfcOpeningElement/Cube.001" is filled by "Cube" - -Scenario: Remove a filling - Given an empty IFC project - And I add a cube - When the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcOpeningElement" - And I press "bim.assign_class" - And I add a cube - And the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcDoor" - And I press "bim.assign_class" - And I press "bim.add_filling(opening='IfcOpeningElement/Cube', obj='IfcDoor/Cube')" - And I press "bim.remove_filling(obj='IfcDoor/Cube')" - Then the object "IfcOpeningElement/Cube" is an "IfcOpeningElement" - And the object "IfcDoor/Cube" is an "IfcDoor" - And the void "IfcOpeningElement/Cube" is not filled by "Cube" - -Scenario: Remove a filling which is not an IFC object - Given an empty IFC project - And I add a cube - When the object "Cube" is selected - And I press "bim.remove_filling(obj='Cube')" - Then the object "Cube" is not an IFC element - -Scenario: Remove a filling which is not a filling - Given an empty IFC project - And I add a cube - When the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcDoor" - And I press "bim.assign_class" - And the object "IfcDoor/Cube" is not a filling - And I press "bim.remove_filling(obj='IfcDoor/Cube')" - Then the object "IfcDoor/Cube" is an "IfcDoor" - And the object "IfcDoor/Cube" is not a filling - -Scenario: Remove a filling which is null - Given an empty IFC project - When I press "bim.remove_filling()" - Then nothing happens - -Scenario: Remove a filling using deletion on the filling - Given an empty IFC project - And I add a cube - When the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcOpeningElement" - And I press "bim.assign_class" - And I add a cube - And the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcDoor" - And I press "bim.assign_class" - And I press "bim.add_filling(opening='IfcOpeningElement/Cube', obj='IfcDoor/Cube')" - And the object "IfcDoor/Cube" is selected - And I delete the selected objects - Then the object "IfcOpeningElement/Cube" is an "IfcOpeningElement" - And the void "IfcOpeningElement/Cube" is not filled by "Cube" - -Scenario: Remove a filling using deletion on the opening - Given an empty IFC project - And I add a cube - When the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcOpeningElement" - And I press "bim.assign_class" - And I add a cube - And the object "Cube" is selected - And I set "scene.BIMRootProperties.ifc_class" to "IfcDoor" - And I press "bim.assign_class" - And I press "bim.add_filling(opening='IfcOpeningElement/Cube', obj='IfcDoor/Cube')" - And the object "IfcOpeningElement/Cube" is selected - And I delete the selected objects - Then the object "IfcDoor/Cube" is an "IfcDoor" - And the object "IfcDoor/Cube" is not a filling + Then the object "Opening" is not an IFC element diff --git a/src/blenderbim/test/bim/test_feature.py b/src/blenderbim/test/bim/test_feature.py index 0050024908..2b310fc151 100644 --- a/src/blenderbim/test/bim/test_feature.py +++ b/src/blenderbim/test/bim/test_feature.py @@ -351,22 +351,6 @@ def the_object_name_should_display_as_mode(name, mode): assert obj.display_type == mode -@then(parsers.parse('the object "{name1}" has a boolean difference by "{name2}"')) -def the_object_name1_has_a_boolean_difference_by_name2(name1, name2): - obj = the_object_name_exists(name1) - has_mod = any((m for m in obj.modifiers if m.type == "BOOLEAN" and m.object and m.object.name == name2)) - assert has_mod, "No boolean found" - - -@then(parsers.parse('the object "{name1}" has no boolean difference by "{name2}"')) -def the_object_name1_has_no_boolean_difference_by_name2(name1, name2): - try: - the_object_name1_has_a_boolean_difference_by_name2(name1, name2) - except AssertionError: - return - assert False, "A boolean was found" - - @then(parsers.parse('the object "{name}" is voided by "{void}"')) def the_object_name_is_voided_by_void(name, void): ifc = IfcStore.get_file() @@ -390,7 +374,7 @@ def the_object_name_is_not_voided(name): assert not element.HasOpenings, "A void was found" -@then(parsers.parse('the object "{name}" is not a void')) +@then(parsers.parse('the object "{name}" is a void')) def the_object_name_is_a_void(name): ifc = IfcStore.get_file() obj = the_object_name_exists(name) @@ -592,48 +576,6 @@ def the_object_name_has_no_modifiers(name): assert len(the_object_name_exists(name).modifiers) == 0 -@then(parsers.parse('the construction type "{ifc_class}"/"{relating_type}" has a preview')) -def the_construction_type_has_a_preview(ifc_class, relating_type): - if "preview_constr_types" not in AuthoringData.data: - assert False, "There are no previews loaded" - preview_constr_types = AuthoringData.data["preview_constr_types"] - if ifc_class not in preview_constr_types: - assert False, f"Construction class {ifc_class} has no available previews" - relating_type_id = AuthoringData.relating_type_id_by_name(ifc_class, relating_type) - if relating_type_id is None: - assert False, f"No construction type {ifc_class}/{relating_type} was found" - if relating_type_id not in preview_constr_types[ifc_class]: - assert False, f"Construction type {ifc_class}/{relating_type} has no available previews" - preview_data = preview_constr_types[ifc_class][relating_type_id] - if "icon_id" not in preview_data: - assert False, f"Construction type {ifc_class}/{relating_type} has a preview, but no assigned icon_id" - icon_id = preview_data["icon_id"] - if not isinstance(icon_id, int): - assert False, f"Construction type {ifc_class}/{relating_type} has an invalid icon_id {icon_id}" - # Note: icon_id must be > 0 in UI mode, but asset_generate_preview() doesn't work headlessly -> skipping for now - # if icon_id == 0: - # assert False, f'Construction type {ifc_class}/{relating_type} has the default null value for icon_id' - assert True - - -@then("there is a Construction Type preview") -def there_is_a_construction_type_preview(): - props = bpy.context.scene.BIMModelProperties - assert props.icon_id > 0, f"There isn't a Construction Type preview" - - -@then(parsers.parse('all construction types for "{ifc_class}" have a preview')) -def all_construction_types_have_a_preview(ifc_class): - if "preview_constr_types" not in AuthoringData.data: - assert False, "There are no previews loaded" - preview_constr_types = AuthoringData.data["preview_constr_types"] - if ifc_class not in preview_constr_types: - assert False, f"Construction class {ifc_class} has no available previews" - constr_class_occurrences = AuthoringData.constr_class_entities(ifc_class) - for constr_class_entity in constr_class_occurrences: - the_construction_type_has_a_preview(ifc_class, constr_class_entity.Name) - - @given("I load the demo construction library") @when("I load the demo construction library") def i_add_a_construction_library(): diff --git a/src/blenderbim/test/core/test_root.py b/src/blenderbim/test/core/test_root.py index 92d7e94562..f5a9494048 100644 --- a/src/blenderbim/test/core/test_root.py +++ b/src/blenderbim/test/core/test_root.py @@ -57,6 +57,7 @@ class TestCopyClass: geometry.get_representation_name("new_representation").should_be_called().will_return("name") geometry.rename_object("data", "name").should_be_called() geometry.link("new_representation", "data").should_be_called() + root.assign_body_styles("element", "obj").should_be_called() geometry.duplicate_object_data("obj").should_be_called().will_return("data") collector.assign("obj").should_be_called() root.is_opening_element("element").should_be_called().will_return(False)