Ejemplo n.º 1
0
def playerTurn(num):
    if num in myList:
        cmds.headsUpMessage('This block was already removed')
    else:
        #call the game function to create MASH network
        game()
        #parts of the string for the MASH Python node
        endStr = "\n\nmd.setData()"
        s = "import openMASH\n\nmd = openMASH.MASHData(thisNode)\n\n"
        #getting the visibility command
        strCommand = visCommand(num)
        #putting the string together
        pyStr = s + strCommand + endStr
        #adding the code to the MASH Python node
        cmds.select(pfx + "test")
        cmds.addAttr(longName="code", dataType="string")
        cmds.connectAttr(pfx + "test.code", pfx + "tower_Python.pyScript")
        cmds.setAttr(pfx + "test.code", pyStr, type="string")
        cmds.hide(pfx + "test")
        #another mash network to show number of turns
        cmds.duplicate(pfx + "brick")
        cmds.select(pfx + "brick1")
        cmds.rotate(90, 0, 0)
        mashNetwork = mapi.Network()
        mashNetwork.createNetwork(name=pfx + "turns", distributionStyle=2)
        cmds.setAttr(pfx + "turns_Distribute.modelAxis", 3)
        cmds.setAttr(pfx + "turns_Distribute.pointCount", len(myList))
        transNode = mashNetwork.addNode("MASH_Dynamics")
        cmds.headsUpMessage('Turn #' + str(len(myList)))
def createMashNetwork(node, node2, transformNode):

    # create a new MASH network
    mashNetwork = mapi.Network()
    mashNetwork.createNetwork(name="MASH")

    # connect object to repro node for instancing
    repro.connect_mesh_group('MASH_Repro', node)
    AErepro.refresh_all_aetemplates(
    )  # Refresh the attribute editor for all repro nodes

    #change attribute on distribute node to make object follow curve
    #cmds.setAttr( 'MASH_Distribute.arrangement', 7 )
    cmds.setAttr('MASH_Distribute.amplitudeX', 0)

    #Create Curve Node with Curve
    Curvenode = mashNetwork.addNode("MASH_Curve")

    #change curve node attribute to having object duplicate around entire curve
    cmds.setAttr("MASH_Curve.timeStep", 1)
    bug = "MASH_Curve"
    cmds.connectAttr(node2[0] + '.worldSpace[0]',
                     bug + ".inCurves[0]",
                     force=1)

    cmds.showHidden(node2)
    cmds.showHidden(transformNode)
Ejemplo n.º 3
0
def mashSignal():
    '''
	Create a sphere filled with cubes 
	and when the a signal passes throught,
	the cube on te surface grow

	1. create ofbjects and a Mash network
	2. add a signal node: Adds either 4D Noise or Trigonometric animation to the network. 
	3. add falloff the the signal node
	4. distribute node comes with the Mash network, in this case we distribute the cubes on the surface
	'''

    # create Objects
    sphereToDistributeOn = cmds.polySphere(r=12)
    cmds.polyCube()

    # create a new MASH network
    mashNetwork = mapi.Network()
    mashNetwork.createNetwork(name="HelloWorld")

    # print out the default node names
    print mashNetwork.waiter
    print mashNetwork.distribute
    print mashNetwork.instancer

    # add Node: Signal
    node = mashNetwork.addNode("MASH_Signal")
    # set Attribute: Signal/Scale/ScaleX
    cmds.setAttr(node.name + ".scaleX", 10)
    # print: name of the signal node
    print node.name

    # add Attribute: Signal/Falloff Object/ create:FallOff
    falloff = node.addFalloff()
    # list command list of DAG object, p= Returns the parent of this dag node
    falloffParent = cmds.listRelatives(falloff, p=True)[0]
    # set Attribute: Falloff Object/translateX
    cmds.setAttr(falloffParent + ".translateX", 8)

    # distributs the cubes on the sphere surface
    mashNetwork.meshDistribute(sphereToDistributeOn[0])
    # set Attribute: Distribute/Number of Points
    mashNetwork.setPointCount(1000)

    # print all nodes in the network
    nodes = mashNetwork.getAllNodesInNetwork()
    print "All nodes in network: []".format(
        nodes
    )  # set([u'Falloff_HelloWorld_SignalShape', u'HelloWorld_Signal', u'HelloWorld_ReproMesh', u'HelloWorld_Distribute', u'HelloWorld_Repro', u'HelloWorld', u'Falloff_HelloWorld_Signal'])

    # find all the falloffs in the network
    for node in nodes:
        mashNode = mapi.Node(node)
        falloffs = mashNode.getFalloffs()

        # found falloff
        if falloffs:
            print node + " has the following falloffs: " + str(
                falloffs)  # [u'Falloff_HelloWorld_SignalShape']
