This commit is contained in:
Andrej730
2025-01-22 11:50:36 +05:00
parent 06f25b9846
commit a774a75509
7 changed files with 26 additions and 22 deletions
+1 -4
View File
@@ -217,7 +217,6 @@ class DumbSlabPlaner:
self.change_thickness(element, total_thickness)
def regenerate_from_layer(self, usecase_path, ifc_file, settings):
self.unit_scale = ifcopenshell.util.unit.calculate_unit_scale(ifc_file)
@@ -316,7 +315,7 @@ class DumbSlabPlaner:
elif layer_params["direction_sense"] == "NEGATIVE":
y = -abs(y) if existing_x_angle > 0 else abs(y)
z = -abs(z)
offset_vector = -offset_vector
offset_vector = -offset_vector
extrusion.ExtrudedDirection.DirectionRatios = (x, y, z)
extrusion.Depth = thickness
@@ -329,7 +328,6 @@ class DumbSlabPlaner:
rot_offset = offset_vector @ rot_matrix
extrusion.Position.Location.Coordinates = tuple(rot_offset)
else:
props = bpy.context.scene.BIMModelProperties
x_angle = 0 if tool.Cad.is_x(props.x_angle, 0, tolerance=0.001) else props.x_angle
@@ -380,7 +378,6 @@ class DumbSlabPlaner:
)
class EnableEditingSketchExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.enable_editing_sketch_extrusion_profile"
bl_label = "Enable Editing Sketch Extrusion Profile"
+8 -5
View File
@@ -244,10 +244,14 @@ class ChangeExtrusionXAngle(bpy.types.Operator, tool.Ifc.Operator):
else:
if tool.Model.get_usage_type(element) == "LAYER3":
# Reset the transformation and returns to the original points with 0 degrees
extrusion.SweptArea.OuterCurve.Points.CoordList = [(p[0], p[1] * (cos(existing_x_angle))) for p in extrusion.SweptArea.OuterCurve.Points.CoordList]
extrusion.SweptArea.OuterCurve.Points.CoordList = [
(p[0], p[1] * (cos(existing_x_angle))) for p in extrusion.SweptArea.OuterCurve.Points.CoordList
]
# Apply the transformation for the new x_angle
extrusion.SweptArea.OuterCurve.Points.CoordList = [(p[0], p[1] * (1 / cos(x_angle))) for p in extrusion.SweptArea.OuterCurve.Points.CoordList]
extrusion.SweptArea.OuterCurve.Points.CoordList = [
(p[0], p[1] * (1 / cos(x_angle))) for p in extrusion.SweptArea.OuterCurve.Points.CoordList
]
# The extrusion direction calculated previously default to the positive direction
# Here we set the extrusion direction to negative it that's the case
@@ -271,7 +275,6 @@ class ChangeExtrusionXAngle(bpy.types.Operator, tool.Ifc.Operator):
rot_offset = offset_vector @ rot_matrix
extrusion.Position.Location.Coordinates = tuple(rot_offset)
bonsai.core.geometry.switch_representation(
tool.Ifc,
tool.Geometry,
@@ -284,7 +287,7 @@ class ChangeExtrusionXAngle(bpy.types.Operator, tool.Ifc.Operator):
# Object rotation
local_rot_mat = obj.rotation_euler.to_matrix()
rot_mat = mathutils.Matrix.Rotation(x_angle - existing_x_angle, 4, 'X')
rot_mat = mathutils.Matrix.Rotation(x_angle - existing_x_angle, 4, "X")
new_rot_mat = local_rot_mat.to_4x4() @ rot_mat
new_rot_euler = new_rot_mat.to_euler()
obj.rotation_euler = new_rot_euler
+3 -1
View File
@@ -586,11 +586,13 @@ class BIMFacet(PropertyGroup):
class BIMFilterGroup(PropertyGroup):
filters: CollectionProperty(type=BIMFacet, name="filters")
class BIMSnapGroups(PropertyGroup):
object: BoolProperty(name="Object")
polyline: BoolProperty(name="Polyline")
measure: BoolProperty(name="Measure")
class BIMSnapProperties(PropertyGroup):
vertex: BoolProperty(name="Vertex")
edge: BoolProperty(name="Edge")
+2 -7
View File
@@ -2063,12 +2063,7 @@ class Model(bonsai.core.tool.Model):
# The existing angle result can change when the direction sense in Negative because the DirectionRatios may have negative y and z.
# For instance, a 30 degree angled slab, with negative direction will show as -150 degrees. To prevent that we do the following transformations
existing_x_angle = Vector((0, 1)).angle_signed(Vector((y, z)))
existing_x_angle = (
existing_x_angle + radians(180) if existing_x_angle < -radians(90) else existing_x_angle
)
existing_x_angle = (
existing_x_angle - radians(180) if existing_x_angle > radians(90) else existing_x_angle
)
existing_x_angle = existing_x_angle + radians(180) if existing_x_angle < -radians(90) else existing_x_angle
existing_x_angle = existing_x_angle - radians(180) if existing_x_angle > radians(90) else existing_x_angle
return existing_x_angle
+5 -3
View File
@@ -514,7 +514,7 @@ class Snap(bonsai.core.tool.Snap):
options.append(props.rna_type.properties[prop].name)
filtered_groups = [group for group in detected_snaps if group["group"] in options]
return filtered_groups
filtered_snaps = filter_snapping_groups_based_on_settings(detected_snaps)
snapping_points = []
edges = [] # Get edges to create edge-intersection snap
@@ -571,7 +571,7 @@ class Snap(bonsai.core.tool.Snap):
snapping_points.insert(0, (intersection[1], "Edge Intersection", None))
filtered_snapping_points = filter_snapping_points_based_on_settings(snapping_points)
# Make Axis first priority
if tool_state.lock_axis or tool_state.axis_method in {"X", "Y", "Z"}:
cls.update_snapping_ref(filtered_snapping_points[0][0], filtered_snapping_points[0][1])
@@ -586,7 +586,9 @@ class Snap(bonsai.core.tool.Snap):
cls.update_snapping_point(point[0], point[1])
return filtered_snapping_points
cls.update_snapping_point(filtered_snapping_points[0][0], filtered_snapping_points[0][1], filtered_snapping_points[0][2])
cls.update_snapping_point(
filtered_snapping_points[0][0], filtered_snapping_points[0][1], filtered_snapping_points[0][2]
)
return filtered_snapping_points
@classmethod
@@ -84,7 +84,10 @@ class Usecase:
size = self.convert_si_to_unit(1)
points = ((0.0, 0.0), (size, 0.0), (size, size), (0.0, size), (0.0, 0.0))
if self.settings["polyline"]:
points = [(self.convert_si_to_unit(p[0]), self.convert_si_to_unit(p[1] * (1 / cos(self.settings["x_angle"])))) for p in self.settings["polyline"]]
points = [
(self.convert_si_to_unit(p[0]), self.convert_si_to_unit(p[1] * (1 / cos(self.settings["x_angle"]))))
for p in self.settings["polyline"]
]
if self.file.schema == "IFC2X3":
curve = self.file.createIfcPolyline([self.file.createIfcCartesianPoint(p) for p in points])
else:
@@ -84,7 +84,9 @@ def add_layer(
settings = {"layer_set": layer_set, "material": material}
layers = list(settings["layer_set"].MaterialLayers or [])
layer = file.create_entity("IfcMaterialLayer", **{"Material": settings["material"], "LayerThickness": 0.1 / unit_scale})
layer = file.create_entity(
"IfcMaterialLayer", **{"Material": settings["material"], "LayerThickness": 0.1 / unit_scale}
)
layers.append(layer)
settings["layer_set"].MaterialLayers = layers
return layer