def killer(listIds, particlesIds, lifespanMode):
    print "Killing ", len(listIds) , " particles."
    if listIds:
        if lifespanMode != 3:
            cmds.setAttr(Psel[0] + '.lifespanMode', 3)
            print "lifespanMode changed to 'lifespanPP only'"
        for particleId in listIds:
            try:
                if particleId in particlesIds:
                    cmds.nParticle( Psel[0], e=True, attribute='lifespanPP', id = particleId, fv=0 )
            except:
                print "The selected method can't kill more particles please select another."
        #if lifespanMode != 3:
         #   cmds.setAttr(Psel[0] + '.lifespanMode', lifespanMode)
        print "Particles killed: ", listIds
Exemple #2
0
def createNParticle(ptList=[],nucleus='',prefix=''):
	'''
	Create an nParticle object.
	@param ptList: Mesh to create nCloth from
	@type ptList: str
	@param nucleus: nucleus to attach nCloth to
	@type nucleus: str
	@param prefix: Name prefix for created nodes
	@type prefix: str
	'''
	# Check prefix
	if prefix: nParticle = prefix+'_nParticle'
	else: nParticle = 'nParticle#'
	
	# Check nucleus
	if nucleus:
		if not isNucleus(nucleus):
			print('Object "'+nucleus+'" is not a valid nucleus. Using current active nucleus!')
			getActiveNucleus(nucleus)
		
		# Set active nucleus
		setActiveNucleus(nucleus)
	
	# Create nParticles
	nParticle = mc.nParticle(p=ptList,n=nParticle)
def xformToNParticles(xformList=[]):
    """
    Create nParticles from the specified list of transforms
    @param xformList: List of transforms to create nParticles from
    @type xformList: list
    """
    if not xformList: xformList = cmds.ls(sl=True, type='transform')
    ptList = [cmds.xform(i, q=True, ws=True, rp=True) for i in xformList]
    particle = cmds.nParticle(p=ptList)
    return particle
def createParticleSystem_2():
    # Creates a point emitter, with a collide plane and some PP attributes

    cmds.playbackOptions(maxTime=180)

    emitter = cmds.emitter(dx=1, dy=0, dz=0, sp=0.1, pos=(0, 5, 0),rate=20)[0]

    # nParticle creation depends on an optionVar value, make sure we use the default one
    cmds.optionVar( sv=("NParticleStyle","Points") )

    particleSystem, particleSystemShape = cmds.nParticle(n="nParticle_test_2")
    cmds.setAttr('%s.lfm' % particleSystemShape, 2.0) # random range
    cmds.setAttr('%s.lifespan' % particleSystemShape, 3)
    cmds.setAttr('%s.lifespanRandom' % particleSystemShape, 4)
    cmds.setAttr('%s.friction' % particleSystemShape, 0.01)
    cmds.setAttr('%s.bounce' % particleSystemShape, 0.5)
    cmds.setAttr('%s.rotationFriction' % particleSystemShape, 0.98)
    cmds.setAttr('%s.pointMass' % particleSystemShape, 4)
    cmds.setAttr('%s.computeRotation' % particleSystemShape, True)
    cmds.setAttr('%s.particleRenderType' % particleSystemShape, 7) # Blobby, to see radius
    cmds.setAttr('%s.selfCollide' % particleSystemShape, True)
    cmds.connectDynamic( particleSystemShape, em=emitter)


    # add Custom Attributes
    # rgb
    if not cmds.objExists( "%s.rgbPP" % particleSystemShape):
        cmds.addAttr( particleSystemShape ,ln="rgbPP",dt="vectorArray")
    else:
        # Disconnect possible thing in rgbPP
        input = cmds.connectionInfo("%s.rgbPP" % particleSystemShape,sourceFromDestination=True)
        if input:
            cmds.disconnectAttr(input,"%s.rgbPP" % particleSystemShape)

    cmds.dynExpression( particleSystem, s="\nfloat $r = rand(1.0);float $g = rand(1.0);float $b = rand(1.0);\n%s.rgbPP = <<$r,$g,$b>>;" % particleSystemShape, c=True)

    # radius
    if not cmds.objExists( "%s.radiusPP" % particleSystemShape):
        cmds.addAttr( particleSystemShape, ln="radiusPP",dt="doubleArray")
    cmds.dynExpression( particleSystem, s="seed(%s.id);\n%s.radiusPP = .2 + time * .2 * rand(.2,1.5)" % (particleSystemShape,particleSystemShape), runtimeAfterDynamics=True)

    # rotatePP (enabled by "compute rotation", the attribute would be created by attribut editor's first constrcution in a gui maya)
    if not cmds.objExists( "%s.rotationPP" % particleSystemShape):
        cmds.addAttr( particleSystemShape, ln="rotationPP",dt="vectorArray")

    # add collision plane
    plane = cmds.polyPlane( w=30,h=30,sx=10,sy=10,ax=[0, 1, .5], cuv=2)
    cmds.select(plane[0])
    maya.mel.eval("makePassiveCollider")
    cmds.select(clear=True)
    cmds.setAttr( "nRigidShape1.friction", 0.25)
    cmds.setAttr( "nRigidShape1.stickiness", 0.0)

    return particleSystem, particleSystemShape
def createParticleSystem_1():
    # Creates a very basic particle system with custom attribute

    cmds.playbackOptions(maxTime=180)

    emitter = cmds.emitter(dx=1, dy=0, dz=0, sp=0.1, pos=(0, 5, 0),rate=20)[0]

    # nParticle creation depends on an optoinVar value, make sure we use the default one
    cmds.optionVar( sv=("NParticleStyle","Points") )

    particleSystem, particleSystemShape = cmds.nParticle(n="nParticle_test_1")
    cmds.setAttr('%s.lfm' % particleSystemShape, 0) # live forever
    cmds.setAttr('%s.particleRenderType' % particleSystemShape, 7) # Blobby, to see radius
    cmds.connectDynamic( particleSystemShape, em=emitter)

    # Keyframe the radius parametter to have a single sample but varying in time ( abc kUniformScope )
    cmds.setKeyframe( "%s.radius" % particleSystem, v=.2, t=1)
    cmds.setKeyframe( "%s.radius" % particleSystem, v=1.0, t=24)
    cmds.setKeyframe( "%s.radius" % particleSystem, v=2.0, t=50)
    cmds.setKeyframe( "%s.radius" % particleSystem, v=.5, t=100)

    # Create a custom attribute that will be handled by AbcExport as uniform double
    cmds.addAttr( particleSystemShape, ln="abcTestUniformDoublePP", at="double")
    exp = "%s.abcTestUniformDoublePP = frame;\n" % particleSystemShape

    # Create a custom attribute that will be handled by AbcExport as constant double
    cmds.addAttr( particleSystemShape, ln="abcTestConstantDoublePP", at="double")
    cmds.setAttr( "%s.abcTestConstantDoublePP" % particleSystemShape, 0x2697 )

    # Create a custom attribute that will be handled by AbcExport as a uniform vector
    cmds.addAttr( particleSystemShape, ln="abcTestUniformVectorPP", at="double3")
    cmds.addAttr( particleSystemShape, ln="abcTestUniformVectorPPX", p="abcTestUniformVectorPP")
    cmds.addAttr( particleSystemShape, ln="abcTestUniformVectorPPY", p="abcTestUniformVectorPP")
    cmds.addAttr( particleSystemShape, ln="abcTestUniformVectorPPZ", p="abcTestUniformVectorPP")
    exp += "%s.abcTestUniformVectorPPX = frame;\n" % particleSystemShape
    exp += "%s.abcTestUniformVectorPPY = time;\n" % particleSystemShape
    exp += "%s.abcTestUniformVectorPPZ = 9.81;\n" % particleSystemShape

    # Create a custom attribute that will be handled by AbcExport as a constant vector
    cmds.addAttr( particleSystemShape, ln="abcTestConstantVectorPP", at="double3")
    cmds.addAttr( particleSystemShape, ln="abcTestConstantVectorPPX", p="abcTestConstantVectorPP")
    cmds.addAttr( particleSystemShape, ln="abcTestConstantVectorPPY", p="abcTestConstantVectorPP")
    cmds.addAttr( particleSystemShape, ln="abcTestConstantVectorPPZ", p="abcTestConstantVectorPP")
    cmds.setAttr( "%s.abcTestConstantVectorPP" % particleSystemShape, 0x2697, 3.141592654, 6.02e23 )

    cmds.expression( particleSystemShape, s=exp, o="", ae=1, uc="all" )

    return particleSystem, particleSystemShape