Ejemplo n.º 4
0
def continuousConstrains():
    '''
	Create an instances of cubes, = equal to current tine (basicly emitting cubes)
	When cube are created constrain them to local cubes

	1. create file: force a new file on default location
	2. set perspective view
	3. create object
	4. create Mash network/Instancer:
	5. set number of points equals current time
	6. create Note: dynamics
	7. create node: constain
	'''

    # 1. create
    cmds.file(force=True, new=True)

    # 2. set perspective view
    cmds.setAttr('persp.translateX', 40)
    cmds.setAttr('persp.translateY', 25)
    cmds.setAttr('persp.translateZ', 40)
    cmds.setAttr('persp.rotateX', -30)
    cmds.setAttr('persp.rotateY', 45)

    # 3. create object
    cmds.polyCube()

    # 4. create a new MASH network
    mashNetwork = mapi.Network()
    mashNetwork.createNetwork(name="DymamicsNetwork", geometry="Instancer")

    # set Attribute: arrangement
    cmds.setAttr(mashNetwork.distribute + ".arrangement", 9)  # 9 = volume

    # 5. number of points equals time
    cmds.setKeyframe(mashNetwork.distribute,
                     attribute='pointCount',
                     t=['0sec'],
                     v=0.0)
    cmds.setKeyframe(mashNetwork.distribute,
                     attribute='pointCount',
                     t=['20sec'],
                     v=200.0)

    # 6. create Note: dynamics
    dynamicsNode = mashNetwork.addNode("MASH_Dynamics")

    # 7. create node: constain
    constraintNode = mashNetwork.addConstraint(dynamicsNode)

    #tell Maya to finish what it's doing before we continue
    cmds.flushIdleQueue()

    #playblast
    cmds.playbackOptions(maxTime='20sec')
    cmds.playblast(format="qt", viewer=True, p=100)
Ejemplo n.º 5
0
def staggerTime():
    '''
	Animate a serie of planes and animed them 

	1. create file: force a new file on default location
	2. set perspective view
	3. create object
	4. create Mash network: fills inside with instances
	5. animation offset components
	'''

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

    # 2. move the camera
    cmds.setAttr('persp.translateX', 25)
    cmds.setAttr('persp.translateY', 20)
    cmds.setAttr('persp.translateZ', 20)

    # 3. create a poly cube
    pcube = cmds.polyPlane(sx=1, sy=1)
    cmds.setKeyframe(pcube[0], attribute='rotateX', t=['0sec'], v=-180.0)
    cmds.setKeyframe(pcube[0], attribute='rotateX', t=['0.5sec'], v=0.0)

    # 4. create a new MASH network
    mashNetwork = mapi.Network()
    mashNetwork.createNetwork(name="TimeNetwork", geometry="Repro")
    cmds.setAttr(mashNetwork.distribute + '.arrangement', 6)  # 6=Grid
    cmds.setAttr(mashNetwork.distribute + '.gridAmplitudeX', 30)
    cmds.setAttr(mashNetwork.distribute + '.gridx', 30)
    cmds.setAttr(mashNetwork.distribute + '.gridz', 6)

    # 5. create node: timeNode
    timeNode = mashNetwork.addNode("MASH_Time")
    cmds.setAttr(timeNode.name + '.animationEnd',
                 1000)  #one attribute way to turn off looping
    cmds.setAttr(timeNode.name + '.staggerFrames', 120)
    cmds.setAttr(timeNode.name + '.timeOffset', -120)

    reproMesh = cmds.listConnections(mashNetwork.instancer + '.outMesh',
                                     d=True,
                                     s=False)[0]

    cmds.flushIdleQueue()

    cmds.select(clear=True)
    cmds.select(reproMesh)
    bendDeformer = cmds.nonLinear(type='bend', curvature=179.5)[1]  #handle
    cmds.setAttr(bendDeformer + '.rotateX', 90)
    cmds.setAttr(bendDeformer + '.rotateY', 90)

    cmds.playbackOptions(animationEndTime='6sec')
    cmds.playblast(format="qt", viewer=True, p=100)
Ejemplo n.º 6
0
def CreateVisualizer(wavPath):
    '''Create a MASH visualizer in Maya given a Wav file path.

    Will create a new MASH network named "testNetwork", change the
    distribution type to 'grid' mode, add an audio node, set up the
    audio node, then change some variables to make it look interesting.

    Check module docstring for usage examples.

    Args:
        wavPath (str): The path to the Wav file to be used
    
    Notes:
        * Must be used in mayapy.exe
    
    '''
    mc.file(new=True, force=True)
    
    fileNameWithExtention = ntpath.basename(wavPath)
    fileName= fileNameWithExtention[:fileNameWithExtention.find(".")]
    
    cube = mc.polySphere()
    
    networkName = "testNetwork"
    mashNetwork = mapi.Network()
    mashNetwork.createNetwork(networkName)
    
    audioNode = AudioNode(mashNetwork, wavPath)
        
    #print(mc.getAttr(audioNode.name+".eqOutput"))
    
    mc.setAttr(audioNode.name+".scaleY", 100)
    
    mc.setAttr(networkName+"_Distribute"+".arrangement", 6) # 6 is Grid
    mc.setAttr(networkName+"_Distribute"+".gridAmplitudeX", 30)
    mc.setAttr(networkName+"_Distribute"+".gridAmplitudeZ", 10)
    mc.setAttr(networkName+"_Distribute"+".gridx", 30)
    
    colorNode = mashNetwork.addNode("MASH_Color")
    mc.setAttr(colorNode.name+".color", 0.222,0.222,0.888)
    
    colorFalloff = colorNode.addFalloff()
    mc.setAttr(colorFalloff+".falloffShape", 2) # 2 is Cube
