support adding parametric stair to object without representations

This commit is contained in:
Andrej730
2024-10-16 17:16:03 +05:00
parent 695ab0bfab
commit a7efdb0bff
2 changed files with 16 additions and 9 deletions
+12 -7
View File
@@ -33,12 +33,10 @@ from bpy.props import FloatProperty, IntProperty
from bpy_extras.object_utils import AddObjectHelper, object_data_add
def regenerate_stair_mesh(context: bpy.types.Context) -> None:
obj = context.active_object
def regenerate_stair_mesh(obj: bpy.types.Object) -> None:
props_kwargs = obj.BIMStairProperties.get_props_kwargs()
vertices, edges, faces = tool.Model.generate_stair_2d_profile(**props_kwargs)
obj = context.active_object
bm = bmesh.new()
bm.verts.index_update()
bm.edges.index_update()
@@ -57,7 +55,8 @@ def regenerate_stair_mesh(context: bpy.types.Context) -> None:
translate_verts = [v for v in extruded["geom"] if isinstance(v, BMVert)]
bmesh.ops.translate(bm, vec=extrusion_vector, verts=translate_verts)
if context.active_object.mode == "EDIT":
assert isinstance(obj.data, bpy.types.Mesh)
if obj.mode == "EDIT":
bmesh.update_edit_mesh(obj.data)
else:
bm.to_mesh(obj.data)
@@ -183,6 +182,7 @@ class AddStair(bpy.types.Operator, tool.Ifc.Operator):
def _execute(self, context):
obj = context.active_object
assert obj
element = tool.Ifc.get_entity(obj)
props = obj.BIMStairProperties
ifc_file = tool.Ifc.get()
@@ -198,7 +198,12 @@ class AddStair(bpy.types.Operator, tool.Ifc.Operator):
pset=pset,
properties={"Data": tool.Ifc.get().createIfcText(json.dumps(stair_data))},
)
regenerate_stair_mesh(context)
if obj.type == "EMPTY":
obj = tool.Geometry.recreate_object_with_data(obj, data=bpy.data.meshes.new("temp"), is_global=True)
tool.Blender.set_active_object(obj)
regenerate_stair_mesh(obj)
update_ifc_stair_props(obj)
tool.Model.add_body_representation(obj)
@@ -215,7 +220,7 @@ class CancelEditingStair(bpy.types.Operator, tool.Ifc.Operator):
props = obj.BIMStairProperties
# restore previous settings since editing was canceled
props.set_props_kwargs_from_ifc_data(data)
regenerate_stair_mesh(context)
regenerate_stair_mesh(obj)
props.is_editing = False
@@ -234,7 +239,7 @@ class FinishEditingStair(bpy.types.Operator, tool.Ifc.Operator):
data = props.get_props_kwargs(convert_to_project_units=True)
props.is_editing = False
regenerate_stair_mesh(context)
regenerate_stair_mesh(obj)
tool.Model.add_body_representation(obj)
pset = tool.Pset.get_element_pset(element, "BBIM_Stair")
+4 -2
View File
@@ -280,7 +280,9 @@ class BIM_PT_stair(bpy.types.Panel):
if not StairData.is_loaded:
StairData.load()
props = context.active_object.BIMStairProperties
obj = context.active_object
assert obj
props = obj.BIMStairProperties
if StairData.data["pset_data"]:
row = self.layout.row(align=True)
@@ -300,7 +302,7 @@ class BIM_PT_stair(bpy.types.Panel):
self.layout.prop(props, prop_name, text="")
else:
self.layout.prop(props, prop_name)
regenerate_stair_mesh(context)
regenerate_stair_mesh(obj)
else:
calculated_params = StairData.data["calculated_params"]
row.operator("bim.enable_editing_stair", icon="GREASEPENCIL", text="")