Skip to content

Commit 1c74147

Browse files
committed
Dissolve specifically IOS triangulated edges for meshes instead of generic Blender limited dissolve.
1 parent cc53744 commit 1c74147

File tree

5 files changed

+23
-3
lines changed

5 files changed

+23
-3
lines changed

src/blenderbim/blenderbim/bim/import_ifc.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1823,6 +1823,10 @@ def create_mesh(self, element, shape):
18231823
loop_total = [3] * num_loops
18241824
num_vertex_indices = len(geometry.faces)
18251825

1826+
# See bug 3546
1827+
# ios_edges holds true edges that aren't triangulated.
1828+
mesh["ios_edges"] = list(set(tuple(e) for e in grouped_edges))
1829+
18261830
mesh.vertices.add(num_vertices)
18271831
mesh.vertices.foreach_set("co", verts)
18281832
mesh.loops.add(num_vertex_indices)
@@ -1909,7 +1913,7 @@ def __init__(self):
19091913
self.should_merge_materials_by_colour = False
19101914
self.should_load_geometry = True
19111915
self.should_use_native_meshes = False
1912-
self.should_clean_mesh = True
1916+
self.should_clean_mesh = False
19131917
self.should_cache = True
19141918
self.is_coordinating = True
19151919
self.deflection_tolerance = 0.001

src/blenderbim/blenderbim/bim/module/geometry/operator.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1360,6 +1360,7 @@ def _execute(self, context):
13601360
should_sync_changes_first=False,
13611361
apply_openings=False,
13621362
)
1363+
tool.Geometry.dissolve_triangulated_edges(obj)
13631364
obj.data.BIMMeshProperties.mesh_checksum = tool.Geometry.get_mesh_checksum(obj.data)
13641365
else:
13651366
obj.select_set(False)

src/blenderbim/blenderbim/bim/module/project/prop.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ class BIMProjectProperties(PropertyGroup):
151151
should_stream: BoolProperty(name="Stream Data From IFC-SPF (Only for advanced users)", default=False)
152152
should_load_geometry: BoolProperty(name="Load Geometry", default=True)
153153
should_use_native_meshes: BoolProperty(name="Native Meshes", default=False)
154-
should_clean_mesh: BoolProperty(name="Clean Meshes", default=True)
154+
should_clean_mesh: BoolProperty(name="Clean Meshes", default=False)
155155
should_cache: BoolProperty(name="Cache", default=False)
156156
is_coordinating: BoolProperty(name="For Coordination Only", default=False)
157157
deflection_tolerance: FloatProperty(name="Deflection Tolerance", default=0.001)

src/blenderbim/blenderbim/bim/ui.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ def draw(self, context):
247247
row.operator("bim.select_data_dir", icon="FILE_FOLDER", text="")
248248

249249
row = self.layout.row(align=True)
250-
row.prop(context.scene.BIMProperties, "psets_dir")
250+
row.prop(context.scene.BIMProperties, "pset_dir")
251251
row = self.layout.row(align=True)
252252
row.prop(context.scene.DocProperties, "sheets_dir")
253253
row = self.layout.row(align=True)

src/blenderbim/blenderbim/tool/geometry.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,21 @@ def delete_ifc_object(cls, obj):
118118
except:
119119
pass
120120

121+
@classmethod
122+
def dissolve_triangulated_edges(cls, obj):
123+
if obj.data and "ios_edges" in obj.data:
124+
bm = bmesh.new()
125+
bm.from_mesh(obj.data)
126+
edges_to_keep = set(map(frozenset, obj.data["ios_edges"]))
127+
edges_to_dissolve = []
128+
for edge in bm.edges:
129+
if frozenset([vert.index for vert in edge.verts]) not in edges_to_keep:
130+
edges_to_dissolve.append(edge)
131+
bmesh.ops.dissolve_edges(bm, edges=edges_to_dissolve)
132+
bm.to_mesh(obj.data)
133+
bm.free()
134+
del obj.data["ios_edges"]
135+
121136
@classmethod
122137
def does_representation_id_exist(cls, representation_id):
123138
try:

0 commit comments

Comments
 (0)