Ejemplo n.º 7
0
def worldIgnoreSlope():
    #new file
    cmds.file(force=True, new=True)

    #move the camera
    cmds.setAttr('persp.translateX', 133.600)
    cmds.setAttr('persp.translateY', 97.700)
    cmds.setAttr('persp.translateZ', 133.600)

    #create a poly cube
    ptorus = cmds.polyTorus(r=80, sr=6, sh=15, sx=100)
    pcube = cmds.polyCube(w=0.1, h=2, d=0.1)

    #create a new MASH network
    mashNetwork = mapi.Network()
    mashNetwork.createNetwork("CurlNoiseNetwork")
    shape = cmds.listRelatives(ptorus[0], s=True)[0]
    mashNetwork.meshDistribute(shape, 1)
    cmds.setAttr(mashNetwork.distribute + '.floodMesh', 1)
    cmds.setAttr(mashNetwork.distribute + '.pointCount', 20)

    #add a World node
    node = mashNetwork.addNode("MASH_World")
    #set some attributes on the world node using the .name of the node instance
    cmds.setAttr(node.name + ".clusterMode", 7)
    cmds.setAttr(node.name + ".sparsity", 0.5)
    cmds.setKeyframe(node.name, attribute='ecosystemAge', t=['0sec'], v=0.0)
    cmds.setKeyframe(node.name, attribute='ecosystemAge', t=['5sec'], v=120.0)
    cmds.setAttr(node.name + ".ignoreSlope", 1)

    node.addGroundPlane(ptorus[0])

    jsonString = '[{"Slope": 0.6, "colorBar": [255, 255, 255], "Id Min": 0, "Name": "Default Genotype", "Seed Count": 4, "Resiliance": 0.2, "Age": 100, "Soil Quality": 0.5, "Id": 0, "Temperature": 0.5, "Rate": 0.12, "Id Max": 0, "Id Color": [0.0, 0.0, 0.0], "Moisture": 0.5, "Variance": 0.2, "Seed Age": 10, "Size": 1.0}]'  #
    cmds.setAttr(node.name + '.genotypeJSON', jsonString, type='string')

    cmds.hide(ptorus[0])
    cmds.flushIdleQueue()

    #playblast
    cmds.playbackOptions(animationEndTime='5sec')
    cmds.playblast(format="qt", viewer=True, p=100)
Ejemplo n.º 8
0
def overlappingMash( targetList ):

    cmds.select(cl=True)
    mashNetwork = mapi.Network()
    mashNetwork.createNetwork( name='MASH1', distributionStyle=7 )
    mashNetwork.setPointCount( len(targetList) )

    for x in range( len(targetList) ):
        locatorName = cmds.spaceLocator()[0]
        cmds.parentConstraint( targetList[x], locatorName )
        cmds.connectAttr( '%s.worldMatrix[0]' % locatorName, '%s.initialStateMatrix[%s]' % ( mashNetwork.distribute, x ) )

    idNode = mashNetwork.addNode( 'MASH_ID' )
    cmds.setAttr( idNode.name + '.numObjects', len(targetList) )

    pointNode = mashNetwork.addNode( 'MASH_Points' )

    delayNode = mashNetwork.addNode( 'MASH_Delay' )
    cmds.setAttr( delayNode.name + '.timeStep', 1)

    springNode = mashNetwork.addNode( 'MASH_Spring' )

    # output node create

    breakoutNode = mashNetwork.addNode( 'MASH_Breakout' )

    outputList = []
    for x in range( len(targetList) ):
        outputLocator = cmds.spaceLocator( name=targetList[x].replace( 'JNT', 'mashLoc' ) )[0]
        outputList.append( outputLocator )

        cmds.connectAttr( '%s.outputs[%s].translate' % ( breakoutNode.name, x ), outputLocator + '.translate' )


    for x in range( len(outputList)-1 ):
        cmds.aimConstraint( outputList[x+1], outputList[x], aimVector=[ 1, 0, 0 ], upVector=[ 0, 1, 0 ], worldUpType='objectrotation', worldUpObject=targetList[0] )

    cmds.orientConstraint( outputList[-2], outputList[-1] )