Exemple #6
0
def softBody(geometry, nucleus='', prefix=''):
    """
    Create an nParticle softBody from the specified geoemtry
    @param geometry: Mesh to create nRigid from
    @type geometry: str
    @param nucleus: nucleus to attach nRigid to
    @type nucleus: str
    @param prefix: Name prefix for created nodes
    @type prefix: str
    """
    # Check prefix
    if not prefix: prefix = geometry

    # Check geometry
    geometryType = cmds.objectType(geometry)
    if geometryType == 'transform':
        geometryTransform = geometry
        geometryShapes = glTools.utils.shape.getShapes(geometry, nonIntermediates=True, intermediates=False)
        if not geometryShapes: raise Exception('No valid geometry shapes found!')
        geometryShape = geometryShapes[0]
    else:
        geometryTransform = cmds.listRelatives(geometry, p=True)[0]
        geometryShape = geometry

    # Check geometry type
    geometryType = cmds.objectType(geometryShape)
    if geometryType == 'mesh':
        geometryAttribute = 'inMesh'
    elif geometryType == 'nurbsCurve':
        geometryAttribute = 'create'
    elif geometryType == 'nurbsSurface':
        geometryAttribute = 'create'
    else:
        raise Exception('Invalid geometry type (' + geometryType + ')!')

    # Get geometry points
    mPtList = glTools.utils.base.getMPointArray(geometry)
    ptList = [(i[0], i[1], i[2]) for i in mPtList]

    # Create nParticles
    nParticle = cmds.nParticle(p=ptList, n=prefix + '_nParticle')

    # Connect to geometry
    cmds.connectAttr(geometryTransform + '.worldMatrix[0]', nParticle + '.targetGeometryWorldMatrix', f=True)
    cmds.connectAttr(nParticle + '.targetGeometry', geometryShape + '.' + geometryAttribute, f=True)

    # Return result
    return nParticle
def locatorParticles(locList, particle, radius=1, selfCollide=False, rotatePP=False, scalePP=False):
    """
    """
    # Check locator list
    if not locList: return

    # Check particles
    if not particle: particle = 'particle1'
    if not cmds.objExists(particle):
        particle = cmds.nParticle(n=particle)[0]

    # Set Particle Object Attrs
    cmds.setAttr(particle + '.particleRenderType', 4)
    cmds.setAttr(particle + '.radius', cmds.floatSliderGrp('locParticle_radiusFSG', q=True, v=True))
    cmds.setAttr(particle + '.selfCollide', cmds.checkBoxGrp('locParticle_selfCollideCBG', q=True, v1=True))

    # Create particles
    ptList = [cmds.pointPosition(i) for i in locList]
    cmds.emit(o=particle, pos=ptList)

    # Add and Set RotatePP/ScalePP Values
    if rotatePP:

        # Check rotatePP attrs
        if not cmds.objExists(particle + '.rotatePP'):
            addRotatePP(particle)

        # Set rotatePP attrs
        for i in range(len(locList)):
            rot = cmds.getAttr(locList[i] + '.r')
            cmds.particle(particle, e=True, at='rotatePP', id=i, vv=rot[0])

    if scalePP:

        # Check scalePP attrs
        if not cmds.objExists(particle + '.scalePP'):
            addScalePP(particle)

        # Set scalePP attrs
        for i in range(len(locList)):
            scl = cmds.getAttr(locList[i] + '.s')
            cmds.particle(particle, e=True, at='scalePP', id=i, vv=scl[0])

    # Save Initial State
    cmds.saveInitialState(particle)
def createParticleSystem_goal():
    # Create a constant sized particle object following a deformed torus shape (using goal)

    cmds.file(new=True, force=True)

    # Create a torus, we will use it as goal
    xrez = 14
    yrez = 8
    goalTorus = cmds.polyTorus( r=1, sr=0.5, tw=0, sx=xrez, sy=yrez, ax=(0, 1, 0), cuv=1, ch=0)[0]

    # nParticle creation depends on an optoinVar value, make sure we use the default one
    cmds.optionVar( sv=("NParticleStyle","Points") )

    # Emit a lot of particle, the actual number will be limited to the max particle attribute in the particleShape
    emitter = cmds.emitter(dx=1, dy=0, dz=0, sp=0.1, pos=(0, 5, 0),rate=2500)[0]
    particleSystem, particleSystemShape = cmds.nParticle(n="nParticle_test_goal")
    cmds.setAttr('%s.lfm' % particleSystemShape, 0) # live forever
    cmds.setAttr('%s.particleRenderType' % particleSystemShape, 7) # Blobby, to see radius
    cmds.setAttr('%s.maxCount' % particleSystemShape, xrez*yrez) # max count is the number of vertices on the torus

    cmds.connectDynamic( particleSystemShape, em=emitter)

    # Create Goal
    cmds.goal(particleSystem, w=1, utr=0, g=goalTorus);


    # Create Initial state to we start with the correct amount of particle
    # NOTE: When using this script in command line, the first frame is not correctly evaluated and the particleShape is empty
    # This doesn't happens in interactive maya
    for i in range(1, 10):
        cmds.currentTime(i)
    cmds.saveInitialState(particleSystemShape)
    cmds.currentTime(1)

    bend, bendHandle = cmds.nonLinear( goalTorus, type="bend", lowBound=-1, highBound=1, curvature=0)

    cmds.setAttr( "%s.rotateZ" % bendHandle, 90)
    cmds.setKeyframe( "%s.curvature" % bend, v=0, t=1, inTangentType="flat", outTangentType="flat")
    cmds.setKeyframe( "%s.curvature" % bend, v=-130, t=12, inTangentType="flat", outTangentType="flat")
    cmds.setKeyframe( "%s.curvature" % bend, v=130, t=24, inTangentType="flat", outTangentType="flat")

    # Make the bend animation loop
    cmds.setInfinity( bend, poi="oscillate", attribute="curvature")

    return particleSystem, particleSystemShape
        def nCacher(nParticleShape = []):
            """
            nCacher, how it works? Iterate through specified nParticleShape (iterate from start frame until the frame it emits first particle)
            By doing this, Maya won't crash when caching nParticles particularly Sprites with expressions.
            """

            if type(nParticleShape) == str:
                nParticleShape = [nParticleShape]
            elif type(nParticleShape) == list:
                nParticleShape = nParticleShape
            else:
                nParticleShape = False

            approved_nParticleShape = []
            if nParticleShape:
                # Get timeslider min and max
                startFrame = cmds.playbackOptions(min = 1, q = True)
                endFrame = cmds.playbackOptions(max = 1, q = True)

                for each in nParticleShape:
                    if cmds.objExists(each):
                        cmds.currentTime(startFrame)

                        while True:
                            ppCount = cmds.nParticle(each, count = True, q = True)
                            frame = cmds.currentTime(q = True)
                            if ppCount == 0:
                                if frame < endFrame:
                                    cmds.currentTime(frame + 1)
                                else:
                                    break
                            else:
                                cmds.currentTime(frame + 1)
                                approved_nParticleShape.append(each)
                                break

            return approved_nParticleShape
