[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20141] trunk/blender/release/scripts/ wizard_bolt_factory.py: bolt wizard from Aaron Keith (Spudmn), edits from Brendon and myself.
Campbell Barton
ideasman42 at gmail.com
Mon May 11 07:10:10 CEST 2009
Revision: 20141
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20141
Author: campbellbarton
Date: 2009-05-11 07:10:09 +0200 (Mon, 11 May 2009)
Log Message:
-----------
bolt wizard from Aaron Keith (Spudmn), edits from Brendon and myself.
Minor changes are...
- default size is smaller then it was but still too big IMHO, presets are huge.
- deselect all objects and make the new bolt active
- place the new bolt at the 3D cursor location
Added Paths:
-----------
trunk/blender/release/scripts/wizard_bolt_factory.py
Added: trunk/blender/release/scripts/wizard_bolt_factory.py
===================================================================
--- trunk/blender/release/scripts/wizard_bolt_factory.py (rev 0)
+++ trunk/blender/release/scripts/wizard_bolt_factory.py 2009-05-11 05:10:09 UTC (rev 20141)
@@ -0,0 +1,3041 @@
+#!BPY
+
+"""
+Name: 'Bolt Factory'
+Blender: 249
+Group: 'Wizards'
+Tooltip: 'Create models of various types to screw fasteners.'
+"""
+
+__author__ = " Aaron Keith (Spudmn) "
+__version__ = "1.50 "
+__url__ = ["blender", "http://wiki.blender.org/index.php/Extensions:Py/Scripts/Manual/Misc/Bolt_Factory"]
+__email__= [""]
+__bpydoc__ = """\
+Bolt_Factory.py
+
+Bolt Factory is a Python script for Blender 3D.
+
+The script allows the user to create models of various types to screw fasteners.
+
+This version is very much a work in progress.
+
+This is my first attempt to program in Python. This version is unpolished and
+doesn't do much error checking. Therefore if the user sets strange
+variable the model created will be as equally strange.
+
+For best results set the material to smooth and apply a Edge Split modifier
+with default settings.
+
+To Do:
+Better error checking.
+Nuts to go with the bolts.
+Pre-sets for common bolts.
+Improved GUI.
+More Head and Bit types.
+Better documentation.
+Fix error with mesh when using crest and root percent other than 10.
+
+
+"""
+
+# --------------------------------------------------------------------------
+# Bolt_Factory.py
+# --------------------------------------------------------------------------
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# Copyright (C) 2008: Aaron Keith
+#
+# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# ***** END GPL LICENCE BLOCK *****
+# --------------------------------------------------------------------------
+
+
+
+
+import Blender
+from Blender import Draw, BGL,Mesh
+from Blender import *
+from math import *
+from Blender import Mathutils
+from Blender.Mathutils import *
+
+
+Global_NutRad = 0.0
+MAX_INPUT_NUMBER = 50
+
+No_Event,On_Preset_Click,On_Apply_Click,On_Create_Click,On_Hex_Click, On_Cap_Click,On_Dome_Click,On_Pan_Click,On_Bit_None_Click,On_Bit_Allen_Click,On_Bit_Philips_Click,On_Exit_Click,On_Model_Bolt_Click,On_Model_Nut_Click,On_Hex_Nut_Click,On_Lock_Nut_Click,On_Test_Click = range(17) # this is like a ENUM
+
+
+Head_Type={'HEX' : [Draw.Create(1),On_Hex_Click],
+ 'CAP' : [Draw.Create(0),On_Cap_Click],
+ 'DOME': [Draw.Create(0),On_Dome_Click],
+ 'PAN' : [Draw.Create(0),On_Pan_Click]}
+
+
+Bit_Type={'NONE' : [Draw.Create(1),On_Bit_None_Click],
+ 'ALLEN' : [Draw.Create(0),On_Bit_Allen_Click],
+ 'PHILLIPS': [Draw.Create(0),On_Bit_Philips_Click]}
+
+Model_Type={'BOLT' : [Draw.Create(1),On_Model_Bolt_Click],
+ 'NUT' : [Draw.Create(0),On_Model_Nut_Click]}
+
+Nut_Type={'HEX' : [Draw.Create(1),On_Hex_Nut_Click],
+ 'LOCK' : [Draw.Create(0),On_Lock_Nut_Click]}
+
+
+
+Phillips_Bit_Depth = Draw.Create(1.0)
+Philips_Bit_Dia = Draw.Create(1.75)
+
+Allen_Bit_Depth = Draw.Create(1.0)
+Allen_Bit_Flat_Distance = Draw.Create(1.25)
+
+Hex_Head_Height = Draw.Create(1.0)
+Hex_Head_Flat_Distance = Draw.Create(2.25)
+
+Cap_Head_Dia = Draw.Create(2.25)
+Cap_Head_Height = Draw.Create(1.5)
+Cap_Head_Inside_Rad = 0.0
+
+Dome_Head_Dia = Draw.Create(3.75)
+
+Pan_Head_Dia = Draw.Create(5.375)
+
+Shank_Dia = Draw.Create(1.5)
+Shank_Length = Draw.Create(0.125)
+
+Thread_Length = Draw.Create(2.5)
+Major_Dia = Draw.Create(1.5)
+Minor_Dia = Draw.Create(1.25)
+Pitch = Draw.Create(0.125)
+Crest_Percent = Draw.Create(1.25)
+Root_Percent = Draw.Create(1.25)
+
+Hex_Nut_Height = Draw.Create(1.0)
+Hex_Nut_Flat_Distance = Draw.Create(2.25)
+
+Preset_Menu = Draw.Create(0.25)
+Preset_Length = Draw.Create(1.5)
+
+
+##########################################################################################
+##########################################################################################
+## Miscellaneous Utilities
+##########################################################################################
+##########################################################################################
+
+
+def Rot_Mesh(verts,matrix):
+ ret = []
+ for v in verts:
+ vec = Vector(v) * matrix
+ ret.append([vec.x,vec.y,vec.z])
+ return ret
+
+def Copy_Faces(faces,offset):
+ ret = []
+ for f in faces:
+ fsub = []
+ for i in range(len(f)):
+ fsub.append(f[i]+ offset)
+ ret.append(fsub)
+ return ret
+
+def Move_Verts_Up_Z(VERTS,DISTANCE):
+ ret = []
+ for v in VERTS:
+ ret.append([v[0],v[1],v[2]+DISTANCE])
+ return ret
+
+
+def SpinDup(VERTS,FACES,DEGREE,DIVISIONS,AXIS):
+ verts=[]
+ faces=[]
+
+ if DIVISIONS == 0:
+ DIVISIONS = 1
+
+ step = DEGREE/DIVISIONS # set step so pieces * step = degrees in arc
+
+ for i in range(int(DIVISIONS)):
+ rotmat = Mathutils.RotationMatrix(step*i, 4, AXIS) # 4x4 rotation matrix, 30d about the x axis.
+ Rot = Rot_Mesh(VERTS,rotmat)
+ faces.extend(Copy_Faces(FACES,len(verts)))
+ #print faces
+ verts.extend(Rot)
+ return verts,faces
+
+
+def Mirror_Verts(VERTS,AXIS):
+ ret = []
+ for v in VERTS:
+ ret.append([0-v[0],v[1],v[2]])
+ return ret
+
+
+def Mirror_Verts_Faces(VERTS,FACES,AXIS,FLIP_POINT =0):
+ ret_vert = []
+ ret_face = []
+ offset = len(VERTS)
+ if AXIS == 'y':
+ for v in VERTS:
+ Delta = v[0] - FLIP_POINT
+ ret_vert.append([FLIP_POINT-Delta,v[1],v[2]])
+ if AXIS == 'x':
+ for v in VERTS:
+ Delta = v[1] - FLIP_POINT
+ ret_vert.append([v[0],FLIP_POINT-Delta,v[2]])
+ if AXIS == 'z':
+ for v in VERTS:
+ Delta = v[2] - FLIP_POINT
+ ret_vert.append([v[0],v[1],FLIP_POINT-Delta])
+
+ for f in FACES:
+ fsub = []
+ for i in range(len(f)):
+ fsub.append(f[i]+ offset)
+ fsub.reverse() # filp the order to make norm point out
+ ret_face.append(fsub)
+
+ return ret_vert,ret_face
+
+def Lath(tool_V1,tool_V2,verts,faces):
+
+ #verts = []
+ #faces = []f
+
+ #verts.append([7.0,6.0,0.0])
+ #verts.append([7.0+10,6.0-10,0.0])
+ #faces.append([3,4])
+
+ vec1 = Vector(verts[-1])
+ vec2 = Vector(verts[-2])
+
+ VecOut1,VecR2 = LineIntersect(vec1, vec2,Vector(tool_V1), Vector(tool_V2))
+
+ vec1 = Vector(verts[-2])
+ vec2 = Vector(verts[-3])
+
+ VecOut2,VecR2 = LineIntersect(vec1, vec2,Vector(tool_V1), Vector(tool_V2))
+
+ if VecOut1 != None:
+ if VecOut1 == VecOut2:
+ #print "got it"
+ faces.append([len(verts),len(verts)+1])
+ verts.append([VecOut1.x,VecOut1.y,VecOut1.z])
+ verts.append([VecOut2.x,VecOut2.y,VecOut2.z])
+ #print verts[-1]
+ #print verts[-2]
+
+ return verts,faces
+
+
+def Build_Face_List_Quads(OFFSET,COLUM,ROW,FLIP = 0):
+ Ret =[]
+ RowStart = 0;
+ for j in range(ROW):
+ for i in range(COLUM):
+ Res1 = RowStart + i;
+ Res2 = RowStart + i + (COLUM +1)
+ Res3 = RowStart + i + (COLUM +1) +1
+ Res4 = RowStart+i+1
+ if FLIP:
+ Ret.append([OFFSET+Res1,OFFSET+Res2,OFFSET+Res3,OFFSET+Res4])
+ else:
+ Ret.append([OFFSET+Res4,OFFSET+Res3,OFFSET+Res2,OFFSET+Res1])
+ RowStart += COLUM+1
+ return Ret
+
+
+
+def Fill_Ring_Face(OFFSET,NUM,FACE_DOWN = 0):
+ Ret =[]
+ Face = [1,2,0]
+ TempFace = [0,0,0]
+ A = 0
+ B = 1
+ C = 2
+ if NUM < 3:
+ return None
+ for i in range(NUM-2):
+ if (i%2):
+ TempFace[0] = Face[C];
+ TempFace[1] = Face[C] + 1;
+ TempFace[2] = Face[B];
+ if FACE_DOWN:
+ Ret.append([OFFSET+Face[2],OFFSET+Face[1],OFFSET+Face[0]])
+ else:
+ Ret.append([OFFSET+Face[0],OFFSET+Face[1],OFFSET+Face[2]])
+ else:
+ TempFace[0] =Face[C];
+ if Face[C] == 0:
+ TempFace[1] = NUM-1;
+ else:
+ TempFace[1] = Face[C] - 1;
+ TempFace[2] = Face[B];
+ if FACE_DOWN:
+ Ret.append([OFFSET+Face[0],OFFSET+Face[1],OFFSET+Face[2]])
+ else:
+ Ret.append([OFFSET+Face[2],OFFSET+Face[1],OFFSET+Face[0]])
+
+ Face[0] = TempFace[0]
+ Face[1] = TempFace[1]
+ Face[2] = TempFace[2]
+ return Ret
+
+
+def Flat_To_Radius(FLAT):
+ h = (float(FLAT)/2)/cos(radians(30))
+ #print h
+ return h
+
+
+
+##########################################################################################
+##########################################################################################
+## Error Checking
+##########################################################################################
+##########################################################################################
+
+
+def Error_Check():
+
+ #global Phillips_Bit_Depth
+ #global Philips_Bit_Dia
+
+ #global Allen_Bit_Depth
+ #global Allen_Bit_Flat_Distance
+
+ #global Hex_Head_Height
+ #global Hex_Head_Flat_Distance
+
+ #global Cap_Head_Dia
+ #global Cap_Head_Height
+
+
+ #global Dome_Head_Dia
+
+ #global Pan_Head_Dia
+
+ #global Shank_Dia
+ #global Shank_Length
+
+ global Thread_Length
+ global Major_Dia
+ global Minor_Dia
+ global Pitch
+ #global Crest_Percent
+ #global Root_Percent
+
+ Error_Result = 0
+
+ if Minor_Dia.val >= Major_Dia.val:
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list