Ejemplo n.º 9
0
def runPreset():
    cmds.select(clear=True)
    cmds.promptDialog(message='Nome do sistema MASH:')
    mashName = cmds.promptDialog(query=True, text=True)
    if not mashName:
        mashName = '#'
    else:
        mashName = '_' + mashName
    ############################################################################################
    steps = [
        'Selecione as instancias | n >= 2 (arraste com o botao do meio)',
        'Selecione a superficie  | n = 1  (arraste com o botao do meio)'
    ]
    accepts = [['mesh'], ['mesh']]
    ############################################################################################
    fx.DropWindow.getDrop(steps,
                          lambda data: smartPreset.send(data),
                          accepts=accepts)
    node = yield
    nodes = node.split('\n')
    ############################################################################################
    cmds.promptDialog(message='Numero de pontos:')
    pointCount = cmds.promptDialog(query=True, text=True)
    try:
        pointCount = int(pointCount)
    except:
        pointCount = 10

    mash = mapi.Network()
    mash.createNetwork(name='MASH' + mashName, geometry='Instancer')

    node = yield
    node = node.split('\n')[0]

    mash.meshDistribute(node)
    ############################################################################################
    distNodeName = mash.waiter + '_Distribute'
    cmds.setAttr(distNodeName + '.pointCount', pointCount)

    idNodeName = mash.waiter + '_ID'
    cmds.setAttr(idNodeName + '.idtype', 2)
    count = cmds.getAttr(idNodeName + '.numObjects')

    pyNode = mash.addNode('MASH_Python')
    cmds.addAttr(pyNode.name,
                 longName='countID',
                 attributeType='long',
                 defaultValue=count)
    expr = '{0}.countID = {1}.numObjects'.format(pyNode.name, idNodeName)
    cmds.expression(s=expr)
    cmds.addAttr(pyNode.name,
                 longName='seed',
                 attributeType='long',
                 defaultValue=1234)
    scriptID = ''.join([
        'p[{0}] = 1  # {1} prob.\n'.format(i, e) for i, e in enumerate(nodes)
    ])
    cmds.setAttr(pyNode.name + '.pyScript',
                 SCRIPT.format(scriptID),
                 type='string')

    randNode = mash.addNode('MASH_Random')
    cmds.setAttr(randNode.name + '.positionX', 0)
    cmds.setAttr(randNode.name + '.positionY', 0)
    cmds.setAttr(randNode.name + '.positionZ', 0)
    cmds.setAttr(randNode.name + '.rotationY', 180)
    cmds.setAttr(randNode.name + '.scaleX', 1)
    cmds.setAttr(randNode.name + '.uniformRandom', 1)

    strengthNode = mash.addNode('MASH_Strength')

    yield
Ejemplo n.º 10
0
__date__ = '2020-08-26 23:23:27'

import MASH.api as mapi
from maya import OpenMaya
import pymel.core as pm

# NOTE 删除之前生成的 loc
pm.delete([grp for grp in pm.ls(assemblies=1) if grp.startswith("frame")])

data = {}
min_time = pm.playbackOptions(q=1, min=1)
max_time = pm.playbackOptions(q=1, max=1)
for i in range(int(min_time), int(max_time) + 1):
    pm.currentTime(i, update=1)

    mashNetwork = mapi.Network("MASH1")
    # NOTE 这个是 MASH1_Repro 节点
    node = pm.PyNode(mashNetwork.instancer)
    # NOTE 获取 MPlug 属性
    obj = node.inputPoints.__apiobject__().asMObject()
    inputPointsData = OpenMaya.MFnArrayAttrsData(obj)
    positions = inputPointsData.getVectorData("position")

    loc_list = []
    # TODO 不能直接 for 循环 | 会导致 Maya 崩溃
    for i in range(positions.length()):
        pt = positions[i]
        loc = pm.spaceLocator()
        loc.t.set((pt.x, pt.y, pt.z))
        loc_list.append(loc)
    pm.group(loc_list, n="frame_%s" % i)
Ejemplo n.º 11
0
def colourOffsetMesh():
    '''
	Inhabit on object surface with a instance of cubes and make them transfom bases on the surface color
	The surface color is a animated noise texture

	1. create file: force a new file on default location
	2. set perspective view
	3. create object
	4. create Mash network/Repro:  Repro node is used to control various aspects of the meshes created when Geometry Type is set to Mesh during a MASH network's creation. 
	5. Disturube Instances on Surface
	6. offset position, scale, transformation space
	7. add noise shader & animate noise
	8. create color node
	9. create falloff for the color node
	'''

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

    # 2. move the camera
    cmds.setAttr('persp.translateX', 50)
    cmds.setAttr('persp.translateY', 35)
    cmds.setAttr('persp.translateZ', 50)

    # 3. create a poly cube
    ptorus = cmds.polyTorus(r=20, sr=2, sh=60, sx=400)
    pcube = cmds.polyCube(w=0.4, h=1.0, d=0.4)

    # 4. create a new MASH network
    mashNetwork = mapi.Network()
    mashNetwork.createNetwork(name="OffsetMapNetwork",
                              geometry="Repro")  # use Mash Repro node

    # 5. Disturube Instances on Surface
    shape = cmds.listRelatives(ptorus[0], s=True)[0]  # select Torus object
    mashNetwork.meshDistribute(
        shape,
        4)  # Sets the MASH Network distribution method to mesh based. 4 = Face
    cmds.setAttr(
        mashNetwork.distribute + '.floodMesh', 1
    )  # Flood Mesh Automatically fills the mesh with instances of the object, overriding the Number of Points.

    # 6. add a World node
    offsetNode = mashNetwork.addNode("MASH_Offset")
    cmds.setAttr(offsetNode.name + '.positionOffsetY', 5)
    cmds.setAttr(offsetNode.name + '.scaleOffset1', 5)
    cmds.setAttr(offsetNode.name + '.transformationSpace', 2)

    # 7. add noise shader & animate noise
    noiseShader = cmds.shadingNode('noise', asTexture=True)
    place2dTexture = cmds.shadingNode('place2dTexture', asUtility=True)
    cmds.connectAttr(place2dTexture + '.outUV', noiseShader + '.uv')
    cmds.connectAttr(noiseShader + '.outColor', offsetNode.name + '.mColour')
    cmds.setAttr(noiseShader + '.noiseType', 2)
    cmds.setKeyframe(noiseShader, attribute='time', t=['0sec'], v=0.0)
    cmds.setKeyframe(noiseShader, attribute='time', t=['5sec'], v=1.0)

    # 8. create color node
    colorNode = mashNetwork.addNode("MASH_Color")
    # set Attribute: color, add background/ background color
    cmds.setAttr(colorNode.name + '.color', 0.859, 0.31, 0.251, type='double3')
    cmds.setAttr(colorNode.name + '.enableBackgroundColor', 1)
    cmds.setAttr(colorNode.name + '.backgroundColor',
                 0.239,
                 0.663,
                 0.576,
                 type='double3')

    # 9. create color/falloff node
    colourFalloff = colorNode.addFalloff()
    cmds.connectAttr(shape + '.worldMesh[0]', colourFalloff + '.shapeIn')
    cmds.setAttr(colourFalloff + '.falloffShape', 6)
    cmds.setAttr(colourFalloff + '.searchRadius', 4)
    cmds.setAttr(colourFalloff + '.innerRadius', 0)

    #tell Maya to finish what it's doing before we continue
    cmds.flushIdleQueue()

    #playblast
    cmds.playbackOptions(animationEndTime='5sec')
    cmds.playblast(format="qt", viewer=True)
