mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-23 21:58:46 +00:00
Ensure polygons are always coplanar (#1482)
* Ensure polygons are always coplanar fix #1481 May adopt a bmesh approach instead ? * Ensure polygons are coplanar The bmesh version is lot faster than modifier one
This commit is contained in:
@@ -44,29 +44,36 @@ class Usecase:
|
|||||||
return self.create_variable_representation()
|
return self.create_variable_representation()
|
||||||
|
|
||||||
def evaluate_geometry(self):
|
def evaluate_geometry(self):
|
||||||
self.boolean_modifiers = []
|
|
||||||
for modifier in self.settings["blender_object"].modifiers:
|
for modifier in self.settings["blender_object"].modifiers:
|
||||||
if modifier.type == "BOOLEAN":
|
if modifier.type == "BOOLEAN":
|
||||||
modifier.show_viewport = False
|
modifier.show_viewport = False
|
||||||
|
|
||||||
if self.settings["should_force_triangulation"]:
|
mesh = self.settings["blender_object"].evaluated_get(bpy.context.evaluated_depsgraph_get()).to_mesh()
|
||||||
mesh = self.settings["blender_object"].evaluated_get(bpy.context.evaluated_depsgraph_get()).to_mesh()
|
bm = bmesh.new()
|
||||||
bm = bmesh.new()
|
bm.from_mesh(mesh)
|
||||||
bm.from_mesh(mesh)
|
bmesh.ops.triangulate(bm, faces=bm.faces)
|
||||||
bmesh.ops.triangulate(bm, faces=bm.faces)
|
|
||||||
bm.to_mesh(mesh)
|
if not self.settings["should_force_triangulation"]:
|
||||||
bm.free()
|
bmesh.ops.dissolve_limit(
|
||||||
del bm
|
bm,
|
||||||
self.settings["geometry"] = mesh
|
angle_limit=0.00174533,
|
||||||
else:
|
use_dissolve_boundaries=False,
|
||||||
self.settings["geometry"] = (
|
verts=bm.verts[:],
|
||||||
self.settings["blender_object"].evaluated_get(bpy.context.evaluated_depsgraph_get()).to_mesh()
|
edges=bm.edges[:],
|
||||||
|
delimit={'MATERIAL'}
|
||||||
)
|
)
|
||||||
|
bm.to_mesh(mesh)
|
||||||
|
bm.free()
|
||||||
|
del bm
|
||||||
|
|
||||||
|
self.settings["geometry"] = mesh
|
||||||
|
|
||||||
for modifier in self.settings["blender_object"].modifiers:
|
for modifier in self.settings["blender_object"].modifiers:
|
||||||
if modifier.type == "BOOLEAN":
|
if modifier.type == "BOOLEAN":
|
||||||
modifier.show_viewport = True
|
modifier.show_viewport = True
|
||||||
|
|
||||||
|
|
||||||
def create_model_representation(self):
|
def create_model_representation(self):
|
||||||
if self.settings["context"].is_a() == "IfcGeometricRepresentationContext":
|
if self.settings["context"].is_a() == "IfcGeometricRepresentationContext":
|
||||||
return self.create_variable_representation()
|
return self.create_variable_representation()
|
||||||
|
|||||||
Reference in New Issue
Block a user