Use URL icon, add Tip: prefix, increase lower margin
[blender-addons-contrib.git] / curve_tools / Util.py
1 import bpy
2 from mathutils import *
3
4
5 def GetSelectedCurves():
6     rvList = []
7     
8     for obj in bpy.context.selected_objects:
9         if obj.type == "CURVE": rvList.append(obj)
10     
11     return rvList
12
13
14 def Selected1Curve():
15     if len(GetSelectedCurves()) == 1:
16         return (bpy.context.active_object.type == "CURVE")
17     
18     return False
19
20
21 def Selected1SingleSplineCurve():
22     if Selected1Curve():
23         return (len(bpy.context.active_object.data.splines) == 1)
24     
25     return False
26
27
28 def Selected2Curves():
29     if len(GetSelectedCurves()) == 2:
30         return (bpy.context.active_object.type == "CURVE")
31     
32     return False
33
34
35 def Selected3Curves():
36     if len(GetSelectedCurves()) == 3:
37         return (bpy.context.active_object.type == "CURVE")
38     
39     return False
40
41
42 def Selected1OrMoreCurves():
43     if len(GetSelectedCurves()) > 0:
44         return (bpy.context.active_object.type == "CURVE")
45     
46     return False
47     
48
49 def GetToolsRegion():
50     for area in bpy.context.screen.areas:
51         if area.type == 'VIEW_3D':
52             for region in area.regions:
53                 if region.type == 'TOOLS': return region
54             
55     return None
56     
57
58 def GetFirstRegionView3D():
59     for area in bpy.context.screen.areas:
60         if area.type == 'VIEW_3D':
61             return area.spaces[0].region_3d
62             
63     return None
64     
65     
66 def LogFirstRegionView3D():
67     print("LogFirstRegionView3D()")
68     regionView3D = GetFirstRegionView3D()
69     if regionView3D is None:
70         print("--", "ERROR:", "regionView3D is None")
71         return
72         
73     print("--", "view_matrix:")
74     print("--", "--", regionView3D.view_matrix)
75     print("--", "view_location:")
76     print("--", "--", regionView3D.view_location)
77     
78     
79 class Intersection:
80     # listIP: list of BezierSplineIntersectionPoint
81     # return: list of splines
82     @staticmethod
83     def GetBezierSplines(listIP):
84         rvList = []
85         
86         for ip in listIP:
87             if not (ip.spline in rvList): rvList.append(ip.spline)
88         
89         return rvList
90
91         
92     # listIP: list of BezierSplineIntersectionPoint
93     # return: list of segments
94     @staticmethod
95     def GetBezierSegments(listIP, spline):
96         rvList = []
97         
98         for ip in listIP:
99             if not ip.spline is spline: continue
100             
101             segIP = ip.bezierSegmentIntersectionPoint
102             if not (segIP.segment in rvList): rvList.append(segIP.segment)
103         
104         return rvList
105
106         
107     # listIP: list of BezierSplineIntersectionPoint
108     # return: list of floats (not necessarily ordered)
109     @staticmethod
110     def GetBezierSegmentParameters(listIP, segment):
111         rvList = []
112         
113         for ip in listIP:
114             segIP = ip.bezierSegmentIntersectionPoint
115             if not segIP.segment is segment: continue
116             
117             rvList.append(segIP.parameter)
118         
119         return rvList
120
121