mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-22 01:31:00 +00:00
Merge remote-tracking branch 'origin/v0.8.0' into tfk-rocksdb-storage
This commit is contained in:
@@ -441,6 +441,7 @@ class ChangeExtrusionXAngle(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
x_angle = 0 if tool.Cad.is_x(self.x_angle, pi, tolerance=0.001) else self.x_angle
|
x_angle = 0 if tool.Cad.is_x(self.x_angle, pi, tolerance=0.001) else self.x_angle
|
||||||
unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get())
|
unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get())
|
||||||
selected_objs = tool.Model.get_selected_mesh_ifc_objects()
|
selected_objs = tool.Model.get_selected_mesh_ifc_objects()
|
||||||
|
builder = ifcopenshell.util.shape_builder.ShapeBuilder(tool.Ifc.get())
|
||||||
|
|
||||||
for obj in selected_objs:
|
for obj in selected_objs:
|
||||||
element = tool.Ifc.get_entity(obj)
|
element = tool.Ifc.get_entity(obj)
|
||||||
@@ -466,16 +467,11 @@ class ChangeExtrusionXAngle(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
existing_x_angle = obj.rotation_euler.x
|
existing_x_angle = obj.rotation_euler.x
|
||||||
existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, 0, tolerance=0.001) else existing_x_angle
|
existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, 0, tolerance=0.001) else existing_x_angle
|
||||||
existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, pi, tolerance=0.001) else existing_x_angle
|
existing_x_angle = 0 if tool.Cad.is_x(existing_x_angle, pi, tolerance=0.001) else existing_x_angle
|
||||||
# Reset the transformation and returns to the original points with 0 degrees
|
|
||||||
extrusion.SweptArea.OuterCurve.Points.CoordList = [
|
|
||||||
(p[0], p[1] * abs(cos(existing_x_angle)))
|
|
||||||
for p in extrusion.SweptArea.OuterCurve.Points.CoordList
|
|
||||||
]
|
|
||||||
|
|
||||||
# Apply the transformation for the new x_angle
|
coord_list = builder.get_polyline_coords(extrusion.SweptArea.OuterCurve)
|
||||||
extrusion.SweptArea.OuterCurve.Points.CoordList = [
|
coord_list = [(p[0], p[1] * abs(cos(existing_x_angle))) for p in coord_list] # Reset the transformation and returns to the original points with 0 degrees
|
||||||
(p[0], p[1] * abs(1 / cos(x_angle))) for p in extrusion.SweptArea.OuterCurve.Points.CoordList
|
coord_list = [(p[0], p[1] * abs(1 / cos(x_angle))) for p in coord_list] # Apply the transformation for the new x_angle
|
||||||
]
|
builder.set_polyline_coords(extrusion.SweptArea.OuterCurve, coord_list)
|
||||||
|
|
||||||
# The extrusion direction calculated previously default to the positive direction
|
# The extrusion direction calculated previously default to the positive direction
|
||||||
# Here we set the extrusion direction to negative if that's the case
|
# Here we set the extrusion direction to negative if that's the case
|
||||||
@@ -895,7 +891,8 @@ class DumbWallGenerator:
|
|||||||
elevation = self.container_obj.location.z
|
elevation = self.container_obj.location.z
|
||||||
representation = ifcopenshell.util.representation.get_representation(slab, "Model", "Body", "MODEL_VIEW")
|
representation = ifcopenshell.util.representation.get_representation(slab, "Model", "Body", "MODEL_VIEW")
|
||||||
extrusion = tool.Model.get_extrusion(representation)
|
extrusion = tool.Model.get_extrusion(representation)
|
||||||
polyline_points = extrusion.SweptArea.OuterCurve.Points.CoordList
|
builder = ifcopenshell.util.shape_builder.ShapeBuilder(tool.Ifc.get())
|
||||||
|
polyline_points = builder.get_polyline_coords(extrusion.SweptArea.OuterCurve)
|
||||||
polyline_points = [[(v * self.unit_scale) for v in p] for p in polyline_points]
|
polyline_points = [[(v * self.unit_scale) for v in p] for p in polyline_points]
|
||||||
polyline_points = [slab_obj.matrix_world @ Vector((p[0], p[1], elevation)) for p in polyline_points]
|
polyline_points = [slab_obj.matrix_world @ Vector((p[0], p[1], elevation)) for p in polyline_points]
|
||||||
if not tool.Cad.is_counter_clockwise_order(polyline_points[0], polyline_points[1], polyline_points[2]):
|
if not tool.Cad.is_counter_clockwise_order(polyline_points[0], polyline_points[1], polyline_points[2]):
|
||||||
|
|||||||
@@ -1146,7 +1146,7 @@ class ShapeBuilder:
|
|||||||
if polyline.is_a("IfcIndexedPolyCurve"):
|
if polyline.is_a("IfcIndexedPolyCurve"):
|
||||||
coords = np.array(polyline.Points.CoordList)
|
coords = np.array(polyline.Points.CoordList)
|
||||||
elif polyline.is_a("IfcPolyline"):
|
elif polyline.is_a("IfcPolyline"):
|
||||||
coords = np.array(p.Coordinates for p in polyline.Points)
|
coords = np.array(tuple(p.Coordinates for p in polyline.Points))
|
||||||
else:
|
else:
|
||||||
raise Exception(f"Unsupported polyline type: {polyline.is_a()}")
|
raise Exception(f"Unsupported polyline type: {polyline.is_a()}")
|
||||||
return coords
|
return coords
|
||||||
|
|||||||
Reference in New Issue
Block a user