Exemple #10
0
def softBody(geometry,prefix=''):
	'''
	'''
	# Check prefix
	if not prefix: prefix = geometry
	
	# Check geometry
	geometryType = mc.objectType(geometry)
	if geometryType == 'transform':
		geometryTransform = geometry
		geometryShapes = glTools.utils.shape.getShapes(geometry,nonIntermediates=True,intermediates=False)
		if not geometryShapes: raise Exception('No valid geometry shapes found!')
		geometryShape = geometryShapes[0]
	else:
		geometryTransform = mc.listRelatives(geometry,p=True)[0]
		geometryShape = geometry
	
	# Check geometry type
	geometryType = mc.objectType(geometryShape)
	if geometryType == 'mesh': geometryAttribute = 'inMesh'
	elif geometryType == 'nurbsCurve': geometryAttribute = 'create'
	elif geometryType == 'nurbsSurface': geometryAttribute = 'create'
	else: raise Exception('Invalid geometry type ('+geometryType+')!')
	
	# Get geometry points
	mPtList = glTools.utils.base.getMPointArray(geometry)
	ptList = [(i[0],i[1],i[2]) for i in mPtList]
	
	# Create nParticles
	nParticle = mc.nParticle(p=ptList,n=prefix+'_nParticle')
	
	# Connect to geometry
	mc.connectAttr(geometryTransform+'.worldMatrix[0]',nParticle+'.targetGeometryWorldMatrix',f=True)
	mc.connectAttr(nParticle+'.targetGeometry',geometryShape+'.'+geometryAttribute,f=True)
	
	# Return result
	return nParticle