Ejemplo n.º 12
0
def signalColour():
    '''
	create a matrix of cubes, effected by a signal, rotate, scale and color

	1. create file: force a new file on default location
	2. set perspective view
	3. create object
	4. create Mash network: fills inside with instances
	5. create node: signal
	6. create node: Signal/Falloff
	7. create node: colorNode
	'''

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

    # 2. move the camera
    cmds.setAttr('persp.translateX', 50)
    cmds.setAttr('persp.translateY', 48)
    cmds.setAttr('persp.translateZ', 50)

    # 3. create a poly cube
    pcube = cmds.polyCube(w=1.0, h=1.0, d=1.0)

    # 4. create a new MASH network
    mashNetwork = mapi.Network()
    mashNetwork.createNetwork(
        name="OffsetMapNetwork", geometry="Repro"
    )  # Repro node is used to control various aspects of the meshes created when Geometry Type is set to Mesh during a MASH network's creation.
    cmds.setAttr(mashNetwork.distribute + '.arrangement', 6)  # 6=grid
    cmds.setAttr(mashNetwork.distribute + '.gridAmplitudeX',
                 30)  # set grid size
    cmds.setAttr(mashNetwork.distribute + '.gridAmplitudeY', 30)
    cmds.setAttr(mashNetwork.distribute + '.gridAmplitudeZ', 30)
    cmds.setAttr(mashNetwork.distribute + '.gridx', 30)
    cmds.setAttr(mashNetwork.distribute + '.gridy', 30)
    cmds.setAttr(mashNetwork.distribute + '.gridz', 30)

    # 5. create node: signal
    signalNode = mashNetwork.addNode("MASH_Signal")
    # set attributes
    cmds.setAttr(signalNode.name + '.positionX', 0)  # signal transform
    cmds.setAttr(signalNode.name + '.positionY', 0)
    cmds.setAttr(signalNode.name + '.positionZ', 0)
    cmds.setAttr(signalNode.name + '.rotationX', 360)
    cmds.setAttr(signalNode.name + '.rotationY', 360)
    cmds.setAttr(signalNode.name + '.rotationZ', 360)
    cmds.setAttr(signalNode.name + '.scaleX', 5)
    cmds.setAttr(signalNode.name + '.timeScale', 0.2)

    # 6. create node: Signal/Falloff
    signalFalloff = signalNode.addFalloff()
    falloffTransform = cmds.listRelatives(signalFalloff, allParents=True)[0]
    cmds.setAttr(falloffTransform + '.translateX', 15.7)
    cmds.setAttr(falloffTransform + '.translateY', 14)
    cmds.setAttr(falloffTransform + '.scaleX', 25)
    cmds.setAttr(falloffTransform + '.scaleY', 25)
    cmds.setAttr(falloffTransform + '.scaleZ', 25)

    # 7. create node: colorNode
    colorNode = mashNetwork.addNode("MASH_Color")
    cmds.setAttr(colorNode.name + '.color', 1.0, 0.188, 0.192, type='double3')
    cmds.setAttr(colorNode.name + '.enableBackgroundColor', 1)
    cmds.setAttr(colorNode.name + '.backgroundColor',
                 0.086,
                 0.247,
                 0.282,
                 type='double3')
    cmds.connectAttr(signalFalloff + '.falloffOut',
                     colorNode.name + '.strengthPP[0]')

    colorNodeHotSpot = mashNetwork.addNode("MASH_Color")
    cmds.setAttr(colorNodeHotSpot.name + '.blendMode', 2)
    cmds.setAttr(colorNodeHotSpot.name + '.color',
                 0.626,
                 0.626,
                 0.238,
                 type='double3')

    # create node: falloff
    hotspotFalloff = colorNodeHotSpot.addFalloff()
    cmds.setAttr(hotspotFalloff + '.innerRadius', 0)
    falloffTransform = cmds.listRelatives(hotspotFalloff, allParents=True)[0]
    cmds.setAttr(falloffTransform + '.translateX', 15.7)
    cmds.setAttr(falloffTransform + '.translateY', 14)
    cmds.setAttr(falloffTransform + '.scaleX', 15)
    cmds.setAttr(falloffTransform + '.scaleY', 15)
    cmds.setAttr(falloffTransform + '.scaleZ', 15)

    #tell Maya to finish what it's doing before we continue
    cmds.flushIdleQueue()

    #playblast
    cmds.playbackOptions(animationEndTime='3sec')
    cmds.playblast(format="qt", viewer=True, p=100)
