mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-25 09:32:37 +00:00
Creating walls from cursor now auto-align perpendicular to the wall the cursor is at
This commit is contained in:
@@ -337,7 +337,8 @@ class DumbWallGenerator:
|
|||||||
|
|
||||||
def has_sketch(self):
|
def has_sketch(self):
|
||||||
return (
|
return (
|
||||||
len(bpy.context.scene.grease_pencil.layers) == 1
|
bpy.context.scene.grease_pencil
|
||||||
|
and len(bpy.context.scene.grease_pencil.layers) == 1
|
||||||
and bpy.context.scene.grease_pencil.layers[0].active_frame.strokes
|
and bpy.context.scene.grease_pencil.layers[0].active_frame.strokes
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -414,11 +415,20 @@ class DumbWallGenerator:
|
|||||||
continue
|
continue
|
||||||
if "IfcWall" not in sibling_obj.name:
|
if "IfcWall" not in sibling_obj.name:
|
||||||
continue
|
continue
|
||||||
raycast = sibling_obj.closest_point_on_mesh(bpy.context.scene.cursor.location, distance=0.05)
|
local_location = sibling_obj.matrix_world.inverted() @ self.location
|
||||||
if raycast[0]:
|
raycast = sibling_obj.closest_point_on_mesh(local_location, distance=0.01)
|
||||||
# Rotate the wall in the direction of the face normal
|
if not raycast[0]:
|
||||||
self.rotation = math.atan2(raycast[2][1], raycast[2][0])
|
continue
|
||||||
break
|
for face in sibling_obj.data.polygons:
|
||||||
|
if (
|
||||||
|
abs(face.normal.y) >= 0.75
|
||||||
|
and abs(mathutils.geometry.distance_point_to_plane(local_location, face.center, face.normal))
|
||||||
|
< 0.01
|
||||||
|
):
|
||||||
|
# Rotate the wall in the direction of the face normal
|
||||||
|
normal = (sibling_obj.matrix_world.to_quaternion() @ face.normal).normalized()
|
||||||
|
self.rotation = math.atan2(normal[1], normal[0])
|
||||||
|
break
|
||||||
return self.create_wall()
|
return self.create_wall()
|
||||||
|
|
||||||
def create_wall(self):
|
def create_wall(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user