Exemple #11
0
def rotationStart():

    global asT
    asT = cmds.playbackOptions(query=True, min=True)
    global aeT
    aeT = cmds.playbackOptions(query=True, max=True)
    resetLoopTime()

    global listObjects
    listObjects = cmds.ls(sl=True)

    if (len(listObjects) <= 1):

        print "\n||| Need to select two or more objects |||\n"

    else:

        #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

        global listFixed
        listFixed = listObjects[:]

        for i in range(len(listFixed)):
            listFixed[i] = listFixed[i].replace("|", "_")
            listFixed[i] = listFixed[i].replace(":", "_")

        #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

        global mainLayerName
        mainLayerName = "OVERLAPPY"

        if (cmds.objExists(mainLayerName)):
            print "\n||| OVERLAPPY start |||\n"
        else:
            cmds.animLayer(mainLayerName)
            print "\n||| OVERLAPPY start ||| Layer created |||\n"

        #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

        for i in range(len(listFixed)):

            if (i + 1 != len(listFixed)):

                global zeroLoc
                zeroLoc = listFixed[i] + "_base_loc"
                global aimLoc
                aimLoc = listFixed[i] + "_aim_loc"
                global tempLoc
                tempLoc = listFixed[i] + "_temp_loc"
                global tempAimLoc
                tempAimLoc = listFixed[i] + "_tempAim_loc"

                global tempPart
                tempPart = listFixed[i] + "_temp_part"
                global tempNucl
                tempNucl = "nucleus1"

                global partRtype
                partRtype = tempPart + "Shape.particleRenderType"
                global partRrad
                partRrad = tempPart + "Shape.radius"
                global partRsm
                partRsm = tempPart + "Shape.goalSmoothness"
                global partRwe
                partRwe = tempPart + "Shape.goalWeight[0]"
                global partNucl
                partNucl = tempNucl + ".timeScale"
                global nuclStart
                nuclStart = tempNucl + ".startFrame"

                if aimVectorReverse: rotAimVector = -1
                else: rotAimVector = 1

                #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

                cmds.spaceLocator(n=zeroLoc)
                cmds.spaceLocator(n=aimLoc)
                cmds.spaceLocator(n=tempLoc)

                cmds.matchTransform(zeroLoc, listObjects[i], pos=True)
                cmds.matchTransform(tempLoc, listObjects[i + 1], pos=True)

                cmds.select(tempLoc, r=True)
                cmds.duplicate(n=tempAimLoc)

                cmds.select(listObjects[0], r=True)
                cmds.select(zeroLoc, add=True)
                cmds.parentConstraint(mo=True, w=1)

                cmds.select(aimLoc, r=True)
                cmds.select(zeroLoc, add=True)
                cmds.parent(r=True)

                cmds.select(listObjects[1], r=True)
                cmds.select(tempLoc, add=True)
                cmds.parentConstraint(mo=True, sr=["x", "y", "z"], w=1)

                aimPosName = tempLoc + ".translate"
                partCenter = tempPart + ".center"
                aimLocPos = tempAimLoc + ".translate"

                aimPos = cmds.getAttr(aimPosName)
                cmds.nParticle(p=aimPos, n=tempPart, c=1)
                cmds.goal(tempPart, w=0.5, utr=1, g=tempLoc)
                cmds.connectAttr(partCenter, aimLocPos, f=True)

                cmds.select(tempAimLoc, r=True)
                cmds.select(aimLoc, add=True)
                cmds.aimConstraint(w=1,
                                   aim=(0, rotAimVector, 0),
                                   u=(0, 1, 0),
                                   wut="vector",
                                   wu=(0, 1, 0),
                                   sk="y")

                #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

                cmds.setAttr(partRtype, pShape)
                cmds.setAttr(partRrad, pRad)
                cmds.setAttr(partRsm, goalSmoothRot)
                cmds.setAttr(partRwe, goalWRot)
                cmds.setAttr(partNucl, timeScaleRot)
                cmds.setAttr(nuclStart, asT)

                #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

                global minLoopTime
                minLoopTime = aeT * -3
                global maxLoopTime
                maxLoopTime = aeT * 4

                if (cycle):

                    cmds.setAttr(nuclStart, minLoopTime)

                    cmds.bakeResults(zeroLoc,
                                     t=(asT, aeT),
                                     sm=True,
                                     at=("translate", "rotate"))
                    cmds.bakeResults(aimLoc,
                                     t=(minLoopTime, maxLoopTime),
                                     sm=True,
                                     at="rotate")
                    cmds.delete(tempAimLoc, tempLoc, tempPart, tempNucl)

                    zeroParent = zeroLoc + "_parentConstraint1"
                    cmds.delete(zeroParent)

                    setTimeToMin()

                    cmds.select(aimLoc, r=True)
                    cmds.select(listObjects[i], add=True)

                    #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

                    attrX = listObjects[i] + '.rotateX'
                    attrY = listObjects[i] + '.rotateY'
                    attrZ = listObjects[i] + '.rotateZ'

                    lockX = cmds.getAttr(attrX, lock=True)
                    lockY = cmds.getAttr(attrY, lock=True)
                    lockZ = cmds.getAttr(attrZ, lock=True)

                    if (lockX != True):
                        cmds.parentConstraint(mo=True,
                                              st=["x", "y", "z"],
                                              sr=["y", "z"],
                                              w=1)

                    if (lockY != True):
                        cmds.parentConstraint(mo=True,
                                              st=["x", "y", "z"],
                                              sr=["x", "z"],
                                              w=1)

                    if (lockZ != True):
                        cmds.parentConstraint(mo=True,
                                              st=["x", "y", "z"],
                                              sr=["x", "y"],
                                              w=1)

                    resetLoopTime()

                else:

                    cmds.bakeResults(zeroLoc,
                                     t=(asT, aeT),
                                     sm=True,
                                     at=("translate", "rotate"))
                    cmds.bakeResults(aimLoc,
                                     t=(asT, aeT),
                                     sm=True,
                                     at="rotate")
                    cmds.delete(tempAimLoc, tempLoc, tempPart, tempNucl)

                    zeroParent = zeroLoc + "_parentConstraint1"
                    cmds.delete(zeroParent)

                    resetLoopTime()

                    cmds.select(aimLoc, r=True)
                    cmds.select(listObjects[i], add=True)

                    #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

                    attrX = listObjects[i] + '.rotateX'
                    attrY = listObjects[i] + '.rotateY'
                    attrZ = listObjects[i] + '.rotateZ'

                    lockX = cmds.getAttr(attrX, lock=True)
                    lockY = cmds.getAttr(attrY, lock=True)
                    lockZ = cmds.getAttr(attrZ, lock=True)

                    if (lockX != True):
                        cmds.parentConstraint(mo=True,
                                              st=["x", "y", "z"],
                                              sr=["y", "z"],
                                              w=1)

                    if (lockY != True):
                        cmds.parentConstraint(mo=True,
                                              st=["x", "y", "z"],
                                              sr=["x", "z"],
                                              w=1)

                    if (lockZ != True):
                        cmds.parentConstraint(mo=True,
                                              st=["x", "y", "z"],
                                              sr=["x", "y"],
                                              w=1)

            #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

                layerBase = "rotate_"
                layerName = layerBase + listFixed[i]
                layerComp = listFixed[i] + '_layer_{0}'.format("0")

                if (cmds.objExists(layerName)):

                    cmds.bakeResults(listObjects[i],
                                     t=(asT, aeT),
                                     sm=True,
                                     bol=True,
                                     at="rotate")
                    cmds.select(listObjects[i], r=True)

                    if (cycleInfinity):
                        cmds.setInfinity(pri="cycle", poi="cycle")
                    else:
                        cmds.setInfinity(pri="constant", poi="constant")

                    cmds.delete(aimLoc, zeroLoc)
                    cmds.container("BakeResultsContainer", e=True, rc=True)
                    cmds.animLayer("BakeResults", e=True, p=layerName)
                    cmds.rename("BakeResults", layerComp)
                    #cmds.deleteAttr( n=listObjects[i], at="blendParent1" )

                    resetLoopTime()
                else:
                    cmds.animLayer(layerName)
                    cmds.animLayer(layerName, e=True, p=mainLayerName)
                    cmds.bakeResults(listObjects[i],
                                     t=(asT, aeT),
                                     sm=True,
                                     bol=True,
                                     at="rotate")
                    cmds.select(listObjects[i], r=True)

                    if (cycleInfinity):
                        cmds.setInfinity(pri="cycle", poi="cycle")
                    else:
                        cmds.setInfinity(pri="constant", poi="constant")

                    cmds.delete(aimLoc, zeroLoc)
                    cmds.container("BakeResultsContainer", e=True, rc=True)
                    cmds.animLayer("BakeResults", e=True, p=layerName)
                    cmds.rename("BakeResults", layerComp)
                    #cmds.deleteAttr( n=listObjects[i], at="blendParent1" )

                    resetLoopTime()

                cmds.select(d=True)

    for l in listObjects:
        cmds.select(l, add=True)

    print "\n||| OVERLAPPY end |||\n"
Exemple #12
0
			global partRsm; partRsm = tempPart + "Shape.goalSmoothness" # Goal smoothness pull
			global partRwe; partRwe = tempPart + "Shape.goalWeight[0]" # Goal weight pull
			global partPos; partPos = tempPart + ".center" # nParticle center position pull
			global partNucl; partNucl = tempNucl + ".timeScale" # Time scale pull
			global nuclStart; nuclStart = tempNucl + ".startFrame" # Start frame of simulation nucleus node
			
			cmds.spaceLocator( n = tempLoc )
			cmds.matchTransform( tempLoc, listObjects[i], pos=True )
			
			objCenter = tempLoc + ".translate"
			objC = cmds.getAttr( objCenter )
			
			locCenter = tempLoc + ".center"
			locTr = tempLoc + ".translate"
			
			cmds.nParticle( p = objC, n = tempPart , c = 1 )
			cmds.goal( tempPart, w=goalW, utr=1, g = tempLoc )
			
			cmds.select( tempLoc, r=True )
			cmds.select( listObjects[i], add=True )
			cmds.parent( r=True )
			
			cmds.matchTransform( tempLoc, listObjects[i], pos=True )
	
			#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
	
			cmds.setAttr( partRtype, pShape )
			cmds.setAttr( partRrad, pRad )
			cmds.setAttr( partRsm, goalSmooth )
			cmds.setAttr( partRwe, goalW )
			cmds.setAttr( partNucl, timeScale )
