FBX IO: Corner vert/edge and edge verts access with attributes
[blender-addons.git] / add_curve_extra_objects / add_curve_curly.py
blobd7fc1b614d39e966907ffdfff151c508c2783544
1 # SPDX-FileCopyrightText: 2017-2022 Blender Foundation
3 # SPDX-License-Identifier: GPL-2.0-or-later
5 # DevBo Task https://developer.blender.org/T37299
7 bl_info = {
8 "name": "Curly Curves",
9 "author": "Cmomoney",
10 "version": (1, 2, 0),
11 "blender": (2, 80, 0),
12 "location": "View3D > Add > Curve > Curly Curve",
13 "description": "Adds a new Curly Curve",
14 "warning": "",
15 "doc_url": "{BLENDER_MANUAL_URL}/addons/add_curve/extra_objects.html",
16 "category": "Add Curve",
19 import bpy
20 from bpy.types import Operator
21 from bpy.props import (
22 BoolProperty,
23 FloatProperty,
24 EnumProperty,
25 IntProperty,
27 from bpy_extras.object_utils import (
28 AddObjectHelper,
29 object_data_add,
33 def add_type6(self, context):
35 scale_x = self.scale_x
36 scale_y = self.scale_y
37 verts = [
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]
47 lhandles = [
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)]
57 rhandles = [
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
74 verts = [
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]
84 lhandles = [
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)]
94 rhandles = [
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
111 verts = [
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]
122 lhandles = [
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)]
133 rhandles = [
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
151 verts = [
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]
160 lhandles = [
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)]
169 rhandles = [
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
185 verts = [
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,
189 0.0, 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]
194 lhandles = [
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)]
203 rhandles = [
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
219 verts = [
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]
229 lhandles = [
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)]
239 rhandles = [
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
256 verts = [
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]
266 lhandles = [
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)]
276 rhandles = [
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
293 verts = [
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]
304 lhandles = [
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)]
315 rhandles = [
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
333 verts = [
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]
339 lhandles = [
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)]
345 rhandles = [
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
358 verts = [
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]
365 lhandles = [
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)]
374 rhandles = [
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):
388 types = self.types
390 # create object
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
400 else:
401 for point in spline.points:
402 point.select = False
404 for p in range(len(verts)):
405 c = 0
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
418 c += 1
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]
423 else:
424 # create curve
425 dataCurve = bpy.data.curves.new(name='CurlyCurve', type='CURVE') # curvedatablock
426 for p in range(len(verts)):
427 c = 0
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
440 c += 1
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)
449 # set curveOptions
450 Curve.data.dimensions = self.shape
451 Curve.data.use_path = True
452 if self.shape == '3D':
453 Curve.data.fill_mode = 'FULL'
454 else:
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'}
488 types : IntProperty(
489 name="Type",
490 description="Type of curly curve",
491 default=1,
492 min=1, max=10
494 scale_x : FloatProperty(
495 name="Scale X",
496 description="Scale on X axis",
497 default=1.0
499 scale_y : FloatProperty(
500 name="Scale Y",
501 description="Scale on Y axis",
502 default=1.0
504 # Curve Options
505 shape : EnumProperty(
506 name="2D / 3D",
507 description="2D or 3D Curve",
508 items=[
509 ('2D', "2D", "2D"),
510 ('3D', "3D", "3D")
514 edit_mode : BoolProperty(
515 name="Show in edit mode",
516 default=True,
517 description="Show in edit mode"
520 def draw(self, context):
521 layout = self.layout
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")
532 row = layout.row()
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
549 if self.types == 1:
550 add_type1(self, context)
551 if self.types == 2:
552 add_type2(self, context)
553 if self.types == 3:
554 add_type3(self, context)
555 if self.types == 4:
556 add_type4(self, context)
557 if self.types == 5:
558 add_type5(self, context)
559 if self.types == 6:
560 add_type6(self, context)
561 if self.types == 7:
562 add_type7(self, context)
563 if self.types == 8:
564 add_type8(self, context)
565 if self.types == 9:
566 add_type9(self, context)
567 if self.types == 10:
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
576 if self.edit_mode:
577 bpy.ops.object.mode_set(mode = 'EDIT')
578 else:
579 bpy.ops.object.mode_set(mode = 'OBJECT')
581 return {'FINISHED'}
584 # Registration
586 def add_curlycurve_button(self, context):
587 self.layout.operator(
588 add_curlycurve.bl_idname,
589 text="Add Curly Curve",
590 icon='PLUGIN'
594 def register():
595 bpy.utils.register_class(add_curlycurve)
596 #bpy.types.INFO_MT_curve_add.append(add_curlycurve_button)
599 def unregister():
600 bpy.utils.unregister_class(add_curlycurve)
601 #bpy.types.INFO_MT_curve_add.remove(add_curlycurve_button)
604 if __name__ == "__main__":
605 register()