mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-14 03:14:23 +00:00
@@ -1047,11 +1047,12 @@ class Loader(bonsai.core.tool.Loader):
|
||||
elif usage.LayerSetDirection == "AXIS3":
|
||||
co = Vector((0.0, 0.0, offset))
|
||||
no = cls.get_extrusion_vector(element).normalized()
|
||||
no = Vector([0.0, 0.0, 1.0 if no.z > 0 else -1.0])
|
||||
elif usage.LayerSetDirection == "AXIS3":
|
||||
no = Vector([0.0, 0.0, 1.0])
|
||||
elif usage.LayerSetDirection == "AXIS1":
|
||||
co = Vector((0.0, 0.0, offset))
|
||||
no = cls.get_extrusion_vector(element).normalized()
|
||||
no = Vector([1.0 if no.x > 0 else -1.0, 0.0, 0.0])
|
||||
no = Vector([1.0, 0.0, 0.0])
|
||||
no *= sense_factor
|
||||
# Cache this
|
||||
body = ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body", "MODEL_VIEW")
|
||||
styles = {}
|
||||
@@ -1061,8 +1062,7 @@ class Loader(bonsai.core.tool.Loader):
|
||||
styles[style] = i
|
||||
for layer in layer_set.MaterialLayers[:-1]:
|
||||
prev_co = co.copy()
|
||||
co += no * layer.LayerThickness * cls.unit_scale * sense_factor
|
||||
# co.y += layer.LayerThickness * cls.unit_scale * sense_factor
|
||||
co += no * layer.LayerThickness * cls.unit_scale
|
||||
bisect_geom = bmesh.ops.bisect_plane(
|
||||
bm, geom=bm.verts[:] + bm.edges[:] + bm.faces[:], dist=0.0001, plane_co=co, plane_no=no
|
||||
)
|
||||
@@ -1074,7 +1074,6 @@ class Loader(bonsai.core.tool.Loader):
|
||||
for face in bisect_geom["geom"]:
|
||||
if isinstance(face, bmesh.types.BMFace):
|
||||
center = face.calc_center_median()
|
||||
# if center.y < co.y and center.y > prev_co.y:
|
||||
if (center - co).dot(no) < 0 and (center - prev_co).dot(no) >= 0:
|
||||
face.material_index = material_index
|
||||
has_layer_styles = True
|
||||
@@ -1087,7 +1086,7 @@ class Loader(bonsai.core.tool.Loader):
|
||||
mesh.materials.append(tool.Ifc.get_object(style))
|
||||
for face in bisect_geom["geom"]:
|
||||
if isinstance(face, bmesh.types.BMFace):
|
||||
center = face.calc_center_median() * sense_factor
|
||||
center = face.calc_center_median()
|
||||
# if center.y > co.y:
|
||||
if (center - co).dot(no) >= 0:
|
||||
face.material_index = material_index
|
||||
|
||||
Reference in New Issue
Block a user