Exemple #13
0
     \par
 #=======================================================================  \par
     \par
 start = cmds.playbackOptions(q=1,min=1)\par
 end = cmds.playbackOptions(q=1,max=1)\par
 \par
 for f in range(int(start) , int(end + 1)):\par
     cmds.currentTime(f, e=1)\par
     if cmds.getAttr(nPart_[0]+'.id')>0:\par
         parid_= cmds.getAttr(nPart_[0]+'.id')\par
         for i in range(int(lastPid_)+1):\par
             if float(i) in parid_:\par
                 posat_= mel.eval("particleInstancer -name %s -q -position %s;" %(insName_[0], nPart_[0])) \par
                 rotat_= mel.eval("particleInstancer -name %s -q -rotation %s;" %(insName_[0], nPart_[0]))\par
                 radat_= mel.eval("particleInstancer -name %s -q -scale %s;" %(insName_[0], nPart_[0]))\par
                 pos_ = cmds.nParticle(nPart_, id= int(i), q=1, at= posat_)\par
                 rot_ = cmds.nParticle(nPart_, id= int(i), q=1, at= rotat_)\par
                 rad_ = cmds.nParticle(nPart_, id= int(i), q=1, at= radat_)\par
                 cmds.setAttr(allobj_[int(i)]+'.translate', pos_[0], pos_[1], pos_[2], type="double3")\par
                 cmds.setAttr(allobj_[int(i)]+'.rotate', rot_[0], rot_[1], rot_[2], type="double3")\par
                 cmds.setAttr(allobj_[int(i)]+'.scale', rad_[0], rad_[0], rad_[0], type="double3")\par
                 cmds.setAttr(allobj_[int(i)]+'.visibility', 1)\par
                 cmds.setKeyframe(allobj_[int(i)])\par
             else:\par
                 cmds.setAttr(allobj_[int(i)]+'.visibility', 0)\par
                 cmds.setKeyframe(allobj_[int(i)])\par
             \par
             \par
             \par
             \par
             \par
Exemple #14
0
def translationStart():
	
	global asT; asT = cmds.playbackOptions( query=True, min=True ) # Get min anim range
	global aeT; aeT = cmds.playbackOptions( query=True, max=True ) # Get max anim range
	resetLoopTime()
	
	global listObjects; listObjects = cmds.ls( sl=True ) # Get list of selected objects
	
	#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

	global listFixed; listFixed = listObjects [:]

	for i in range( len( listFixed ) ):
		listFixed[i] = listFixed[i].replace( "|", "_" )
		listFixed[i] = listFixed[i].replace( ":", "_" )

	#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
	
	global mainLayerName; mainLayerName = "OVERLAPPY" # Name of main layer

	if( cmds.objExists( mainLayerName ) ):
		print "\n||| OVERLAPPY start |||\n"
	else:
		cmds.animLayer( mainLayerName )
		print "\n||| OVERLAPPY start ||| Layer created |||\n"

	#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

	for i in range( len( listFixed ) ):
		
		global aimLoc; aimLoc = listFixed[i] + "_aim_loc" # Aim locator name
		global tempLoc; tempLoc = listFixed[i] + "_temp_loc" # Physical locator name
		global tempPart; tempPart = listFixed[i] + "_temp_part" # nParticle name
		global tempNucl; tempNucl = "nucleus1" # Nucleus node name
	
		global partAimLoc; partAimLoc = aimLoc + ".translate" # Aim locator position pull
		global partRtype; partRtype = tempPart + "Shape.particleRenderType" # nParticle render type pull
		global partRrad; partRrad = tempPart + "Shape.radius" # nParticle shape radius
		global partRsm; partRsm = tempPart + "Shape.goalSmoothness" # Goal smoothness pull
		global partRwe; partRwe = tempPart + "Shape.goalWeight[0]" # Goal weight pull
		global partPos; partPos = tempPart + ".center" # nParticle center position pull
		global partNucl; partNucl = tempNucl + ".timeScale" # Time scale pull
		global nuclStart; nuclStart = tempNucl + ".startFrame" # Start frame of simulation nucleus node
		
		cmds.spaceLocator( n = tempLoc )
		cmds.matchTransform( tempLoc, listObjects[i], pos=True )
		
		objCenter = tempLoc + ".translate"
		objC = cmds.getAttr( objCenter )
		
		locCenter = tempLoc + ".center"
		locTr = tempLoc + ".translate"
		
		cmds.nParticle( p = objC, n = tempPart , c = 1 )
		cmds.goal( tempPart, w=goalW, utr=1, g = tempLoc )
		
		cmds.select( tempLoc, r=True )
		cmds.select( listObjects[i], add=True )
		cmds.parent( r=True )
		
		cmds.matchTransform( tempLoc, listObjects[i], pos=True )


	#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

		cmds.setAttr( partRtype, pShape )
		cmds.setAttr( partRrad, pRad )
		cmds.setAttr( partRsm, goalSmooth )
		cmds.setAttr( partRwe, goalW )
		cmds.setAttr( partNucl, timeScale )
		cmds.setAttr( nuclStart, asT )
		
	#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

		cmds.duplicate( tempLoc, rr=True, n = aimLoc )
		cmds.select( aimLoc, r=True )
		cmds.parent( w=True )
		cmds.connectAttr( partPos, partAimLoc, f=True )
		
		global minLoopTime; minLoopTime = aeT * minLoopScale
		global maxLoopTime; maxLoopTime = aeT * maxLoopScale
		
		if( cycle ):
			
			cmds.setAttr( nuclStart, minLoopTime )
				
			cmds.bakeResults( aimLoc, t = ( minLoopTime, maxLoopTime ), sm=True, at = "translate")
			cmds.delete( tempLoc, tempPart, tempNucl )

			setTimeToMin()
			
			cmds.select( aimLoc, r=True )
			cmds.select( listObjects[i], add=True )
			cmds.parentConstraint( mo=True, sr=["x", "y", "z"], w = 1 )
			
			resetLoopTime()

		else:
			
			cmds.bakeResults( aimLoc, t = ( asT, aeT ), sm=True, at = "translate" )
			cmds.delete( tempLoc, tempPart, tempNucl )
			
			resetLoopTime()
			
			cmds.select( aimLoc, r=True )
			cmds.select( listObjects[i], add=True )
			
			#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
			
			attrX = listObjects[i] + '.translateX'
			attrY = listObjects[i] + '.translateY'
			attrZ = listObjects[i] + '.translateZ'
			
			lockX = cmds.getAttr( attrX, lock=True )
			lockY = cmds.getAttr( attrY, lock=True )
			lockZ = cmds.getAttr( attrZ, lock=True )

			if ( lockX != True ):
				cmds.parentConstraint( mo=True, st=["y","z"], sr=["x","y","z"], w = 1 )

			if ( lockY != True ):
				cmds.parentConstraint( mo=True, st=["x","z"], sr=["x","y","z"], w = 1 )
				
			if ( lockZ != True ):
				cmds.parentConstraint( mo=True, st=["x","y"], sr=["x","y","z"], w = 1 )

	#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

		layerBase = "translate_"
		layerName = layerBase + listFixed[i]
		layerComp = listFixed[i] + '_layer_{0}'.format("0")

		if ( cmds.objExists( layerName ) ):
			
			cmds.bakeResults( listObjects[i], t = (asT, aeT), sm=True, bol=True, at = "translate")
			cmds.select( listObjects[i], r=True )
			
			if (cycleInfinity): cmds.setInfinity( pri="cycle", poi="cycle" )
			else: cmds.setInfinity( pri="constant", poi="constant" )
			
			cmds.delete( aimLoc )
			cmds.container( "BakeResultsContainer", e=True, rc=True )
			cmds.animLayer( "BakeResults", e=True, p = layerName )
			cmds.rename( "BakeResults", layerComp )
			#cmds.deleteAttr( n=listObjects[i], at="blendParent1" )
			
			resetLoopTime()
		else:
			cmds.animLayer (layerName)
			cmds.animLayer (layerName, e=True, p = mainLayerName)
			cmds.bakeResults (listObjects[i], t = (asT, aeT), sm=True, bol=True, at = "translate")
			cmds.select (listObjects[i], r=True)
			
			if (cycleInfinity): cmds.setInfinity( pri="cycle", poi="cycle" )
			else: cmds.setInfinity( pri="constant", poi="constant" )
			
			cmds.delete (aimLoc)
			cmds.container("BakeResultsContainer", e=True, rc=True)
			cmds.animLayer ("BakeResults", e=True, p = layerName)
			cmds.rename ("BakeResults", layerComp)
			#cmds.deleteAttr( n=listObjects[i], at="blendParent1" )
			
			resetLoopTime()

		
		cmds.select (d=True)
		
	for l in listObjects:
		cmds.select (l, add=True)
		
	print "\n||| OVERLAPPY end |||\n"
		def rotate_simulation(): ######## Need to remove
			obj.simState = obj.prefix_base_layer[2]
			obj.playback_range_initialization()
			obj.reset_range_time()
			obj.list_objects = cmds.ls(sl = True)
			obj.list_fixed = obj.list_objects [:]
			
			if (len(obj.list_objects) <= 1):
				print obj.myError, "Need to select 2 or more objects"
			else:
				print obj.myMessage, "Selected {0} objects (the last element is discarded)".format(len(obj.list_objects) - 1)
				obj.setup_progressbar(len(obj.list_objects) - 1) # start progress bar window
				
				obj.create_overlappy_layer()
				obj.replaceSymbols()
				
				for i in range(len(obj.list_fixed)-1):
					#### Set names #### ########## Need to create method
					
					obj.main_set_names(i)
					
					#### Create main logic ####
					if obj.aim_vector_reverse: obj.rotAimVector = -1
					else: obj.rotAimVector = 1
					
					## Create locators ##
					cmds.spaceLocator(n = obj.base_locator)
					cmds.matchTransform (obj.base_locator, obj.list_objects[i], pos = True, rot = True)
					cmds.duplicate(obj.base_locator, n = obj.base_aim_locator)
					cmds.parent(obj.base_aim_locator, obj.base_locator, a = True)
					
					cmds.duplicate(obj.base_aim_locator, n = obj.offset_aim_locator)
					
					cmds.parentConstraint(obj.list_objects[i], obj.base_locator, mo = True, w = 1)
					
					cmds.spaceLocator(n = obj.goal_locator)
					cmds.matchTransform (obj.goal_locator, obj.list_objects[i + 1], pos = True, rot = True)
					cmds.parentConstraint(obj.list_objects[i + 1], obj.goal_locator, mo = True, w = 1)
					
					cmds.spaceLocator(n = obj.goal_aim_locator)
					
					## Create particle and nucleus ##
					obj.goal_position = cmds.getAttr(obj.goal_locator + ".translate")
					cmds.nParticle(p = obj.goal_position, n = obj.np_name, c = 1)
					cmds.goal(obj.np_name, w = obj.T_goal_weight, utr = 1, g = obj.goal_locator)
					
					## Create connections ##
					cmds.connectAttr(obj.np_center, obj.goal_aim_locator_pos, f = True)
					cmds.aimConstraint(obj.goal_aim_locator, obj.base_aim_locator, w = 1,
											aim = (0, obj.rotAimVector, 0), u = (0, 1, 0),
											wut = "vector", wu = (0, 1, 0), sk = "y")
					
					cmds.parentConstraint(obj.base_aim_locator, obj.offset_aim_locator,
											mo = True, st=["x","y","z"], w = 1)
					
					#### Layers, connections, baking, copy/paste ####
					obj.get_nonLocked_attributes(i)
					
					cmds.select(d = True)
					cmds.progressBar(obj.progressControl, edit = True, step = obj.progressBar_step_value)
					
				#### Select list in initial order, close progressbar ####
				for l in obj.list_objects:
					cmds.select (l, add = True)
				obj.close_progressbar()
				
				print obj.myMessage, obj.root_layer_name, "ends simulation"
			obj.simState = obj.prefix_base_layer[0]
