Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrendon Murphy <meta.androcto1@gmail.com>2012-09-04 04:02:38 +0400
committerBrendon Murphy <meta.androcto1@gmail.com>2012-09-04 04:02:38 +0400
commita6f9e90eab356526151085d4f5c1d6419d75ec08 (patch)
tree74cbd4eb9f51926239c79bffc5bb28981b66918c /add_curve_aceous_galore.py
parent8c9bbbcbba535e3e0de1a359ecc790f4d9f529c2 (diff)
merge of torus knots plus, curveaceous_galore & spirals addons.
this merge groups the main add curve object types under the one folder
Diffstat (limited to 'add_curve_aceous_galore.py')
-rw-r--r--add_curve_aceous_galore.py1142
1 files changed, 0 insertions, 1142 deletions
diff --git a/add_curve_aceous_galore.py b/add_curve_aceous_galore.py
deleted file mode 100644
index b6417434..00000000
--- a/add_curve_aceous_galore.py
+++ /dev/null
@@ -1,1142 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-bl_info = {
- 'name': 'Curveaceous Galore!',
- 'author': 'Jimmy Hazevoet, testscreenings',
- 'version': (0,2),
- "blender": (2, 5, 9),
- 'location': 'View3D > Add > Curve',
- 'description': 'Adds many different types of Curves',
- 'warning': '', # used for warning icon and text in addons panel
- 'wiki_url': 'http://wiki.blender.org/index.php/Extensions:2.6/Py/' \
- 'Scripts/Curve/Curves_Galore',
- 'tracker_url': 'https://projects.blender.org/tracker/index.php?'\
- 'func=detail&aid=22404',
- 'category': 'Add Curve'}
-
-
-##------------------------------------------------------------
-#### import modules
-import bpy
-from bpy.props import *
-from mathutils import *
-from math import *
-import mathutils.noise as Noise
-###------------------------------------------------------------
-#### Some functions to use with others:
-###------------------------------------------------------------
-
-#------------------------------------------------------------
-# Generate random number:
-def randnum(low=0.0, high=1.0, seed=0):
- """
- randnum( low=0.0, high=1.0, seed=0 )
-
- Create random number
-
- Parameters:
- low - lower range
- (type=float)
- high - higher range
- (type=float)
- seed - the random seed number, if seed is 0, the current time will be used instead
- (type=int)
- Returns:
- a random number
- (type=float)
- """
-
- Noise.seed_set(seed)
- rnum = Noise.random()
- rnum = rnum*(high-low)
- rnum = rnum+low
- return rnum
-
-
-#------------------------------------------------------------
-# Make some noise:
-def vTurbNoise(x,y,z, iScale=0.25, Size=1.0, Depth=6, Hard=0, Basis=0, Seed=0):
- """
- vTurbNoise((x,y,z), iScale=0.25, Size=1.0, Depth=6, Hard=0, Basis=0, Seed=0 )
-
- Create randomised vTurbulence noise
-
- Parameters:
- xyz - (x,y,z) float values.
- (type=3-float tuple)
- iScale - noise intensity scale
- (type=float)
- Size - noise size
- (type=float)
- Depth - number of noise values added.
- (type=int)
- Hard - noise hardness: 0 - soft noise; 1 - hard noise
- (type=int)
- basis - type of noise used for turbulence
- (type=int)
- Seed - the random seed number, if seed is 0, the current time will be used instead
- (type=int)
- Returns:
- the generated turbulence vector.
- (type=3-float list)
- """
- rand = randnum(-100,100,Seed)
- if Basis == 9: Basis = 14
- vTurb = Noise.turbulence_vector((x/Size+rand, y/Size+rand, z/Size+rand), Depth, Hard, Basis)
- tx = vTurb[0]*iScale
- ty = vTurb[1]*iScale
- tz = vTurb[2]*iScale
- return tx,ty,tz
-
-
-#------------------------------------------------------------
-# Axis: ( used in 3DCurve Turbulence )
-def AxisFlip(x,y,z, x_axis=1, y_axis=1, z_axis=1, flip=0 ):
- if flip != 0:
- flip *= -1
- else: flip = 1
- x *= x_axis*flip
- y *= y_axis*flip
- z *= z_axis*flip
- return x,y,z
-
-
-###-------------------------------------------------------------------
-#### 2D Curve shape functions:
-###-------------------------------------------------------------------
-
-##------------------------------------------------------------
-# 2DCurve: Profile: L, H, T, U, Z
-def ProfileCurve(type=0, a=0.25, b=0.25):
- """
- ProfileCurve( type=0, a=0.25, b=0.25 )
-
- Create profile curve
-
- Parameters:
- type - select profile type, L, H, T, U, Z
- (type=int)
- a - a scaling parameter
- (type=float)
- b - b scaling parameter
- (type=float)
- Returns:
- a list with lists of x,y,z coordinates for curve points, [[x,y,z],[x,y,z],...n]
- (type=list)
- """
-
- newpoints = []
- if type ==1:
- ## H:
- a*=0.5
- b*=0.5
- newpoints = [ [ -1.0, 1.0, 0.0 ], [ -1.0+a, 1.0, 0.0 ],
- [ -1.0+a, b, 0.0 ], [ 1.0-a, b, 0.0 ], [ 1.0-a, 1.0, 0.0 ],
- [ 1.0, 1.0, 0.0 ], [ 1.0, -1.0, 0.0 ], [ 1.0-a, -1.0, 0.0 ],
- [ 1.0-a, -b, 0.0 ], [ -1.0+a, -b, 0.0 ], [ -1.0+a, -1.0, 0.0 ],
- [ -1.0, -1.0, 0.0 ] ]
- elif type ==2:
- ## T:
- a*=0.5
- newpoints = [ [ -1.0, 1.0, 0.0 ], [ 1.0, 1.0, 0.0 ],
- [ 1.0, 1.0-b, 0.0 ], [ a, 1.0-b, 0.0 ], [ a, -1.0, 0.0 ],
- [ -a, -1.0, 0.0 ], [ -a, 1.0-b, 0.0 ], [ -1.0, 1.0-b, 0.0 ] ]
- elif type ==3:
- ## U:
- a*=0.5
- newpoints = [ [ -1.0, 1.0, 0.0 ], [ -1.0+a, 1.0, 0.0 ],
- [ -1.0+a, -1.0+b, 0.0 ], [ 1.0-a, -1.0+b, 0.0 ], [ 1.0-a, 1.0, 0.0 ],
- [ 1.0, 1.0, 0.0 ], [ 1.0, -1.0, 0.0 ], [ -1.0, -1.0, 0.0 ] ]
- elif type ==4:
- ## Z:
- a*=0.5
- newpoints = [ [ -0.5, 1.0, 0.0 ], [ a, 1.0, 0.0 ],
- [ a, -1.0+b, 0.0 ], [ 1.0, -1.0+b, 0.0 ], [ 1.0, -1.0, 0.0 ],
- [ -a, -1.0, 0.0 ], [ -a, 1.0-b, 0.0 ], [ -1.0, 1.0-b, 0.0 ],
- [ -1.0, 1.0, 0.0 ] ]
- else:
- ## L:
- newpoints = [ [ -1.0, 1.0, 0.0 ], [ -1.0+a, 1.0, 0.0 ],
- [ -1.0+a, -1.0+b, 0.0 ], [ 1.0, -1.0+b, 0.0 ],
- [ 1.0, -1.0, 0.0 ], [ -1.0, -1.0, 0.0 ] ]
- return newpoints
-
-##------------------------------------------------------------
-# 2DCurve: Miscellaneous.: Diamond, Arrow1, Arrow2, Square, ....
-def MiscCurve(type=1, a=1.0, b=0.5, c=1.0):
- """
- MiscCurve( type=1, a=1.0, b=0.5, c=1.0 )
-
- Create miscellaneous curves
-
- Parameters:
- type - select type, Diamond, Arrow1, Arrow2, Square
- (type=int)
- a - a scaling parameter
- (type=float)
- b - b scaling parameter
- (type=float)
- c - c scaling parameter
- (type=float)
- doesn't seem to do anything
- Returns:
- a list with lists of x,y,z coordinates for curve points, [[x,y,z],[x,y,z],...n]
- (type=list)
- """
-
- newpoints = []
- a*=0.5
- b*=0.5
- if type == 1:
- ## diamond:
- newpoints = [ [ 0.0, b, 0.0 ], [ a, 0.0, 0.0 ], [ 0.0, -b, 0.0 ], [ -a, 0.0, 0.0 ] ]
- elif type == 2:
- ## Arrow1:
- newpoints = [ [ -a, b, 0.0 ], [ a, 0.0, 0.0 ], [ -a, -b, 0.0 ], [ 0.0, 0.0, 0.0 ] ]
- elif type == 3:
- ## Arrow2:
- newpoints = [ [ -1.0, b, 0.0 ], [ -1.0+a, b, 0.0 ],
- [ -1.0+a, 1.0, 0.0 ], [ 1.0, 0.0, 0.0 ],
- [ -1.0+a, -1.0, 0.0 ], [ -1.0+a, -b, 0.0 ],
- [ -1.0, -b, 0.0 ] ]
- elif type == 4:
- ## Rounded square:
- newpoints = [ [ -a, b-b*0.2, 0.0 ], [ -a+a*0.05, b-b*0.05, 0.0 ], [ -a+a*0.2, b, 0.0 ],
- [ a-a*0.2, b, 0.0 ], [ a-a*0.05, b-b*0.05, 0.0 ], [ a, b-b*0.2, 0.0 ],
- [ a, -b+b*0.2, 0.0 ], [ a-a*0.05, -b+b*0.05, 0.0 ], [ a-a*0.2, -b, 0.0 ],
- [ -a+a*0.2, -b, 0.0 ], [ -a+a*0.05, -b+b*0.05, 0.0 ], [ -a, -b+b*0.2, 0.0 ] ]
- elif type == 5:
- ## Rounded Rectangle II:
- newpoints = []
- x = a / 2
- y = b / 2
- r = c / 2
-
- if r > x:
- r = x - 0.0001
- if r > y:
- r = y - 0.0001
-
- if r>0:
- newpoints.append([-x+r,y,0])
- newpoints.append([x-r,y,0])
- newpoints.append([x,y-r,0])
- newpoints.append([x,-y+r,0])
- newpoints.append([x-r,-y,0])
- newpoints.append([-x+r,-y,0])
- newpoints.append([-x,-y+r,0])
- newpoints.append([-x,y-r,0])
- else:
- newpoints.append([-x,y,0])
- newpoints.append([x,y,0])
- newpoints.append([x,-y,0])
- newpoints.append([-x,-y,0])
-
- else:
- ## Square:
- newpoints = [ [ -a, b, 0.0 ], [ a, b, 0.0 ], [ a, -b, 0.0 ], [ -a, -b, 0.0 ] ]
- return newpoints
-
-##------------------------------------------------------------
-# 2DCurve: Star:
-def StarCurve(starpoints=8, innerradius=0.5, outerradius=1.0, twist=0.0):
- """
- StarCurve( starpoints=8, innerradius=0.5, outerradius=1.0, twist=0.0 )
-
- Create star shaped curve
-
- Parameters:
- starpoints - the number of points
- (type=int)
- innerradius - innerradius
- (type=float)
- outerradius - outerradius
- (type=float)
- twist - twist amount
- (type=float)
- Returns:
- a list with lists of x,y,z coordinates for curve points, [[x,y,z],[x,y,z],...n]
- (type=list)
- """
-
- newpoints = []
- step = (2.0/(starpoints))
- i = 0
- while i < starpoints:
- t = (i*step)
- x1 = cos(t*pi)*outerradius
- y1 = sin(t*pi)*outerradius
- newpoints.append([x1,y1,0])
- x2 = cos(t*pi+(pi/starpoints+twist))*innerradius
- y2 = sin(t*pi+(pi/starpoints+twist))*innerradius
- newpoints.append([x2,y2,0])
- i+=1
- return newpoints
-
-##------------------------------------------------------------
-# 2DCurve: Flower:
-def FlowerCurve(petals=8, innerradius=0.5, outerradius=1.0, petalwidth=2.0):
- """
- FlowerCurve( petals=8, innerradius=0.5, outerradius=1.0, petalwidth=2.0 )
-
- Create flower shaped curve
-
- Parameters:
- petals - the number of petals
- (type=int)
- innerradius - innerradius
- (type=float)
- outerradius - outerradius
- (type=float)
- petalwidth - width of petals
- (type=float)
- Returns:
- a list with lists of x,y,z coordinates for curve points, [[x,y,z],[x,y,z],...n]
- (type=list)
- """
-
- newpoints = []
- step = (2.0/(petals))
- pet = (step/pi*2)*petalwidth
- i = 0
- while i < petals:
- t = (i*step)
- x1 = cos(t*pi-(pi/petals))*innerradius
- y1 = sin(t*pi-(pi/petals))*innerradius
- newpoints.append([x1,y1,0])
- x2 = cos(t*pi-pet)*outerradius
- y2 = sin(t*pi-pet)*outerradius
- newpoints.append([x2,y2,0])
- x3 = cos(t*pi+pet)*outerradius
- y3 = sin(t*pi+pet)*outerradius
- newpoints.append([x3,y3,0])
- i+=1
- return newpoints
-
-##------------------------------------------------------------
-# 2DCurve: Arc,Sector,Segment,Ring:
-def ArcCurve(sides=6, startangle=0.0, endangle=90.0, innerradius=0.5, outerradius=1.0, type=3):
- """
- ArcCurve( sides=6, startangle=0.0, endangle=90.0, innerradius=0.5, outerradius=1.0, type=3 )
-
- Create arc shaped curve
-
- Parameters:
- sides - number of sides
- (type=int)
- startangle - startangle
- (type=float)
- endangle - endangle
- (type=float)
- innerradius - innerradius
- (type=float)
- outerradius - outerradius
- (type=float)
- type - select type Arc,Sector,Segment,Ring
- (type=int)
- Returns:
- a list with lists of x,y,z coordinates for curve points, [[x,y,z],[x,y,z],...n]
- (type=list)
- """
-
- newpoints = []
- sides += 1
- angle = (2.0*(1.0/360.0))
- endangle-=startangle
- step = ((angle*endangle)/(sides-1))
- i = 0
- while i < sides:
- t = (i*step) + angle*startangle
- x1 = sin(t*pi)*outerradius
- y1 = cos(t*pi)*outerradius
- newpoints.append([x1,y1,0])
- i+=1
-
- #if type ==0:
- # Arc: turn cyclic curve flag off!
-
- # Segment:
- if type ==2:
- newpoints.append([0,0,0])
- # Ring:
- elif type ==3:
- j=sides-1
- while j > -1:
- t = (j*step) + angle*startangle
- x2 = sin(t*pi)*innerradius
- y2 = cos(t*pi)*innerradius
- newpoints.append([x2,y2,0])
- j-=1
- return newpoints
-
-##------------------------------------------------------------
-# 2DCurve: Cog wheel:
-def CogCurve(theeth=8, innerradius=0.8, middleradius=0.95, outerradius=1.0, bevel=0.5):
- """
- CogCurve( theeth=8, innerradius=0.8, middleradius=0.95, outerradius=1.0, bevel=0.5 )
-
- Create cog wheel shaped curve
-
- Parameters:
- theeth - number of theeth
- (type=int)
- innerradius - innerradius
- (type=float)
- middleradius - middleradius
- (type=float)
- outerradius - outerradius
- (type=float)
- bevel - bevel amount
- (type=float)
- Returns:
- a list with lists of x,y,z coordinates for curve points, [[x,y,z],[x,y,z],...n]
- (type=list)
- """
-
- newpoints = []
- step = (2.0/(theeth))
- pet = (step/pi*2)
- bevel = 1.0-bevel
- i = 0
- while i < theeth:
- t = (i*step)
- x1 = cos(t*pi-(pi/theeth)-pet)*innerradius
- y1 = sin(t*pi-(pi/theeth)-pet)*innerradius
- newpoints.append([x1,y1,0])
- x2 = cos(t*pi-(pi/theeth)+pet)*innerradius
- y2 = sin(t*pi-(pi/theeth)+pet)*innerradius
- newpoints.append([x2,y2,0])
- x3 = cos(t*pi-pet)*middleradius
- y3 = sin(t*pi-pet)*middleradius
- newpoints.append([x3,y3,0])
- x4 = cos(t*pi-(pet*bevel))*outerradius
- y4 = sin(t*pi-(pet*bevel))*outerradius
- newpoints.append([x4,y4,0])
- x5 = cos(t*pi+(pet*bevel))*outerradius
- y5 = sin(t*pi+(pet*bevel))*outerradius
- newpoints.append([x5,y5,0])
- x6 = cos(t*pi+pet)*middleradius
- y6 = sin(t*pi+pet)*middleradius
- newpoints.append([x6,y6,0])
- i+=1
- return newpoints
-
-##------------------------------------------------------------
-# 2DCurve: nSide:
-def nSideCurve(sides=6, radius=1.0):
- """
- nSideCurve( sides=6, radius=1.0 )
-
- Create n-sided curve
-
- Parameters:
- sides - number of sides
- (type=int)
- radius - radius
- (type=float)
- Returns:
- a list with lists of x,y,z coordinates for curve points, [[x,y,z],[x,y,z],...n]
- (type=list)
- """
-
- newpoints = []
- step = (2.0/(sides))
- i = 0
- while i < sides:
- t = (i*step)
- x = sin(t*pi)*radius
- y = cos(t*pi)*radius
- newpoints.append([x,y,0])
- i+=1
- return newpoints
-
-
-##------------------------------------------------------------
-# 2DCurve: Splat:
-def SplatCurve(sides=24, scale=1.0, seed=0, basis=0, radius=1.0):
- """
- SplatCurve( sides=24, scale=1.0, seed=0, basis=0, radius=1.0 )
-
- Create splat curve
-
- Parameters:
- sides - number of sides
- (type=int)
- scale - noise size
- (type=float)
- seed - noise random seed
- (type=int)
- basis - noise basis
- (type=int)
- radius - radius
- (type=float)
- Returns:
- a list with lists of x,y,z coordinates for curve points, [[x,y,z],[x,y,z],...n]
- (type=list)
- """
-
- newpoints = []
- step = (2.0/(sides))
- i = 0
- while i < sides:
- t = (i*step)
- turb = vTurbNoise(t,t,t, 1.0, scale, 6, 0, basis, seed )
- turb = turb[2] * 0.5 + 0.5
- x = sin(t*pi)*radius * turb
- y = cos(t*pi)*radius * turb
- newpoints.append([x,y,0])
- i+=1
- return newpoints
-
-###-----------------------------------------------------------
-#### 3D curve shape functions:
-###-----------------------------------------------------------
-
-###------------------------------------------------------------
-# 3DCurve: Helix:
-def HelixCurve( number=100, height=2.0, startangle=0.0, endangle=360.0, width=1.0, a=0.0, b=0.0 ):
- """
- HelixCurve( number=100, height=2.0, startangle=0.0, endangle=360.0, width=1.0, a=0.0, b=0.0 )
-
- Create helix curve
-
- Parameters:
- number - the number of points
- (type=int)
- height - height
- (type=float)
- startangle - startangle
- (type=float)
- endangle - endangle
- (type=float)
- width - width
- (type=float)
- a - a
- (type=float)
- b - b
- (type=float)
- Returns:
- a list with lists of x,y,z coordinates for curve points, [[x,y,z],[x,y,z],...n]
- (type=list)
- """
-
- newpoints = []
- angle = (2.0/360.0)*(endangle-startangle)
- step = angle/(number-1)
- h = height/angle
- start = (startangle*2.0/360.0)
- a/=angle
- i = 0
- while i < number:
- t = ( i*step+start )
- x = sin( (t*pi) ) * ( 1.0 + cos( t * pi * a - ( b * pi ) ) ) * ( 0.25 * width )
- y = cos( (t*pi) ) * ( 1.0 + cos( t * pi * a - ( b * pi ) ) ) * ( 0.25 * width )
- z = ( t * h ) -h*start
- newpoints.append([x,y,z])
- i+=1
- return newpoints
-
-###------------------------------------------------------------ ?
-# 3DCurve: Cycloid: Cycloid, Epicycloid, Hypocycloid
-def CycloidCurve( number=24, length=2.0, type=0, a=1.0, b=1.0, startangle=0.0, endangle=360.0 ):
- """
- CycloidCurve( number=24, length=2.0, type=0, a=1.0, b=1.0, startangle=0.0, endangle=360.0 )
-
- Create a Cycloid, Epicycloid or Hypocycloid curve
-
- Parameters:
- number - the number of points
- (type=int)
- length - length of curve
- (type=float)
- type - types: Cycloid, Epicycloid, Hypocycloid
- (type=int)
- Returns:
- a list with lists of x,y,z coordinates for curve points, [[x,y,z],[x,y,z],...n]
- (type=list)
- """
-
- newpoints = []
- angle = (2.0/360.0)*(endangle-startangle)
- step = angle/(number-1)
- #h = height/angle
- d = length
- start = (startangle*2.0/360.0)
- a/=angle
- i = 0
- if type == 0: # Epitrochoid
- while i < number:
- t = ( i*step+start )
- x = ((a + b) * cos(t*pi)) - (d * cos(((a+b)/b)*t*pi))
- y = ((a + b) * sin(t*pi)) - (d * sin(((a+b)/b)*t*pi))
- z = 0 # ( t * h ) -h*start
- newpoints.append([x,y,z])
- i+=1
-
- else:
- newpoints = [[-1,-1,0], [-1,1,0], [1,1,0], [1,-1,0]]
- return newpoints
-
-##------------------------------------------------------------
-# calculates the matrix for the new object
-# depending on user pref
-def align_matrix(context):
- loc = Matrix.Translation(context.scene.cursor_location)
- obj_align = context.user_preferences.edit.object_align
- if (context.space_data.type == 'VIEW_3D'
- and obj_align == 'VIEW'):
- rot = context.space_data.region_3d.view_matrix.to_3x3().inverted().to_4x4()
- else:
- rot = Matrix()
- align_matrix = loc * rot
- return align_matrix
-
-##------------------------------------------------------------
-#### Curve creation functions
-# sets bezierhandles to auto
-def setBezierHandles(obj, mode = 'AUTOMATIC'):
- scene = bpy.context.scene
- if obj.type != 'CURVE':
- return
- scene.objects.active = obj
- bpy.ops.object.mode_set(mode='EDIT', toggle=True)
- bpy.ops.curve.select_all(action='SELECT')
- bpy.ops.curve.handle_type_set(type=mode)
- bpy.ops.object.mode_set(mode='OBJECT', toggle=True)
-
-# get array of vertcoordinates acording to splinetype
-def vertsToPoints(Verts, splineType):
- # main vars
- vertArray = []
-
- # array for BEZIER spline output (V3)
- if splineType == 'BEZIER':
- for v in Verts:
- vertArray += v
-
- # array for nonBEZIER output (V4)
- else:
- for v in Verts:
- vertArray += v
- if splineType == 'NURBS':
- vertArray.append(1) #for nurbs w=1
- else: #for poly w=0
- vertArray.append(0)
- return vertArray
-
-# create new CurveObject from vertarray and splineType
-def createCurve(vertArray, self, align_matrix):
- # options to vars
- splineType = self.outputType # output splineType 'POLY' 'NURBS' 'BEZIER'
- name = self.GalloreType # GalloreType as name
-
- # create curve
- scene = bpy.context.scene
- newCurve = bpy.data.curves.new(name, type = 'CURVE') # curvedatablock
- newSpline = newCurve.splines.new(type = splineType) # spline
-
- # create spline from vertarray
- if splineType == 'BEZIER':
- newSpline.bezier_points.add(int(len(vertArray)*0.33))
- newSpline.bezier_points.foreach_set('co', vertArray)
- else:
- newSpline.points.add(int(len(vertArray)*0.25 - 1))
- newSpline.points.foreach_set('co', vertArray)
- newSpline.use_endpoint_u = True
-
- # set curveOptions
- newCurve.dimensions = self.shape
- newSpline.use_cyclic_u = self.use_cyclic_u
- newSpline.use_endpoint_u = self.endp_u
- newSpline.order_u = self.order_u
-
- # create object with newCurve
- new_obj = bpy.data.objects.new(name, newCurve) # object
- scene.objects.link(new_obj) # place in active scene
- new_obj.select = True # set as selected
- scene.objects.active = new_obj # set as active
- new_obj.matrix_world = align_matrix # apply matrix
-
- # set bezierhandles
- if splineType == 'BEZIER':
- setBezierHandles(new_obj, self.handleType)
-
- return
-
-##------------------------------------------------------------
-# Main Function
-def main(context, self, align_matrix):
- # deselect all objects
- bpy.ops.object.select_all(action='DESELECT')
-
- # options
- galType = self.GalloreType
- splineType = self.outputType
- innerRadius = self.innerRadius
- middleRadius = self.middleRadius
- outerRadius = self.outerRadius
-
- # get verts
- if galType == 'Profile':
- verts = ProfileCurve(self.ProfileCurveType,
- self.ProfileCurvevar1,
- self.ProfileCurvevar2)
- if galType == 'Miscellaneous':
- verts = MiscCurve(self.MiscCurveType,
- self.MiscCurvevar1,
- self.MiscCurvevar2,
- self.MiscCurvevar3)
- if galType == 'Flower':
- verts = FlowerCurve(self.petals,
- innerRadius,
- outerRadius,
- self.petalWidth)
- if galType == 'Star':
- verts = StarCurve(self.starPoints,
- innerRadius,
- outerRadius,
- self.starTwist)
- if galType == 'Arc':
- verts = ArcCurve(self.arcSides,
- self.startAngle,
- self.endAngle,
- innerRadius,
- outerRadius,
- self.arcType)
- if galType == 'Cogwheel':
- verts = CogCurve(self.teeth,
- innerRadius,
- middleRadius,
- outerRadius,
- self.bevel)
- if galType == 'Nsided':
- verts = nSideCurve(self.Nsides,
- outerRadius)
-
- if galType == 'Splat':
- verts = SplatCurve(self.splatSides,
- self.splatScale,
- self.seed,
- self.basis,
- outerRadius)
-
- if galType == 'Helix':
- verts = HelixCurve(self.helixPoints,
- self.helixHeight,
- self.helixStart,
- self.helixEnd,
- self.helixWidth,
- self.helix_a,
- self.helix_b)
- if galType == 'Cycloid':
- verts = CycloidCurve(self.cycloPoints,
- self.cyclo_d,
- self.cycloType,
- self.cyclo_a,
- self.cyclo_b,
- self.cycloStart,
- self.cycloEnd)
-
- # turn verts into array
- vertArray = vertsToPoints(verts, splineType)
-
- # create object
- createCurve(vertArray, self, align_matrix)
-
- return
-
-class Curveaceous_galore(bpy.types.Operator):
- """Add many types of curves"""
- bl_idname = "mesh.curveaceous_galore"
- bl_label = "Curveaceous galore"
- bl_options = {'REGISTER', 'UNDO'}
-
- # align_matrix for the invoke
- align_matrix = Matrix()
-
- #### general properties
- GalloreTypes = [
- ('Profile', 'Profile', 'Profile'),
- ('Miscellaneous', 'Miscellaneous', 'Miscellaneous'),
- ('Flower', 'Flower', 'Flower'),
- ('Star', 'Star', 'Star'),
- ('Arc', 'Arc', 'Arc'),
- ('Cogwheel', 'Cogwheel', 'Cogwheel'),
- ('Nsided', 'Nsided', 'Nsided'),
- ('Splat', 'Splat', 'Splat'),
- ('Cycloid', 'Cycloid', 'Cycloid'),
- ('Helix', 'Helix (3D)', 'Helix')]
- GalloreType = EnumProperty(name="Type",
- description="Form of Curve to create",
- items=GalloreTypes)
- SplineTypes = [
- ('POLY', 'Poly', 'POLY'),
- ('NURBS', 'Nurbs', 'NURBS'),
- ('BEZIER', 'Bezier', 'BEZIER')]
- outputType = EnumProperty(name="Output splines",
- description="Type of splines to output",
- items=SplineTypes)
-
- #### Curve Options
- shapeItems = [
- ('2D', '2D', '2D'),
- ('3D', '3D', '3D')]
- shape = EnumProperty(name="2D / 3D",
- items=shapeItems,
- description="2D or 3D Curve")
- use_cyclic_u = BoolProperty(name="Cyclic",
- default=True,
- description="make curve closed")
- endp_u = BoolProperty(name="use_endpoint_u",
- default=True,
- description="stretch to endpoints")
- order_u = IntProperty(name="order_u",
- default=4,
- min=2, soft_min=2,
- max=6, soft_max=6,
- description="Order of nurbs spline")
- bezHandles = [
- ('VECTOR', 'Vector', 'VECTOR'),
- ('AUTOMATIC', 'Auto', 'AUTOMATIC')]
- handleType = EnumProperty(name="Handle type",
- description="bezier handles type",
- items=bezHandles)
-
- #### ProfileCurve properties
- ProfileCurveType = IntProperty(name="Type",
- min=1, soft_min=1,
- max=5, soft_max=5,
- default=1,
- description="Type of ProfileCurve")
- ProfileCurvevar1 = FloatProperty(name="var_1",
- default=0.25,
- description="var1 of ProfileCurve")
- ProfileCurvevar2 = FloatProperty(name="var_2",
- default=0.25,
- description="var2 of ProfileCurve")
-
- #### MiscCurve properties
- MiscCurveType = IntProperty(name="Type",
- min=1, soft_min=1,
- max=6, soft_max=6,
- default=1,
- description="Type of MiscCurve")
- MiscCurvevar1 = FloatProperty(name="var_1",
- default=1.0,
- description="var1 of MiscCurve")
- MiscCurvevar2 = FloatProperty(name="var_2",
- default=0.5,
- description="var2 of MiscCurve")
- MiscCurvevar3 = FloatProperty(name="var_3",
- default=0.1,
- min=0, soft_min=0,
- description="var3 of MiscCurve")
-
- #### Common properties
- innerRadius = FloatProperty(name="Inner radius",
- default=0.5,
- min=0, soft_min=0,
- description="Inner radius")
- middleRadius = FloatProperty(name="Middle radius",
- default=0.95,
- min=0, soft_min=0,
- description="Middle radius")
- outerRadius = FloatProperty(name="Outer radius",
- default=1.0,
- min=0, soft_min=0,
- description="Outer radius")
-
- #### Flower properties
- petals = IntProperty(name="Petals",
- default=8,
- min=2, soft_min=2,
- description="Number of petals")
- petalWidth = FloatProperty(name="Petal width",
- default=2.0,
- min=0.01, soft_min=0.01,
- description="Petal width")
-
- #### Star properties
- starPoints = IntProperty(name="Star points",
- default=8,
- min=2, soft_min=2,
- description="Number of star points")
- starTwist = FloatProperty(name="Twist",
- default=0.0,
- description="Twist")
-
- #### Arc properties
- arcSides = IntProperty(name="Arc sides",
- default=6,
- min=1, soft_min=1,
- description="Sides of arc")
- startAngle = FloatProperty(name="Start angle",
- default=0.0,
- description="Start angle")
- endAngle = FloatProperty(name="End angle",
- default=90.0,
- description="End angle")
- arcType = IntProperty(name="Arc type",
- default=3,
- min=1, soft_min=1,
- max=3, soft_max=3,
- description="Sides of arc")
-
- #### Cogwheel properties
- teeth = IntProperty(name="Teeth",
- default=8,
- min=2, soft_min=2,
- description="number of teeth")
- bevel = FloatProperty(name="Bevel",
- default=0.5,
- min=0, soft_min=0,
- max=1, soft_max=1,
- description="Bevel")
-
- #### Nsided property
- Nsides = IntProperty(name="Sides",
- default=8,
- min=3, soft_min=3,
- description="Number of sides")
-
- #### Splat properties
- splatSides = IntProperty(name="Splat sides",
- default=24,
- min=3, soft_min=3,
- description="Splat sides")
- splatScale = FloatProperty(name="Splat scale",
- default=1.0,
- min=0.0001, soft_min=0.0001,
- description="Splat scale")
- seed = IntProperty(name="Seed",
- default=0,
- min=0, soft_min=0,
- description="Seed")
- basis = IntProperty(name="Basis",
- default=0,
- min=0, soft_min=0,
- max=14, soft_max=14,
- description="Basis")
-
- #### Helix properties
- helixPoints = IntProperty(name="resolution",
- default=100,
- min=3, soft_min=3,
- description="resolution")
- helixHeight = FloatProperty(name="Height",
- default=2.0,
- min=0, soft_min=0,
- description="Helix height")
- helixStart = FloatProperty(name="Start angle",
- default=0.0,
- description="Helix start angle")
- helixEnd = FloatProperty(name="Endangle",
- default=360.0,
- description="Helix end angle")
- helixWidth = FloatProperty(name="Width",
- default=1.0,
- description="Helix width")
- helix_a = FloatProperty(name="var_1",
- default=0.0,
- description="Helix var1")
- helix_b = FloatProperty(name="var_2",
- default=0.0,
- description="Helix var2")
-
- #### Cycloid properties
- cycloPoints = IntProperty(name="Resolution",
- default=100,
- min=3, soft_min=3,
- description="Resolution")
- cyclo_d = FloatProperty(name="var_3",
- default=1.5,
- description="Cycloid var3")
- cycloType = IntProperty(name="Type",
- default=0,
- min=0, soft_min=0,
- max=0, soft_max=0,
- description="resolution")
- cyclo_a = FloatProperty(name="var_1",
- default=5.0,
- min=0.01, soft_min=0.01,
- description="Cycloid var1")
- cyclo_b = FloatProperty(name="var_2",
- default=0.5,
- min=0.01, soft_min=0.01,
- description="Cycloid var2")
- cycloStart = FloatProperty(name="Start angle",
- default=0.0,
- description="Cycloid start angle")
- cycloEnd = FloatProperty(name="End angle",
- default=360.0,
- description="Cycloid end angle")
-
- ##### DRAW #####
- def draw(self, context):
- layout = self.layout
-
- # general options
- col = layout.column()
- col.prop(self, 'GalloreType')
- col.label(text=self.GalloreType + " Options:")
-
- # options per GalloreType
- box = layout.box()
- if self.GalloreType == 'Profile':
- box.prop(self, 'ProfileCurveType')
- box.prop(self, 'ProfileCurvevar1')
- box.prop(self, 'ProfileCurvevar2')
- elif self.GalloreType == 'Miscellaneous':
- box.prop(self, 'MiscCurveType')
- box.prop(self, 'MiscCurvevar1', text='Width')
- box.prop(self, 'MiscCurvevar2', text='Height')
- if self.MiscCurveType == 5:
- box.prop(self, 'MiscCurvevar3', text='Rounded')
- elif self.GalloreType == 'Flower':
- box.prop(self, 'petals')
- box.prop(self, 'petalWidth')
- box.prop(self, 'innerRadius')
- box.prop(self, 'outerRadius')
- elif self.GalloreType == 'Star':
- box.prop(self, 'starPoints')
- box.prop(self, 'starTwist')
- box.prop(self, 'innerRadius')
- box.prop(self, 'outerRadius')
- elif self.GalloreType == 'Arc':
- box.prop(self, 'arcSides')
- box.prop(self, 'arcType') # has only one Type?
- box.prop(self, 'startAngle')
- box.prop(self, 'endAngle')
- box.prop(self, 'innerRadius') # doesn't seem to do anything
- box.prop(self, 'outerRadius')
- elif self.GalloreType == 'Cogwheel':
- box.prop(self, 'teeth')
- box.prop(self, 'bevel')
- box.prop(self, 'innerRadius')
- box.prop(self, 'middleRadius')
- box.prop(self, 'outerRadius')
- elif self.GalloreType == 'Nsided':
- box.prop(self, 'Nsides')
- box.prop(self, 'outerRadius', text='Radius')
-
- elif self.GalloreType == 'Splat':
- box.prop(self, 'splatSides')
- box.prop(self, 'outerRadius')
- box.prop(self, 'splatScale')
- box.prop(self, 'seed')
- box.prop(self, 'basis')
-
- elif self.GalloreType == 'Helix':
- box.prop(self, 'helixPoints')
- box.prop(self, 'helixHeight')
- box.prop(self, 'helixWidth')
- box.prop(self, 'helixStart')
- box.prop(self, 'helixEnd')
- box.prop(self, 'helix_a')
- box.prop(self, 'helix_b')
- elif self.GalloreType == 'Cycloid':
- box.prop(self, 'cycloPoints')
- #box.prop(self, 'cycloType') # needs the other types first
- box.prop(self, 'cycloStart')
- box.prop(self, 'cycloEnd')
- box.prop(self, 'cyclo_a')
- box.prop(self, 'cyclo_b')
- box.prop(self, 'cyclo_d')
-
- col = layout.column()
- col.label(text="Output Curve Type:")
- col.row().prop(self, 'outputType', expand=True)
- col.label(text="Curve Options:")
-
- # output options
- box = layout.box()
- if self.outputType == 'NURBS':
- box.row().prop(self, 'shape', expand=True)
- #box.prop(self, 'use_cyclic_u')
- #box.prop(self, 'endp_u')
- box.prop(self, 'order_u')
-
- elif self.outputType == 'POLY':
- box.row().prop(self, 'shape', expand=True)
- #box.prop(self, 'use_cyclic_u')
-
- elif self.outputType == 'BEZIER':
- box.row().prop(self, 'shape', expand=True)
- box.row().prop(self, 'handleType', expand=True)
- #box.prop(self, 'use_cyclic_u')
-
-
- ##### POLL #####
- @classmethod
- def poll(cls, context):
- return context.scene != None
-
- ##### EXECUTE #####
- def execute(self, context):
- # turn off undo
- undo = bpy.context.user_preferences.edit.use_global_undo
- bpy.context.user_preferences.edit.use_global_undo = False
-
- # deal with 2D - 3D curve differences
- if self.GalloreType in ['Helix', 'Cycloid']:
- self.shape = '3D'
- #else:
- #self.shape = '2D' # someone decide if we want this
-
- if self.GalloreType in ['Helix']:
- self.use_cyclic_u = False
- else:
- self.use_cyclic_u = True
-
-
- # main function
- main(context, self, self.align_matrix)
-
- # restore pre operator undo state
- bpy.context.user_preferences.edit.use_global_undo = undo
-
- return {'FINISHED'}
-
- ##### INVOKE #####
- def invoke(self, context, event):
- # store creation_matrix
- self.align_matrix = align_matrix(context)
- self.execute(context)
-
- return {'FINISHED'}
-
-################################################################################
-##### REGISTER #####
-
-def Curveaceous_galore_button(self, context):
- self.layout.operator(Curveaceous_galore.bl_idname, text="curvatures gallore", icon="PLUGIN")
-
-
-def register():
- bpy.utils.register_module(__name__)
-
- bpy.types.INFO_MT_curve_add.append(Curveaceous_galore_button)
-
-def unregister():
- bpy.utils.unregister_module(__name__)
-
- bpy.types.INFO_MT_curve_add.remove(Curveaceous_galore_button)
-
-if __name__ == "__main__":
- register()