1 # SPDX-FileCopyrightText: 2017-2022 Blender Foundation
3 # SPDX-License-Identifier: GPL-2.0-or-later
5 # DevBo Task https://developer.blender.org/T37299
8 "name": "Curly Curves",
11 "blender": (2, 80, 0),
12 "location": "View3D > Add > Curve > Curly Curve",
13 "description": "Adds a new Curly Curve",
15 "doc_url": "{BLENDER_MANUAL_URL}/addons/add_curve/extra_objects.html",
16 "category": "Add Curve",
20 from bpy
.types
import Operator
21 from bpy
.props
import (
27 from bpy_extras
.object_utils
import (
33 def add_type6(self
, context
):
35 scale_x
= self
.scale_x
36 scale_y
= self
.scale_y
38 [0.047131 * scale_x
, 0.065832 * scale_y
,
39 0.0, 0.010396 * scale_x
, -0.186771 * scale_y
,
40 0.0, 0.076107 * scale_x
, 0.19414 * scale_y
,
41 0.0, 0.0 * scale_x
, -1.0 * scale_y
, 0.0],
42 [0.451396 * scale_x
, -0.48376 * scale_y
,
43 0.0, 0.433623 * scale_x
, -0.587557 * scale_y
,
44 0.0, 0.525837 * scale_x
, -0.423363 * scale_y
,
45 0.0, 0.15115 * scale_x
, -0.704345 * scale_y
, 0.0]
48 [(-0.067558 * scale_x
, 0.078418 * scale_y
, 0.0),
49 (0.168759 * scale_x
, -0.154334 * scale_y
, 0.0),
50 (-0.236823 * scale_x
, 0.262436 * scale_y
, 0.0),
51 (0.233116 * scale_x
, -0.596115 * scale_y
, 0.0)],
52 [(0.498001 * scale_x
, -0.493434 * scale_y
, 0.0),
53 (0.375618 * scale_x
, -0.55465 * scale_y
, 0.0),
54 (0.634373 * scale_x
, -0.49873 * scale_y
, 0.0),
55 (0.225277 * scale_x
, -0.526814 * scale_y
, 0.0)]
58 [(0.161825 * scale_x
, 0.053245 * scale_y
, 0.0),
59 (-0.262003 * scale_x
, -0.242566 * scale_y
, 0.0),
60 (0.519691 * scale_x
, 0.097329 * scale_y
, 0.0),
61 (-0.233116 * scale_x
, -1.403885 * scale_y
, 0.0)],
62 [(0.404788 * scale_x
, -0.474085 * scale_y
, 0.0),
63 (0.533397 * scale_x
, -0.644158 * scale_y
, 0.0),
64 (0.371983 * scale_x
, -0.316529 * scale_y
, 0.0),
65 (0.077022 * scale_x
, -0.881876 * scale_y
, 0.0)]
67 make_curve(self
, context
, verts
, lhandles
, rhandles
)
70 def add_type5(self
, context
):
72 scale_x
= self
.scale_x
73 scale_y
= self
.scale_y
75 [0.047131 * scale_x
, 0.065832 * scale_y
, 0.0,
76 0.010396 * scale_x
, -0.186771 * scale_y
, 0.0,
77 0.076107 * scale_x
, 0.19414 * scale_y
, 0.0,
78 0.0 * scale_x
, -1.0 * scale_y
, 0.0],
79 [0.086336 * scale_x
, -0.377611 * scale_y
, 0.0,
80 0.022417 * scale_x
, -0.461301 * scale_y
, 0.0,
81 0.079885 * scale_x
, -0.281968 * scale_y
, 0.0,
82 0.129212 * scale_x
, -0.747702 * scale_y
, 0.0]
85 [(-0.067558 * scale_x
, 0.078419 * scale_y
, 0.0),
86 (0.168759 * scale_x
, -0.154335 * scale_y
, 0.0),
87 (-0.236823 * scale_x
, 0.262436 * scale_y
, 0.0),
88 (0.233116 * scale_x
, -0.596115 * scale_y
, 0.0)],
89 [(0.047518 * scale_x
, -0.350065 * scale_y
, 0.0),
90 (0.086012 * scale_x
, -0.481379 * scale_y
, 0.0),
91 (-0.049213 * scale_x
, -0.253793 * scale_y
, 0.0),
92 (0.208763 * scale_x
, -0.572534 * scale_y
, 0.0)]
95 [(0.161825 * scale_x
, 0.053245 * scale_y
, 0.0),
96 (-0.262003 * scale_x
, -0.242566 * scale_y
, 0.0),
97 (0.519691 * scale_x
, 0.097329 * scale_y
, 0.0),
98 (-0.233116 * scale_x
, -1.403885 * scale_y
, 0.0)],
99 [(0.125156 * scale_x
, -0.405159 * scale_y
, 0.0),
100 (-0.086972 * scale_x
, -0.426766 * scale_y
, 0.0),
101 (0.262886 * scale_x
, -0.321908 * scale_y
, 0.0),
102 (0.049661 * scale_x
, -0.92287 * scale_y
, 0.0)]
104 make_curve(self
, context
, verts
, lhandles
, rhandles
)
107 def add_type8(self
, context
):
109 scale_x
= self
.scale_x
110 scale_y
= self
.scale_y
112 [-0.850431 * scale_x
, -0.009091 * scale_y
,
113 0.0, -0.818807 * scale_x
, -0.130518 * scale_y
,
114 0.0, -0.944931 * scale_x
, 0.055065 * scale_y
,
115 0.0, -0.393355 * scale_x
, -0.035521 * scale_y
,
116 0.0, 0.0 * scale_x
, 0.348298 * scale_y
,
117 0.0, 0.393355 * scale_x
, -0.035521 * scale_y
,
118 0.0, 0.978373 * scale_x
, 0.185638 * scale_y
,
119 0.0, 0.771617 * scale_x
, 0.272819 * scale_y
,
120 0.0, 0.864179 * scale_x
, 0.188103 * scale_y
, 0.0]
123 [(-0.90478 * scale_x
, -0.025302 * scale_y
, 0.0),
124 (-0.753279 * scale_x
, -0.085571 * scale_y
, 0.0),
125 (-1.06406 * scale_x
, -0.047879 * scale_y
, 0.0),
126 (-0.622217 * scale_x
, -0.022501 * scale_y
, 0.0),
127 (0.181 * scale_x
, 0.34879 * scale_y
, 0.0),
128 (-0.101464 * scale_x
, -0.063669 * scale_y
, 0.0),
129 (0.933064 * scale_x
, 0.03001 * scale_y
, 0.0),
130 (0.82418 * scale_x
, 0.39899 * scale_y
, 0.0),
131 (0.827377 * scale_x
, 0.144945 * scale_y
, 0.0)]
134 [(-0.796079 * scale_x
, 0.007121 * scale_y
, 0.0),
135 (-0.931521 * scale_x
, -0.207832 * scale_y
, 0.0),
136 (-0.822288 * scale_x
, 0.161045 * scale_y
, 0.0),
137 (0.101464 * scale_x
, -0.063671 * scale_y
, 0.0),
138 (-0.181193 * scale_x
, 0.347805 * scale_y
, 0.0),
139 (0.622217 * scale_x
, -0.022502 * scale_y
, 0.0),
140 (1.022383 * scale_x
, 0.336808 * scale_y
, 0.0),
141 (0.741059 * scale_x
, 0.199468 * scale_y
, 0.0),
142 (0.900979 * scale_x
, 0.231258 * scale_y
, 0.0)]
144 make_curve(self
, context
, verts
, lhandles
, rhandles
)
147 def add_type3(self
, context
):
149 scale_x
= self
.scale_x
150 scale_y
= self
.scale_y
152 [-0.78652 * scale_x
, -0.070157 * scale_y
,
153 0.0, -0.697972 * scale_x
, -0.247246 * scale_y
,
154 0.0, -0.953385 * scale_x
, -0.002048 * scale_y
,
155 0.0, 0.0 * scale_x
, 0.0 * scale_y
,
156 0.0, 0.917448 * scale_x
, 0.065788 * scale_y
,
157 0.0, 0.448535 * scale_x
, 0.515947 * scale_y
,
158 0.0, 0.6111 * scale_x
, 0.190831 * scale_y
, 0.0]
161 [(-0.86511 * scale_x
, -0.112965 * scale_y
, 0.0),
162 (-0.61153 * scale_x
, -0.156423 * scale_y
, 0.0),
163 (-1.103589 * scale_x
, -0.199934 * scale_y
, 0.0),
164 (-0.446315 * scale_x
, 0.135163 * scale_y
, 0.0),
165 (0.669383 * scale_x
, -0.254463 * scale_y
, 0.0),
166 (0.721512 * scale_x
, 0.802759 * scale_y
, 0.0),
167 (0.466815 * scale_x
, 0.112232 * scale_y
, 0.0)]
170 [(-0.707927 * scale_x
, -0.027348 * scale_y
, 0.0),
171 (-0.846662 * scale_x
, -0.40347 * scale_y
, 0.0),
172 (-0.79875 * scale_x
, 0.201677 * scale_y
, 0.0),
173 (0.446315 * scale_x
, -0.135163 * scale_y
, 0.0),
174 (1.196752 * scale_x
, 0.42637 * scale_y
, 0.0),
175 (0.289834 * scale_x
, 0.349204 * scale_y
, 0.0),
176 (0.755381 * scale_x
, 0.269428 * scale_y
, 0.0)]
178 make_curve(self
, context
, verts
, lhandles
, rhandles
)
181 def add_type2(self
, context
):
183 scale_x
= self
.scale_x
184 scale_y
= self
.scale_y
186 [-0.719632 * scale_x
, -0.08781 * scale_y
, 0.0,
187 -0.605138 * scale_x
, -0.31612 * scale_y
, 0.0,
188 -0.935392 * scale_x
, 0.0, 0.0,
190 0.935392 * scale_x
, 0.0, 0.0,
191 0.605138 * scale_x
, -0.316119 * scale_y
, 0.0,
192 0.719632 * scale_x
, -0.08781 * scale_y
, 0.0]
195 [(-0.82125 * scale_x
, -0.142999 * scale_y
, 0.0),
196 (-0.493366 * scale_x
, -0.199027 * scale_y
, 0.0),
197 (-1.129601 * scale_x
, -0.25513 * scale_y
, 0.0),
198 (-0.467584 * scale_x
, 0.00044 * scale_y
, 0.0),
199 (0.735439 * scale_x
, 0.262646 * scale_y
, 0.0),
200 (0.797395 * scale_x
, -0.517531 * scale_y
, 0.0),
201 (0.618012 * scale_x
, -0.032614 * scale_y
, 0.0)]
204 [(-0.618009 * scale_x
, -0.032618 * scale_y
, 0.0),
205 (-0.797396 * scale_x
, -0.517532 * scale_y
, 0.0),
206 (-0.735445 * scale_x
, 0.262669 * scale_y
, 0.0),
207 (0.468041 * scale_x
, -0.00044 * scale_y
, 0.0),
208 (1.129616 * scale_x
, -0.255119 * scale_y
, 0.0),
209 (0.493365 * scale_x
, -0.199025 * scale_y
, 0.0),
210 (0.821249 * scale_x
, -0.143004 * scale_y
, 0.0)]
212 make_curve(self
, context
, verts
, lhandles
, rhandles
)
215 def add_type10(self
, context
):
217 scale_x
= self
.scale_x
218 scale_y
= self
.scale_y
220 [-0.999637 * scale_x
, 0.000348 * scale_y
,
221 0.0, 0.259532 * scale_x
, -0.017841 * scale_y
,
222 0.0, 0.482303 * scale_x
, 0.780429 * scale_y
,
223 0.0, 0.573183 * scale_x
, 0.506898 * scale_y
, 0.0],
224 [0.259532 * scale_x
, -0.017841 * scale_y
,
225 0.0, 0.554919 * scale_x
, -0.140918 * scale_y
,
226 0.0, 0.752264 * scale_x
, -0.819275 * scale_y
,
227 0.0, 0.824152 * scale_x
, -0.514881 * scale_y
, 0.0]
230 [(-1.258333 * scale_x
, -0.258348 * scale_y
, 0.0),
231 (-0.240006 * scale_x
, -0.15259 * scale_y
, 0.0),
232 (0.79037 * scale_x
, 0.857575 * scale_y
, 0.0),
233 (0.376782 * scale_x
, 0.430157 * scale_y
, 0.0)],
234 [(0.224917 * scale_x
, -0.010936 * scale_y
, 0.0),
235 (0.514858 * scale_x
, -0.122809 * scale_y
, 0.0),
236 (1.057957 * scale_x
, -0.886925 * scale_y
, 0.0),
237 (0.61945 * scale_x
, -0.464285 * scale_y
, 0.0)]
240 [(-0.74094 * scale_x
, 0.259045 * scale_y
, 0.0),
241 (0.768844 * scale_x
, 0.119545 * scale_y
, 0.0),
242 (0.279083 * scale_x
, 0.729538 * scale_y
, 0.0),
243 (0.643716 * scale_x
, 0.534458 * scale_y
, 0.0)],
244 [(0.294147 * scale_x
, -0.024746 * scale_y
, 0.0),
245 (1.03646 * scale_x
, -0.358598 * scale_y
, 0.0),
246 (0.547718 * scale_x
, -0.774008 * scale_y
, 0.0),
247 (0.897665 * scale_x
, -0.533051 * scale_y
, 0.0)]
249 make_curve(self
, context
, verts
, lhandles
, rhandles
)
252 def add_type9(self
, context
):
254 scale_x
= self
.scale_x
255 scale_y
= self
.scale_y
257 [0.260968 * scale_x
, -0.668118 * scale_y
,
258 0.0, 0.108848 * scale_x
, -0.381587 * scale_y
,
259 0.0, 0.537002 * scale_x
, -0.77303 * scale_y
,
260 0.0, -0.600421 * scale_x
, -0.583106 * scale_y
,
261 0.0, -0.600412 * scale_x
, 0.583103 * scale_y
,
262 0.0, 0.537002 * scale_x
, 0.773025 * scale_y
,
263 0.0, 0.108854 * scale_x
, 0.381603 * scale_y
,
264 0.0, 0.260966 * scale_x
, 0.668129 * scale_y
, 0.0]
267 [(0.387973 * scale_x
, -0.594856 * scale_y
, 0.0),
268 (-0.027835 * scale_x
, -0.532386 * scale_y
, 0.0),
269 (0.775133 * scale_x
, -0.442883 * scale_y
, 0.0),
270 (-0.291333 * scale_x
, -1.064385 * scale_y
, 0.0),
271 (-0.833382 * scale_x
, 0.220321 * scale_y
, 0.0),
272 (0.291856 * scale_x
, 1.112891 * scale_y
, 0.0),
273 (0.346161 * scale_x
, 0.119777 * scale_y
, 0.0),
274 (0.133943 * scale_x
, 0.741389 * scale_y
, 0.0)]
277 [(0.133951 * scale_x
, -0.741386 * scale_y
, 0.0),
278 (0.346154 * scale_x
, -0.119772 * scale_y
, 0.0),
279 (0.291863 * scale_x
, -1.112896 * scale_y
, 0.0),
280 (-0.833407 * scale_x
, -0.220324 * scale_y
, 0.0),
281 (-0.29134 * scale_x
, 1.064389 * scale_y
, 0.0),
282 (0.775125 * scale_x
, 0.442895 * scale_y
, 0.0),
283 (-0.029107 * scale_x
, 0.533819 * scale_y
, 0.0),
284 (0.387981 * scale_x
, 0.594873 * scale_y
, 0.0)]
286 make_curve(self
, context
, verts
, lhandles
, rhandles
)
289 def add_type7(self
, context
):
291 scale_x
= self
.scale_x
292 scale_y
= self
.scale_y
294 [-0.850431 * scale_x
, -0.009091 * scale_y
,
295 0.0, -0.818807 * scale_x
, -0.130518 * scale_y
,
296 0.0, -0.944931 * scale_x
, 0.055065 * scale_y
, 0.0,
297 -0.393355 * scale_x
, -0.035521 * scale_y
,
298 0.0, 0.0 * scale_x
, 0.348298 * scale_y
,
299 0.0, 0.393355 * scale_x
, -0.035521 * scale_y
,
300 0.0, 0.944931 * scale_x
, 0.055065 * scale_y
,
301 0.0, 0.818807 * scale_x
, -0.130518 * scale_y
,
302 0.0, 0.850431 * scale_x
, -0.009091 * scale_y
, 0.0]
305 [(-0.90478 * scale_x
, -0.025302 * scale_y
, 0.0),
306 (-0.753279 * scale_x
, -0.085571 * scale_y
, 0.0),
307 (-1.06406 * scale_x
, -0.047879 * scale_y
, 0.0),
308 (-0.622217 * scale_x
, -0.022502 * scale_y
, 0.0),
309 (0.181 * scale_x
, 0.348791 * scale_y
, 0.0),
310 (-0.101464 * scale_x
, -0.063671 * scale_y
, 0.0),
311 (0.822288 * scale_x
, 0.161045 * scale_y
, 0.0),
312 (0.931521 * scale_x
, -0.207832 * scale_y
, 0.0),
313 (0.796079 * scale_x
, 0.007121 * scale_y
, 0.0)]
316 [(-0.796079 * scale_x
, 0.007121 * scale_y
, 0.0),
317 (-0.931521 * scale_x
, -0.207832 * scale_y
, 0.0),
318 (-0.822288 * scale_x
, 0.161045 * scale_y
, 0.0),
319 (0.101464 * scale_x
, -0.063671 * scale_y
, 0.0),
320 (-0.181193 * scale_x
, 0.347805 * scale_y
, 0.0),
321 (0.622217 * scale_x
, -0.022502 * scale_y
, 0.0),
322 (1.06406 * scale_x
, -0.047879 * scale_y
, 0.0),
323 (0.753279 * scale_x
, -0.085571 * scale_y
, 0.0),
324 (0.90478 * scale_x
, -0.025302 * scale_y
, 0.0)]
326 make_curve(self
, context
, verts
, lhandles
, rhandles
)
329 def add_type4(self
, context
):
331 scale_x
= self
.scale_x
332 scale_y
= self
.scale_y
334 [0.072838 * scale_x
, -0.071461 * scale_y
,
335 0.0, -0.175451 * scale_x
, -0.130711 * scale_y
,
336 0.0, 0.207269 * scale_x
, 0.118064 * scale_y
,
337 0.0, 0 * scale_x
, -1.0 * scale_y
, 0.0]
340 [(0.042135 * scale_x
, 0.039756 * scale_y
, 0),
341 (-0.086769 * scale_x
, -0.265864 * scale_y
, 0),
342 (0.002865 * scale_x
, 0.364657 * scale_y
, 0),
343 (0.233116 * scale_x
, -0.596115 * scale_y
, 0)]
346 [(0.103542 * scale_x
, -0.182683 * scale_y
, 0),
347 (-0.327993 * scale_x
, 0.101765 * scale_y
, 0),
348 (0.417702 * scale_x
, -0.135803 * scale_y
, 0),
349 (-0.233116 * scale_x
, -1.403885 * scale_y
, 0)]
351 make_curve(self
, context
, verts
, lhandles
, rhandles
)
354 def add_type1(self
, context
):
356 scale_x
= self
.scale_x
357 scale_y
= self
.scale_y
359 [-0.71753 * scale_x
, -0.08781 * scale_y
,
360 0, -0.60337 * scale_x
, -0.31612 * scale_y
, 0,
361 -0.93266 * scale_x
, 0, 0, 0, 0, 0, 0.93266 * scale_x
,
362 0, 0, 0.60337 * scale_x
, 0.31612 * scale_y
,
363 0, 0.71753 * scale_x
, 0.08781 * scale_y
, 0]
366 [(-0.81885 * scale_x
, -0.143002 * scale_y
, 0),
367 (-0.491926 * scale_x
, -0.199026 * scale_y
, 0),
368 (-1.126316 * scale_x
, -0.255119 * scale_y
, 0),
369 (-0.446315 * scale_x
, 0.135164 * scale_y
, 0),
370 (0.733297 * scale_x
, -0.26265 * scale_y
, 0),
371 (0.795065 * scale_x
, 0.517532 * scale_y
, 0),
372 (0.616204 * scale_x
, 0.03262 * scale_y
, 0)]
375 [(-0.616204 * scale_x
, -0.032618 * scale_y
, 0),
376 (-0.795067 * scale_x
, -0.517532 * scale_y
, 0),
377 (-0.733297 * scale_x
, 0.262651 * scale_y
, 0),
378 (0.446315 * scale_x
, -0.135163 * scale_y
, 0),
379 (1.126316 * scale_x
, 0.255119 * scale_y
, 0),
380 (0.491924 * scale_x
, 0.199026 * scale_y
, 0),
381 (0.81885 * scale_x
, 0.143004 * scale_y
, 0)]
383 make_curve(self
, context
, verts
, lhandles
, rhandles
)
386 def make_curve(self
, context
, verts
, lh
, rh
):
391 if bpy
.context
.mode
== 'EDIT_CURVE':
392 Curve
= context
.active_object
394 for spline
in Curve
.data
.splines
:
395 if spline
.type == 'BEZIER':
396 for point
in spline
.bezier_points
:
397 point
.select_control_point
= False
398 point
.select_left_handle
= False
399 point
.select_right_handle
= False
401 for point
in spline
.points
:
404 for p
in range(len(verts
)):
406 newSpline
= Curve
.data
.splines
.new(type='BEZIER') # newSpline
407 newSpline
.bezier_points
.add(int(len(verts
[p
]) / 3 - 1))
408 newSpline
.bezier_points
.foreach_set('co', verts
[p
])
410 for bp
in newSpline
.bezier_points
:
411 bp
.handle_left_type
= 'ALIGNED'
412 bp
.handle_right_type
= 'ALIGNED'
413 bp
.handle_left
.xyz
= lh
[p
][c
]
414 bp
.handle_right
.xyz
= rh
[p
][c
]
415 bp
.select_control_point
= True
416 bp
.select_left_handle
= True
417 bp
.select_right_handle
= True
419 # something weird with this one
420 if types
== 1 or types
== 2 or types
== 3:
421 newSpline
.bezier_points
[3].handle_left
.xyz
= lh
[p
][3]
425 dataCurve
= bpy
.data
.curves
.new(name
='CurlyCurve', type='CURVE') # curvedatablock
426 for p
in range(len(verts
)):
428 newSpline
= dataCurve
.splines
.new(type='BEZIER') # newSpline
429 newSpline
.bezier_points
.add(int(len(verts
[p
]) / 3 - 1))
430 newSpline
.bezier_points
.foreach_set('co', verts
[p
])
432 for bp
in newSpline
.bezier_points
:
433 bp
.handle_left_type
= 'ALIGNED'
434 bp
.handle_right_type
= 'ALIGNED'
435 bp
.handle_left
.xyz
= lh
[p
][c
]
436 bp
.handle_right
.xyz
= rh
[p
][c
]
437 bp
.select_control_point
= True
438 bp
.select_left_handle
= True
439 bp
.select_right_handle
= True
441 # something weird with this one
442 if types
== 1 or types
== 2 or types
== 3:
443 newSpline
.bezier_points
[3].handle_left
.xyz
= lh
[p
][3]
445 # create object with newCurve
446 Curve
= object_data_add(context
, dataCurve
, operator
=self
) # place in active scene
447 Curve
.select_set(True)
450 Curve
.data
.dimensions
= self
.shape
451 Curve
.data
.use_path
= True
452 if self
.shape
== '3D':
453 Curve
.data
.fill_mode
= 'FULL'
455 Curve
.data
.fill_mode
= 'BOTH'
457 # move and rotate spline in edit mode
458 if bpy
.context
.mode
== 'EDIT_CURVE':
459 if self
.align
== "WORLD":
460 location
= self
.location
- context
.active_object
.location
461 bpy
.ops
.transform
.translate(value
= location
, orient_type
='GLOBAL')
462 bpy
.ops
.transform
.rotate(value
= self
.rotation
[0], orient_axis
= 'X', orient_type
='GLOBAL')
463 bpy
.ops
.transform
.rotate(value
= self
.rotation
[1], orient_axis
= 'Y', orient_type
='GLOBAL')
464 bpy
.ops
.transform
.rotate(value
= self
.rotation
[2], orient_axis
= 'Z', orient_type
='GLOBAL')
466 elif self
.align
== "VIEW":
467 bpy
.ops
.transform
.translate(value
= self
.location
)
468 bpy
.ops
.transform
.rotate(value
= self
.rotation
[0], orient_axis
= 'X')
469 bpy
.ops
.transform
.rotate(value
= self
.rotation
[1], orient_axis
= 'Y')
470 bpy
.ops
.transform
.rotate(value
= self
.rotation
[2], orient_axis
= 'Z')
472 elif self
.align
== "CURSOR":
473 location
= context
.active_object
.location
474 self
.location
= bpy
.context
.scene
.cursor
.location
- location
475 self
.rotation
= bpy
.context
.scene
.cursor
.rotation_euler
477 bpy
.ops
.transform
.translate(value
= self
.location
)
478 bpy
.ops
.transform
.rotate(value
= self
.rotation
[0], orient_axis
= 'X')
479 bpy
.ops
.transform
.rotate(value
= self
.rotation
[1], orient_axis
= 'Y')
480 bpy
.ops
.transform
.rotate(value
= self
.rotation
[2], orient_axis
= 'Z')
482 class add_curlycurve(Operator
, AddObjectHelper
):
483 bl_idname
= "curve.curlycurve"
484 bl_label
= "Add Curly Curve"
485 bl_description
= "Create a Curly Curve"
486 bl_options
= {'REGISTER', 'UNDO', 'PRESET'}
490 description
="Type of curly curve",
494 scale_x
: FloatProperty(
496 description
="Scale on X axis",
499 scale_y
: FloatProperty(
501 description
="Scale on Y axis",
505 shape
: EnumProperty(
507 description
="2D or 3D Curve",
514 edit_mode
: BoolProperty(
515 name
="Show in edit mode",
517 description
="Show in edit mode"
520 def draw(self
, context
):
523 col
= layout
.column(align
=True)
524 col
.label(text
= "Curve:")
525 col
.prop(self
, "types")
527 col
= layout
.column(align
=True)
528 col
.label(text
= "Resize:")
529 col
.prop(self
, "scale_x")
530 col
.prop(self
, "scale_y")
533 row
.prop(self
, "shape", expand
=True)
535 col
= layout
.column(align
=True)
536 col
.row().prop(self
, "edit_mode", expand
=True)
538 col
= layout
.column(align
=True)
539 # AddObjectHelper props
540 col
.prop(self
, "align")
541 col
.prop(self
, "location")
542 col
.prop(self
, "rotation")
544 def execute(self
, context
):
545 # turn off 'Enter Edit Mode'
546 use_enter_edit_mode
= bpy
.context
.preferences
.edit
.use_enter_edit_mode
547 bpy
.context
.preferences
.edit
.use_enter_edit_mode
= False
550 add_type1(self
, context
)
552 add_type2(self
, context
)
554 add_type3(self
, context
)
556 add_type4(self
, context
)
558 add_type5(self
, context
)
560 add_type6(self
, context
)
562 add_type7(self
, context
)
564 add_type8(self
, context
)
566 add_type9(self
, context
)
568 add_type10(self
, context
)
570 if use_enter_edit_mode
:
571 bpy
.ops
.object.mode_set(mode
= 'EDIT')
573 # restore pre operator state
574 bpy
.context
.preferences
.edit
.use_enter_edit_mode
= use_enter_edit_mode
577 bpy
.ops
.object.mode_set(mode
= 'EDIT')
579 bpy
.ops
.object.mode_set(mode
= 'OBJECT')
586 def add_curlycurve_button(self
, context
):
587 self
.layout
.operator(
588 add_curlycurve
.bl_idname
,
589 text
="Add Curly Curve",
595 bpy
.utils
.register_class(add_curlycurve
)
596 #bpy.types.INFO_MT_curve_add.append(add_curlycurve_button)
600 bpy
.utils
.unregister_class(add_curlycurve
)
601 #bpy.types.INFO_MT_curve_add.remove(add_curlycurve_button)
604 if __name__
== "__main__":