Exemple #16
0
def positionStart():

    global asT
    asT = cmds.playbackOptions(query=True, min=True)  # Левая граница анимации
    global aeT
    aeT = cmds.playbackOptions(query=True, max=True)  # Правая граница анимации
    resetLoopTime()

    global listObjects
    listObjects = cmds.ls(sl=True)  # Список трансформов

    #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    global listFixed
    listFixed = listObjects[:]

    for i in range(len(listFixed)):
        listFixed[i] = listFixed[i].replace("|", "_")

    #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    global mainLayerName
    mainLayerName = "OVERLAPPER"  # Имя главного слоя

    if (cmds.objExists(mainLayerName)):
        print "\n||| OVERLAPPER start |||\n"
    else:
        cmds.animLayer(mainLayerName)
        print "\n||| OVERLAPPER start ||| Layer created |||\n"

    #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    for i in range(len(listFixed)):  # Основной цикл

        global aimLoc
        aimLoc = listFixed[i] + "_aim_loc"  # Имя аим локатора
        global tempLoc
        tempLoc = listFixed[i] + "_temp_loc"  # Имя физ локатора
        global tempPart
        tempPart = listFixed[i] + "_temp_part"  # Имя физ частицы
        global tempNucl
        tempNucl = "nucleus1"  # Имя физ ноды

        global partAimLoc
        partAimLoc = aimLoc + ".translate"  # Обращение к позиции аим локатора
        global partRtype
        partRtype = tempPart + "Shape.particleRenderType"  # Обращение к типу отображения частицы
        global partRrad
        partRrad = tempPart + "Shape.radius"  # Обращение к размеру частицы
        global partRsm
        partRsm = tempPart + "Shape.goalSmoothness"  # Обращение к мягкости физики
        global partRwe
        partRwe = tempPart + "Shape.goalWeight[0]"  # Обращение к весу ноды
        global partPos
        partPos = tempPart + ".center"  # Обращение к центру частицы
        global partNucl
        partNucl = tempNucl + ".timeScale"  # Обращение к скейлу времени физ ноды
        global nuclStart
        nuclStart = tempNucl + ".startFrame"  # Обращение к старту симуляции физ ноды

        cmds.spaceLocator(n=tempLoc)  # Создаём физ локатор
        cmds.matchTransform(tempLoc, listObjects[i],
                            pos=True)  # Перемещаем локатор в пивот объекта

        objCenter = tempLoc + ".translate"  # Обращение к центру объекта
        objC = cmds.getAttr(objCenter)  # Записываем центр объекта

        locCenter = tempLoc + ".center"  # Обращение к центру физ локатора
        locTr = tempLoc + ".translate"  # Обращение к позиции физ локатора

        cmds.nParticle(p=objC, n=tempPart,
                       c=1)  # Создаём частицу в целевой позиции
        cmds.goal(tempPart, w=goalW, utr=1,
                  g=tempLoc)  # Создаём физическую связь

        cmds.select(tempLoc, r=True)  # Выделяем физ локатор
        cmds.select(listObjects[i], add=True)  # Выделяем целевого родителя
        cmds.parent(r=True)  # Создаём иерархию

        cmds.matchTransform(tempLoc, listObjects[i],
                            pos=True)  # Перемещаем локатор в пивот объекта

        #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

        cmds.setAttr(partRtype, pShape)
        cmds.setAttr(partRrad, pRad)
        cmds.setAttr(partRsm, goalSmooth)
        cmds.setAttr(partRwe, goalW)
        cmds.setAttr(partNucl, timeScale)
        cmds.setAttr(nuclStart, asT)

        #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

        cmds.duplicate(tempLoc, rr=True, n=aimLoc)  # Дублируем локатор
        cmds.select(aimLoc, r=True)  # Выделяем аим локатор
        cmds.parent(w=True)  # Разбираем иерархию
        cmds.connectAttr(partPos, partAimLoc,
                         f=True)  # Привязываем аим локатор к частице

        global minLoopTime
        minLoopTime = aeT * -2
        global maxLoopTime
        maxLoopTime = aeT * 2

        if (cycle):

            #cmds.playbackOptions (e=True, min=minLoopTime, max=maxLoopTime)
            cmds.setAttr(nuclStart, minLoopTime)
            #setTimeToMin()

            cmds.bakeResults(
                aimLoc, t=(minLoopTime, maxLoopTime), sm=True,
                at="translate")  # Запекание аим локатора для цикла
            cmds.delete(tempLoc, tempPart, tempNucl)  # Удаляем объекты физики
            #cmds.select (aimLoc, r=True) # Выделяем аим локатор
            #cmds.keyframe (tc = (aeT*-2), r=True) # Сдвигаем тройной цикл на один проход влево
            #cmds.setInfinity (pri="cycle", poi="cycle")

            setTimeToMin()

            cmds.select(aimLoc, r=True)  # Выделяем аим локатор как родителя
            cmds.select(listObjects[i],
                        add=True)  # Выделяем объект как подчиненного
            cmds.parentConstraint(mo=True, sr=["x", "y", "z"],
                                  w=1)  # Создаём позиционный констрейн

            resetLoopTime()

        else:

            cmds.bakeResults(
                aimLoc, t=(asT, aeT), sm=True,
                at="translate")  # Запекание аим локатора для линейной анимации
            cmds.delete(tempLoc, tempPart, tempNucl)  # Удаляем объекты физики

            resetLoopTime()

            cmds.select(aimLoc, r=True)  # Выделяем аим локатор как родителя
            cmds.select(listObjects[i],
                        add=True)  # Выделяем объект как подчиненного
            cmds.parentConstraint(mo=True, sr=["x", "y", "z"],
                                  w=1)  # Создаём позиционный констрейн

    #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

        layerBase = "overlap_"  # Имя базы слоя
        layerName = layerBase + listFixed[i]  # Имя слоя
        layerComp = listFixed[i] + '_layer_{0}'.format(
            "0")  # Имя компонента слоя

        if (cmds.objExists(layerName)):

            cmds.bakeResults(listObjects[i],
                             t=(asT, aeT),
                             sm=True,
                             bol=True,
                             at="translate")  # Запекаем объект в слой
            cmds.select(listObjects[i], r=True)
            cmds.setInfinity(pri="cycle", poi="cycle")
            cmds.delete(aimLoc)  # Удаляем объекты скрипта
            cmds.container("BakeResultsContainer", e=True,
                           rc=True)  # Удаляем контейнер
            cmds.animLayer(
                "BakeResults", e=True, p=layerName
            )  # Переносим слой с анимацией в основной слой объекта
            cmds.rename("BakeResults", layerComp)  # Переименовываем слой

            resetLoopTime()
        else:
            cmds.animLayer(
                layerName)  # Создаём пустой слой для всех оверлапов объекта
            cmds.animLayer(
                layerName, e=True,
                p=mainLayerName)  # Переносим базу слоя в главный слой
            cmds.bakeResults(listObjects[i],
                             t=(asT, aeT),
                             sm=True,
                             bol=True,
                             at="translate")  # Запекаем объект в слой
            cmds.select(listObjects[i], r=True)
            cmds.setInfinity(pri="cycle", poi="cycle")
            cmds.delete(aimLoc)  # Удаляем объекты скрипта
            cmds.container("BakeResultsContainer", e=True,
                           rc=True)  # Удаляем контейнер
            cmds.animLayer(
                "BakeResults", e=True, p=layerName
            )  # Переносим слой с анимацией в основной слой объекта
            cmds.rename("BakeResults", layerComp)  # Переименовываем слой

            resetLoopTime()

        cmds.select(d=True)  # Деселект

    for l in listObjects:
        cmds.select(l, add=True)

    print "\n||| OVERLAPPER end |||\n"
