# # This is a simple stress test for moonlight that is creating a # moderate number of operator graph nodes. The goal is to test # how responsive Moonlight|3D is in this situation. # import eu.moonlight3d import java def createBox(ogManager): createBoxNode=ogManager.createNodeByName("CreateBox") ogManager.update() return createBoxNode def createPlane(ogManager): createPlaneNode=ogManager.createNodeByName("CreatePlane") ogManager.update() return createPlaneNode def createCylinder(ogManager): createCylinderNode=ogManager.createNodeByName("CreateCylinder") createCylinderNode.getProperty("divisionsU").setValue(100) ogManager.update() return createCylinderNode def createCone(ogManager): createConeNode=ogManager.createNodeByName("CreateCone") createConeNode.getProperty("divisionsU").setValue(100) ogManager.update() return createConeNode def createPipe(ogManager): createPipeNode=ogManager.createNodeByName("CreatePipe") createPipeNode.getProperty("divisions").setValue(100) ogManager.update() return createPipeNode def createSphere(ogManager): createSphereNode=ogManager.createNodeByName("CreateSphere") createSphereNode.getProperty("divisionsU").setValue(100) createSphereNode.getProperty("divisionsV").setValue(100) ogManager.update() return createSphereNode def createMoveObject(ogManager, objectOGNode, objectName, displacement): moveObjectNode=ogManager.createNodeByName("MoveObject") moveObjectNode.getProperty("name").setValue(objectName) moveObjectNode.getProperty("displacement").setValue(displacement) ogManager.insertNodeAfter(objectOGNode.getSlot("output"),moveObjectNode.getSlot("input"),moveObjectNode.getSlot("output")); ogManager.update() return moveObjectNode def createMoveVertices(ogManager, objectOGNode, objectName, vertexIDs, displacement): moveVerticesNode=ogManager.createNodeByName("MoveVertices") moveVerticesNode.getProperty("name").setValue(objectName) moveVerticesNode.getProperty("displacement").setValue(displacement) index=0 for id in vertexIDs: moveVerticesNode.getProperty("vertices").setArrayValue(index,id) index=index+1 ogManager.insertNodeAfter(objectOGNode.getSlot("output"),moveVerticesNode.getSlot("input"),moveVerticesNode.getSlot("output")); ogManager.update() return moveVerticesNode generator=java.util.Random() def distortObject(ogManager, objectOGNode, objectName, numNodes, maxVertexID): previousNode=objectOGNode for i in range(numNodes): vertexIDs=[] vertex=generator.nextInt()%maxVertexID vertexIDs+=[vertex] displacement=eu.moonlight3d.math.Vector3D(0,0,i*3) moveVerticesNode=createMoveVertices(ogManager, previousNode, objectName, vertexIDs, displacement) previousNode=moveVerticesNode pass startTime=java.lang.System.currentTimeMillis() state=eu.moonlight3d.framework.State.getInstance() ogManager=state.getDocumentManager().getMainDocument().getOGManager(); print "boxes" # create boxes for i in range(10): createBoxNode=createBox(ogManager) displacement=eu.moonlight3d.math.Vector3D(0,2*i,0) moveObject=createMoveObject(ogManager,createBoxNode,"Box",displacement) # TODO distort object distortObject(ogManager, moveObject, "Box", 10, 8) print "planes" # create planes for i in range(10): createPlaneNode=createPlane(ogManager) displacement=eu.moonlight3d.math.Vector3D(2,2*i,0) moveObject=createMoveObject(ogManager,createPlaneNode,"Plane",displacement) distortObject(ogManager, moveObject, "Plane", 10, 4) print "cylinders" # create cylinders for i in range(10): createCylinderNode=createCylinder(ogManager) displacement=eu.moonlight3d.math.Vector3D(4,2*i,0) moveObject=createMoveObject(ogManager,createCylinderNode,"Cylinder",displacement) distortObject(ogManager, moveObject, "Cylinder", 10, 100) print "cones" # create cone for i in range(10): createConeNode=createCone(ogManager) displacement=eu.moonlight3d.math.Vector3D(6,2*i,0) moveObject=createMoveObject(ogManager,createConeNode,"Cone",displacement) distortObject(ogManager, moveObject, "Cone", 12, 100) print "pipes" # create pipe for i in range(10): createPipeNode=createPipe(ogManager) displacement=eu.moonlight3d.math.Vector3D(8,2*i,0) moveObject=createMoveObject(ogManager,createPipeNode,"Pipe",displacement) distortObject(ogManager, moveObject, "Pipe", 14, 50) print "spheres" # create spheres for i in range(10): createSphereNode=createSphere(ogManager) displacement=eu.moonlight3d.math.Vector3D(10,2*i,0) moveObject=createMoveObject(ogManager,createSphereNode,"Sphere",displacement) distortObject(ogManager, moveObject, "Sphere", 14, 500) endTime=java.lang.System.currentTimeMillis() print "total time: " + str(endTime-startTime) state.getDocumentManager().getMainDocument().save("createognodes-output.ml")