import MASH.api as mapi
import maya.cmds as cmds

def reproInception(repro, cubeScale, pointCount):
    cmds.polyCube(d=cubeScale, w=cubeScale, h=cubeScale)
    inceptionNetwork = mapi.Network()
    inceptionNetwork.createNetwork(name="GreebleNetwork#", geometry="Repro")
    inceptionNetwork.meshDistribute(repro)
    cmds.setAttr( inceptionNetwork.distribute+".pointCount", pointCount)
    node = inceptionNetwork.addNode("MASH_Random")
    cmds.setAttr( node.name+".positionX", 0)
    cmds.setAttr( node.name+".positionY", 0)
    cmds.setAttr( node.name+".positionZ", 0)
    cmds.setAttr( node.name+".scaleX", 4.4)
    cmds.setAttr( node.name+".scaleY", 1.2)
    cmds.setAttr( node.name+".scaleZ", 7.7)
    inMesh = cmds.listConnections(inceptionNetwork.instancer+'.outMesh', d=True, s=False )[0]
    return inMesh

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

#create a poly cube
cmds.polyCube(d=10, w=10, h=10)

#create a new MASH network
mashNetwork = mapi.Network()
mashNetwork.createNetwork(name="GreebleNetwork#", geometry="Repro")
cmds.setAttr( mashNetwork.distribute+".arrangement", 6)
cmds.setAttr( mashNetwork.distribute+".gridAmplitudeX", 30.0)
cmds.setAttr( mashNetwork.distribute+".gridAmplitudeZ", 30.0)

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

# BE VERY CAREFUL WITH THIS NUMBER
numberOfLoops = 3
startScale = 0.5
startPoints = 2000

for itr in xrange(0,numberOfLoops):
    if inMesh:
        cmds.flushIdleQueue() #let Maya catch up
        inMesh = reproInception(inMesh, startScale, startPoints)
        startPoints *= 10
        startScale *= 0.33
