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
@@ -217,7 +217,6 @@ class DumbSlabPlaner:
self.change_thickness(element, total_thickness) self.change_thickness(element, total_thickness)
def regenerate_from_layer(self, usecase_path, ifc_file, settings): def regenerate_from_layer(self, usecase_path, ifc_file, settings):
self.unit_scale = ifcopenshell.util.unit.calculate_unit_scale(ifc_file) self.unit_scale = ifcopenshell.util.unit.calculate_unit_scale(ifc_file)
@@ -329,7 +328,6 @@ class DumbSlabPlaner:
rot_offset = offset_vector @ rot_matrix rot_offset = offset_vector @ rot_matrix
extrusion.Position.Location.Coordinates = tuple(rot_offset) extrusion.Position.Location.Coordinates = tuple(rot_offset)
else: else:
props = bpy.context.scene.BIMModelProperties props = bpy.context.scene.BIMModelProperties
x_angle = 0 if tool.Cad.is_x(props.x_angle, 0, tolerance=0.001) else props.x_angle 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): class EnableEditingSketchExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.enable_editing_sketch_extrusion_profile" bl_idname = "bim.enable_editing_sketch_extrusion_profile"
bl_label = "Enable Editing Sketch Extrusion Profile" bl_label = "Enable Editing Sketch Extrusion Profile"
+7 -4
View File
@@ -244,10 +244,14 @@ class ChangeExtrusionXAngle(bpy.types.Operator, tool.Ifc.Operator):
else: else:
if tool.Model.get_usage_type(element) == "LAYER3": if tool.Model.get_usage_type(element) == "LAYER3":
# Reset the transformation and returns to the original points with 0 degrees # 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 # 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 # The extrusion direction calculated previously default to the positive direction
# Here we set the extrusion direction to negative it that's the case # 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 rot_offset = offset_vector @ rot_matrix
extrusion.Position.Location.Coordinates = tuple(rot_offset) extrusion.Position.Location.Coordinates = tuple(rot_offset)
bonsai.core.geometry.switch_representation( bonsai.core.geometry.switch_representation(
tool.Ifc, tool.Ifc,
tool.Geometry, tool.Geometry,
@@ -284,7 +287,7 @@ class ChangeExtrusionXAngle(bpy.types.Operator, tool.Ifc.Operator):
# Object rotation # Object rotation
local_rot_mat = obj.rotation_euler.to_matrix() 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_mat = local_rot_mat.to_4x4() @ rot_mat
new_rot_euler = new_rot_mat.to_euler() new_rot_euler = new_rot_mat.to_euler()
obj.rotation_euler = new_rot_euler obj.rotation_euler = new_rot_euler
+2
View File
@@ -586,11 +586,13 @@ class BIMFacet(PropertyGroup):
class BIMFilterGroup(PropertyGroup): class BIMFilterGroup(PropertyGroup):
filters: CollectionProperty(type=BIMFacet, name="filters") filters: CollectionProperty(type=BIMFacet, name="filters")
class BIMSnapGroups(PropertyGroup): class BIMSnapGroups(PropertyGroup):
object: BoolProperty(name="Object") object: BoolProperty(name="Object")
polyline: BoolProperty(name="Polyline") polyline: BoolProperty(name="Polyline")
measure: BoolProperty(name="Measure") measure: BoolProperty(name="Measure")
class BIMSnapProperties(PropertyGroup): class BIMSnapProperties(PropertyGroup):
vertex: BoolProperty(name="Vertex") vertex: BoolProperty(name="Vertex")
edge: BoolProperty(name="Edge") 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. # 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 # 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 = Vector((0, 1)).angle_signed(Vector((y, z)))
existing_x_angle = ( existing_x_angle = existing_x_angle + radians(180) if existing_x_angle < -radians(90) else 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 return existing_x_angle
+3 -1
View File
@@ -586,7 +586,9 @@ class Snap(bonsai.core.tool.Snap):
cls.update_snapping_point(point[0], point[1]) cls.update_snapping_point(point[0], point[1])
return filtered_snapping_points 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 return filtered_snapping_points
@classmethod @classmethod
@@ -84,7 +84,10 @@ class Usecase:
size = self.convert_si_to_unit(1) size = self.convert_si_to_unit(1)
points = ((0.0, 0.0), (size, 0.0), (size, size), (0.0, size), (0.0, 0.0)) points = ((0.0, 0.0), (size, 0.0), (size, size), (0.0, size), (0.0, 0.0))
if self.settings["polyline"]: 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": if self.file.schema == "IFC2X3":
curve = self.file.createIfcPolyline([self.file.createIfcCartesianPoint(p) for p in points]) curve = self.file.createIfcPolyline([self.file.createIfcCartesianPoint(p) for p in points])
else: else:
@@ -84,7 +84,9 @@ def add_layer(
settings = {"layer_set": layer_set, "material": material} settings = {"layer_set": layer_set, "material": material}
layers = list(settings["layer_set"].MaterialLayers or []) 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) layers.append(layer)
settings["layer_set"].MaterialLayers = layers settings["layer_set"].MaterialLayers = layers
return layer return layer