Hello,
I'm having a lot of trouble trying to create my own custom plugin. I'm
modifying the built-in circleNode.py to calculate a position that has
a scaled offset.
The error message maya is returning and the edited code for the
circleNode is as follows:
(I apologise for the length of the thread).
Error message:
// Error: Cannot create UI object: attrFieldSliderGrp5 //
// Error: TPSdatabase::createAddControlUI: could not create control
for attribute loc x //
// Error: Cannot create UI object: attrFieldSliderGrp5 //
// Error: TPSdatabase::createAddControlUI: could not create control
for attribute loc y //
// Error: Cannot create UI object: attrFieldSliderGrp5 //
// Error: TPSdatabase::createAddControlUI: could not create control
for attribute loc z //
// Error: Cannot create UI object: attrFieldSliderGrp5 //
// Error: TPSdatabase::createAddControlUI: could not create control
for attribute Pacc FPS //
// Error: Cannot create UI object: attrFieldSliderGrp5 //
// Error: TPSdatabase::createAddControlUI: could not create control
for attribute loc no //
// Error: Cannot create UI object: attrFieldSliderGrp5 //
// Error: TPSdatabase::createAddControlUI: could not create control
for attribute init angle //
// Error: Cannot create UI object: attrFieldSliderGrp5 //
// Error: TPSdatabase::createAddControlUI: could not create control
for attribute scale factor //
The edited code for the circle node is as follows:
*************************************************************************************************************************************
*************************************************************************************************************************************
*************************************************************************************************************************************
import math, sys
import maya.OpenMaya as OpenMaya
import maya.OpenMayaMPx as OpenMayaMPx
kPluginNodeTypeName = "paccCircle" # ---- changed ---- name
kPluginNodeId = OpenMaya.MTypeId(0x87777) # ---- changed ---- memory
location
# Node definition
class circle(OpenMayaMPx.MPxNode):
# class variables
aInput = OpenMaya.MObject()
aScale = OpenMaya.MObject()
aFrames = OpenMaya.MObject()
aLocx = OpenMaya.MObject() # ---- added
aLocy = OpenMaya.MObject() # ---- added
aLocz = OpenMaya.MObject() # ---- added
aFPS = OpenMaya.MObject() # ---- added
aLocNo = OpenMaya.MObject() # ---- added
aInitialAngle = OpenMaya.MObject() # ---- added
aSfactor = OpenMaya.MObject() # ---- added
aSOutput = OpenMaya.MObject()
aCOutput = OpenMaya.MObject()
def __init__(self):
OpenMayaMPx.MPxNode.__init__(self)
def compute(self, plug, data):
# Check that the requested recompute is one of the output values
if (plug == circle.aSOutput or plug == circle.aCOutput):
# Read the input values
inputData = data.inputValue(circle.aInput) # ----
currentFrame
scaleData = data.inputValue(circle.aScale) # ---- radius
framesData = data.inputValue(circle.aFrames)
circlelocx = data.inputValue(circle.aLocx) # ---- added
- circle
centre Xcord
circlelocy = data.inputValue(circle.aLocy) # ---- added
- circle
centre Ycord
circlelocz = data.inputValue(circle.aLocz) # ---- added
- circle
centre Zcord
locfps = data.inputValue(circle.aFPS) # ---- added -
fps value of
the first circle
locno = data.inputValue(circle.aLocNo) # ---- added -
circle
number, used for calculating the factor.
initangle = data.inputValue(circle.aInitialAngle) #
---- added -
initial angle used to calculate the start position.
sfactor = data.inputValue(circle.aSfactor) # ---- added
- scale
factor of the circles if there are more than 1.
# Compute the output values
currentFrame = inputData.asFloat()
radius = scaleData.asFloat() # ---- changed naming
framesPerCircle = framesData.asFloat()
xval = circlelocx.asFloat() # ---- added
yval = circlelocy.asFloat() # ---- added
zval = circlelocz.asFloat() # ---- added
fpsval = locfps.asFloat() # ---- added
locnoval = locno.asFloat() # ---- added
initangleval = initangle.asFloat() # ---- added
sfactorval = sfactor.asFloat() # ---- added
# ---- calculate the fps for the circle
cfps = (((fpsval - (fpsval / locnoval)) * (1 -
sfactorval)) +
(fpsval / locnoval)) # ---- added
# ---- calculate the angle
angle = 6.2831853 * (currentFrame/cfps) # ---- changed
fps varibles
over
angle2 = angle + initangleval
# ---- calculate the (x, z) cords.
sinResult = math.sin(angle2) * radius # ---- tweeked
cosResult = math.cos(angle2) * radius # ---- tweeked
# ---- amend the cords with the circle centre cord info.
sinNum = sinResult + xval # ---- added
cosNum = cosResult + zval # ---- added
# Store them on the output plugs
sinHandle = data.outputValue(circle.aSOutput)
cosHandle = data.outputValue(circle.aCOutput)
sinHandle.setFloat(sinNum) # ---- tweeked
cosHandle.setFloat(cosNum) # ---- tweeked
data.setClean(plug)
else:
return OpenMaya.MStatus.kUnknownParameter
return OpenMaya.MStatus.kSuccess
# creator
def nodeCreator():
return OpenMayaMPx.asMPxPtr( circle() )
# initializer
def nodeInitializer():
nAttr = OpenMaya.MFnNumericAttribute()
# Setup the input attributes
circle.aInput = nAttr.create("input", "in",
OpenMaya.MFnNumericData.kFloat, 0.0)
nAttr.setStorable(True)
circle.aScale = nAttr.create("scale", "sc",
OpenMaya.MFnNumericData.kFloat, 1.0)
nAttr.setStorable(True)
circle.aFrames = nAttr.create("frames", "fr",
OpenMaya.MFnNumericData.kFloat, 25.0)
nAttr.setStorable(True)
circle.aLocx = nAttr.create("loc x", "x",
OpenMaya.MFnNumericData.kFloat, 0.0) # ---- added
nAttr.setStorable(True)
circle.aLocy = nAttr.create("loc y", "y",
OpenMaya.MFnNumericData.kFloat, 0.0) # ---- added
nAttr.setStorable(True)
circle.aLocz = nAttr.create("loc z", "z",
OpenMaya.MFnNumericData.kFloat, 0.0) # ---- added
nAttr.setStorable(True)
circle.aFPS = nAttr.create("Pacc FPS", "fps",
OpenMaya.MFnNumericData.kFloat, 25.0) # ---- added
nAttr.setStorable(True)
circle.aLocNo = nAttr.create("loc no", "lno",
OpenMaya.MFnNumericData.kFloat, 0.0) # ---- added
nAttr.setStorable(True)
circle.aInitialAngle = nAttr.create("init angle", "inita",
OpenMaya.MFnNumericData.kFloat, 0.0) # ---- added
nAttr.setStorable(True)
circle.aSfactor = nAttr.create("scale factor", "sf",
OpenMaya.MFnNumericData.kFloat, 25.0) # ---- added
nAttr.setStorable(True)
# Setup the output attributes
circle.aSOutput = nAttr.create("sineOutput", "so",
OpenMaya.MFnNumericData.kFloat, 0.0)
nAttr.setWritable(False)
nAttr.setStorable(False)
circle.aCOutput = nAttr.create("cosineOutput", "co",
OpenMaya.MFnNumericData.kFloat, 0.0,)
nAttr.setWritable(False)
nAttr.setStorable(False)
# Add the attributes to the node
circle.addAttribute(circle.aInput)
circle.addAttribute(circle.aScale)
circle.addAttribute(circle.aFrames)
circle.addAttribute(circle.aLocx) # ---- added
circle.addAttribute(circle.aLocy) # ---- added
circle.addAttribute(circle.aLocz) # ---- added
circle.addAttribute(circle.aFPS) # ---- added
circle.addAttribute(circle.aLocNo) # ---- added
circle.addAttribute(circle.aInitialAngle) # ---- added
circle.addAttribute(circle.aSfactor) # ---- added
circle.addAttribute(circle.aSOutput)
circle.addAttribute(circle.aCOutput)
# Set the attribute dependencies
circle.attributeAffects(circle.aInput, circle.aSOutput)
circle.attributeAffects(circle.aInput, circle.aCOutput)
circle.attributeAffects(circle.aScale, circle.aSOutput)
circle.attributeAffects(circle.aScale, circle.aCOutput)
circle.attributeAffects(circle.aFrames, circle.aSOutput)
circle.attributeAffects(circle.aFrames, circle.aCOutput)
circle.attributeAffects(circle.aLocx, circle.aSOutput) # ---- added
circle.attributeAffects(circle.aLocx, circle.aCOutput) # ---- added
circle.attributeAffects(circle.aLocy, circle.aSOutput) # ---- added
circle.attributeAffects(circle.aLocy, circle.aCOutput) # ---- added
circle.attributeAffects(circle.aLocz, circle.aSOutput) # ---- added
circle.attributeAffects(circle.aLocz, circle.aCOutput) # ---- added
circle.attributeAffects(circle.aFPS, circle.aSOutput) # ---- added
circle.attributeAffects(circle.aFPS, circle.aCOutput) # ---- added
circle.attributeAffects(circle.aLocNo, circle.aSOutput) # ---- added
circle.attributeAffects(circle.aLocNo, circle.aCOutput) # ---- added
circle.attributeAffects(circle.aInitialAngle, circle.aSOutput) # ----
added
circle.attributeAffects(circle.aInitialAngle, circle.aCOutput) # ----
added
circle.attributeAffects(circle.aSfactor, circle.aSOutput) # ----
added
circle.attributeAffects(circle.aSfactor, circle.aCOutput) # ----
added
# initialize the script plug-in
def initializePlugin(mobject):
mplugin = OpenMayaMPx.MFnPlugin(mobject, "Autodesk", "1.0", "Any")
try:
mplugin.registerNode( kPluginNodeTypeName, kPluginNodeId,
nodeCreator, nodeInitializer )
except:
sys.stderr.write( "Failed to register node: %s" %
kPluginNodeTypeName )
raise
# uninitialize the script plug-in
def uninitializePlugin(mobject):
mplugin = OpenMayaMPx.MFnPlugin(mobject)
try:
mplugin.deregisterNode( kPluginNodeId )
except:
sys.stderr.write( "Failed to deregister node: %s" %
kPluginNodeTypeName )
raise
*************************************************************************************************************************************
*************************************************************************************************************************************
*************************************************************************************************************************************
--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/python_inside_maya
-~----------~----~----~----~------~----~------~--~---