How do I set and get values from a multi attribute?  I can't find any
examples.  I know how to read/write to simple floats, but once you
turn it into an array (multi) with setArray(1), I hit a dead-end on
knowing what to do, or even where to look up how I would do such a
thing.  Here's a simplified chunk of code:

import sys

import maya.OpenMaya as om
import maya.OpenMayaMPx as omMPx

kPluginNodeTypeName = "pyNode"

pyNodeId = om.MTypeId(0x87000)

class pyNode( omMPx.MPxNode ):

  inputs = om.MObject()
  output   = om.MObject()

  def __init__( self ):
    omMPx.MPxNode.__init__( self )

  def compute( self, plug, dataBlock ):

    if ( plug == pyNode.output ):

      ####Not doin' what I wish it would
      dataHandle = dataBlock.inputValue( pyNode.inputs )
      inputFloat = dataHandle.asFloatArray()
      result = inputFloat[0]       ###  or [1], or [2], I just want to
be able to pull specific ones

      outputHandle = dataBlock.outputValue( pyNode.output )
      outputHandle.setFloat[0]( result )     ###  or [1], or [2], I
just want to be able to set specific ones
      ####End wishiness

      dataBlock.setClean( plug )

    return om.kUnknownParameter

def nodeCreator():
  return omMPx.asMPxPtr( pyNode() )

def nodeInitializer():

  ####I'm guessing this is wrong, too
  nAttr = om.MFnNumericAttribute()
  pyNode.inputs = nAttr.create ( "inputs", "in",
om.MFnNumericData.kFloat, 0.0 )
  nAttr.setArray(1)
  nAttr.setStorable(1)
  pyNode.addAttribute ( pyNode.inputs )

  nAttr = om.MFnNumericAttribute()
  pyNode.output = nAttr.create( "output", "out",
om.MFnNumericData.kFloat, 0.0 )
  nAttr.setArray(1)
  nAttr.setStorable(1)
  nAttr.setWritable(1)
  pyNode.addAttribute( pyNode.output )
  ####End likely wronginess

  pyNode.attributeAffects( pyNode.inputs, pyNode.output )

def initializePlugin(mobject):

  mplugin = omMPx.MFnPlugin(mobject)

  try:
    mplugin.registerNode( kPluginNodeTypeName, pyNodeId, nodeCreator,
nodeInitializer )

  except:
    sys.stderr.write( "Failed to register node: %s" %
kPluginNodeTypeName )
    raise

def uninitializePlugin(mobject):

  mplugin = omMPx.MFnPlugin(mobject)

  try:
    mplugin.deregisterNode( pyNodeId )

  except:
    sys.stderr.write( "Failed to deregister node: %s" %
kPluginNodeTypeName )
    raise

An answer to the problem is much appreciated, the answer to where you
looked/referenced would be even more appreciated.
--~--~---------~--~----~------------~-------~--~----~
Yours,
Maya-Python Club Team.
-~----------~----~----~----~------~----~------~--~---

Reply via email to