54 import maya.OpenMaya 
as OpenMaya
 
   55 import maya.OpenMayaMPx 
as OpenMayaMPx
 
   56 import maya.OpenMayaRender 
as OpenMayaRender
 
   57 import maya.OpenMayaUI 
as OpenMayaUI
 
   62 kPluginNodeTypeName = 
"spFootPrintNode" 
   65 glRenderer = OpenMayaRender.MHardwareRenderer.theRenderer()
 
   66 glFT = glRenderer.glFunctionTable()
 
   68 sole = ( [ 0.00, 0.0, -0.70 ],
 
   80 [ -0.15, 0.0, -0.14 ],
 
   81 [ -0.16, 0.0, -0.25 ],
 
   82 [ -0.17, 0.0, -0.35 ],
 
   83 [ -0.17, 0.0, -0.46 ],
 
   84 [ -0.16, 0.0, -0.54 ],
 
   85 [ -0.13, 0.0, -0.61 ],
 
   86 [ -0.09, 0.0, -0.65 ],
 
   87 [ -0.04, 0.0, -0.69 ],
 
   88 [ -0.00, 0.0, -0.70 ] )
 
   90 heel = ( [  0.00, 0.0, 0.06 ],
 
  100 [ -0.09, 0.0,  0.29 ],
 
  101 [ -0.11, 0.0,  0.28 ],
 
  102 [ -0.13, 0.0,  0.25 ],
 
  103 [ -0.14, 0.0,  0.21 ],
 
  104 [ -0.14, 0.0,  0.15 ],
 
  105 [ -0.13, 0.0,  0.06 ],
 
  106 [ -0.00, 0.0,  0.06 ] )
 
  108 class footPrintNode(OpenMayaMPx.MPxLocatorNode):
 
  112         OpenMayaMPx.MPxLocatorNode.__init__(self)
 
  114     def compute(self, plug, dataBlock):
 
  115         return OpenMaya.kUnknownParameter
 
  117     def draw(self, view, path, style, status):
 
  118         thisNode = self.thisMObject()
 
  122         sizeVal = plug.asMDistance()
 
  124         multiplier = sizeVal.asCentimeters()
 
  128         if style == OpenMayaUI.M3dView.kFlatShaded 
or style == OpenMayaUI.M3dView.kGouraudShaded:
 
  129             glFT.glPushAttrib(OpenMayaRender.MGL_CURRENT_BIT)
 
  131             if status == OpenMayaUI.M3dView.kActive:
 
  132                 view.setDrawColor( 13, OpenMayaUI.M3dView.kActiveColors )
 
  134                 view.setDrawColor( 13, OpenMayaUI.M3dView.kDormantColors )
 
  137             glFT.glBegin( OpenMayaRender.MGL_TRIANGLE_FAN )
 
  138             for i 
in range(last):
 
  139                 glFT.glVertex3f(sole[i][0]*multiplier, sole[i][1]*multiplier, sole[i][2]*multiplier)
 
  143             glFT.glBegin( OpenMayaRender.MGL_TRIANGLE_FAN )
 
  144             for i 
in range(last):
 
  145                 glFT.glVertex3f(heel[i][0]*multiplier, heel[i][1]*multiplier, heel[i][2]*multiplier)
 
  150         glFT.glBegin(OpenMayaRender.MGL_LINES)
 
  153         for i 
in range(last):
 
  154             glFT.glVertex3f( sole[i][0]*multiplier, sole[i][1]*multiplier, sole[i][2]*multiplier )
 
  155             glFT.glVertex3f( sole[i+1][0]*multiplier, sole[i+1][1]*multiplier, sole[i+1][2]*multiplier )
 
  158         for i 
in range(last):
 
  159             glFT.glVertex3f( heel[i][0]*multiplier, heel[i][1]*multiplier, heel[i][2]*multiplier )
 
  160             glFT.glVertex3f( heel[i+1][0]*multiplier, heel[i+1][1]*multiplier, heel[i+1][2]*multiplier )
 
  169     def boundingBox(self):
 
  170         thisNode = self.thisMObject()
 
  173         sizeVal = plug.asMDistance()
 
  175         multiplier = sizeVal.asCentimeters()
 
  180         corner1 = corner1 * multiplier
 
  181         corner2 = corner2 * multiplier
 
  189     return OpenMayaMPx.asMPxPtr( footPrintNode() )
 
  192 def nodeInitializer():
 
  194     footPrintNode.size = unitFn.create(
"size", 
"in", OpenMaya.MFnUnitAttribute.kDistance)
 
  195     unitFn.setDefault(1.0)
 
  196     footPrintNode.addAttribute( footPrintNode.size )
 
  199 def initializePlugin(mobject):
 
  200     mplugin = OpenMayaMPx.MFnPlugin(mobject)
 
  202         mplugin.registerNode( kPluginNodeTypeName, footPrintNodeId, nodeCreator, nodeInitializer, OpenMayaMPx.MPxNode.kLocatorNode )
 
  204         sys.stderr.write( 
"Failed to register node: %s" % kPluginNodeTypeName )
 
  208 def uninitializePlugin(mobject):
 
  209     mplugin = OpenMayaMPx.MFnPlugin(mobject)
 
  211         mplugin.deregisterNode( footPrintNodeId )
 
  213         sys.stderr.write( 
"Failed to deregister node: %s" % kPluginNodeTypeName )