39 import maya.OpenMaya
as OpenMaya
40 import maya.OpenMayaMPx
as OpenMayaMPx
41 import maya.OpenMayaRender
as OpenMayaRender
42 import maya.OpenMayaUI
as OpenMayaUI
47 kPluginNodeTypeName =
"spFootPrintNode"
49 footPrintNodeId = OpenMaya.MTypeId(0x87010)
50 glRenderer = OpenMayaRender.MHardwareRenderer.theRenderer()
51 glFT = glRenderer.glFunctionTable()
53 sole = ( [ 0.00, 0.0, -0.70 ],
65 [ -0.15, 0.0, -0.14 ],
66 [ -0.16, 0.0, -0.25 ],
67 [ -0.17, 0.0, -0.35 ],
68 [ -0.17, 0.0, -0.46 ],
69 [ -0.16, 0.0, -0.54 ],
70 [ -0.13, 0.0, -0.61 ],
71 [ -0.09, 0.0, -0.65 ],
72 [ -0.04, 0.0, -0.69 ],
73 [ -0.00, 0.0, -0.70 ] )
75 heel = ( [ 0.00, 0.0, 0.06 ],
91 [ -0.00, 0.0, 0.06 ] )
93 class footPrintNode(OpenMayaMPx.MPxLocatorNode):
94 size = OpenMaya.MObject()
97 OpenMayaMPx.MPxLocatorNode.__init__(self)
99 def compute(self, plug, dataBlock):
100 return OpenMaya.kUnknownParameter
102 def draw(self, view, path, style, status):
103 thisNode = self.thisMObject()
105 plug = OpenMaya.MPlug(thisNode, self.size)
107 sizeVal = plug.asMDistance()
109 multiplier = sizeVal.asCentimeters()
113 if style == OpenMayaUI.M3dView.kFlatShaded
or style == OpenMayaUI.M3dView.kGouraudShaded:
114 glFT.glPushAttrib(OpenMayaRender.MGL_CURRENT_BIT)
116 if status == OpenMayaUI.M3dView.kActive:
117 view.setDrawColor( 13, OpenMayaUI.M3dView.kActiveColors )
119 view.setDrawColor( 13, OpenMayaUI.M3dView.kDormantColors )
122 glFT.glBegin( OpenMayaRender.MGL_TRIANGLE_FAN )
123 for i
in range(last):
124 glFT.glVertex3f(sole[i][0]*multiplier, sole[i][1]*multiplier, sole[i][2]*multiplier)
128 glFT.glBegin( OpenMayaRender.MGL_TRIANGLE_FAN )
129 for i
in range(last):
130 glFT.glVertex3f(heel[i][0]*multiplier, heel[i][1]*multiplier, heel[i][2]*multiplier)
135 glFT.glBegin(OpenMayaRender.MGL_LINES)
138 for i
in range(last):
139 glFT.glVertex3f( sole[i][0]*multiplier, sole[i][1]*multiplier, sole[i][2]*multiplier )
140 glFT.glVertex3f( sole[i+1][0]*multiplier, sole[i+1][1]*multiplier, sole[i+1][2]*multiplier )
143 for i
in range(last):
144 glFT.glVertex3f( heel[i][0]*multiplier, heel[i][1]*multiplier, heel[i][2]*multiplier )
145 glFT.glVertex3f( heel[i+1][0]*multiplier, heel[i+1][1]*multiplier, heel[i+1][2]*multiplier )
154 def boundingBox(self):
155 thisNode = self.thisMObject()
156 plug = OpenMaya.MPlug(thisNode, self.size)
158 sizeVal = plug.asMDistance()
160 multiplier = sizeVal.asCentimeters()
162 corner1 = OpenMaya.MPoint(-0.17, 0.0, -0.7)
163 corner2 = OpenMaya.MPoint(0.17, 0.0, 0.3)
165 corner1 = corner1 * multiplier
166 corner2 = corner2 * multiplier
168 bbox = OpenMaya.MBoundingBox( corner1, corner2 )
174 return OpenMayaMPx.asMPxPtr( footPrintNode() )
177 def nodeInitializer():
178 unitFn = OpenMaya.MFnUnitAttribute()
179 footPrintNode.size = unitFn.create(
"size",
"in", OpenMaya.MFnUnitAttribute.kDistance)
180 unitFn.setDefault(1.0)
181 footPrintNode.addAttribute( footPrintNode.size )
184 def initializePlugin(mobject):
185 mplugin = OpenMayaMPx.MFnPlugin(mobject)
187 mplugin.registerNode( kPluginNodeTypeName, footPrintNodeId, nodeCreator, nodeInitializer, OpenMayaMPx.MPxNode.kLocatorNode )
189 sys.stderr.write(
"Failed to register node: %s" % kPluginNodeTypeName )
193 def uninitializePlugin(mobject):
194 mplugin = OpenMayaMPx.MFnPlugin(mobject)
196 mplugin.deregisterNode( footPrintNodeId )
198 sys.stderr.write(
"Failed to deregister node: %s" % kPluginNodeTypeName )