mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-19 22:50:21 +00:00
Openings are now auto dissolved when authoring for easier editing.
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import bpy
|
import bpy
|
||||||
import ifcopenshell
|
import ifcopenshell
|
||||||
import ifcopenshell.api
|
import ifcopenshell.api
|
||||||
from blenderbim.bim.module.model import product, wall, slab, profile
|
from blenderbim.bim.module.model import product, wall, slab, profile, opening
|
||||||
from blenderbim.bim.ifc import IfcStore
|
from blenderbim.bim.ifc import IfcStore
|
||||||
from bpy.app.handlers import persistent
|
from bpy.app.handlers import persistent
|
||||||
|
|
||||||
@@ -17,6 +17,8 @@ def load_post(*args):
|
|||||||
product.regenerate_profile_usage,
|
product.regenerate_profile_usage,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
IfcStore.add_element_listener(opening.element_listener)
|
||||||
|
|
||||||
IfcStore.add_element_listener(wall.element_listener)
|
IfcStore.add_element_listener(wall.element_listener)
|
||||||
ifcopenshell.api.add_pre_listener(
|
ifcopenshell.api.add_pre_listener(
|
||||||
"geometry.add_representation", "BlenderBIM.DumbWall.EnsureSolid", wall.ensure_solid
|
"geometry.add_representation", "BlenderBIM.DumbWall.EnsureSolid", wall.ensure_solid
|
||||||
|
|||||||
@@ -1,10 +1,37 @@
|
|||||||
import bpy
|
import bpy
|
||||||
import bmesh
|
import bmesh
|
||||||
|
import blenderbim.bim.handler
|
||||||
|
from blenderbim.bim.ifc import IfcStore
|
||||||
|
from math import pi
|
||||||
from bpy.types import Operator
|
from bpy.types import Operator
|
||||||
from bpy.props import FloatProperty
|
from bpy.props import FloatProperty
|
||||||
from bpy_extras.object_utils import AddObjectHelper, object_data_add
|
from bpy_extras.object_utils import AddObjectHelper, object_data_add
|
||||||
|
|
||||||
|
|
||||||
|
def element_listener(element, obj):
|
||||||
|
blenderbim.bim.handler.subscribe_to(obj, "mode", mode_callback)
|
||||||
|
|
||||||
|
|
||||||
|
def mode_callback(obj, data):
|
||||||
|
for obj in bpy.context.selected_objects + [bpy.context.active_object]:
|
||||||
|
if (
|
||||||
|
obj.mode != "EDIT"
|
||||||
|
or not obj.data
|
||||||
|
or not isinstance(obj.data, (bpy.types.Mesh, bpy.types.Curve, bpy.types.TextCurve))
|
||||||
|
or not obj.BIMObjectProperties.ifc_definition_id
|
||||||
|
or not bpy.context.scene.BIMProjectProperties.is_authoring
|
||||||
|
):
|
||||||
|
return
|
||||||
|
product = IfcStore.get_file().by_id(obj.BIMObjectProperties.ifc_definition_id)
|
||||||
|
if not product.is_a("IfcOpeningElement"):
|
||||||
|
return
|
||||||
|
IfcStore.edited_objs.add(obj)
|
||||||
|
bm = bmesh.from_edit_mesh(obj.data)
|
||||||
|
bmesh.ops.dissolve_limit(bm, angle_limit=pi / 180 * 1, verts=bm.verts, edges=bm.edges)
|
||||||
|
bmesh.update_edit_mesh(obj.data)
|
||||||
|
bm.free()
|
||||||
|
|
||||||
|
|
||||||
def add_object(self, context):
|
def add_object(self, context):
|
||||||
bm = bmesh.new()
|
bm = bmesh.new()
|
||||||
bmesh.ops.create_cube(bm, size=self.size)
|
bmesh.ops.create_cube(bm, size=self.size)
|
||||||
|
|||||||
Reference in New Issue
Block a user