1 # SPDX-License-Identifier: GPL-2.0-or-later
4 from mathutils
import *
7 def GetSelectedCurves():
10 for obj
in bpy
.context
.selected_objects
:
12 if obj
.type == "CURVE": rvList
.append(obj
)
19 def GetSelectedMeshes():
22 for obj
in bpy
.context
.selected_objects
:
24 if obj
.type == "MESH": rvList
.append(obj
)
33 if len(GetSelectedCurves()) == 1:
34 return (bpy
.context
.active_object
.type == "CURVE")
43 if len(GetSelectedMeshes()) == 1:
44 return (bpy
.context
.active_object
.type == "MESH")
51 def Selected1SingleSplineCurve():
54 return (len(bpy
.context
.active_object
.data
.splines
) == 1)
61 def Selected2Curves():
63 if len(GetSelectedCurves()) == 2:
64 return (bpy
.context
.active_object
.type == "CURVE")
71 def Selected3Curves():
73 if len(GetSelectedCurves()) == 3:
74 return (bpy
.context
.active_object
.type == "CURVE")
81 def Selected1OrMoreCurves():
83 if len(GetSelectedCurves()) > 0:
84 return (bpy
.context
.active_object
.type == "CURVE")
90 def Selected2OrMoreCurves():
92 if len(GetSelectedCurves()) > 1:
93 return (bpy
.context
.active_object
.type == "CURVE")
100 def Selected1OrMoreMesh():
102 if len(GetSelectedMeshes()) > 0:
103 return (bpy
.context
.active_object
.type == "MESH")
110 def GetToolsRegion():
111 for area
in bpy
.context
.screen
.areas
:
112 if area
.type == 'VIEW_3D':
113 for region
in area
.regions
:
114 if region
.type == 'TOOLS': return region
119 def GetFirstRegionView3D():
120 for area
in bpy
.context
.screen
.areas
:
121 if area
.type == 'VIEW_3D':
122 return area
.spaces
[0].region_3d
127 def LogFirstRegionView3D():
128 print("LogFirstRegionView3D()")
129 regionView3D
= GetFirstRegionView3D()
130 if regionView3D
is None:
131 print("--", "ERROR:", "regionView3D is None")
134 print("--", "view_matrix:")
135 print("--", "--", regionView3D
.view_matrix
)
136 print("--", "view_location:")
137 print("--", "--", regionView3D
.view_location
)
141 # listIP: list of BezierSplineIntersectionPoint
142 # return: list of splines
144 def GetBezierSplines(listIP
):
148 if not (ip
.spline
in rvList
): rvList
.append(ip
.spline
)
153 # listIP: list of BezierSplineIntersectionPoint
154 # return: list of segments
156 def GetBezierSegments(listIP
, spline
):
160 if not ip
.spline
is spline
: continue
162 segIP
= ip
.bezierSegmentIntersectionPoint
163 if not (segIP
.segment
in rvList
): rvList
.append(segIP
.segment
)
168 # listIP: list of BezierSplineIntersectionPoint
169 # return: list of floats (not necessarily ordered)
171 def GetBezierSegmentParameters(listIP
, segment
):
175 segIP
= ip
.bezierSegmentIntersectionPoint
176 if not segIP
.segment
is segment
: continue
178 rvList
.append(segIP
.parameter
)