import maya.cmds as mc
import chee_createCurve3 as cwire
  
developing = True
  
if developing == True:
    reload(cwire)
  
#list curves and volumesAxis
  
def selectCurve():
    curveSelect = mc.select('curve1', add=True)
    return curveSelect
  
def listCurve():
    curveList = mc.ls(type='curveShape')
    curveTrans = [mc.listRelatives(x, parent=True, type='transform')[0] for x in curveList]
    return curveTrans
    print curveTrans
  
def listVol(): 
    volList =  mc.ls(type='volumeAxisField')
    return volList
  
def getPList():
    particleShapes = mc.ls(type='particle')
    particleTrans = [mc.listRelatives(x, parent=True, type='transform')[0] for x in particleShapes]
    return particleTrans
    
########deleteALL##########
def deleteVolEmit(*args):
    a = mc.ls('wGrp','myEmitter')
    #b = mc.ls(type='particle')
    b= cwire.getPList()
    mc.delete(a,b)
#-------------------------------------------------------------------------------
#createEMITTER---###############################################################
  
def creEmit():
    mc.emitter( dx=1, dy=0, dz=0, sp=0.33, pos=(1, 1, 1),n='myEmitter')
    mc.particle()
##Set Max COunt#######
def setPartAttr(pmaxCount):
    pCount = mc.intFieldGrp(pmaxCount, query=True, value1=True)
    particleShapes = mc.ls(type='particle')
    for eachPshape in particleShapes:
        cName = eachPshape + '.maxCount'
        mc.setAttr(cName, pCount)
    
  
        
###Delete_Curves####
def deleteCurves(*args):
    lsCurve = listCurve()
    mc.delete(lsCurve)
    
####Scale Volume Fields#####
def scaleVolF(*args):
    lsVol = listVol() 
    mc.select(lsVol)
#------------------------------------------------------------------------------------
#--- Working on Multiple Curves ----################################################
#VolumeAxis duplicate along curve
def dupAlongCurve(volumeFName, startFrm, endFrm):
    mc.cycleCheck(e=0)    
    for eachFrame in range (startFrm,(endFrm+1)):
        mc.currentTime(eachFrame)
        #mc.select('volumeFName')
        mc.duplicate(volumeFName)
  
def volToCurve(startFrm,endFrm):
    lspath = listCurve()
    frmBegin = startFrm
    frmEnd = mc.intFieldGrp(endFrm, query=True, value1=True)
    for eachpath in lspath:
        volAxis = mc.volumeAxis(pos=(0, 0, 0), afc=0, afx=0, arx=0, alx=0, drs=0.5)
        mc.pathAnimation( volAxis, stu=frmBegin, etu=frmEnd, fa='x', ua='y', worldUpVector=(0,1,0), bank=False, c=eachpath )
        lsVol = listVol()
    for volumeX in lsVol:
        createDupFields = dupAlongCurve(volumeX,1,frmEnd)
    listAll =mc.select(listVol())
    mc.group(name='wGrp')
            
  
def emitToCurve(*args):
    getCurve = listCurve()
    #print getCurve
  
    n=0
    for eachCurve in getCurve:
        creEmit()
        eachEmit = mc.ls(type='pointEmitter')
        addCname = eachCurve +".cv[0]"
        curveP1 = mc.getAttr(addCname)
        #print eachEmit
        #mc.select(eachEmit)
        #print curveP1    
        mc.move(curveP1[0][0],curveP1[0][1],curveP1[0][2],eachEmit[n],absolute=True)
        n=n+1    
def connectEmit(*args):    
    fConnect()
    getPart = getPList()
    print getPart
    a=0
    eachEmit = mc.ls(type='pointEmitter')
    for eachPart in getPart:
        mc.connectDynamic(eachPart, em=eachEmit[a])
        a=a+1
        
    
    #listEmit = mc.ls(type='pointEmitter')
    #mc.group(name='myEmitter')
    
####dynamicRelations#################    
def fConnect():
    getVol = listVol()
    getPart = getPList()
    
    for eachPart in getPart:
        print eachPart
        for eachVol in getVol:
            mc.connectDynamic(eachPart,f=eachVol)
  
#extrude########
def extrude(*args):
    getCurves = listCurve()
    for eachCurve in getCurves:
        mc.extrude(eachCurve, extrudeType = 0, direction= (1, 0, 0), length = 0.2)
    
##Select particles####
def selectParticles(*args):
    getPart = getPList()
    mc.select(getPart)
        
  
    
#UI Window
#avoid duplicate window
  
windowG = 'WireGenerationTool'
 
if (mc.window(windowG, query=True, ex=True)):
    mc.deleteUI(windowG)
  
windowG = mc.window('WireGenerationTool', title='WireGenerationTool', iconName='WGT', widthHeight=(400,400), rtf=True )
mc.columnLayout( adjustableColumn=True )
mc.text( label= 'Please Create Your Desired Curve')
#stFrm = mc.intField(value=1)
etFrm = mc.intFieldGrp(label='number of copies',value1=50)
pLastFrm = mc.intFieldGrp(label ='Particle Cache Frames', value1=100)
  
mc.button( label= 'delete all', actOnPress=True, command=deleteVolEmit)
mc.button( label= 'Generate Fields', actOnPress=True, command=lambda x: volToCurve( 1, etFrm))
mc.button( label= 'Add emitter to Curve', actOnPress=True, command=emitToCurve)
mc.button( label= 'ConnectFields To Particles', actOnPress=True, command=connectEmit)
  
MaxCount = mc.intFieldGrp(label ='Each Particle Max Count', value1=50)
mc.button( label= 'Set MaxCount', actOnPress=True, command=lambda x: setPartAttr(MaxCount))
mc.button( label= 'selectall Particles', actOnPress=True, command=selectParticles)
mc.button( label= 'selectall VolumeFields', actOnPress=True, command=scaleVolF)
mc.button( label= 'Create Curves From Particles', actOnPress=True, command=lambda x: cwire.gWire(pLastFrm))
mc.button( label= 'Extrude Surface', actOnPress=True, command=extrude)
mc.button( label= 'Delete All Curves', actOnPress=True, command=deleteCurves)
mc.showWindow( windowG )