From f81b22240c19b2b58566f7cacb2d0197a85b5000 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 4 Oct 2022 18:35:01 +1100 Subject: [PATCH] Minor fix --- .../blenderbim/bim/module/model/slab.py | 18 ++++++++------- .../blenderbim/bim/module/model/workspace.py | 22 +++++++++++++++---- src/blenderbim/blenderbim/core/tool.py | 2 -- src/blenderbim/blenderbim/tool/model.py | 3 ++- src/blenderbim/test/core/test_project.py | 2 +- src/ifcfm/ifcfm/parser.py | 2 +- src/ifcfm/ifcfm/writer.py | 6 ++--- 7 files changed, 34 insertions(+), 21 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/slab.py b/src/blenderbim/blenderbim/bim/module/model/slab.py index 98f10a0182..4f6b9b8ac1 100644 --- a/src/blenderbim/blenderbim/bim/module/model/slab.py +++ b/src/blenderbim/blenderbim/bim/module/model/slab.py @@ -327,7 +327,7 @@ class EnableEditingSketchExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator) context.scene["sketcher"].update(json.loads(pset["Entities"])) bpy.context.view_layer.update() bpy.ops.wm.tool_set_by_id(name="sketcher.slvs_select") - bpy.ops.view3d.slvs_set_all_constraints_visibility(visibility='SHOW') + bpy.ops.view3d.slvs_set_all_constraints_visibility(visibility="SHOW") return {"FINISHED"} body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") @@ -692,12 +692,14 @@ class EnableEditingExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): x = self.convert_unit_to_si(profile.XDim) y = self.convert_unit_to_si(profile.YDim) - self.vertices.extend([ - position @ p_position @ Vector((-x/2, -y/2, 0.0)), - position @ p_position @ Vector((x/2, -y/2, 0.0)), - position @ p_position @ Vector((x/2, y/2, 0.0)), - position @ p_position @ Vector((-x/2, y/2, 0.0)), - ]) + self.vertices.extend( + [ + position @ p_position @ Vector((-x / 2, -y / 2, 0.0)), + position @ p_position @ Vector((x / 2, -y / 2, 0.0)), + position @ p_position @ Vector((x / 2, y / 2, 0.0)), + position @ p_position @ Vector((-x / 2, y / 2, 0.0)), + ] + ) self.edges.extend([(i, i + 1) for i in range(0, len(self.vertices))]) self.edges[-1] = (len(self.vertices) - 1, 0) # Close the loop @@ -821,7 +823,7 @@ class EditExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): center = self.convert_si_to_unit(list(position_i @ p1.lerp(p2, 0.5))) radius = self.convert_si_to_unit((p1 - p2).length / 2) return tool.Ifc.get().createIfcCircle( - tool.Ifc.get().createIfcAxis2Placement2D(tool.Ifc.get().createIfcCartesianPoint(center)), radius + tool.Ifc.get().createIfcAxis2Placement2D(tool.Ifc.get().createIfcCartesianPoint(center[0:2])), radius ) if tool.Ifc.get().schema == "IFC2X3": points = [] diff --git a/src/blenderbim/blenderbim/bim/module/model/workspace.py b/src/blenderbim/blenderbim/bim/module/model/workspace.py index 120aacec02..1f8a608932 100644 --- a/src/blenderbim/blenderbim/bim/module/model/workspace.py +++ b/src/blenderbim/blenderbim/bim/module/model/workspace.py @@ -270,6 +270,9 @@ class Hotkey(bpy.types.Operator, tool.Ifc.Operator): bl_label = "Hotkey" bl_options = {"REGISTER", "UNDO"} hotkey: bpy.props.StringProperty() + x: bpy.props.FloatProperty(name="X", default=0.5) + y: bpy.props.FloatProperty(name="Y", default=0.5) + z: bpy.props.FloatProperty(name="Z", default=0.5) @classmethod def poll(cls, context): @@ -285,15 +288,23 @@ class Hotkey(bpy.types.Operator, tool.Ifc.Operator): getattr(self, f"hotkey_{self.hotkey}")() return {"FINISHED"} + def invoke(self, context, event): + # https://blender.stackexchange.com/questions/276035/how-do-i-make-operators-remember-their-property-values-when-called-from-a-hotkey + self.props = context.scene.BIMModelProperties + self.x = self.props.x + self.y = self.props.y + self.z = self.props.z + return self.execute(context) + def draw(self, context): props = context.scene.BIMModelProperties if self.hotkey == "S_O": row = self.layout.row() - row.prop(props, "x") + row.prop(self, "x") row = self.layout.row() - row.prop(props, "y") + row.prop(self, "y") row = self.layout.row() - row.prop(props, "z") + row.prop(self, "z") def hotkey_S_A(self): bpy.ops.bim.add_constr_type_instance() @@ -376,7 +387,10 @@ class Hotkey(bpy.types.Operator, tool.Ifc.Operator): if len(bpy.context.selected_objects) == 2: bpy.ops.bim.add_opening() else: - bpy.ops.bim.add_potential_opening(x=self.props.x, y=self.props.y, z=self.props.z) + bpy.ops.bim.add_potential_opening(x=self.x, y=self.y, z=self.z) + self.props.x = self.x + self.props.y = self.y + self.props.z = self.z def hotkey_A_D(self): bpy.ops.bim.toggle_decomposition_parenting() diff --git a/src/blenderbim/blenderbim/core/tool.py b/src/blenderbim/blenderbim/core/tool.py index 23c7d511c7..003385e2dc 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -401,7 +401,6 @@ class Pset: class Qto: def get_radius_of_selected_vertices(cls, obj): pass def set_qto_result(cls, result): pass - def set_active_object(cls, object): pass def get_pset_qto_object_ifc_info(cls, object): pass def get_pset_qto_properties(cls, object): pass def get_pset_qto_name(cls, object): pass @@ -410,7 +409,6 @@ class Qto: def get_pset_qto_id(cls, object): pass def get_pset_qto_name(cls, object): pass def get_new_quantity(cls, object, quantity_name, alternative_prop_names): pass - def get_non_calculated_value(cls): pass def get_rounded_value(cls, new_quantity): pass def get_calculated_quantities(cls, object, pset_qto_properties): pass def assign_pset_qto_to_selected_object(cls, object): pass diff --git a/src/blenderbim/blenderbim/tool/model.py b/src/blenderbim/blenderbim/tool/model.py index f9e09c0389..4083b957dd 100644 --- a/src/blenderbim/blenderbim/tool/model.py +++ b/src/blenderbim/blenderbim/tool/model.py @@ -67,7 +67,8 @@ class Model(blenderbim.core.tool.Model): if obj: opening_obj.parent = obj opening_obj.matrix_parent_inverse = obj.matrix_world.inverted() - ifc_importer.place_objects_in_collections() + for obj in ifc_importer.added_data.values(): + bpy.context.scene.collection.objects.link(obj) return ifc_importer.added_data.values() @classmethod diff --git a/src/blenderbim/test/core/test_project.py b/src/blenderbim/test/core/test_project.py index a7f59259a7..301b012466 100644 --- a/src/blenderbim/test/core/test_project.py +++ b/src/blenderbim/test/core/test_project.py @@ -45,7 +45,7 @@ class TestCreateProject: context_type="Model", context_identifier="Body", target_view="MODEL_VIEW", parent="model" ).should_be_called().will_return("body") project.run_context_add_context( - context_type="MODEL", context_identifier="Axis", target_view="GRAPH_VIEW", parent="model" + context_type="Model", context_identifier="Axis", target_view="GRAPH_VIEW", parent="model" ).should_be_called() project.run_context_add_context( context_type="Model", context_identifier="Box", target_view="MODEL_VIEW", parent="model" diff --git a/src/ifcfm/ifcfm/parser.py b/src/ifcfm/ifcfm/parser.py index d23890e767..9147f0b45a 100644 --- a/src/ifcfm/ifcfm/parser.py +++ b/src/ifcfm/ifcfm/parser.py @@ -213,7 +213,7 @@ class Parser: for space in rel.RelatedObjects: if not space.is_a("IfcSpace"): continue - self.zones[element.Name + space.Name] = { + self.zones[(element.Name or "Unnamed") + (space.Name or "Unnamed")] = { "Name": element.Name, "AuthorOrganizationName": element.OwnerHistory.OwningUser.TheOrganization.Name, "AuthorDate": ifcopenshell.util.date.ifc2datetime( diff --git a/src/ifcfm/ifcfm/writer.py b/src/ifcfm/ifcfm/writer.py index f1e433272e..c82db4cd66 100644 --- a/src/ifcfm/ifcfm/writer.py +++ b/src/ifcfm/ifcfm/writer.py @@ -500,14 +500,12 @@ class Writer: # "ririooooooooooeee", # ) - def write_data(self, sheet, data, fieldnames, colours, sort_fields, custom_data={}): - self.sheet_data[sheet] = {"headers": fieldnames + list(custom_data.keys()), "colours": colours, "rows": []} + def write_data(self, sheet, data, fieldnames, colours, sort_fields): + self.sheet_data[sheet] = {"headers": fieldnames, "colours": colours, "rows": []} for row in multikeysort(list(data.values()), sort_fields): values = [] for fieldname in fieldnames: values.append(row[fieldname]) - for fieldname in custom_data.keys(): - values.append(row[fieldname]) self.sheet_data[sheet]["rows"].append(values)