Ejemplo n.º 13
0
def dynamicChain():
    '''
	create a dynamic chain object

	1. create file: force a new file on default location
	2. set perspective view
	3. create object
	4. create Mash network: fills inside with instances
	5. create node: Dynamics
	6. create node: dynamics/channelRandom
	7. setup a falloff area, where dynamics are active
	'''

    # 1. create file
    cmds.file(force=True, new=True)

    # 2. set perspective view
    cmds.setAttr('persp.translateX', 53)
    cmds.setAttr('persp.translateY', 26)
    cmds.setAttr('persp.translateZ', 36)
    cmds.setAttr('persp.rotateX', -30)
    cmds.setAttr('persp.rotateY', 45)

    # 3. create object
    cmds.polyTorus(r=2.5)

    # 4. create a new MASH network
    mashNetwork = mapi.Network()
    mashNetwork.createNetwork(name="DymamicsNetwork", geometry="Instancer")
    # set Attriubtes
    cmds.setAttr(mashNetwork.distribute + ".pointCount", 10)
    cmds.setAttr(mashNetwork.distribute + ".rotateX", 800)
    cmds.setAttr(mashNetwork.distribute + ".amplitudeX", 32)

    # 5. create node: Dynamics
    dynamicsNode = mashNetwork.addNode("MASH_Dynamics")

    # 6. create node: dynamics/channelRandom
    channelRandom = mashNetwork.addChannelRandom(dynamicsNode)
    cmds.setAttr(channelRandom.name + ".dynamicsChannelName",
                 11)  # Channel Name: 9=Mass

    # 7 creaete node: dynamics/channelRandom/falloff
    falloff = channelRandom.addFalloff()
    cmds.setAttr(falloff + ".falloffShape", 2)  # 2=Cube
    cmds.setAttr(falloff + ".innerRadius", 1)  # inner radius =1
    # set falloff cube area
    falloffParent = cmds.listRelatives(falloff, parent=True)[0]
    cmds.setAttr(falloffParent + ".translateX", 15.8)
    cmds.setAttr(falloffParent + ".scaleX", 15)
    cmds.setAttr(falloffParent + ".scaleY", 15)
    cmds.setAttr(falloffParent + ".scaleZ", 15)

    # select all bullet type objects
    solver = cmds.ls(type="MASH_BulletSolver")[0]

    #tell Maya to finish what it's doing before we continue
    cmds.flushIdleQueue()

    #playblast
    cmds.playbackOptions(animationEndTime='5sec')
    cmds.playblast(format="qt", viewer=True, p=100)
Ejemplo n.º 14
0
def curlNoise():
    '''
	create a swarm of cube with a tail behind

	1. create file: force a new file on default location
	2. set perspective view
	3. create object
	4. create Mash network: fills inside with instances
	5. playblast
	6. Signal: animate points with Noise
	7. Trail: moving instances get a trail behind them

	'''

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

    # 2. move the camera
    cmds.setAttr('persp.translateX', 50)
    cmds.setAttr('persp.translateY', 35)
    cmds.setAttr('persp.translateZ', 50)

    # 3. create a poly cube
    ptorus = cmds.polyTorus(r=20, sr=2, sh=15, sx=100)
    pcube = cmds.polyCube(w=0.1, h=0.1, d=0.1)

    # 4. create a new MASH network
    mashNetwork = mapi.Network()
    mashNetwork.createNetwork("CurlNoiseNetwork")
    shape = cmds.listRelatives(ptorus[0], s=True)[0]  # select torus object
    mashNetwork.meshDistribute(shape, 4)  # 4=Mesh
    cmds.setAttr(
        mashNetwork.distribute + '.floodMesh', 1
    )  #  Flood Mesh Automatically fills the mesh with instances of the object, overriding the Number of Points.

    # 5. playblast
    cmds.playbackOptions(animationEndTime='5sec')

    # 6. create node: Signal
    signalNode = mashNetwork.addNode("MASH_Signal")
    # set attributes
    cmds.setAttr(signalNode.name + '.signalType', 5)
    cmds.setAttr(signalNode.name + '.transformationSpace', 2)
    cmds.setAttr(signalNode.name + '.positionX', 5)
    cmds.setAttr(signalNode.name + '.positionZ', 5)
    cmds.setAttr(signalNode.name + '.timeScale', 3)

    # 7. create node: Trail
    trailsNode = mashNetwork.addNode("MASH_Trails")
    # set Atrribute: trail length
    cmds.setAttr(trailsNode.name + '.maxTrails', 1500)

    # hide object
    cmds.hide(ptorus)
    cmds.setAttr('lambert1.incandescence', 1, 1, 1, type='double3')

    #tell Maya to finish what it's doing before we continue
    cmds.flushIdleQueue()

    #playblast
    cmds.playbackOptions(animationEndTime='5sec')
    cmds.playblast(format="qt", viewer=True, p=100)
