From 69138648502c4845aebda252b8e77c6d4d7dae57 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 9 Aug 2023 15:47:17 +0500 Subject: [PATCH] Remove triangulation on switch_representation Now all walls, beams etc should become be displayed with quads. --- src/blenderbim/blenderbim/core/geometry.py | 1 + src/blenderbim/blenderbim/tool/geometry.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/blenderbim/blenderbim/core/geometry.py b/src/blenderbim/blenderbim/core/geometry.py index b25ec4703a..195f4b3b51 100644 --- a/src/blenderbim/blenderbim/core/geometry.py +++ b/src/blenderbim/blenderbim/core/geometry.py @@ -115,6 +115,7 @@ def switch_representation( geometry.change_object_data(obj, data, is_global=is_global) geometry.record_object_materials(obj) + geometry.remove_triangulation(obj) if should_reload and existing_data: geometry.delete_data(existing_data) diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py index 839f67ffb8..01cdbfa53c 100644 --- a/src/blenderbim/blenderbim/tool/geometry.py +++ b/src/blenderbim/blenderbim/tool/geometry.py @@ -31,6 +31,7 @@ import blenderbim.bim.import_ifc from math import radians from mathutils import Vector from blenderbim.bim.ifc import IfcStore +from math import radians class Geometry(blenderbim.core.tool.Geometry): @@ -545,6 +546,19 @@ class Geometry(blenderbim.core.tool.Geometry): def rename_object(cls, obj, name): obj.name = name + @classmethod + def remove_triangulation(cls, obj): + """ + Convert triangles to quads without bpy.ops. + Note that it uses bmesh based on object mesh. + """ + mesh = obj.data + bm = tool.Blender.get_bmesh_for_mesh(mesh) + # angle values come from defaults for `bpy.ops.mesh.tris_convert_to_quads()`` + bmesh.ops.join_triangles(bm, faces=bm.faces[:], angle_face_threshold=radians(40), angle_shape_threshold=radians(40)) + bm.normal_update() + tool.Blender.apply_bmesh(mesh, bm, obj) + @classmethod def replace_object_with_empty(cls, obj): element = tool.Ifc.get_entity(obj)