Import_3ds: Improved distance cue chunk import
[blender-addons.git] / curve_tools / util.py
blob132e02b3f987221b6392c96891dc8f80f0ac6f67
1 # SPDX-FileCopyrightText: 2019-2022 Blender Foundation
3 # SPDX-License-Identifier: GPL-2.0-or-later
5 import bpy
6 from mathutils import *
9 def GetSelectedCurves():
10 rvList = []
12 for obj in bpy.context.selected_objects:
13 try:
14 if obj.type == "CURVE": rvList.append(obj)
15 except:
16 pass
18 return rvList
21 def GetSelectedMeshes():
22 rvList = []
24 for obj in bpy.context.selected_objects:
25 try:
26 if obj.type == "MESH": rvList.append(obj)
27 except:
28 pass
30 return rvList
33 def Selected1Curve():
34 try:
35 if len(GetSelectedCurves()) == 1:
36 return (bpy.context.active_object.type == "CURVE")
37 except:
38 pass
40 return False
43 def Selected1Mesh():
44 try:
45 if len(GetSelectedMeshes()) == 1:
46 return (bpy.context.active_object.type == "MESH")
47 except:
48 pass
50 return False
53 def Selected1SingleSplineCurve():
54 try:
55 if Selected1Curve():
56 return (len(bpy.context.active_object.data.splines) == 1)
57 except:
58 pass
60 return False
63 def Selected2Curves():
64 try:
65 if len(GetSelectedCurves()) == 2:
66 return (bpy.context.active_object.type == "CURVE")
67 except:
68 pass
70 return False
73 def Selected3Curves():
74 try:
75 if len(GetSelectedCurves()) == 3:
76 return (bpy.context.active_object.type == "CURVE")
77 except:
78 pass
80 return False
83 def Selected1OrMoreCurves():
84 try:
85 if len(GetSelectedCurves()) > 0:
86 return (bpy.context.active_object.type == "CURVE")
87 except:
88 pass
90 return False
92 def Selected2OrMoreCurves():
93 try:
94 if len(GetSelectedCurves()) > 1:
95 return (bpy.context.active_object.type == "CURVE")
96 except:
97 pass
99 return False
102 def Selected1OrMoreMesh():
103 try:
104 if len(GetSelectedMeshes()) > 0:
105 return (bpy.context.active_object.type == "MESH")
106 except:
107 pass
109 return False
112 def GetToolsRegion():
113 for area in bpy.context.screen.areas:
114 if area.type == 'VIEW_3D':
115 for region in area.regions:
116 if region.type == 'TOOLS': return region
118 return None
121 def GetFirstRegionView3D():
122 for area in bpy.context.screen.areas:
123 if area.type == 'VIEW_3D':
124 return area.spaces[0].region_3d
126 return None
129 def LogFirstRegionView3D():
130 print("LogFirstRegionView3D()")
131 regionView3D = GetFirstRegionView3D()
132 if regionView3D is None:
133 print("--", "ERROR:", "regionView3D is None")
134 return
136 print("--", "view_matrix:")
137 print("--", "--", regionView3D.view_matrix)
138 print("--", "view_location:")
139 print("--", "--", regionView3D.view_location)
142 class Intersection:
143 # listIP: list of BezierSplineIntersectionPoint
144 # return: list of splines
145 @staticmethod
146 def GetBezierSplines(listIP):
147 rvList = []
149 for ip in listIP:
150 if not (ip.spline in rvList): rvList.append(ip.spline)
152 return rvList
155 # listIP: list of BezierSplineIntersectionPoint
156 # return: list of segments
157 @staticmethod
158 def GetBezierSegments(listIP, spline):
159 rvList = []
161 for ip in listIP:
162 if not ip.spline is spline: continue
164 segIP = ip.bezierSegmentIntersectionPoint
165 if not (segIP.segment in rvList): rvList.append(segIP.segment)
167 return rvList
170 # listIP: list of BezierSplineIntersectionPoint
171 # return: list of floats (not necessarily ordered)
172 @staticmethod
173 def GetBezierSegmentParameters(listIP, segment):
174 rvList = []
176 for ip in listIP:
177 segIP = ip.bezierSegmentIntersectionPoint
178 if not segIP.segment is segment: continue
180 rvList.append(segIP.parameter)
182 return rvList