mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-20 23:36:20 +00:00
Refactor snapping point selection to add the object name.
This commit is contained in:
@@ -751,6 +751,7 @@ class SnapMousePoint(PropertyGroup):
|
|||||||
y: bpy.props.FloatProperty(name="Y")
|
y: bpy.props.FloatProperty(name="Y")
|
||||||
z: bpy.props.FloatProperty(name="Z")
|
z: bpy.props.FloatProperty(name="Z")
|
||||||
snap_type: bpy.props.StringProperty(name="Snap Type")
|
snap_type: bpy.props.StringProperty(name="Snap Type")
|
||||||
|
snap_object: bpy.props.StringProperty(name="Object Name")
|
||||||
|
|
||||||
|
|
||||||
class PolylinePoint(PropertyGroup):
|
class PolylinePoint(PropertyGroup):
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ class Snap(bonsai.core.tool.Snap):
|
|||||||
return snap_point
|
return snap_point
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def update_snapping_point(cls, snap_point, snap_type):
|
def update_snapping_point(cls, snap_point, snap_type, snap_obj=None):
|
||||||
try:
|
try:
|
||||||
snap_vertex = bpy.context.scene.BIMPolylineProperties.snap_mouse_point[0]
|
snap_vertex = bpy.context.scene.BIMPolylineProperties.snap_mouse_point[0]
|
||||||
except:
|
except:
|
||||||
@@ -112,6 +112,7 @@ class Snap(bonsai.core.tool.Snap):
|
|||||||
snap_vertex.y = snap_point[1]
|
snap_vertex.y = snap_point[1]
|
||||||
snap_vertex.z = snap_point[2]
|
snap_vertex.z = snap_point[2]
|
||||||
snap_vertex.snap_type = snap_type
|
snap_vertex.snap_type = snap_type
|
||||||
|
snap_vertex.snap_object = snap_obj.name
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def clear_snapping_point(cls):
|
def clear_snapping_point(cls):
|
||||||
@@ -446,7 +447,8 @@ class Snap(bonsai.core.tool.Snap):
|
|||||||
def select_snapping_points(cls, context, event, tool_state, detected_snaps):
|
def select_snapping_points(cls, context, event, tool_state, detected_snaps):
|
||||||
snapping_points = []
|
snapping_points = []
|
||||||
for origin in detected_snaps:
|
for origin in detected_snaps:
|
||||||
if "Object" in list(origin.keys()):
|
snap_obj = None
|
||||||
|
if "Object" in origin:
|
||||||
snap_obj, hit, face_index = origin["Object"]
|
snap_obj, hit, face_index = origin["Object"]
|
||||||
matrix = snap_obj.matrix_world.copy()
|
matrix = snap_obj.matrix_world.copy()
|
||||||
face = snap_obj.data.polygons[face_index]
|
face = snap_obj.data.polygons[face_index]
|
||||||
@@ -456,35 +458,35 @@ class Snap(bonsai.core.tool.Snap):
|
|||||||
|
|
||||||
options = tool.Raycast.ray_cast_by_proximity(context, event, snap_obj, face)
|
options = tool.Raycast.ray_cast_by_proximity(context, event, snap_obj, face)
|
||||||
if not options:
|
if not options:
|
||||||
snapping_points.append((hit, "Face"))
|
snapping_points.append((hit, "Face", snap_obj))
|
||||||
else:
|
else:
|
||||||
for op in options:
|
for op in options:
|
||||||
snapping_points.append(op)
|
snapping_points.append(op + (snap_obj,))
|
||||||
|
|
||||||
break
|
break
|
||||||
|
|
||||||
if "Edge-Vertex" in list(origin.keys()):
|
if "Edge-Vertex" in origin:
|
||||||
snap_obj, options = origin["Edge-Vertex"]
|
snap_obj, options = origin["Edge-Vertex"]
|
||||||
for op in options:
|
for op in options:
|
||||||
snapping_points.append(op)
|
snapping_points.append(op + (snap_obj,))
|
||||||
break
|
break
|
||||||
|
|
||||||
if "Polyline" in list(origin.keys()):
|
if "Polyline" in origin:
|
||||||
options = origin["Polyline"]
|
options = origin["Polyline"]
|
||||||
for op in options:
|
for op in options:
|
||||||
snapping_points.append(op)
|
snapping_points.append(op + (snap_obj,))
|
||||||
break
|
break
|
||||||
|
|
||||||
for origin in detected_snaps:
|
for origin in detected_snaps:
|
||||||
if "Axis" in list(origin.keys()):
|
if "Axis" in origin:
|
||||||
intersection = origin["Axis"]
|
intersection = origin["Axis"]
|
||||||
axis_start = intersection[1]
|
axis_start = intersection[1]
|
||||||
axis_end = intersection[2]
|
axis_end = intersection[2]
|
||||||
snapping_points.append((intersection[0], "Axis"))
|
snapping_points.append((intersection[0], "Axis", snap_obj))
|
||||||
|
|
||||||
if "Plane" in list(origin.keys()):
|
if "Plane" in origin:
|
||||||
intersection = origin["Plane"]
|
intersection = origin["Plane"]
|
||||||
snapping_points.append((intersection, "Plane"))
|
snapping_points.append((intersection, "Plane", snap_obj))
|
||||||
|
|
||||||
# Make Axis first priority
|
# Make Axis first priority
|
||||||
if tool_state.lock_axis or tool_state.axis_method in {"X", "Y", "Z"}:
|
if tool_state.lock_axis or tool_state.axis_method in {"X", "Y", "Z"}:
|
||||||
@@ -500,7 +502,7 @@ class Snap(bonsai.core.tool.Snap):
|
|||||||
cls.update_snapping_point(point[0], point[1])
|
cls.update_snapping_point(point[0], point[1])
|
||||||
return snapping_points
|
return snapping_points
|
||||||
|
|
||||||
cls.update_snapping_point(snapping_points[0][0], snapping_points[0][1])
|
cls.update_snapping_point(snapping_points[0][0], snapping_points[0][1], snapping_points[0][2])
|
||||||
return snapping_points
|
return snapping_points
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
Reference in New Issue
Block a user