#-*- coding: cp949 -*-
import sys
import maya.OpenMaya as om
import maya.OpenMayaMPx as omMPx
nodeName = 'WheelNode'
nodeId = om.MTypeId(0x100fff)
class WheelNode( omMPx.MPxNode ):
inRadius = om.MObject()
inTranslate = om.MObject()
outRotate = om.MObject()
def __init__( self ):
omMPx.MPxNode.__init__(self)
#____ 노드의 계산이 이뤄진다
def compute( self, plug, dataBlock ):
'''
rotate = randlate/( 2 * 3.14 * radius ) * ( -360 )
'''
if plug == WheelNode.outRotate:
dataHandleRadius = dataBlock.inputValue( WheelNode.inRadius )
dataHandleTranslate = dataBlock.inputValue( WheelNode.inTranslate )
inRadiusVal = dataHandleRadius.asFloat()
inTranslateVal = dataHandleTranslate.asFloat()
outRotate = float( inTranslateVal ) / ( 2 * 3.14 * inRadiusVal ) * ( - 360 )
datahandleRotate = dataBlock.outputValue( WheelNode.outRotate )
datahandleRotate.setFloat( outRotate )
dataBlock.setClean( plug )
else:
return om.kUnknownParameter
def nodeCreator():
return omMPx.asMPxPtr( WheelNode() )
#____ 플러그인을 로드할 때 한번 실행되는 함수
def nodeInitializer():
#____ 1. numeric attrbutes의 function set을 만든다
mFnAttr = om.MFnNumericAttribute()
#____ 2. attribute를 만든다
WheelNode.inRadius = mFnAttr.create( 'raius',
'r', om.MFnNumericData.kFloat, 0.0 )
mFnAttr.setReadable( 1 )
mFnAttr.setWritable( 1 )
mFnAttr.setStorable( 1 )
mFnAttr.setKeyable( 1 )
WheelNode.inTranslate = mFnAttr.create( 'translate',
't', om.MFnNumericData.kFloat, 0.0 )
mFnAttr.setReadable( 1 )
mFnAttr.setWritable( 1 )
mFnAttr.setStorable( 1 )
mFnAttr.setKeyable( 1 )
WheelNode.outRotate = mFnAttr.create( 'rotate',
'rot', om.MFnNumericData.kFloat )
mFnAttr.setReadable( 1 )
mFnAttr.setWritable( 0 )
mFnAttr.setStorable( 0 )
mFnAttr.setKeyable( 0 )
#____ 3. 노드에 attribute를 붙인다
WheelNode.addAttribute( WheelNode.inRadius )
WheelNode.addAttribute( WheelNode.inTranslate )
WheelNode.addAttribute( WheelNode.outRotate )
#____ 4. circuitry( 회로, 작동방식 )을 정한다
WheelNode.attributeAffects( WheelNode.inRadius,
WheelNode.outRotate )
WheelNode.attributeAffects( WheelNode.inTranslate,
WheelNode.outRotate )
def initializePlugin( mobject ):
mplugin = omMPx.MFnPlugin( mobject )
try:
mplugin.registerNode( nodeName, nodeId, nodeCreator, nodeInitializer )
except:
sys.stderr.write( 'Failed to register command: %s\n' %nodeName )
def uninitializePlugin( mobject ):
mplugin = omMPx.MFnPlugin( mobject )
try:
mplugin.registerCommand( commandName )
except:
sys.stderr.write( 'Failed to register command: %s\n' %nodeName )