mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-26 18:21:59 +00:00
support adding parametric stair to object without representations
This commit is contained in:
@@ -33,12 +33,10 @@ from bpy.props import FloatProperty, IntProperty
|
|||||||
from bpy_extras.object_utils import AddObjectHelper, object_data_add
|
from bpy_extras.object_utils import AddObjectHelper, object_data_add
|
||||||
|
|
||||||
|
|
||||||
def regenerate_stair_mesh(context: bpy.types.Context) -> None:
|
def regenerate_stair_mesh(obj: bpy.types.Object) -> None:
|
||||||
obj = context.active_object
|
|
||||||
props_kwargs = obj.BIMStairProperties.get_props_kwargs()
|
props_kwargs = obj.BIMStairProperties.get_props_kwargs()
|
||||||
vertices, edges, faces = tool.Model.generate_stair_2d_profile(**props_kwargs)
|
vertices, edges, faces = tool.Model.generate_stair_2d_profile(**props_kwargs)
|
||||||
|
|
||||||
obj = context.active_object
|
|
||||||
bm = bmesh.new()
|
bm = bmesh.new()
|
||||||
bm.verts.index_update()
|
bm.verts.index_update()
|
||||||
bm.edges.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)]
|
translate_verts = [v for v in extruded["geom"] if isinstance(v, BMVert)]
|
||||||
bmesh.ops.translate(bm, vec=extrusion_vector, verts=translate_verts)
|
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)
|
bmesh.update_edit_mesh(obj.data)
|
||||||
else:
|
else:
|
||||||
bm.to_mesh(obj.data)
|
bm.to_mesh(obj.data)
|
||||||
@@ -183,6 +182,7 @@ class AddStair(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
|
|
||||||
def _execute(self, context):
|
def _execute(self, context):
|
||||||
obj = context.active_object
|
obj = context.active_object
|
||||||
|
assert obj
|
||||||
element = tool.Ifc.get_entity(obj)
|
element = tool.Ifc.get_entity(obj)
|
||||||
props = obj.BIMStairProperties
|
props = obj.BIMStairProperties
|
||||||
ifc_file = tool.Ifc.get()
|
ifc_file = tool.Ifc.get()
|
||||||
@@ -198,7 +198,12 @@ class AddStair(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
pset=pset,
|
pset=pset,
|
||||||
properties={"Data": tool.Ifc.get().createIfcText(json.dumps(stair_data))},
|
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)
|
update_ifc_stair_props(obj)
|
||||||
tool.Model.add_body_representation(obj)
|
tool.Model.add_body_representation(obj)
|
||||||
|
|
||||||
@@ -215,7 +220,7 @@ class CancelEditingStair(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
props = obj.BIMStairProperties
|
props = obj.BIMStairProperties
|
||||||
# restore previous settings since editing was canceled
|
# restore previous settings since editing was canceled
|
||||||
props.set_props_kwargs_from_ifc_data(data)
|
props.set_props_kwargs_from_ifc_data(data)
|
||||||
regenerate_stair_mesh(context)
|
regenerate_stair_mesh(obj)
|
||||||
|
|
||||||
props.is_editing = False
|
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)
|
data = props.get_props_kwargs(convert_to_project_units=True)
|
||||||
props.is_editing = False
|
props.is_editing = False
|
||||||
regenerate_stair_mesh(context)
|
regenerate_stair_mesh(obj)
|
||||||
tool.Model.add_body_representation(obj)
|
tool.Model.add_body_representation(obj)
|
||||||
|
|
||||||
pset = tool.Pset.get_element_pset(element, "BBIM_Stair")
|
pset = tool.Pset.get_element_pset(element, "BBIM_Stair")
|
||||||
|
|||||||
@@ -280,7 +280,9 @@ class BIM_PT_stair(bpy.types.Panel):
|
|||||||
if not StairData.is_loaded:
|
if not StairData.is_loaded:
|
||||||
StairData.load()
|
StairData.load()
|
||||||
|
|
||||||
props = context.active_object.BIMStairProperties
|
obj = context.active_object
|
||||||
|
assert obj
|
||||||
|
props = obj.BIMStairProperties
|
||||||
|
|
||||||
if StairData.data["pset_data"]:
|
if StairData.data["pset_data"]:
|
||||||
row = self.layout.row(align=True)
|
row = self.layout.row(align=True)
|
||||||
@@ -300,7 +302,7 @@ class BIM_PT_stair(bpy.types.Panel):
|
|||||||
self.layout.prop(props, prop_name, text="")
|
self.layout.prop(props, prop_name, text="")
|
||||||
else:
|
else:
|
||||||
self.layout.prop(props, prop_name)
|
self.layout.prop(props, prop_name)
|
||||||
regenerate_stair_mesh(context)
|
regenerate_stair_mesh(obj)
|
||||||
else:
|
else:
|
||||||
calculated_params = StairData.data["calculated_params"]
|
calculated_params = StairData.data["calculated_params"]
|
||||||
row.operator("bim.enable_editing_stair", icon="GREASEPENCIL", text="")
|
row.operator("bim.enable_editing_stair", icon="GREASEPENCIL", text="")
|
||||||
|
|||||||
Reference in New Issue
Block a user