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 )