1 # SPDX-License-Identifier: GPL-2.0-or-later
3 # DevBo Task https://developer.blender.org/T37299
6 "name": "Curly Curves",
10 "location": "View3D > Add > Curve > Curly Curve",
11 "description": "Adds a new Curly Curve",
13 "doc_url": "{BLENDER_MANUAL_URL}/addons/add_curve/extra_objects.html",
14 "category": "Add Curve",
18 from bpy
.types
import Operator
19 from bpy
.props
import (
25 from bpy_extras
.object_utils
import (
31 def add_type6(self
, context
):
33 scale_x
= self
.scale_x
34 scale_y
= self
.scale_y
36 [0.047131 * scale_x
, 0.065832 * scale_y
,
37 0.0, 0.010396 * scale_x
, -0.186771 * scale_y
,
38 0.0, 0.076107 * scale_x
, 0.19414 * scale_y
,
39 0.0, 0.0 * scale_x
, -1.0 * scale_y
, 0.0],
40 [0.451396 * scale_x
, -0.48376 * scale_y
,
41 0.0, 0.433623 * scale_x
, -0.587557 * scale_y
,
42 0.0, 0.525837 * scale_x
, -0.423363 * scale_y
,
43 0.0, 0.15115 * scale_x
, -0.704345 * scale_y
, 0.0]
46 [(-0.067558 * scale_x
, 0.078418 * scale_y
, 0.0),
47 (0.168759 * scale_x
, -0.154334 * scale_y
, 0.0),
48 (-0.236823 * scale_x
, 0.262436 * scale_y
, 0.0),
49 (0.233116 * scale_x
, -0.596115 * scale_y
, 0.0)],
50 [(0.498001 * scale_x
, -0.493434 * scale_y
, 0.0),
51 (0.375618 * scale_x
, -0.55465 * scale_y
, 0.0),
52 (0.634373 * scale_x
, -0.49873 * scale_y
, 0.0),
53 (0.225277 * scale_x
, -0.526814 * scale_y
, 0.0)]
56 [(0.161825 * scale_x
, 0.053245 * scale_y
, 0.0),
57 (-0.262003 * scale_x
, -0.242566 * scale_y
, 0.0),
58 (0.519691 * scale_x
, 0.097329 * scale_y
, 0.0),
59 (-0.233116 * scale_x
, -1.403885 * scale_y
, 0.0)],
60 [(0.404788 * scale_x
, -0.474085 * scale_y
, 0.0),
61 (0.533397 * scale_x
, -0.644158 * scale_y
, 0.0),
62 (0.371983 * scale_x
, -0.316529 * scale_y
, 0.0),
63 (0.077022 * scale_x
, -0.881876 * scale_y
, 0.0)]
65 make_curve(self
, context
, verts
, lhandles
, rhandles
)
68 def add_type5(self
, context
):
70 scale_x
= self
.scale_x
71 scale_y
= self
.scale_y
73 [0.047131 * scale_x
, 0.065832 * scale_y
, 0.0,
74 0.010396 * scale_x
, -0.186771 * scale_y
, 0.0,
75 0.076107 * scale_x
, 0.19414 * scale_y
, 0.0,
76 0.0 * scale_x
, -1.0 * scale_y
, 0.0],
77 [0.086336 * scale_x
, -0.377611 * scale_y
, 0.0,
78 0.022417 * scale_x
, -0.461301 * scale_y
, 0.0,
79 0.079885 * scale_x
, -0.281968 * scale_y
, 0.0,
80 0.129212 * scale_x
, -0.747702 * scale_y
, 0.0]
83 [(-0.067558 * scale_x
, 0.078419 * scale_y
, 0.0),
84 (0.168759 * scale_x
, -0.154335 * scale_y
, 0.0),
85 (-0.236823 * scale_x
, 0.262436 * scale_y
, 0.0),
86 (0.233116 * scale_x
, -0.596115 * scale_y
, 0.0)],
87 [(0.047518 * scale_x
, -0.350065 * scale_y
, 0.0),
88 (0.086012 * scale_x
, -0.481379 * scale_y
, 0.0),
89 (-0.049213 * scale_x
, -0.253793 * scale_y
, 0.0),
90 (0.208763 * scale_x
, -0.572534 * scale_y
, 0.0)]
93 [(0.161825 * scale_x
, 0.053245 * scale_y
, 0.0),
94 (-0.262003 * scale_x
, -0.242566 * scale_y
, 0.0),
95 (0.519691 * scale_x
, 0.097329 * scale_y
, 0.0),
96 (-0.233116 * scale_x
, -1.403885 * scale_y
, 0.0)],
97 [(0.125156 * scale_x
, -0.405159 * scale_y
, 0.0),
98 (-0.086972 * scale_x
, -0.426766 * scale_y
, 0.0),
99 (0.262886 * scale_x
, -0.321908 * scale_y
, 0.0),
100 (0.049661 * scale_x
, -0.92287 * scale_y
, 0.0)]
102 make_curve(self
, context
, verts
, lhandles
, rhandles
)
105 def add_type8(self
, context
):
107 scale_x
= self
.scale_x
108 scale_y
= self
.scale_y
110 [-0.850431 * scale_x
, -0.009091 * scale_y
,
111 0.0, -0.818807 * scale_x
, -0.130518 * scale_y
,
112 0.0, -0.944931 * scale_x
, 0.055065 * scale_y
,
113 0.0, -0.393355 * scale_x
, -0.035521 * scale_y
,
114 0.0, 0.0 * scale_x
, 0.348298 * scale_y
,
115 0.0, 0.393355 * scale_x
, -0.035521 * scale_y
,
116 0.0, 0.978373 * scale_x
, 0.185638 * scale_y
,
117 0.0, 0.771617 * scale_x
, 0.272819 * scale_y
,
118 0.0, 0.864179 * scale_x
, 0.188103 * scale_y
, 0.0]
121 [(-0.90478 * scale_x
, -0.025302 * scale_y
, 0.0),
122 (-0.753279 * scale_x
, -0.085571 * scale_y
, 0.0),
123 (-1.06406 * scale_x
, -0.047879 * scale_y
, 0.0),
124 (-0.622217 * scale_x
, -0.022501 * scale_y
, 0.0),
125 (0.181 * scale_x
, 0.34879 * scale_y
, 0.0),
126 (-0.101464 * scale_x
, -0.063669 * scale_y
, 0.0),
127 (0.933064 * scale_x
, 0.03001 * scale_y
, 0.0),
128 (0.82418 * scale_x
, 0.39899 * scale_y
, 0.0),
129 (0.827377 * scale_x
, 0.144945 * scale_y
, 0.0)]
132 [(-0.796079 * scale_x
, 0.007121 * scale_y
, 0.0),
133 (-0.931521 * scale_x
, -0.207832 * scale_y
, 0.0),
134 (-0.822288 * scale_x
, 0.161045 * scale_y
, 0.0),
135 (0.101464 * scale_x
, -0.063671 * scale_y
, 0.0),
136 (-0.181193 * scale_x
, 0.347805 * scale_y
, 0.0),
137 (0.622217 * scale_x
, -0.022502 * scale_y
, 0.0),
138 (1.022383 * scale_x
, 0.336808 * scale_y
, 0.0),
139 (0.741059 * scale_x
, 0.199468 * scale_y
, 0.0),
140 (0.900979 * scale_x
, 0.231258 * scale_y
, 0.0)]
142 make_curve(self
, context
, verts
, lhandles
, rhandles
)
145 def add_type3(self
, context
):
147 scale_x
= self
.scale_x
148 scale_y
= self
.scale_y
150 [-0.78652 * scale_x
, -0.070157 * scale_y
,
151 0.0, -0.697972 * scale_x
, -0.247246 * scale_y
,
152 0.0, -0.953385 * scale_x
, -0.002048 * scale_y
,
153 0.0, 0.0 * scale_x
, 0.0 * scale_y
,
154 0.0, 0.917448 * scale_x
, 0.065788 * scale_y
,
155 0.0, 0.448535 * scale_x
, 0.515947 * scale_y
,
156 0.0, 0.6111 * scale_x
, 0.190831 * scale_y
, 0.0]
159 [(-0.86511 * scale_x
, -0.112965 * scale_y
, 0.0),
160 (-0.61153 * scale_x
, -0.156423 * scale_y
, 0.0),
161 (-1.103589 * scale_x
, -0.199934 * scale_y
, 0.0),
162 (-0.446315 * scale_x
, 0.135163 * scale_y
, 0.0),
163 (0.669383 * scale_x
, -0.254463 * scale_y
, 0.0),
164 (0.721512 * scale_x
, 0.802759 * scale_y
, 0.0),
165 (0.466815 * scale_x
, 0.112232 * scale_y
, 0.0)]
168 [(-0.707927 * scale_x
, -0.027348 * scale_y
, 0.0),
169 (-0.846662 * scale_x
, -0.40347 * scale_y
, 0.0),
170 (-0.79875 * scale_x
, 0.201677 * scale_y
, 0.0),
171 (0.446315 * scale_x
, -0.135163 * scale_y
, 0.0),
172 (1.196752 * scale_x
, 0.42637 * scale_y
, 0.0),
173 (0.289834 * scale_x
, 0.349204 * scale_y
, 0.0),
174 (0.755381 * scale_x
, 0.269428 * scale_y
, 0.0)]
176 make_curve(self
, context
, verts
, lhandles
, rhandles
)
179 def add_type2(self
, context
):
181 scale_x
= self
.scale_x
182 scale_y
= self
.scale_y
184 [-0.719632 * scale_x
, -0.08781 * scale_y
, 0.0,
185 -0.605138 * scale_x
, -0.31612 * scale_y
, 0.0,
186 -0.935392 * scale_x
, 0.0, 0.0,
188 0.935392 * scale_x
, 0.0, 0.0,
189 0.605138 * scale_x
, -0.316119 * scale_y
, 0.0,
190 0.719632 * scale_x
, -0.08781 * scale_y
, 0.0]
193 [(-0.82125 * scale_x
, -0.142999 * scale_y
, 0.0),
194 (-0.493366 * scale_x
, -0.199027 * scale_y
, 0.0),
195 (-1.129601 * scale_x
, -0.25513 * scale_y
, 0.0),
196 (-0.467584 * scale_x
, 0.00044 * scale_y
, 0.0),
197 (0.735439 * scale_x
, 0.262646 * scale_y
, 0.0),
198 (0.797395 * scale_x
, -0.517531 * scale_y
, 0.0),
199 (0.618012 * scale_x
, -0.032614 * scale_y
, 0.0)]
202 [(-0.618009 * scale_x
, -0.032618 * scale_y
, 0.0),
203 (-0.797396 * scale_x
, -0.517532 * scale_y
, 0.0),
204 (-0.735445 * scale_x
, 0.262669 * scale_y
, 0.0),
205 (0.468041 * scale_x
, -0.00044 * scale_y
, 0.0),
206 (1.129616 * scale_x
, -0.255119 * scale_y
, 0.0),
207 (0.493365 * scale_x
, -0.199025 * scale_y
, 0.0),
208 (0.821249 * scale_x
, -0.143004 * scale_y
, 0.0)]
210 make_curve(self
, context
, verts
, lhandles
, rhandles
)
213 def add_type10(self
, context
):
215 scale_x
= self
.scale_x
216 scale_y
= self
.scale_y
218 [-0.999637 * scale_x
, 0.000348 * scale_y
,
219 0.0, 0.259532 * scale_x
, -0.017841 * scale_y
,
220 0.0, 0.482303 * scale_x
, 0.780429 * scale_y
,
221 0.0, 0.573183 * scale_x
, 0.506898 * scale_y
, 0.0],
222 [0.259532 * scale_x
, -0.017841 * scale_y
,
223 0.0, 0.554919 * scale_x
, -0.140918 * scale_y
,
224 0.0, 0.752264 * scale_x
, -0.819275 * scale_y
,
225 0.0, 0.824152 * scale_x
, -0.514881 * scale_y
, 0.0]
228 [(-1.258333 * scale_x
, -0.258348 * scale_y
, 0.0),
229 (-0.240006 * scale_x
, -0.15259 * scale_y
, 0.0),
230 (0.79037 * scale_x
, 0.857575 * scale_y
, 0.0),
231 (0.376782 * scale_x
, 0.430157 * scale_y
, 0.0)],
232 [(0.224917 * scale_x
, -0.010936 * scale_y
, 0.0),
233 (0.514858 * scale_x
, -0.122809 * scale_y
, 0.0),
234 (1.057957 * scale_x
, -0.886925 * scale_y
, 0.0),
235 (0.61945 * scale_x
, -0.464285 * scale_y
, 0.0)]
238 [(-0.74094 * scale_x
, 0.259045 * scale_y
, 0.0),
239 (0.768844 * scale_x
, 0.119545 * scale_y
, 0.0),
240 (0.279083 * scale_x
, 0.729538 * scale_y
, 0.0),
241 (0.643716 * scale_x
, 0.534458 * scale_y
, 0.0)],
242 [(0.294147 * scale_x
, -0.024746 * scale_y
, 0.0),
243 (1.03646 * scale_x
, -0.358598 * scale_y
, 0.0),
244 (0.547718 * scale_x
, -0.774008 * scale_y
, 0.0),
245 (0.897665 * scale_x
, -0.533051 * scale_y
, 0.0)]
247 make_curve(self
, context
, verts
, lhandles
, rhandles
)
250 def add_type9(self
, context
):
252 scale_x
= self
.scale_x
253 scale_y
= self
.scale_y
255 [0.260968 * scale_x
, -0.668118 * scale_y
,
256 0.0, 0.108848 * scale_x
, -0.381587 * scale_y
,
257 0.0, 0.537002 * scale_x
, -0.77303 * scale_y
,
258 0.0, -0.600421 * scale_x
, -0.583106 * scale_y
,
259 0.0, -0.600412 * scale_x
, 0.583103 * scale_y
,
260 0.0, 0.537002 * scale_x
, 0.773025 * scale_y
,
261 0.0, 0.108854 * scale_x
, 0.381603 * scale_y
,
262 0.0, 0.260966 * scale_x
, 0.668129 * scale_y
, 0.0]
265 [(0.387973 * scale_x
, -0.594856 * scale_y
, 0.0),
266 (-0.027835 * scale_x
, -0.532386 * scale_y
, 0.0),
267 (0.775133 * scale_x
, -0.442883 * scale_y
, 0.0),
268 (-0.291333 * scale_x
, -1.064385 * scale_y
, 0.0),
269 (-0.833382 * scale_x
, 0.220321 * scale_y
, 0.0),
270 (0.291856 * scale_x
, 1.112891 * scale_y
, 0.0),
271 (0.346161 * scale_x
, 0.119777 * scale_y
, 0.0),
272 (0.133943 * scale_x
, 0.741389 * scale_y
, 0.0)]
275 [(0.133951 * scale_x
, -0.741386 * scale_y
, 0.0),
276 (0.346154 * scale_x
, -0.119772 * scale_y
, 0.0),
277 (0.291863 * scale_x
, -1.112896 * scale_y
, 0.0),
278 (-0.833407 * scale_x
, -0.220324 * scale_y
, 0.0),
279 (-0.29134 * scale_x
, 1.064389 * scale_y
, 0.0),
280 (0.775125 * scale_x
, 0.442895 * scale_y
, 0.0),
281 (-0.029107 * scale_x
, 0.533819 * scale_y
, 0.0),
282 (0.387981 * scale_x
, 0.594873 * scale_y
, 0.0)]
284 make_curve(self
, context
, verts
, lhandles
, rhandles
)
287 def add_type7(self
, context
):
289 scale_x
= self
.scale_x
290 scale_y
= self
.scale_y
292 [-0.850431 * scale_x
, -0.009091 * scale_y
,
293 0.0, -0.818807 * scale_x
, -0.130518 * scale_y
,
294 0.0, -0.944931 * scale_x
, 0.055065 * scale_y
, 0.0,
295 -0.393355 * scale_x
, -0.035521 * scale_y
,
296 0.0, 0.0 * scale_x
, 0.348298 * scale_y
,
297 0.0, 0.393355 * scale_x
, -0.035521 * scale_y
,
298 0.0, 0.944931 * scale_x
, 0.055065 * scale_y
,
299 0.0, 0.818807 * scale_x
, -0.130518 * scale_y
,
300 0.0, 0.850431 * scale_x
, -0.009091 * scale_y
, 0.0]
303 [(-0.90478 * scale_x
, -0.025302 * scale_y
, 0.0),
304 (-0.753279 * scale_x
, -0.085571 * scale_y
, 0.0),
305 (-1.06406 * scale_x
, -0.047879 * scale_y
, 0.0),
306 (-0.622217 * scale_x
, -0.022502 * scale_y
, 0.0),
307 (0.181 * scale_x
, 0.348791 * scale_y
, 0.0),
308 (-0.101464 * scale_x
, -0.063671 * scale_y
, 0.0),
309 (0.822288 * scale_x
, 0.161045 * scale_y
, 0.0),
310 (0.931521 * scale_x
, -0.207832 * scale_y
, 0.0),
311 (0.796079 * scale_x
, 0.007121 * scale_y
, 0.0)]
314 [(-0.796079 * scale_x
, 0.007121 * scale_y
, 0.0),
315 (-0.931521 * scale_x
, -0.207832 * scale_y
, 0.0),
316 (-0.822288 * scale_x
, 0.161045 * scale_y
, 0.0),
317 (0.101464 * scale_x
, -0.063671 * scale_y
, 0.0),
318 (-0.181193 * scale_x
, 0.347805 * scale_y
, 0.0),
319 (0.622217 * scale_x
, -0.022502 * scale_y
, 0.0),
320 (1.06406 * scale_x
, -0.047879 * scale_y
, 0.0),
321 (0.753279 * scale_x
, -0.085571 * scale_y
, 0.0),
322 (0.90478 * scale_x
, -0.025302 * scale_y
, 0.0)]
324 make_curve(self
, context
, verts
, lhandles
, rhandles
)
327 def add_type4(self
, context
):
329 scale_x
= self
.scale_x
330 scale_y
= self
.scale_y
332 [0.072838 * scale_x
, -0.071461 * scale_y
,
333 0.0, -0.175451 * scale_x
, -0.130711 * scale_y
,
334 0.0, 0.207269 * scale_x
, 0.118064 * scale_y
,
335 0.0, 0 * scale_x
, -1.0 * scale_y
, 0.0]
338 [(0.042135 * scale_x
, 0.039756 * scale_y
, 0),
339 (-0.086769 * scale_x
, -0.265864 * scale_y
, 0),
340 (0.002865 * scale_x
, 0.364657 * scale_y
, 0),
341 (0.233116 * scale_x
, -0.596115 * scale_y
, 0)]
344 [(0.103542 * scale_x
, -0.182683 * scale_y
, 0),
345 (-0.327993 * scale_x
, 0.101765 * scale_y
, 0),
346 (0.417702 * scale_x
, -0.135803 * scale_y
, 0),
347 (-0.233116 * scale_x
, -1.403885 * scale_y
, 0)]
349 make_curve(self
, context
, verts
, lhandles
, rhandles
)
352 def add_type1(self
, context
):
354 scale_x
= self
.scale_x
355 scale_y
= self
.scale_y
357 [-0.71753 * scale_x
, -0.08781 * scale_y
,
358 0, -0.60337 * scale_x
, -0.31612 * scale_y
, 0,
359 -0.93266 * scale_x
, 0, 0, 0, 0, 0, 0.93266 * scale_x
,
360 0, 0, 0.60337 * scale_x
, 0.31612 * scale_y
,
361 0, 0.71753 * scale_x
, 0.08781 * scale_y
, 0]
364 [(-0.81885 * scale_x
, -0.143002 * scale_y
, 0),
365 (-0.491926 * scale_x
, -0.199026 * scale_y
, 0),
366 (-1.126316 * scale_x
, -0.255119 * scale_y
, 0),
367 (-0.446315 * scale_x
, 0.135164 * scale_y
, 0),
368 (0.733297 * scale_x
, -0.26265 * scale_y
, 0),
369 (0.795065 * scale_x
, 0.517532 * scale_y
, 0),
370 (0.616204 * scale_x
, 0.03262 * scale_y
, 0)]
373 [(-0.616204 * scale_x
, -0.032618 * scale_y
, 0),
374 (-0.795067 * scale_x
, -0.517532 * scale_y
, 0),
375 (-0.733297 * scale_x
, 0.262651 * scale_y
, 0),
376 (0.446315 * scale_x
, -0.135163 * scale_y
, 0),
377 (1.126316 * scale_x
, 0.255119 * scale_y
, 0),
378 (0.491924 * scale_x
, 0.199026 * scale_y
, 0),
379 (0.81885 * scale_x
, 0.143004 * scale_y
, 0)]
381 make_curve(self
, context
, verts
, lhandles
, rhandles
)
384 def make_curve(self
, context
, verts
, lh
, rh
):
389 if bpy
.context
.mode
== 'EDIT_CURVE':
390 Curve
= context
.active_object
392 for spline
in Curve
.data
.splines
:
393 if spline
.type == 'BEZIER':
394 for point
in spline
.bezier_points
:
395 point
.select_control_point
= False
396 point
.select_left_handle
= False
397 point
.select_right_handle
= False
399 for point
in spline
.points
:
402 for p
in range(len(verts
)):
404 newSpline
= Curve
.data
.splines
.new(type='BEZIER') # newSpline
405 newSpline
.bezier_points
.add(int(len(verts
[p
]) / 3 - 1))
406 newSpline
.bezier_points
.foreach_set('co', verts
[p
])
408 for bp
in newSpline
.bezier_points
:
409 bp
.handle_left_type
= 'ALIGNED'
410 bp
.handle_right_type
= 'ALIGNED'
411 bp
.handle_left
.xyz
= lh
[p
][c
]
412 bp
.handle_right
.xyz
= rh
[p
][c
]
413 bp
.select_control_point
= True
414 bp
.select_left_handle
= True
415 bp
.select_right_handle
= True
417 # something weird with this one
418 if types
== 1 or types
== 2 or types
== 3:
419 newSpline
.bezier_points
[3].handle_left
.xyz
= lh
[p
][3]
423 dataCurve
= bpy
.data
.curves
.new(name
='CurlyCurve', type='CURVE') # curvedatablock
424 for p
in range(len(verts
)):
426 newSpline
= dataCurve
.splines
.new(type='BEZIER') # newSpline
427 newSpline
.bezier_points
.add(int(len(verts
[p
]) / 3 - 1))
428 newSpline
.bezier_points
.foreach_set('co', verts
[p
])
430 for bp
in newSpline
.bezier_points
:
431 bp
.handle_left_type
= 'ALIGNED'
432 bp
.handle_right_type
= 'ALIGNED'
433 bp
.handle_left
.xyz
= lh
[p
][c
]
434 bp
.handle_right
.xyz
= rh
[p
][c
]
435 bp
.select_control_point
= True
436 bp
.select_left_handle
= True
437 bp
.select_right_handle
= True
439 # something weird with this one
440 if types
== 1 or types
== 2 or types
== 3:
441 newSpline
.bezier_points
[3].handle_left
.xyz
= lh
[p
][3]
443 # create object with newCurve
444 Curve
= object_data_add(context
, dataCurve
, operator
=self
) # place in active scene
445 Curve
.select_set(True)
448 Curve
.data
.dimensions
= self
.shape
449 Curve
.data
.use_path
= True
450 if self
.shape
== '3D':
451 Curve
.data
.fill_mode
= 'FULL'
453 Curve
.data
.fill_mode
= 'BOTH'
455 # move and rotate spline in edit mode
456 if bpy
.context
.mode
== 'EDIT_CURVE':
457 if self
.align
== "WORLD":
458 location
= self
.location
- context
.active_object
.location
459 bpy
.ops
.transform
.translate(value
= location
, orient_type
='GLOBAL')
460 bpy
.ops
.transform
.rotate(value
= self
.rotation
[0], orient_axis
= 'X', orient_type
='GLOBAL')
461 bpy
.ops
.transform
.rotate(value
= self
.rotation
[1], orient_axis
= 'Y', orient_type
='GLOBAL')
462 bpy
.ops
.transform
.rotate(value
= self
.rotation
[2], orient_axis
= 'Z', orient_type
='GLOBAL')
464 elif self
.align
== "VIEW":
465 bpy
.ops
.transform
.translate(value
= self
.location
)
466 bpy
.ops
.transform
.rotate(value
= self
.rotation
[0], orient_axis
= 'X')
467 bpy
.ops
.transform
.rotate(value
= self
.rotation
[1], orient_axis
= 'Y')
468 bpy
.ops
.transform
.rotate(value
= self
.rotation
[2], orient_axis
= 'Z')
470 elif self
.align
== "CURSOR":
471 location
= context
.active_object
.location
472 self
.location
= bpy
.context
.scene
.cursor
.location
- location
473 self
.rotation
= bpy
.context
.scene
.cursor
.rotation_euler
475 bpy
.ops
.transform
.translate(value
= self
.location
)
476 bpy
.ops
.transform
.rotate(value
= self
.rotation
[0], orient_axis
= 'X')
477 bpy
.ops
.transform
.rotate(value
= self
.rotation
[1], orient_axis
= 'Y')
478 bpy
.ops
.transform
.rotate(value
= self
.rotation
[2], orient_axis
= 'Z')
480 class add_curlycurve(Operator
, AddObjectHelper
):
481 bl_idname
= "curve.curlycurve"
482 bl_label
= "Add Curly Curve"
483 bl_description
= "Create a Curly Curve"
484 bl_options
= {'REGISTER', 'UNDO', 'PRESET'}
488 description
="Type of curly curve",
492 scale_x
: FloatProperty(
494 description
="Scale on X axis",
497 scale_y
: FloatProperty(
499 description
="Scale on Y axis",
503 shape
: EnumProperty(
505 description
="2D or 3D Curve",
512 edit_mode
: BoolProperty(
513 name
="Show in edit mode",
515 description
="Show in edit mode"
518 def draw(self
, context
):
521 col
= layout
.column(align
=True)
522 col
.label(text
= "Curve:")
523 col
.prop(self
, "types")
525 col
= layout
.column(align
=True)
526 col
.label(text
= "Resize:")
527 col
.prop(self
, "scale_x")
528 col
.prop(self
, "scale_y")
531 row
.prop(self
, "shape", expand
=True)
533 col
= layout
.column(align
=True)
534 col
.row().prop(self
, "edit_mode", expand
=True)
536 col
= layout
.column(align
=True)
537 # AddObjectHelper props
538 col
.prop(self
, "align")
539 col
.prop(self
, "location")
540 col
.prop(self
, "rotation")
542 def execute(self
, context
):
543 # turn off 'Enter Edit Mode'
544 use_enter_edit_mode
= bpy
.context
.preferences
.edit
.use_enter_edit_mode
545 bpy
.context
.preferences
.edit
.use_enter_edit_mode
= False
548 add_type1(self
, context
)
550 add_type2(self
, context
)
552 add_type3(self
, context
)
554 add_type4(self
, context
)
556 add_type5(self
, context
)
558 add_type6(self
, context
)
560 add_type7(self
, context
)
562 add_type8(self
, context
)
564 add_type9(self
, context
)
566 add_type10(self
, context
)
568 if use_enter_edit_mode
:
569 bpy
.ops
.object.mode_set(mode
= 'EDIT')
571 # restore pre operator state
572 bpy
.context
.preferences
.edit
.use_enter_edit_mode
= use_enter_edit_mode
575 bpy
.ops
.object.mode_set(mode
= 'EDIT')
577 bpy
.ops
.object.mode_set(mode
= 'OBJECT')
584 def add_curlycurve_button(self
, context
):
585 self
.layout
.operator(
586 add_curlycurve
.bl_idname
,
587 text
="Add Curly Curve",
593 bpy
.utils
.register_class(add_curlycurve
)
594 #bpy.types.INFO_MT_curve_add.append(add_curlycurve_button)
598 bpy
.utils
.unregister_class(add_curlycurve
)
599 #bpy.types.INFO_MT_curve_add.remove(add_curlycurve_button)
602 if __name__
== "__main__":