[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [694] trunk/py/scripts/addons/ add_curve_torus_knots.py: - lots of code cleanup, removed everything unnecessary/unused
Florian Meyer
florianfelix at web.de
Thu May 27 13:36:03 CEST 2010
Revision: 694
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-extensions&revision=694
Author: testscreenings
Date: 2010-05-27 13:36:03 +0200 (Thu, 27 May 2010)
Log Message:
-----------
- lots of code cleanup, removed everything unnecessary/unused
- some better tool tips
- rework of UI
- defaults to options for torus knots only now
- button to show additional parameters
Modified Paths:
--------------
trunk/py/scripts/addons/add_curve_torus_knots.py
Modified: trunk/py/scripts/addons/add_curve_torus_knots.py
===================================================================
--- trunk/py/scripts/addons/add_curve_torus_knots.py 2010-05-26 05:16:35 UTC (rev 693)
+++ trunk/py/scripts/addons/add_curve_torus_knots.py 2010-05-27 11:36:03 UTC (rev 694)
@@ -49,42 +49,22 @@
##------------------------------------------------------------
#### 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
+def vertsToPoints(Verts):
vertArray = []
- # array for BEZIER spline output (V3)
- if splineType == 'BEZIER':
- for v in Verts:
- vertArray += v
+ for v in Verts:
+ vertArray += v
+ vertArray.append(1) #for nurbs w=1
- # 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, GEO, options, curveOptions, align_matrix):
+def createCurve(vertArray, GEO, align_matrix):
# options to vars
- splineType = options[0] # output splineType 'POLY' 'NURBS' 'BEZIER'
- name = options[1] # KnotType as name
+ splineType = 'NURBS'
+ name = 'Torus_Knot'
# create curve
scene = bpy.context.scene
@@ -92,26 +72,16 @@
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.endpoint_u = True
+ newSpline.points.add(int(len(vertArray)*0.25 - 1))
+ newSpline.points.foreach_set('co', vertArray)
+ newSpline.endpoint_u = True
- # set curveOptions
- shape = curveOptions[0]
- cyclic_u = curveOptions[1]
- endp_u = curveOptions[2]
- order_u = curveOptions[3]
- handleType = curveOptions[4]
+ # Curve settings
+ newCurve.dimensions = '3D'
+ newSpline.cyclic_u = True
+ newSpline.endpoint_u = True
+ newSpline.order_u = 4
- newCurve.dimensions = shape
- newSpline.cyclic_u = cyclic_u
- newSpline.endpoint_u = endp_u
- newSpline.order_u = order_u
-
# GEO Options
surf = GEO[0]
bDepth = GEO[1]
@@ -136,10 +106,6 @@
scene.objects.active = new_obj # set as active
new_obj.matrix = align_matrix # apply matrix
- # set bezierhandles
- if splineType == 'BEZIER':
- setBezierHandles(new_obj, handleType)
-
return
########################################################################
@@ -149,72 +115,41 @@
#### TORUS KNOT
def Torus_Knot_Curve(p=2, q=3, w=1, res=24, formula=0, h=1, u=1 ,v=1, rounds=2):
newPoints = []
- angle = (2.0/360.0)*360*rounds
- #angle = 360/pi
+ angle = 2*rounds
step = angle/(res-1)
scale = h
height = w
- if formula == 0:
- for i in range(res-1):
- t = ( i*step*pi)
-
- x = (2 * scale + cos((q*t)/p*v)) * cos(t * u)
- y = (2 * scale + cos((q*t)/p*v)) * sin(t * u)
- z = sin(q*t/p) * height
-
- newPoints.append([x,y,z])
-
- if formula == 1:
- for i in range(res-1):
- t = ( i*step)
-
- x = ((2*w + cos((q*t)/p)) * cos(t*p)) * sin(t/p)
- y = ((2*w + cos((q*t)/p)) * sin(t*p)) * sin(t/p)
- z = sin(q*t/p)
-
- newPoints.append([x,y,z])
-
- if formula == 2:
- for i in range(res-1):
- t = ( i*step)
- beta = t*pi
-
- r = 0.8 + 1.6 * sin(q * beta/p)
- theta = 2 * beta
- phi = 0.6 * pi * sin(q * beta/p)
-
- x = r * cos(phi) * cos(theta)
- y = r * cos(phi) * sin(theta)
- z = r * sin(phi)
-
- newPoints.append([x,y,z])
+ for i in range(res-1):
+ t = ( i*step*pi)
+
+ x = (2 * scale + cos((q*t)/p*v)) * cos(t * u)
+ y = (2 * scale + cos((q*t)/p*v)) * sin(t * u)
+ z = sin(q*t/p) * height
+
+ newPoints.append([x,y,z])
-
- #newPoints = [[-1,-1,0], [-1,1,0], [1,1,0], [1,-1,0]]
return newPoints
##------------------------------------------------------------
# Main Function
-def main(context, param, GEO, options, curveOptions, align_matrix):
+def main(context, param, GEO, options, align_matrix):
# deselect all objects
bpy.ops.object.select_all(action='DESELECT')
# options
- knotType = options[1]
- splineType = options[0]
+ splineType = 'NURBS'
# get verts
- if knotType == 'Torus_Knot':
- verts = Torus_Knot_Curve(param[0], param[1], param[2], param[3], param[4],
- param[5], param[6], param[7], param[8])
+ verts = Torus_Knot_Curve(param[0], param[1], param[2], param[3], param[4],
+ param[5], param[6], param[7], param[8])
# turn verts into array
- vertArray = vertsToPoints(verts, splineType)
+ vertArray = vertsToPoints(verts)
# create object
- createCurve(vertArray, GEO, options, curveOptions, align_matrix)
+ createCurve(vertArray, GEO, align_matrix)
return
@@ -229,19 +164,9 @@
align_matrix = Matrix()
#### general options
- KnotTypes = [
- ('Torus_Knot', 'Torus Knot', 'Torus_Knot')
- ]
- KnotType = EnumProperty(name="Type",
- description="Form of Curve to create",
- items=KnotTypes)
- SplineTypes = [
- ('NURBS', 'Nurbs', 'NURBS'),
- ('POLY', 'Poly', 'POLY'),
- ('BEZIER', 'Bezier', 'BEZIER')]
- outputType = EnumProperty(name="Output splines",
- description="Type of splines to output",
- items=SplineTypes)
+ options_plus = BoolProperty(name="plus options",
+ default=False,
+ description="Show more options (the plus part).")
#### GEO Options
geo_surf = BoolProperty(name="Surface",
@@ -263,36 +188,12 @@
default=12,
min=1, soft_min=1)
- #### Curve Options
- shapeItems = [
- ('3D', '3D', '3D'),
- ('2D', '2D', '2D')]
- shape = EnumProperty(name="2D / 3D",
- items=shapeItems,
- description="2D or 3D Curve")
- cyclic_u = BoolProperty(name="Cyclic",
- default=True,
- description="make curve closed")
- endp_u = BoolProperty(name="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)
#### Parameters
torus_res = IntProperty(name="Resoulution",
default=200,
min=3, soft_min=3,
- description='Resolution')
+ description='Resolution, Number of controlverticies.')
torus_p = IntProperty(name="p",
default=2,
min=1, soft_min=1,
@@ -303,16 +204,16 @@
min=1, soft_min=1,
#max=1, soft_max=1,
description="q")
- torus_w = FloatProperty(name="height",
+ torus_w = FloatProperty(name="Height",
default=1,
#min=0, soft_min=0,
#max=1, soft_max=1,
- description="height")
- torus_h = FloatProperty(name="scale",
+ description="Height in Z")
+ torus_h = FloatProperty(name="Scale",
default=1,
#min=0, soft_min=0,
#max=1, soft_max=1,
- description="scale")
+ description="Scale, in XY")
torus_u = IntProperty(name="u",
default=1,
min=1, soft_min=1,
@@ -327,11 +228,11 @@
default=0,
min=0, soft_min=0,
max=10, soft_max=10)
- torus_rounds = IntProperty(name="rounds",
+ torus_rounds = IntProperty(name="Rounds",
default=2,
min=1, soft_min=1,
#max=1, soft_max=1,
- description="rounds")
+ description="Rounds")
##### DRAW #####
def draw(self, context):
@@ -341,46 +242,21 @@
# general options
col = layout.column()
#col.prop(props, 'KnotType') waits for more knottypes
- col.label(text=props.KnotType+" Parameters")
+ col.label(text="Torus Knot Parameters")
- # Parameters per KnotType
+ # Parameters
box = layout.box()
- if props.KnotType == 'Torus_Knot':
- #box.prop(props, 'torus_formula')
- box.prop(props, 'torus_res')
- box.prop(props, 'torus_p')
- box.prop(props, 'torus_q')
+ box.prop(props, 'torus_res')
+ box.prop(props, 'torus_w')
+ box.prop(props, 'torus_h')
+ box.prop(props, 'torus_p')
+ box.prop(props, 'torus_q')
+ box.prop(props, 'options_plus')
+ if props.options_plus:
box.prop(props, 'torus_u')
box.prop(props, 'torus_v')
box.prop(props, 'torus_rounds')
- box.prop(props, 'torus_w')
- box.prop(props, 'torus_h')
- # Output Type
- col = layout.column()
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list