#"Newton"
#arash Hosseini 19.03.2014
import maya.cmds as cmds
import pymel.core as pm
import maya.mel as mel
#/check window exist/
if cmds.window("dynamo", exists = True):
cmds.deleteUI("dynamo")
if cmds.window("dynamo_locators", exists=True):
cmds.deleteUI("dynamo_locators")
if cmds.window("dupSpecialX", exists=True):
cmds.deleteUI("dupSpecialX")
if cmds.window("dupSpecialY", exists=True):
cmds.deleteUI("dupSpecialY")
if cmds.window("dupSpecialZ", exists=True):
cmds.deleteUI("dupSpecialZ")
#/main window/
[docs]def UI():
cmds.warning("Welcome to Newton. For more Information press the Help Button.")
window = cmds.window("dynamo", title = "Jelly_0.1", w =330, h=400, mnb=True, mxb=False, menuBar=True,sizeable=False)
cmds.scrollLayout( 'scrollLayout' )
#/menu/
cmds.columnLayout( columnAttach=('both', 0), rowSpacing=1, columnWidth=300)
cmds.menu( label='Duplicate Special', tearOff=True )
cmds.menuItem(subMenu=True,label='X Axis')
cmds.menuItem(label='X Translate',command=duplicateSpecialX)
cmds.setParent( '..', menu=True )
cmds.menuItem(subMenu=True,label='Y Axis')
cmds.menuItem( label='Y Translate',command=duplicateSpecialY)
cmds.setParent( '..', menu=True )
cmds.menuItem(subMenu=True,label='Z Axis')
cmds.menuItem( label='Z Translate',command=duplicateSpecialZ)
cmds.setParent('..',menu=True)
cmds.menuItem(label='Maya Interface', command=mayaInterface)
cmds.menu( label='Help', tearOff=True )
cmds.menuItem(label='Help')
cmds.menuItem(label='Info')
cmds.columnLayout( columnAttach=('both', 3), rowSpacing=1, columnWidth=300)
#/image/
imagePath = cmds.internalVar(upd = True) + "icons/newton.jpg"
#cmds.image(w = 200, h = 120, image = imagePath)
cmds.columnLayout( adjustableColumn=True )
cmds.frameLayout( label='Locators', bgc=(0.7,0.2,0.2),w=250,cll=True,borderStyle='out' )
cmds.columnLayout( columnAttach=('both', 0), rowSpacing=1, columnWidth=285)
cmds.button(label="Create Locator on Vertex",command=createVertexOnPoint)
cmds.button(label="Create Locator on Space",command=createLocator)
cmds.button(label="Snap Object to Target",command=snapLocatorToTarget)
cmds.button(label="Create Locator based on Target Matrix",command=createLocatorOnCenter)
cmds.setParent( '..' )
cmds.setParent( '..' )
cmds.frameLayout( label='Data', bgc=(0.7,0.2,0.2),cll=True,borderStyle='in' )
cmds.columnLayout( columnAttach=('both', 0), rowSpacing=1, columnWidth=285)
locatorsNumberOptionMenu = cmds.textScrollList("locatorsNumberOptionMenu",w=100, h = 100)
cmds.button(label="Show Locators",h=50,command=loadLoc)
cmds.rowColumnLayout( numberOfColumns=3, columnAttach=(1, 'left', 0), columnWidth=[(1,100),(2,100),(3,80)])
cmds.text(label="Set Start Number",align='left')
cmds.textField('startLoc')
cmds.button(label="Set",command=setStartNumber)
cmds.text(label="Set End Number",align='left')
cmds.textField('endLoc')
cmds.button(label="Set",command=setEndNumber)
cmds.text(label="Set Mesh", align='left')
cmds.textField('SMesh')
cmds.button(label="Set",command=queryMesh)
cmds.text(label='Point Lock', align='left')
pointLockOptionMenu = cmds.optionMenu("pointLockOptionMenu",w=180)
cmds.menuItem(label='1.Base')
cmds.menuItem(label='2.Tip')
cmds.menuItem(label='3.BothEnds')
cmds.text(label="")
cmds.setParent( '..' )
cmds.setParent( '..' )
cmds.setParent( '..' )
cmds.frameLayout( label='Build',bgc=(0.7,0.2,0.2),cll=True, borderStyle='in' )
cmds.columnLayout( columnAttach=('both', 3), rowSpacing=1, columnWidth=290)
cmds.button(label="Build without Mesh",bgc=(0.5,0.7,0.5),h=40,command=buildwitoutMesh)
cmds.button(label="Build with Mesh",bgc=(0.5,0.7,0.5),h=40,command=buildwithMesh)
cmds.button(label="manuell Skining",command=skining)
cmds.setParent( '..' )
cmds.setParent( '..' )
cmds.frameLayout( label='tools',bgc=(0.7,0.2,0.2),cll=True, borderStyle='in' )
cmds.rowColumnLayout( numberOfColumns=2, columnAttach=(1, 'left', 0), columnWidth=[(1,185),(2,100)])
cmds.button(label="PB",w=150,command=interaktivPlayback)
cmds.button(label="Out",command=outliner)
Rename=cmds.textField('Rename',w=150)
cmds.button(label="Rename",command=RenameMesh)
Suffix=cmds.textField('Suffix',w=150)
cmds.button(label="Suffix",command=SuffixMesh)
cmds.setParent( '..' )
cmds.setParent( '..' )
cmds.showWindow()
#Locator Area
#Loc On Vertex
[docs]def createVertexOnPoint(*args):
selectedVertices =[]
selectedVertices = pm.ls( selection=True )
print("Selected objects " + str(len(selectedVertices)))
selectedVerticesLen=len(selectedVertices)
if selectedVerticesLen==1:
for vertex in selectedVertices:
vertexLocator=pm.spaceLocator( p=vertex.getPosition(space='world'), name='locator1')
pm.xform(vertexLocator,cp=1)
#print(vertex.getPosition())
del selectedVertices
else:
cmds.warning("Bitte eine Vertex auswaehlen")
#Loc On Space
[docs]def createLocator(*args):
createLocator=cmds.spaceLocator(name="locator1")
#Loc to Target
[docs]def snapLocatorToTarget(*args):
sel = cmds.ls( selection=True )
sellen=len(sel)
if sellen==2:
E = sel[1]
F = sel[0]
Fmatrix = cmds.xform( F, query=True, worldSpace=True, matrix=True )
cmds.xform( E, worldSpace=True, matrix=Fmatrix )
else:
cmds.warning("Bitte zuerst Driver dann Target auswaehlen")
[docs]def duplicateSpecial(*args):
sel=cmds.ls(selection=True)
sellen=len(sel)
if sellen==1:
x=null
else:
cmds.warning("Bitte Object auswahlen")
#Loc On Center of Object
[docs]def createLocatorOnCenter(*args):
objectsList=cmds.ls(selection=True)
sellen=len(objectsList)
if sellen==1:
ziel=objectsList[0]
queryObjectPos=cmds.xform(ziel,query=True, worldSpace=True, matrix=True )
print queryObjectPos
for i in objectsList:
createLocator=cmds.spaceLocator(p=(0,0,0),r=True,name="locator1")
centerPivot=cmds.xform(createLocator,cp=1,worldSpace=True, matrix=queryObjectPos)
else:
cmds.warning("Select Object")
#load locators
[docs]def loadLoc(*args):
if cmds.window("dynamo_locators", exists=True):
cmds.deleteUI("dynamo_locators")
lsloc=cmds.ls(selection=True)
lenlsloc=len(lsloc)
locatorsNumbermenuItem=cmds.textScrollList("locatorsNumberOptionMenu",e=True,ra=True)
if lenlsloc>0:
#/windows Jelly Locatorslist/
cmds.window("dynamo_locators",title="Jelly_Locatorslist",mnb=True, mxb=False,w=80,h=50,sizeable=False)
cmds.columnLayout( columnAttach=('both', 0), rowSpacing=1,columnWidth=30,h=200)
locatorOptionMenu = cmds.textScrollList("locatorOptionMenu",w=100, h = 200,dcc=selectLocator)
cmds.showWindow()
for locs, objects in enumerate(lsloc):
cmds.textScrollList("locatorsNumberOptionMenu", e=True, append=locs)
cmds.textScrollList("locatorOptionMenu", e=True, append=objects)
else:
cmds.warning("Select Locators")
[docs]def selectLocator(*args):
queryLocOpMenu=cmds.textScrollList("locatorOptionMenu", q=True, si=True)[0]
cmds.select(queryLocOpMenu)
[docs]def setStartNumber(*args):
queryLocOpMenu=cmds.textScrollList("locatorsNumberOptionMenu", q=True, si=True)[0]
setStart = cmds.textField('startLoc', edit=True, text=queryLocOpMenu)
[docs]def setEndNumber(*args):
queryLocOpMenu=cmds.textScrollList("locatorsNumberOptionMenu", q=True, si=True)[0]
setEnd = cmds.textField('endLoc', edit=True, text=queryLocOpMenu)
#/duplicate Special area/
[docs]def translateXpermanent(*args):
sel=cmds.ls(selection=True)
lensel=len(sel)
if lensel ==1:
queryCopiesX=cmds.textField('copiesXper', v=True, q=True)
queryTransX=cmds.textField('translateXper', v=True, q=True)
range=int(queryCopiesX)
abstand=float(queryTransX)
for i in xrange(range):
j=cmds.duplicate(rr=True)
cmds.move(abstand,j,x=True,r=True,objectSpace=True)
else:
cmds.warning("select Object")
[docs]def trasnlateXincreasing(*args):
sel=cmds.ls(selection=True)
lensel=len(sel)
if lensel ==1:
queryCopiesX=cmds.textField('copiesXinc', text=True, q=True)
queryTransX=cmds.textField('translateXinc', text=True, q=True)
range=int(queryCopiesX)
abstand=float(queryTransX)
for i in xrange(range):
j=cmds.duplicate(rr=True,st=True)
cmds.move(abstand,j,x=True,r=True,objectSpace=True)
else:
cmds.warning("select Object")
[docs]def duplicateSpecialX(*args):
if cmds.window("dupSpecialX", exists=True):
cmds.deleteUI("dupSpecialX")
cmds.window("dupSpecialX",title="Jelly Special X",mnb=True, mxb=False,w=250,h=130,sizeable=False)
form = cmds.formLayout()
tabs = cmds.tabLayout(w=250, h=100, bgc = (0.3,0.3,0.3), innerMarginWidth=10, innerMarginHeight=5)
cmds.formLayout( form, edit=True, attachForm=((tabs, 'top', 0), (tabs, 'left', 0), (tabs, 'bottom', 0), (tabs, 'right', 0)) )
child1=cmds.columnLayout( columnAttach=('both', 0), rowSpacing=1,columnWidth=250,h=110)
cmds.text(label="Permanent Distance", bgc=(0.5,0.7,0.5))
cmds.text(label="Number of copies", align='left')
cmds.textField('copiesXper',w=200)
cmds.text(label="Translate", align='left')
cmds.textField('translateXper',w=200)
cmds.button(label="Duplicate", bgc=(0.5,0.7,0.5),command=translateXpermanent)
cmds.setParent( '..' )
child2=cmds.columnLayout( columnAttach=('both', 0), rowSpacing=1,columnWidth=250,h=110)
cmds.text(label="Increasing Distance", bgc=(0.5,0.3,0.5))
cmds.text(label="Number of copies", align='left')
cmds.textField('copiesXinc',w=200)
cmds.text(label="Translate", align='left')
cmds.textField('translateXinc',w=200)
cmds.button(label="Duplicate",bgc=(0.5,0.3,0.5),command=trasnlateXincreasing)
cmds.setParent( '..' )
cmds.tabLayout( tabs, edit=True, tabLabel=((child1, 'Permanent Distance'),(child2,'Increasing Distance')))
cmds.setParent( '..' )
cmds.showWindow()
[docs]def translateYpermanent(*args):
sel=cmds.ls(selection=True)
lensel=len(sel)
if lensel ==1:
queryCopiesY=cmds.textField('copiesYper', text=True, q=True)
queryTransY=cmds.textField('translateYper', text=True, q=True)
range=int(queryCopiesY)
abstand=float(queryTransY)
for i in xrange(range):
j=cmds.duplicate(rr=True)
cmds.move(abstand,j,y=True,r=True,objectSpace=True)
else:
cmds.warning("select Object")
[docs]def trasnlateYincreasing(*args):
sel=cmds.ls(selection=True)
lensel=len(sel)
if lensel ==1:
queryCopiesY=cmds.textField('copiesYinc', text=True, q=True)
queryTransY=cmds.textField('translateYinc', text=True, q=True)
range=int(queryCopiesY)
abstand=float(queryTransY)
for i in xrange(range):
j=cmds.duplicate(rr=True,st=True)
cmds.move(abstand,j,y=True,r=True,objectSpace=True)
else:
cmds.warning("select Object")
[docs]def duplicateSpecialY(*args):
if cmds.window("dupSpecialY", exists=True):
cmds.deleteUI("dupSpecialY")
cmds.window("dupSpecialY",title="Jelly Special Y",mnb=True, mxb=False,w=250,h=130,sizeable=False)
form = cmds.formLayout()
tabs = cmds.tabLayout(w=250, h=100, bgc = (0.3,0.3,0.3), innerMarginWidth=10, innerMarginHeight=5)
cmds.formLayout( form, edit=True, attachForm=((tabs, 'top', 0), (tabs, 'left', 0), (tabs, 'bottom', 0), (tabs, 'right', 0)) )
child1=cmds.columnLayout( columnAttach=('both', 0), rowSpacing=1,columnWidth=250,h=110)
cmds.text(label="Permanent Distance", bgc=(0.5,0.7,0.5))
cmds.text(label="Number of copies", align='left')
cmds.textField('copiesYper',w=200)
cmds.text(label="Translate", align='left')
cmds.textField('translateYper',w=200)
cmds.button(label="Duplicate", bgc=(0.5,0.7,0.5),command=translateYpermanent)
cmds.setParent( '..' )
child2=cmds.columnLayout( columnAttach=('both', 0), rowSpacing=1,columnWidth=250,h=110)
cmds.text(label="Increasing Distance", bgc=(0.5,0.3,0.5))
cmds.text(label="Number of copies", align='left')
cmds.textField('copiesYinc',w=200)
cmds.text(label="Translate", align='left')
cmds.textField('translateYinc',w=200)
cmds.button(label="Duplicate",bgc=(0.5,0.3,0.5),command=trasnlateYincreasing)
cmds.setParent( '..' )
cmds.tabLayout( tabs, edit=True, tabLabel=((child1, 'Permanent Distance'),(child2,'Increasing Distance')))
cmds.setParent( '..' )
cmds.showWindow()
[docs]def translateZpermanent(*args):
sel=cmds.ls(selection=True)
lensel=len(sel)
if lensel ==1:
queryCopiesZ=cmds.textField('copiesZper', text=True, q=True)
queryTransZ=cmds.textField('translateZper', text=True, q=True)
range=int(queryCopiesZ)
abstand=float(queryTransZ)
for i in xrange(range):
j=cmds.duplicate(rr=True)
cmds.move(abstand,j,z=True,r=True,objectSpace=True)
else:
cmds.warning("select Object")
[docs]def trasnlateZincreasing(*args):
sel=cmds.ls(selection=True)
lensel=len(sel)
if lensel ==1:
queryCopiesZ=cmds.textField('copiesZinc', text=True, q=True)
queryTransZ=cmds.textField('translateZinc', text=True, q=True)
range=int(queryCopiesZ)
abstand=float(queryTransZ)
for i in xrange(range):
j=cmds.duplicate(rr=True,st=True)
cmds.move(abstand,j,z=True,r=True,objectSpace=True)
else:
cmds.warning("select Object")
[docs]def duplicateSpecialZ(*args):
if cmds.window("dupSpecialZ", exists=True):
cmds.deleteUI("dupSpecialZ")
cmds.window("dupSpecialZ",title="Jelly Special Z",mnb=True, mxb=False,w=250,h=130,sizeable=False)
form = cmds.formLayout()
tabs = cmds.tabLayout(w=250, h=100, bgc = (0.3,0.3,0.3), innerMarginWidth=10, innerMarginHeight=5)
cmds.formLayout( form, edit=True, attachForm=((tabs, 'top', 0), (tabs, 'left', 0), (tabs, 'bottom', 0), (tabs, 'right', 0)) )
child1=cmds.columnLayout( columnAttach=('both', 0), rowSpacing=1,columnWidth=250,h=110)
cmds.text(label="Permanent Distance", bgc=(0.5,0.7,0.5))
cmds.text(label="Number of copies", align='left')
cmds.textField('copiesZper',w=200)
cmds.text(label="Translate", align='left')
cmds.textField('translateZper',w=200)
cmds.button(label="Duplicate", bgc=(0.5,0.7,0.5),command=translateZpermanent)
cmds.setParent( '..' )
child2=cmds.columnLayout( columnAttach=('both', 0), rowSpacing=1,columnWidth=250,h=110)
cmds.text(label="Increasing Distance", bgc=(0.5,0.3,0.5))
cmds.text(label="Number of copies", align='left')
cmds.textField('copiesZinc',w=200)
cmds.text(label="Translate", align='left')
cmds.textField('translateZinc',w=200)
cmds.button(label="Duplicate",bgc=(0.5,0.3,0.5),command=trasnlateZincreasing)
cmds.setParent( '..' )
cmds.tabLayout( tabs, edit=True, tabLabel=((child1, 'Permanent Distance'),(child2,'Increasing Distance')))
cmds.setParent( '..' )
cmds.showWindow()
[docs]def mayaInterface(*args):
mel.eval('DuplicateSpecialOptions')
[docs]def RenameMesh(*args):
queryRenameMesh=cmds.textField("Rename", text=True, q=True)
selected_objects = cmds.ls(selection=True, long=True)
selected_objects.reverse()
totalObjects = len(selected_objects)
print totalObjects
cmds.text(label=totalObjects)
# We are doing this in reverse, last object renamed first
for number, object in enumerate(selected_objects):
#print 'Old Name:', object
#print 'New Name:', '%s%02d' % (newname, totalObjects-number)
cmds.rename(object, ('%s%02d' % (queryRenameMesh, totalObjects-number)))
[docs]def SuffixMesh(*args):
selected_objects = cmds.ls(selection=True, long=True)
selected_objects_short = cmds.ls(selection=True, long=False)
querySuffixMesh=cmds.textField("Suffix", text=True, q=True)
selected_objects.reverse()
selected_objects_short.reverse()
totalObjects = len(selected_objects)
for number, object in enumerate(selected_objects):
#print 'Old Name:', object
#print 'New Name:', selected_objects_short[number]+suffix
cmds.rename(object, selected_objects_short[number]+querySuffixMesh)
[docs]def interaktivPlayback(*args):
mel.eval('InteractivePlayback')
[docs]def outliner(*args):
mel.eval('OutlinerWindow')
[docs]def skining(*args):
mel.eval('SmoothBindSkinOptions')
[docs]def queryMesh(*args):
selectBodyMesh=cmds.ls(selection=True)[0]
addBodyMesh = cmds.textField('SMesh', edit=True, text=selectBodyMesh)
#/BUild/
[docs]def buildwitoutMesh(*args):
if cmds.window("dynamo_locators", exists=True):
cmds.deleteUI("dynamo_locators")
if cmds.window("dupSpecialX", exists=True):
cmds.deleteUI("dupSpecialX")
if cmds.window("dupSpecialY", exists=True):
cmds.deleteUI("dupSpecialY")
if cmds.window("dupSpecialZ", exists=True):
cmds.deleteUI("dupSpecialZ")
#/joints herstellen/
locatorListe=cmds.ls(selection=True)
listLaenge=len(locatorListe)
if listLaenge>4:
firstLocator=locatorListe[0]
queryFirstLocatorPos=cmds.xform(firstLocator,translation=True,q=True)
createController=cmds.circle( nr=(0, 1, 0), c=(queryFirstLocatorPos),r=10,d=1,s=6,n="root_Controller")
centerPivotController=cmds.xform(createController,cp=True)
cmds.makeIdentity(createController,apply=True, t=1, r=1, s=1, n=0)
jointList=[]
for i in locatorListe:
queryLocPos=cmds.xform(i,translation=True,q=True)
cmds.select(clear=True)
createJoint=cmds.joint(p=(queryLocPos))
jointList.append(createJoint)
cmds.select(clear=True)
print jointList
#parenting root_Joint to root_Controller
mainController=createController
#listJoint=cmds.ls(type="joint")
firstJoint=jointList[0]
pointConstraint=cmds.pointConstraint(mainController,firstJoint,mo=True)
orientConstraint=cmds.orientConstraint(mainController,firstJoint,mo=True)
cmds.select(clear=True)
#/joints parenting/
#jointListe = cmds.ls(type = "joint",v=True)
for i, inhalt in enumerate(jointList):
# Break Loop
if i == 0:
continue
vorheriges = jointList[i-1]
aktuelles = inhalt
cmds.parent(aktuelles, vorheriges)
cmds.select(clear=True)
#/Query Start-End-Number/
queryStartNumber=cmds.textField('startLoc', text=True, q=True)
print queryStartNumber
queryEndNumber=cmds.textField('endLoc', text=True, q=True)
print queryEndNumber
start=int(queryStartNumber)
end=int(queryEndNumber)
#/create Curve/
#jointListe = cmds.ls(type = "joint",v=True)
endJoint=len(jointList)
jointListwitoutfirst=jointList[start:end]
jnListlaenge=len(jointListwitoutfirst)
if jnListlaenge>0:
curve_degree = 3
jointPos=[]
for i in jointListwitoutfirst:
queryJnPos=cmds.xform(i, ws=True,translation=True,query=True)
jointPos.append(queryJnPos)
#print jointPos
cvCurve=cmds.curve(d=curve_degree,p=jointPos,ws=True,n="Curve1")
epCurve=cmds.fitBspline( ch=1, tol=0.0,n="Original_Curve")
cmds.rename("Original_Curve","DynamoOrgCurve")
cmds.delete(cvCurve)
#/make dynamic curve/
mel.eval('makeCurvesDynamicHairs %d %d %d' % (True, False, True))
#/iksplineHAndle/
sel=cmds.ls(type="joint",v=True)
startjoint=jointList[start]
endeffector=jointList[end]
#print startjoint, endeffector
ikSplineHandle=cmds.ikHandle( n="dynamoIkHandle",sj=startjoint, ee=endeffector,solver='ikSplineSolver', p=2, c="curve1",tws="linear",pcv=True,ccv=False,snc=False)
renameiKHandleCurve=cmds.rename("curve1","NewDynamoCurve")
NewDyCurve=renameiKHandleCurve
#/change follicle point lock/
querypointLockOptionMenu=cmds.optionMenu("pointLockOptionMenu",q=True,value=True)[0]
print querypointLockOptionMenu
pointLock=int(querypointLockOptionMenu)
follicleList=cmds.ls("follicle1")
for o in follicleList:
setPointLockBase=cmds.setAttr(o+".pointLock", pointLock)
cmds.rename("follicle1","DynamoFollicle")
#/hide/
#cmds.hide( cmds.ls( type="joint" ) )
#/renaming Joints/
jointListe = cmds.ls(type = "joint",v=True)
rootJoint=jointList[0]
endJoint=jointList [0-1]
#print endJoint
endNewName="end_Joint"
rootNewName="root_Joint"
cmds.rename(rootJoint,rootNewName)
cmds.rename(endJoint,endNewName)
#/cleaning and parenting/
cmds.parent("hairSystem1Follicles","root_Joint")
cmds.hide("DynamoOrgCurve")
cmds.select(clear=True)
Data=cmds.group(NewDyCurve,ikSplineHandle,"hairSystem1","hairSystem1OutputCurves",w=True,n="Data")
cmds.parent("effector1","end_Joint")
cmds.select(clear=True)
hideIkHandle=cmds.hide("dynamoIkHandle")
cmds.select(clear=True)
cmds.hide(cmds.ls(type="locator"))
cmds.select(clear=True)
else:
cmds.warning("Select Locators")
[docs]def buildwithMesh(*args):
if cmds.window("dynamo_locators", exists=True):
cmds.deleteUI("dynamo_locators")
if cmds.window("dupSpecialX", exists=True):
cmds.deleteUI("dupSpecialX")
if cmds.window("dupSpecialY", exists=True):
cmds.deleteUI("dupSpecialY")
if cmds.window("dupSpecialZ", exists=True):
cmds.deleteUI("dupSpecialZ")
#/joints herstellen/
locatorListe=cmds.ls(selection=True)
listLaenge=len(locatorListe)
if listLaenge>4:
firstLocator=locatorListe[0]
queryFirstLocatorPos=cmds.xform(firstLocator,translation=True,q=True)
createController=cmds.circle( nr=(0, 1, 0), c=(queryFirstLocatorPos),r=10,d=1,s=6,n="root_Controller")
centerPivotController=cmds.xform(createController,cp=True)
cmds.makeIdentity(createController,apply=True, t=1, r=1, s=1, n=0)
jointList=[]
for i in locatorListe:
queryLocPos=cmds.xform(i,translation=True,q=True)
cmds.select(clear=True)
createJoint=cmds.joint(p=(queryLocPos))
jointList.append(createJoint)
cmds.select(clear=True)
print jointList
#parenting root_Joint to root_Controller
mainController=createController
#listJoint=cmds.ls(type="joint")
firstJoint=jointList[0]
pointConstraint=cmds.pointConstraint(mainController,firstJoint,mo=True)
orientConstraint=cmds.orientConstraint(mainController,firstJoint,mo=True)
cmds.select(clear=True)
#/joints parenting/
#jointListe = cmds.ls(type = "joint",v=True)
for i, inhalt in enumerate(jointList):
# Break Loop
if i == 0:
continue
vorheriges = jointList[i-1]
aktuelles = inhalt
cmds.parent(aktuelles, vorheriges)
cmds.select(clear=True)
#/Query Start-End-Number/
queryStartNumber=cmds.textField('startLoc', text=True, q=True)
print queryStartNumber
queryEndNumber=cmds.textField('endLoc', text=True, q=True)
print queryEndNumber
start=int(queryStartNumber)
end=int(queryEndNumber)
#/create Curve/
#jointListe = cmds.ls(type = "joint",v=True)
endJoint=len(jointList)
jointListwitoutfirst=jointList[start:end]
jnListlaenge=len(jointListwitoutfirst)
if jnListlaenge>0:
curve_degree = 3
jointPos=[]
for i in jointListwitoutfirst:
queryJnPos=cmds.xform(i, ws=True,translation=True,query=True)
jointPos.append(queryJnPos)
#print jointPos
cvCurve=cmds.curve(d=curve_degree,p=jointPos,ws=True,n="Curve1")
epCurve=cmds.fitBspline( ch=1, tol=0.0,n="Original_Curve")
cmds.rename("Original_Curve","DynamoOrgCurve")
cmds.delete(cvCurve)
#/make dynamic curve/
mel.eval('makeCurvesDynamicHairs %d %d %d' % (True, False, True))
#/iksplineHAndle/
sel=cmds.ls(type="joint",v=True)
startjoint=jointList[start]
endeffector=jointList[end]
#print startjoint, endeffector
ikSplineHandle=cmds.ikHandle( n="dynamoIkHandle",sj=startjoint, ee=endeffector,solver='ikSplineSolver', p=2, c="curve1",tws="linear",pcv=True,ccv=False,snc=False)
renameiKHandleCurve=cmds.rename("curve1","NewDynamoCurve")
NewDyCurve=renameiKHandleCurve
#/change follicle point lock/
querypointLockOptionMenu=cmds.optionMenu("pointLockOptionMenu",q=True,value=True)[0]
print querypointLockOptionMenu
pointLock=int(querypointLockOptionMenu)
follicleList=cmds.ls("follicle1")
for o in follicleList:
setPointLockBase=cmds.setAttr(o+".pointLock", pointLock)
cmds.rename("follicle1","DynamoFollicle")
#/hide/
#cmds.hide( cmds.ls( type="joint" ) )
#/skin/
addBodyMesh = cmds.textField('SMesh', text=True, query=True)
cmds.skinCluster( addBodyMesh, jointList[start:end],tsb=True,nw=3,mi=7,dr=10.0,ih=True )
#/renaming Joints/
jointListe = cmds.ls(type = "joint",v=True)
rootJoint=jointList[0]
endJoint=jointList [0-1]
#print endJoint
endNewName="end_Joint"
rootNewName="root_Joint"
cmds.rename(rootJoint,rootNewName)
cmds.rename(endJoint,endNewName)
count = 1
#/cleaning and parenting/
cmds.parent("hairSystem"+count+"Follicles","root_Joint")
count +=1
cmds.hide("DynamoOrgCurve")
cmds.select(clear=True)
Data=cmds.group(NewDyCurve,ikSplineHandle,"hairSystem1","hairSystem1OutputCurves",w=True,n="Data")
cmds.parent("effector1","end_Joint")
cmds.select(clear=True)
hideIkHandle=cmds.hide("dynamoIkHandle")
cmds.select(clear=True)
cmds.hide(cmds.ls(type="locator"))
cmds.select(clear=True)
else:
cmds.warning("Select Locators")