Ejemplo n.º 15
0
def game():
    cmds.file(force=True, new=True)
    #length of playback for game
    cmds.playbackOptions(maxTime='20sec')
    #lights
    cmds.directionalLight()
    cmds.scale(4.910268, 4.910268, 4.910268, r=True)
    cmds.move(17.938379, 12.193473, 0, r=True)
    cmds.rotate(0, 98.271943, 0, r=True, os=True, fo=True)
    cmds.rotate(-23.925408, 0, 0, r=True, os=True, fo=True)
    cmds.move(0, 0, -0.622877, r=True)
    cmds.move(0, 0, -3.289271, r=True)
    cmds.duplicate()
    #// Result: directionalLight2 //
    cmds.move(-20.838684, 0, 0, r=True)
    cmds.rotate(0, 24.509822, 0, r=True, os=True, fo=True)
    cmds.rotate(0, 103.346384, 0, r=True, os=True, fo=True)
    cmds.rotate(-44.285251, 0, 0, r=True, os=True, fo=True)
    cmds.move(-14.586563, 0, 0, r=True)
    cmds.move(0, 0, -5.104265, r=True)
    cmds.move(0, 0, -4.284069, r=True)
    cmds.pointLight()
    cmds.move(0, 0, 5.003762, r=True)
    cmds.move(0, 0, 11.322471, r=True)
    cmds.move(0, 0, 3.520321, r=True)
    cmds.duplicate()
    #// Result: pointLight2 //
    cmds.move(0, 0, -62.281584, r=True)
    cmds.move(0, 0, 20.779332, r=True)
    cmds.setAttr("pointLightShape1.intensity", 0.2)
    #prefix for parts
    pfx = "jenga_"
    #the jenga brick
    cmds.polyCube(d=3, h=0.5, n=pfx + "brick")
    myBlinn = cmds.shadingNode('blinn', asShader=True)
    cmds.select(pfx + "brick")
    cmds.hyperShade(assign=myBlinn)
    cmds.select(cl=True)
    cmds.hyperShade(objects=myBlinn)
    cmds.setAttr("blinn1.color", 0.243, 0.155, 0.101, type="double3")
    cmds.setAttr("blinn1.ambientColor", 1, 1, 1, type="double3")
    # create a new MASH network with grid distribution
    mashNetwork = mapi.Network()
    mashNetwork.createNetwork(name=pfx + "tower",
                              distributionStyle=6,
                              geometry="Repro")
    #adjust the distribution
    cmds.setAttr(mashNetwork.distribute + ".gridz", 1)
    cmds.setAttr(mashNetwork.distribute + ".gridx", 3)
    cmds.setAttr(mashNetwork.distribute + ".gridy", 1)
    cmds.setAttr(mashNetwork.distribute + ".gridAmplitudeZ", 0)
    cmds.setAttr(mashNetwork.distribute + ".gridAmplitudeY", 0)
    cmds.setAttr(mashNetwork.distribute + ".gridAmplitudeX", 2.05)
    # add a Replicator node
    rep = mashNetwork.addNode("MASH_Replicator")
    # add a Dyanmics node
    dyn = mashNetwork.addNode("MASH_Dynamics")
    # add a Python node
    py = mashNetwork.addNode("MASH_Python")
    #adjust the Replicator settings to make a tower
    cmds.setAttr(pfx + "tower_Replicator.replicants", 17)
    cmds.setAttr(pfx + "tower_Replicator.offsetPositionY", 0.5)
    cmds.setAttr(pfx + "tower_Replicator.offsetPositionX", 0)
    cmds.setAttr(pfx + "tower_Replicator.offsetPositionZ", 0)
    cmds.setAttr(pfx + "tower_Replicator.rotatePointsY", 1530)
    #ajust the bullet solver ground plane
    cmds.setAttr(pfx + "tower_BulletSolverShape.groundPlanePositionY", -0.25)
    #ajust the Dynamics settings
    cmds.setAttr(pfx + "tower_Dynamics.friction", 1)
    #add the python code
    cmds.polyCube(n=pfx + "test")
