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:
authorFlorian Meyer <florianfelix@web.de>2010-12-17 14:33:07 +0300
committerFlorian Meyer <florianfelix@web.de>2010-12-17 14:33:07 +0300
commitbdd695be76fd1ac6598681ba2274c831a450c23e (patch)
tree008918ee570d3c00a94b8a68630bc8eb1d1197f2 /add_curve_torus_knots.py
parent7469598ae079768fe869205ba647986a94c988f5 (diff)
recoded for add_utils. reduced the code by half. but there is now a bug with adding with entering into edit mode. no show stopper. but needs to be investigated
Diffstat (limited to 'add_curve_torus_knots.py')
-rw-r--r--add_curve_torus_knots.py146
1 files changed, 43 insertions, 103 deletions
diff --git a/add_curve_torus_knots.py b/add_curve_torus_knots.py
index 85824c8b..9e6af7cb 100644
--- a/add_curve_torus_knots.py
+++ b/add_curve_torus_knots.py
@@ -37,82 +37,38 @@ bl_addon_info = {
#### import modules
import bpy
from bpy.props import *
-from mathutils import *
+#from mathutils import *
from math import *
-
-##------------------------------------------------------------
-# 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.rotation_part().invert().resize4x4()
- else:
- rot = Matrix()
- align_matrix = loc * rot
- return align_matrix
+from add_utils import *
##------------------------------------------------------------
#### Curve creation functions
-# get array of vertcoordinates acording to splinetype
-def vertsToPoints(Verts):
- vertArray = []
-
- for v in Verts:
- vertArray += v
- vertArray.append(1) #for nurbs w=1
-
- return vertArray
-
-# create new CurveObject from vertarray and splineType
-def createCurve(vertArray, props, align_matrix):
- # options to vars
- splineType = 'NURBS'
- name = 'Torus_Knot'
-
- # 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
- newSpline.points.add(int(len(vertArray)*0.25 - 1))
- newSpline.points.foreach_set('co', vertArray)
- newSpline.use_endpoint_u = True
-
- # Curve settings
- newCurve.dimensions = '3D'
- newSpline.use_cyclic_u = True
- newSpline.use_endpoint_u = True
- newSpline.order_u = 4
-
- if props.geo_surf:
- newCurve.bevel_depth = props.geo_bDepth
- newCurve.bevel_resolution = props.geo_bRes
- newCurve.use_fill_front = False
- newCurve.use_fill_back = False
- newCurve.extrude = props.geo_extrude
- #newCurve.offset = props.geo_width # removed, somehow screws things up all of a sudden
- newCurve.resolution_u = props.geo_res
-
- # 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
-
- return
-
+def create_curve_data(verts):
+ curve_data = bpy.data.curves.new(name='Torus Knot', type='CURVE')
+ spline = curve_data.splines.new(type='NURBS')
+ spline.points.add(int(len(verts)*0.25 - 1))
+ spline.points.foreach_set('co', verts)
+ spline.use_endpoint_u = True
+ spline.use_cyclic_u = True
+ spline.order_u = 4
+ curve_data.dimensions = '3D'
+
+ return curve_data
+
########################################################################
####################### Knot Definitions ###############################
########################################################################
-
-#### TORUS KNOT
-def Torus_Knot_Curve(p=2, q=3, w=1, res=24, formula=0, h=1, u=1 ,v=1, rounds=2):
+def Torus_Knot(self):
+ p = self.torus_p
+ q = self.torus_q
+ w = self.torus_w
+ res = self.torus_res
+ h = self.torus_h
+ u = self.torus_u
+ v = self.torus_v
+ rounds = self.torus_rounds
+
newPoints = []
angle = 2*rounds
step = angle/(res-1)
@@ -126,45 +82,37 @@ def Torus_Knot_Curve(p=2, q=3, w=1, res=24, formula=0, h=1, u=1 ,v=1, rounds=2):
y = (2 * scale + cos((q*t)/p*v)) * sin(t * u)
z = sin(q*t/p) * height
- newPoints.append([x,y,z])
+ newPoints.extend([x,y,z,1])
return newPoints
+
##------------------------------------------------------------
# Main Function
-def main(context, props, align_matrix):
- # deselect all objects
- bpy.ops.object.select_all(action='DESELECT')
-
- # get verts
- verts = Torus_Knot_Curve(props.torus_p,
- props.torus_q,
- props.torus_w,
- props.torus_res,
- props.torus_formula,
- props.torus_h,
- props.torus_u,
- props.torus_v,
- props.torus_rounds)
-
- # turn verts into array
- vertArray = vertsToPoints(verts)
+def create_torus_knot(self, context):
+ verts = Torus_Knot(self)
- # create object
- createCurve(vertArray, props, align_matrix)
+ curve_data = create_curve_data(verts)
+
+ if self.geo_surf:
+ curve_data.bevel_depth = self.geo_bDepth
+ curve_data.bevel_resolution = self.geo_bRes
+ curve_data.use_fill_front = False
+ curve_data.use_fill_back = False
+ curve_data.extrude = self.geo_extrude
+ #curve_data.offset = self.geo_width # removed, somehow screws things up all of a sudden
+ curve_data.resolution_u = self.geo_res
+
+ new_obj = add_object_data(context, curve_data, operator=self)
- return
-class torus_knot_plus(bpy.types.Operator):
+class torus_knot_plus(bpy.types.Operator, AddObjectHelper):
''''''
bl_idname = "torus_knot_plus"
bl_label = "Torus Knot +"
bl_options = {'REGISTER', 'UNDO'}
bl_description = "adds many types of knots"
- # align_matrix for the invoke
- align_matrix = Matrix()
-
#### general options
options_plus = BoolProperty(name="plus options",
default=False,
@@ -284,22 +232,14 @@ class torus_knot_plus(bpy.types.Operator):
if not self.options_plus:
self.torus_rounds = self.torus_p
- # main function
- main(context, self, self.align_matrix)
+ #recoded for add_utils
+ create_torus_knot(self, context)
# 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 #####