Collision Example 1

collision.py
  1# © 2024 Autodesk, Inc. All rights reserved.
  2
  3# Collision demo
  4
  5newScene()
  6
  7####################
  8# create 3 objects #
  9####################
 10obja = createBox(2, 2, 2, 1, 1, 1, 1, 0, 0, 0)
 11obja.makeTransform()
 12obja.setTranslation(-5, 0, 0)
 13
 14objb = loadGeometry("$VRED_EXAMPLES/geo/teddy.osb")
 15objb.makeTransform()
 16objb.setScale(0.01, 0.01, 0.01)
 17objb.setTranslation(0, 0, 0)
 18
 19objc = createBox(2, 2, 2, 1, 1, 1, 0, 0, 1, 0)
 20objc.makeTransform()
 21objc.setTranslation(5, 0, 0)
 22
 23updateScene()
 24
 25
 26########################################################################
 27# find Teddy_Bear node and rotate around axis 360 degrees in 8 seconds #
 28########################################################################
 29head = findNode("Teddy_Bear")
 30
 31# create a rotation axis and hide it (only needed)
 32# to pass to vrRotationAxisSlide command
 33axis = createLine(0, 0, 0, 0, 0, 1, 0, 0, 0);
 34hideNode(axis)
 35
 36head.makeTransform()
 37rotInt = vrInterpolator()
 38rotSlide = vrRotationAxisSlide(head, axis, 0, 359, 8.0)
 39rotInt.add(rotSlide)
 40rotInt.setActive(true)
 41
 42##################################################
 43# define class to translate an object on x-axis. #
 44##################################################
 45class ActionTranslate(vrAEBase):
 46    tx = 0.0
 47    ty = 0.0
 48    tz = 0.0
 49    txs = 0.1
 50    def __init__(self, node):
 51        vrAEBase.__init__(self)
 52        self.addLoop()
 53        self.node = node
 54    def recEvent(self, state):
 55        vrAEBase.recEvent(self, state)
 56    def loop(self):
 57        if self.isActive() == true:
 58            self.node.setTranslation(self.tx, self.ty, self.tz)
 59            self.tx = self.tx + self.txs
 60
 61##################################################
 62# instantiate translation object and activate it #
 63##################################################
 64move = ActionTranslate(objb)
 65move.setActive(true)
 66
 67##################################################
 68# output information about the collision #
 69##################################################
 70def printCollisionInfo(coll):
 71    useWorldSpace = True
 72    collidingNodes = coll.getCollidingNodes()
 73    print("Collision Nodes: First: " + str(collidingNodes[0]) + ", Second: " + str(collidingNodes[1]))
 74    collisionPosition = coll.getCollisionPoint(useWorldSpace)
 75    print("Collision Position: " + str(collisionPosition))
 76    collidingIndices = coll.getCollidingTriangleIndices()
 77    print("Colliding Triangle Indices: First: " + str(collidingIndices[0]) + ", Second: " + str(collidingIndices[1]))
 78    collidingTriangles = coll.getCollidingTriangles(useWorldSpace)
 79    print("Colliding Triangles: First: " + str(collidingTriangles[0]) + ", " + str(collidingTriangles[1]) + ", " + str(collidingTriangles[2]))
 80    print("Colliding Triangles: Second: " + str(collidingTriangles[3]) + ", " + str(collidingTriangles[4]) + ", " + str(collidingTriangles[5]))
 81    collisionInfo = coll.getCollisionInfo(useWorldSpace)
 82    print("Collision Info: Point: " + str(collisionInfo[0]))
 83    print("Collision Info: First Node: " + str(collisionInfo[1]) + ", Normal: " + str(collisionInfo[2]))
 84    print("Collision Info: Second Node: " + str(collisionInfo[3])  + ", Normal: " + str(collisionInfo[4]))
 85
 86##################################
 87# generate collision object      #
 88# when collision happens reverse #
 89# the translation direction      #
 90##################################
 91coll1 = vrCollision([obja], [head])
 92coll1.connect("move.txs *= -1;coll1.setActive(false);coll2.setActive(true)")
 93coll1.connect(printCollisionInfo, coll1)
 94
 95##################################
 96# generate collision object      #
 97# when collision happens reverse #
 98# the translation direction      #
 99##################################
100coll2 = vrCollision([objc], [head])
101coll2.connect("move.txs *= -1;coll1.setActive(true);coll2.setActive(false)")
102coll2.connect(printCollisionInfo, coll2)