Ejemplo n.º 16
0
def export(mash_nodes=None, scene_path=''):
    '''
    Export MASH node to alembic
    '''
    if not mash_nodes:
        mash_nodes = cmds.ls(type=['MASH_Waiter'])
    if not isinstance(mash_nodes, list):
        mash_nodes = [mash_nodes]
    fps = 24.0

    for node_name in mash_nodes:
        print 'Processing MASH node: "{node}"'.format(node=node_name)
        mash_network = mapi.Network(node_name)
        node_ins = mash_network.instancer

        if cmds.objExists(node_name) and cmds.attributeQuery(
                'anim', node=node_name, exists=True):
            anim_script = cmds.getAttr(node_name + '.anim')
            if anim_script is not None:
                # main:1-200
                frame_match = re.match(
                    r'(?P<name>\w+):(?P<in>\d+)-(?P<out>\d+)', anim_script)
                if frame_match:
                    frame_in = int(frame_match.group('in'))
                    frame_out = int(frame_match.group('out'))
                    list_frames = range(frame_in, frame_out + 1)
                    print '"{node}" has an animation sequence: "{script}"'.format(
                        node=node_name, script=anim_script)
            else:
                print '"{node}" node does not have an animation'.format(
                    node=node_name)

        i = 0

        if node_ins.lower().endswith('_instancer'):
            input_name = '{node}.inputHierarchy'.format(node=node_ins)
            input_template = input_name + '[{index}]'
        else:
            input_name = '{node}.instancedGroup'.format(node=node_ins)
            input_template = input_name + '[{index}].instancedMesh[0].mesh'
        instance_indices = sorted(cmds.getAttr(input_name, multiIndices=True))
        obj_list = []
        for i in instance_indices:
            instance_obj = cmds.listConnections(input_template.format(index=i))
            obj_list.append(str(instance_obj[0]))

        node_name_abc = re.sub(r'^MASH_?', '', node_name, flags=re.IGNORECASE)

        # mash_cpp = cpp.call(str(node_name), str(abc_path), obj_list, lib='write_alembic', func="mash2abc")
        mash_cpp = cpp.call(
            str(node_name),
            str('/home/v.lavrentev/project/speedtree/scene/mash/forest.abc'),
            obj_list,
            lib='/home/v.lavrentev/project/rnd/write_alembic/write_alembic.so',
            func="mash2abc")

        print obj_list
        print node_name
        # print abc_path

    print 'Export complete!'
Ejemplo n.º 17
0
def get_mash_network(node_name):
    if maya.cmds.objExists(node_name):
        return mapi.Network(node_name)
    return None
Ejemplo n.º 18
0
def dynamicConstraints():
    '''
	create an array of plane, and position them in a circle.
	Duplicate them next to each other, and give them some Dynamics constraines

	1. create file
	2. set perspective view
	3. create object
	4. create Mash network
	5. create replicator:  duplicate network and position in positionZ
	6. create dynamics: add Maya Bullut to Mash Network
	7. create constain: enable 'Breakable', and set 'constainer Distance'
	8. create channelRandom
	9. create falloff: Area where contrain breaksoff
	10. show constainers
	11. playbast simulation
	'''

    # force a new file on default location
    cmds.file(force=True, new=True)

    # set Attributes: perspective view
    cmds.setAttr('persp.translateX', 35)
    cmds.setAttr('persp.translateY', 20)
    cmds.setAttr('persp.translateZ', 35)
    cmds.setAttr('persp.rotateX', -30)
    cmds.setAttr('persp.rotateY', 45)

    # create Object: Plane
    cmds.polyPlane()

    # create MASH network
    mashNetwork = mapi.Network()
    mashNetwork.createNetwork("DymamicsNetwork")
    # set Attributes: distribute
    cmds.setAttr(mashNetwork.distribute + ".arrangement", 2)  # Type: Radial
    cmds.setAttr(mashNetwork.distribute + ".pointCount",
                 30)  # number of points

    # create Node: Replictor
    replicantsNode = mashNetwork.addNode("MASH_Replicator")
    # set Attributes: Replictor
    cmds.setAttr(replicantsNode.name + ".replicants",
                 4)  # duplicate number of times
    cmds.setAttr(replicantsNode.name + ".offsetPositionZ",
                 -1.5)  # offsett duplicates in posiztion Z

    # create Node: Dynamics
    dynamicsNode = mashNetwork.addNode("MASH_Dynamics")

    # create Node: Dynamics/Constains
    constraintNode = mashNetwork.addConstraint(dynamicsNode)
    # set Attributes: Constrain
    cmds.setAttr(constraintNode.name + ".constraintBreakable", 1)
    cmds.setAttr(constraintNode.name + ".constraintDistance", 2.5)

    #create Node: Dynamics/Constains/ChannelRandom
    channelRandom = mashNetwork.addChannelRandom(constraintNode)
    # set Attributes: ChannelRandom
    cmds.setAttr(channelRandom.name + ".dynamicsChannelName", 0)
    cmds.setAttr(channelRandom.name + ".constraintChannelName", 3)
    cmds.setAttr(channelRandom.name + ".startValue", 30)

    # create Node:Dynamics/Constains/ChannelRandom/Falloff
    falloff = channelRandom.addFalloff()
    # set Attributes: Falloff
    cmds.setAttr(falloff + ".falloffShape", 2)
    cmds.setAttr(falloff + ".innerRadius", 1)
    cmds.setAttr(falloff + ".falloffRamp[0].falloffRamp_FloatValue", 0.9)

    # select Node: falloff
    falloffParent = cmds.listRelatives(falloff, parent=True)[0]
    # set Attributes: Falloff
    cmds.setAttr(falloffParent + ".invertFalloff", 1)
    cmds.setAttr(falloffParent + ".translateY", -10)
    cmds.setAttr(falloffParent + ".translateZ", -3)

    # list: ButtelSolver
    solver = cmds.ls(type="MASH_BulletSolver")[0]  # select object type
    # set Attributes: BulletSolver
    cmds.setAttr(solver + ".displayConstraints",
                 1)  # display container of all selected

    # playblast
    cmds.playbackOptions(maxTime='10sec')
    cmds.playblast(format="qt", viewer=True, p=100)