mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-06 07:51:47 +00:00
Polytool improved axis lock and mixed snapping
You can now lock into an axis while snapping to an object. The result will be to closer point. In the future, there should be a way for the user to select between different points.
This commit is contained in:
@@ -2478,16 +2478,22 @@ class MeasureTool(bpy.types.Operator):
|
||||
tool.Snap.set_use_default_container(False)
|
||||
PolylineDecorator.set_use_default_container(False)
|
||||
tool.Snap.set_snap_plane_method("YZ")
|
||||
tool.Snap.set_snap_axis_method(None)
|
||||
tool.Blender.update_viewport()
|
||||
|
||||
if event.shift and event.value == "PRESS" and event.type == "Y":
|
||||
tool.Snap.set_use_default_container(False)
|
||||
PolylineDecorator.set_use_default_container(False)
|
||||
tool.Snap.set_snap_plane_method("XZ")
|
||||
tool.Snap.set_snap_axis_method(None)
|
||||
tool.Blender.update_viewport()
|
||||
|
||||
if event.shift and event.value == "PRESS" and event.type == "Z":
|
||||
tool.Snap.set_use_default_container(False)
|
||||
PolylineDecorator.set_use_default_container(False)
|
||||
tool.Snap.set_snap_plane_method("XY")
|
||||
tool.Snap.set_snap_axis_method(None)
|
||||
tool.Blender.update_viewport()
|
||||
|
||||
if event.type in {"MIDDLEMOUSE", "WHEELUPMOUSE", "WHEELDOWNMOUSE"}:
|
||||
return {"PASS_THROUGH"}
|
||||
@@ -2513,6 +2519,7 @@ class MeasureTool(bpy.types.Operator):
|
||||
tool.Snap.set_use_default_container(False)
|
||||
PolylineDecorator.set_use_default_container(False)
|
||||
tool.Snap.set_snap_plane_method(None)
|
||||
tool.Snap.set_snap_axis_method(None)
|
||||
PolylineDecorator.set_input_panel(self.input_panel, self.input_type)
|
||||
self.visible_objs = tool.Raycast.get_visible_objects(context)
|
||||
for obj in self.visible_objs:
|
||||
|
||||
@@ -192,7 +192,7 @@ class Snap(bonsai.core.tool.Snap):
|
||||
def create_axis_line_data(rot_mat, origin):
|
||||
length = 1000
|
||||
direction = Vector((1, 0, 0))
|
||||
if cls.snap_plane_method == "YZ" or cls.snap_axis_method == "Z":
|
||||
if cls.snap_plane_method == "YZ":
|
||||
direction = Vector((0, 0, 1))
|
||||
rot_dir = rot_mat.inverted() @ direction
|
||||
start = origin + rot_dir * length
|
||||
@@ -452,7 +452,7 @@ class Snap(bonsai.core.tool.Snap):
|
||||
else:
|
||||
rot_intersection, cls.snap_angle, axis_start, axis_end = cls.snap_on_axis(intersection, None)
|
||||
if rot_intersection:
|
||||
detected_snaps.append({"Axis": rot_intersection})
|
||||
detected_snaps.append({"Axis": (rot_intersection, axis_start, axis_end)})
|
||||
|
||||
detected_snaps.append({"Plane": intersection})
|
||||
|
||||
@@ -479,26 +479,41 @@ class Snap(bonsai.core.tool.Snap):
|
||||
for op in options:
|
||||
snapping_points.append(op)
|
||||
|
||||
elif "Edge-Vertex" in list(origin.keys()):
|
||||
if "Edge-Vertex" in list(origin.keys()):
|
||||
snap_obj, options = origin["Edge-Vertex"]
|
||||
for op in options:
|
||||
snapping_points.append(op)
|
||||
|
||||
elif "Polyline" in list(origin.keys()):
|
||||
if "Polyline" in list(origin.keys()):
|
||||
options = origin["Polyline"]
|
||||
for op in options:
|
||||
snapping_points.append(op)
|
||||
|
||||
elif "Axis" in list(origin.keys()):
|
||||
if "Axis" in list(origin.keys()):
|
||||
intersection = origin["Axis"]
|
||||
snapping_points.append((intersection, "Axis"))
|
||||
axis_start = intersection[1]
|
||||
axis_end = intersection[2]
|
||||
snapping_points.append((intersection[0], "Axis"))
|
||||
|
||||
elif "Plane" in list(origin.keys()):
|
||||
if "Plane" in list(origin.keys()):
|
||||
intersection = origin["Plane"]
|
||||
snapping_points.append((intersection, "Plane"))
|
||||
|
||||
cls.update_snapping_point(snapping_points[0][0], snapping_points[0][1])
|
||||
return snapping_points
|
||||
|
||||
# Make Axis first priority
|
||||
if event.shift or cls.snap_axis_method in {"X", "Y", "Z"}:
|
||||
cls.update_snapping_ref(snapping_points[0][0], snapping_points[0][1])
|
||||
for point in snapping_points:
|
||||
if point[1] == "Axis":
|
||||
if snapping_points[0][1] not in {"Axis", "Plane"}:
|
||||
mixed_snap = cls.mix_snap_and_axis(snapping_points[0], axis_start, axis_end, 0)
|
||||
cls.update_snapping_point(mixed_snap[0], mixed_snap[1])
|
||||
return snapping_points
|
||||
cls.update_snapping_point(point[0], point[1])
|
||||
return snapping_points
|
||||
|
||||
cls.update_snapping_point(snapping_points[0][0], snapping_points[0][1])
|
||||
return snapping_points
|
||||
|
||||
@classmethod
|
||||
def modify_snapping_point_selection(cls, snapping_points):
|
||||
|
||||
Reference in New Issue
Block a user