Exemple #17
0
def rotationStart():

    global asT
    asT = cmds.playbackOptions(query=True, min=True)  # Левая граница анимации
    global aeT
    aeT = cmds.playbackOptions(query=True, max=True)  # Правая граница анимации
    resetLoopTime()

    global listObjects
    listObjects = cmds.ls(sl=True)  # Список трансформов

    if (len(listObjects) <= 1):

        print "\n||| Need to select two or more objects |||\n"

    else:

        #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

        global listFixed
        listFixed = listObjects[:]

        for i in range(len(listFixed)):
            listFixed[i] = listFixed[i].replace("|", "_")

        #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

        global mainLayerName
        mainLayerName = "OVERLAPPY"  # Имя главного слоя

        if (cmds.objExists(mainLayerName)):
            print "\n||| OVERLAPPY start |||\n"
        else:
            cmds.animLayer(mainLayerName)
            print "\n||| OVERLAPPY start ||| Layer created |||\n"

        #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

        for i in range(len(listFixed)):  # Основной цикл

            if (i + 1 != len(listFixed)):

                global zeroLoc
                zeroLoc = listFixed[i] + "_base_loc"  # Имя нулевого локатора
                global aimLoc
                aimLoc = listFixed[i] + "_aim_loc"  # Имя следящего локатора
                global tempLoc
                tempLoc = listFixed[i] + "_temp_loc"  # Имя физического локатора
                global tempAimLoc
                tempAimLoc = listFixed[
                    i] + "_tempAim_loc"  # Имя целевого локатора

                global tempPart
                tempPart = listFixed[i] + "_temp_part"  # Имя частицы
                global tempNucl
                tempNucl = "nucleus1"  # Имя физической ноды

                global partRtype
                partRtype = tempPart + "Shape.particleRenderType"  # Обращение к типу отображения частицы
                global partRrad
                partRrad = tempPart + "Shape.radius"  # Обращение к размеру частицы
                global partRsm
                partRsm = tempPart + "Shape.goalSmoothness"  # Обращение к мягкости физики
                global partRwe
                partRwe = tempPart + "Shape.goalWeight[0]"  # Обращение к весу ноды
                global partNucl
                partNucl = tempNucl + ".timeScale"  # Обращение к скейлу времени физ ноды
                global nuclStart
                nuclStart = tempNucl + ".startFrame"  # Обращение к старту симуляции физ ноды

                #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

                cmds.spaceLocator(n=zeroLoc)  # Создаём нулевой локатор
                cmds.spaceLocator(n=aimLoc)  # Создаём следящий локатор
                cmds.spaceLocator(n=tempLoc)  # Создаём физический локатор

                cmds.matchTransform(
                    zeroLoc, listObjects[i], pos=True
                )  # Перемещаем нулевой локатор в пивот главного объекта
                cmds.matchTransform(
                    tempLoc, listObjects[i + 1], pos=True
                )  # Перемещаем физический локатор в пивот целевого объекта

                cmds.select(tempLoc, r=True)  # Выделяем физический локатор
                cmds.duplicate(
                    n=tempAimLoc)  # Дублируем его и создаём целевой локатор

                cmds.select(listObjects[0], r=True)  # Выделяем главный объект
                cmds.select(zeroLoc, add=True)  # Выделяем нулевой локатор
                cmds.parentConstraint(mo=True, w=1)  # Создаём пэрент констрейн

                cmds.select(aimLoc, r=True)  # Выделяем следящий локатор
                cmds.select(zeroLoc, add=True)  # Выделяем нулевой локатор
                cmds.parent(r=True)  # Создаём иерархию

                cmds.select(listObjects[1], r=True)  # Выделяем целевой объект
                cmds.select(tempLoc, add=True)  # Выделяем физический локатор
                cmds.parentConstraint(mo=True, sr=["x", "y", "z"],
                                      w=1)  # Создаём позиционный констрейн

                aimPosName = tempLoc + ".translate"  # Обращение к позиции физического локатора
                partCenter = tempPart + ".center"  # Обращение к центру частицы
                aimLocPos = tempAimLoc + ".translate"  # Обращение к позиции целевого локатора

                aimPos = cmds.getAttr(
                    aimPosName)  # Берём позицию физического локатора
                cmds.nParticle(p=aimPos, n=tempPart,
                               c=1)  # Создаём частицу в целевой позиции
                cmds.goal(tempPart, w=0.5, utr=1, g=tempLoc
                          )  # Создаём физическую связь с физическим локатором
                cmds.connectAttr(
                    partCenter, aimLocPos,
                    f=True)  # Привязываем целевой локатор к частице

                cmds.select(tempAimLoc, r=True)  # Выделяем целевой локатор
                cmds.select(aimLoc, add=True)  # Выделяем следящий локатор
                cmds.aimConstraint(
                    w=1,
                    aim=(0, 1, 0),
                    u=(0, 1, 0),
                    wut="vector",
                    wu=(0, 1, 0),
                    sk="y")  # Создаём аим констреён по двум осям

                #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

                cmds.setAttr(partRtype, pShape)
                cmds.setAttr(partRrad, pRad)
                cmds.setAttr(partRsm, goalSmoothRot)
                cmds.setAttr(partRwe, goalWRot)
                cmds.setAttr(partNucl, timeScaleRot)
                cmds.setAttr(nuclStart, asT)

                #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

                global minLoopTime
                minLoopTime = aeT * -2
                global maxLoopTime
                maxLoopTime = aeT * 2

                if (cycleRot):

                    cmds.setAttr(nuclStart, minLoopTime)

                    cmds.bakeResults(
                        zeroLoc,
                        t=(asT, aeT),
                        sm=True,
                        at=("translate",
                            "rotate"))  # Запекание нулевого локатора для цикла
                    cmds.bakeResults(
                        aimLoc,
                        t=(minLoopTime, maxLoopTime),
                        sm=True,
                        at="rotate")  # Запекание аим локатора для цикла
                    cmds.delete(tempAimLoc, tempLoc, tempPart,
                                tempNucl)  # Удаляем объекты физики

                    zeroParent = zeroLoc + "_parentConstraint1"
                    cmds.delete(zeroParent)

                    setTimeToMin()

                    cmds.select(aimLoc,
                                r=True)  # Выделяем аим локатор как родителя
                    cmds.select(listObjects[i],
                                add=True)  # Выделяем объект как подчиненного
                    cmds.parentConstraint(mo=True, st=["x", "y", "z"],
                                          w=1)  # Создаём ротэйт констрейн

                    resetLoopTime()

                else:

                    cmds.bakeResults(
                        zeroLoc,
                        t=(asT, aeT),
                        sm=True,
                        at=("translate", "rotate")
                    )  # Запекание нулевого локатора для линейной анимации
                    cmds.bakeResults(
                        aimLoc, t=(asT, aeT), sm=True, at="rotate"
                    )  # Запекание аим локатора для линейной анимации
                    cmds.delete(tempAimLoc, tempLoc, tempPart,
                                tempNucl)  # Удаляем объекты физики

                    zeroParent = zeroLoc + "_parentConstraint1"
                    cmds.delete(zeroParent)

                    resetLoopTime()

                    cmds.select(aimLoc,
                                r=True)  # Выделяем аим локатор как родителя
                    cmds.select(listObjects[i],
                                add=True)  # Выделяем объект как подчиненного
                    cmds.parentConstraint(mo=True, st=["x", "y", "z"],
                                          w=1)  # Создаём ротэйт констрейн

            #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

                layerBase = "rotate_"  # Имя базы слоя
                layerName = layerBase + listFixed[i]  # Имя слоя
                layerComp = listFixed[i] + '_layer_{0}'.format(
                    "0")  # Имя компонента слоя

                if (cmds.objExists(layerName)):

                    cmds.bakeResults(listObjects[i],
                                     t=(asT, aeT),
                                     sm=True,
                                     bol=True,
                                     at="rotate")  # Запекаем объект в слой
                    cmds.select(listObjects[i], r=True)
                    cmds.setInfinity(pri="cycle", poi="cycle")
                    cmds.delete(aimLoc, zeroLoc)  # Удаляем объекты скрипта
                    cmds.container("BakeResultsContainer", e=True,
                                   rc=True)  # Удаляем контейнер
                    cmds.animLayer(
                        "BakeResults", e=True, p=layerName
                    )  # Переносим слой с анимацией в основной слой объекта
                    cmds.rename("BakeResults",
                                layerComp)  # Переименовываем слой
                    cmds.deleteAttr(n=listObjects[i], at="blendParent1")

                    resetLoopTime()
                else:
                    cmds.animLayer(
                        layerName
                    )  # Создаём пустой слой для всех оверлапов объекта
                    cmds.animLayer(
                        layerName, e=True,
                        p=mainLayerName)  # Переносим базу слоя в главный слой
                    cmds.bakeResults(listObjects[i],
                                     t=(asT, aeT),
                                     sm=True,
                                     bol=True,
                                     at="rotate")  # Запекаем объект в слой
                    cmds.select(listObjects[i], r=True)
                    cmds.setInfinity(pri="cycle", poi="cycle")
                    cmds.delete(aimLoc, zeroLoc)  # Удаляем объекты скрипта
                    cmds.container("BakeResultsContainer", e=True,
                                   rc=True)  # Удаляем контейнер
                    cmds.animLayer(
                        "BakeResults", e=True, p=layerName
                    )  # Переносим слой с анимацией в основной слой объекта
                    cmds.rename("BakeResults",
                                layerComp)  # Переименовываем слой
                    cmds.deleteAttr(n=listObjects[i], at="blendParent1")

                    resetLoopTime()

                cmds.select(d=True)  # Деселект

    for l in listObjects:
        cmds.select(l, add=True)

    print "\n||| OVERLAPPY end |||\n"