MPxManipContainer Class Reference
[OpenMayaUI - API module for user interfaceProxy classes]

#include <MPxManipContainer.h>
Inheritance diagram for MPxManipContainer:
Inheritance graph
[legend]
Collaboration diagram for MPxManipContainer:
Collaboration graph
[legend]

List of all members.


Detailed Description

Base class for user defined manipulator containers.

MPxManipContainer is the base class for user-defined container manipulators. This class is derived from MPxNode since manipulators in Maya are dependency nodes.

MPxManipContainer is a container manipulator that has at least one base manipulator. MPxManipContainer has methods for adding the following base manipulators types to the container: FreePointTriadManip, DirectionManip, DistanceManip, PointOnCurveManip, PointOnSurfaceManip, DiscManip, CircleSweepManip, ToggleManip, StateManip, and CurveSegmentManip.

A container manipulator has one converter which is the interface between the container's children manipulators and the node plugs they affect. The values on the converter that are related to children manipulators are called converterManipValues, and the values on the converter that are related to the node plugs are called converterPlugValues.

The conversion between converterManipValues and converterPlugValues are performed through conversion callback methods, except when there is a one-to-one connection between a converterManipValue and a converterPlugValue.

There are two kinds of conversion callback methods: manipToPlug and plugToManip. A plugToManipConversionCallback is used to calculate a converterManipValue from various converterPlugValues. This callback has access to all the converterPlugValues and returns the value of a converterManipValue. A manipToPlugConversionCallback is used to calculate a converterPlugValue from various converterManipValues. This callback has access to all the converterManipValues and returns the value of a converterPlugValue.

In order for an MPxManipContainer to be able to run, the manipulator needs to know that the initialization is finished through the finishAddingManips method.

Examples:

componentScaleManip.cpp, customAttrManip.cpp, footPrintManip.cpp, lineManipContainer.h, moveManip.cpp, rotateManip.cpp, surfaceBumpManip.cpp, and swissArmyManip.cpp.


Public Types

enum   baseType {
   kFreePointTriadManip, kDirectionManip, kDistanceManip, kPointOnCurveManip,
   kPointOnSurfaceManip, kDiscManip, kCircleSweepManip, kToggleManip,
   kStateManip, kCurveSegmentManip, kCustomManip
}
  Built-in manipulator types. More...
typedef MManipData(MPxManipContainer::*  plugToManipConversionCallback )(unsigned int manipIndex)
  Pointer to a plug-to-manip conversion callback function.
typedef MManipData(MPxManipContainer::*  manipToPlugConversionCallback )(unsigned int plugIndex)
  Pointer to a manip-to-plug conversion callback function.

Public Member Functions

  MPxManipContainer ()
virtual  ~MPxManipContainer ()
virtual MPxNode::Type  type () const
virtual void  draw (M3dView &view, const MDagPath &path, M3dView::DisplayStyle style, M3dView::DisplayStatus status)
virtual MStatus  connectToDependNode (const MObject &dependNode)
virtual MStatus  createChildren ()
MDagPath  addFreePointTriadManip (const MString &manipName, const MString &pointName)
MDagPath  addDirectionManip (const MString &manipName, const MString &directionName)
MDagPath  addDistanceManip (const MString &manipName, const MString &distanceName)
MDagPath  addPointOnCurveManip (const MString &manipName, const MString &paramName)
MDagPath  addPointOnSurfaceManip (const MString &manipName, const MString &paramName)
MDagPath  addDiscManip (const MString &manipName, const MString &angleName)
MDagPath  addCircleSweepManip (const MString &manipName, const MString &angleName)
MDagPath  addToggleManip (const MString &manipName, const MString &toggleName)
MDagPath  addStateManip (const MString &manipName, const MString &stateName)
MDagPath  addCurveSegmentManip (const MString &manipName, const MString &startParamName, const MString &endParamName)
MDagPath  addRotateManip (const MString &manipName, const MString &rotationName)
MDagPath  addScaleManip (const MString &manipName, const MString &scaleName)
MStatus  addMPxManipulatorNode (const MString &manipTypeName, const MString &manipName, MPxManipulatorNode *&proxyManip)
bool  isManipActive (const MFn::Type &manipType, MObject &manipObject)
MStatus  finishAddingManips ()
virtual MManipData  plugToManipConversion (unsigned int manipIndex)
virtual MManipData  manipToPlugConversion (unsigned int manipIndex)
void  addPlugToManipConversion (unsigned int manipIndex)
unsigned int  addManipToPlugConversion (MPlug &plug)
void  addPlugToManipConversionCallback (unsigned int manipIndex, plugToManipConversionCallback callback)
  NO SCRIPT SUPPORT.
unsigned int  addManipToPlugConversionCallback (MPlug &plug, manipToPlugConversionCallback callback)
  NO SCRIPT SUPPORT.
MStatus  getConverterManipValue (unsigned int manipIndex, unsigned int &value)
MStatus  getConverterManipValue (unsigned int manipIndex, double &value)
MStatus  getConverterManipValue (unsigned int manipIndex, double &x, double &y)
MStatus  getConverterManipValue (unsigned int manipIndex, MPoint &point)
MStatus  getConverterManipValue (unsigned int manipIndex, MVector &vector)
MStatus  getConverterManipValue (unsigned int manipIndex, MMatrix &matrix)
MStatus  getConverterManipValue (unsigned int manipIndex, MEulerRotation &rotation)
MStatus  getConverterManipValue (unsigned int manipIndex, MTransformationMatrix &xform)
MStatus  getConverterPlugValue (unsigned int plugIndex, double &value)
MStatus  getConverterPlugValue (unsigned int plugIndex, double &x, double &y)
MStatus  getConverterPlugValue (unsigned int plugIndex, MPoint &point)
MStatus  getConverterPlugValue (unsigned int plugIndex, MVector &vector)
MStatus  getConverterPlugValue (unsigned int plugIndex, MMatrix &matrix)
MStatus  getConverterPlugValue (unsigned int plugIndex, MEulerRotation &rotation)
virtual MStatus  doPress ()
virtual MStatus  doDrag ()
virtual MStatus  doRelease ()

Static Public Member Functions

static MStatus  initialize ()
static MPxManipContainer newManipulator (const MString &manipName, MObject &manipObject, MStatus *ReturnStatus=NULL)
static MStatus  addToManipConnectTable (MTypeId &)
static MStatus  removeFromManipConnectTable (MTypeId &)

Friends

class  MFnPlugin

Member Typedef Documentation

typedef MManipData(MPxManipContainer::* MPxManipContainer::plugToManipConversionCallback)(unsigned int manipIndex)

Pointer to a plug-to-manip conversion callback function.

Parameters:
[in]  manipIndex  Index of the manipulator value to be calculated.

typedef MManipData(MPxManipContainer::* MPxManipContainer::manipToPlugConversionCallback)(unsigned int plugIndex)

Pointer to a manip-to-plug conversion callback function.

Parameters:
[in]  plugIndex  Index of the plug value to be calculated.

Member Enumeration Documentation

Built-in manipulator types.

Enumerator:
kFreePointTriadManip   
kDirectionManip   
kDistanceManip   
kPointOnCurveManip   
kPointOnSurfaceManip   
kDiscManip   
kCircleSweepManip   
kToggleManip   
kStateManip   
kCurveSegmentManip   
kCustomManip   

Constructor & Destructor Documentation

MPxManipContainer::MPxManipContainer (  ) 

Constructor.

MPxManipContainer::~MPxManipContainer (  )  [virtual]

Destructor.


Member Function Documentation

MPxNode::Type MPxManipContainer::type (  )  const [virtual]

This method returns the type of the node.

Returns:
MPxNode::kManipContainer

Reimplemented from MPxNode.

MStatus MPxManipContainer::initialize (  )  [static]

This method initializes the manipulator, and should be overriden in user-defined manipulators.

Returns:
Status of the operation. The base class always returns MS::kSuccess.
Examples:

MPxManipContainer * MPxManipContainer::newManipulator ( const MString manipName,
MObject manipObject,
MStatus ReturnStatus = NULL  
) [static]

This static function is used to create a user-defined manipulator. The manipObject argument is set to the new manipulator node. Note that the manipName argument must be the name of a manipulator derived from MPxManipContainer. Also note that this method creates the newManipulator, but doesn't add it to the DAG. The primary use of this method is in conjunction with MPxSelectionContext::addManipulator, to add user-defined manipulators to a context.

Parameters:
[in]  manipName  manipulator name
[in]  manipObject  manipulator object
Returns:
The new manipulator

void MPxManipContainer::draw ( M3dView view,
const MDagPath path,
M3dView::DisplayStyle  style,
M3dView::DisplayStatus  status  
) [virtual]

This method can be overloaded to customize the drawing of the child manipulators. If the default draw is also required, this method should be called from the derived method.

Parameters:
[in]  view  the view in which to draw
[in]  path  the current path
[in]  style  the display appearance
[in]  status  the display status
Examples:

MStatus MPxManipContainer::connectToDependNode ( const MObject node  )  [virtual]

This method connects the manipulator to the dependency node. This is a virtual method and needs to be overridden from the plug-in.

Parameters:
[in]  node  the node to which the manipulator should be connected
Returns:
MS::kSuccess if successful, an error status otherwise. The base class returns MS::kFailure if there are no connections between manip values and plug values.
Examples:

MStatus MPxManipContainer::createChildren (  )  [virtual]

This method should be overridden in user defined manipulators. This method is called after the user node derived from MPxManipContainer is set up.

Examples:

MDagPath MPxManipContainer::addFreePointTriadManip ( const MString manipName,
const MString pointName  
)

This method creates a FreePointTriadManip and adds it to the MPxManipContainer container.

Parameters:
[in]  manipName  manipulator name
[in]  pointName  point name
Returns:
New FreePointTriadManip

MDagPath MPxManipContainer::addDirectionManip ( const MString manipName,
const MString directionName  
)

This method creates a DirectionManip and adds it to the MPxManipContainer container.

Parameters:
[in]  manipName  manipulator name
[in]  directionName  direction name
Returns:
New DirectionManip

MDagPath MPxManipContainer::addDistanceManip ( const MString manipName,
const MString distanceName  
)

This method creates a DistanceManip and adds it to the MPxManipContainer container.

Parameters:
[in]  manipName  manipulator name
[in]  distanceName  distance name
Returns:
New DistanceManip

MDagPath MPxManipContainer::addPointOnCurveManip ( const MString manipName,
const MString paramName  
)

This method creates a PointOnCurveManip and adds it to the MPxManipContainer container.

Parameters:
[in]  manipName  manipulator name
[in]  paramName  parameter name
Returns:
New PointOnCurveManip

MDagPath MPxManipContainer::addPointOnSurfaceManip ( const MString manipName,
const MString paramName  
)

This method creates a PointOnSurfaceManip and adds it to the MPxManipContainer container.

Parameters:
[in]  manipName  manipulator name
[in]  paramName  parameter name
Returns:
New PointOnSurfaceManip

MDagPath MPxManipContainer::addDiscManip ( const MString manipName,
const MString angleName  
)

This method creates a DiscManip and adds it to the MPxManipContainer container.

Parameters:
[in]  manipName  manipulator name
[in]  angleName  angle name
Returns:
New DiscManip

MDagPath MPxManipContainer::addCircleSweepManip ( const MString manipName,
const MString angleName  
)

This method creates a CircleSweepManip and adds it to the MPxManipContainer container.

Parameters:
[in]  manipName  manipulator name
[in]  angleName  angle name
Returns:
New CircleSweepManip

MDagPath MPxManipContainer::addToggleManip ( const MString manipName,
const MString toggleName  
)

This method creates a ToggleManip and adds it to the MPxManipContainer container.

Parameters:
[in]  manipName  manipulator name
[in]  toggleName  toggle name
Returns:
New ToggleManip

MDagPath MPxManipContainer::addStateManip ( const MString manipName,
const MString stateName  
)

This method creates a StateManip and adds it to the MPxManipContainer container.

Parameters:
[in]  manipName  manipulator name
[in]  stateName  state name
Returns:
New StateManip

MDagPath MPxManipContainer::addCurveSegmentManip ( const MString manipName,
const MString startParamName,
const MString endParamName  
)

This method creates a CurveSegmentManip and adds it to the MPxManipContainer container.

Parameters:
[in]  manipName  manipulator name
[in]  startParamName  start parameter name
[in]  endParamName  end parameter name
Returns:
New CurveSegmentManip

MDagPath MPxManipContainer::addRotateManip ( const MString manipName,
const MString rotationName  
)

This method creates a rotate manipulator and adds it to the MPxManipContainer container.

Parameters:
[in]  manipName  manipulator name
[in]  rotationName  name of the rotation vector
Returns:
Dag path to the new rotate manipulator

MDagPath MPxManipContainer::addScaleManip ( const MString manipName,
const MString scaleName  
)

This method creates a scale manipulator and adds it to the MPxManipContainer container.

Parameters:
[in]  manipName  manipulator name
[in]  scaleName  name of the scale vector
Returns:
Dag path to the new scale manipulator

MStatus MPxManipContainer::addMPxManipulatorNode ( const MString manipTypeName,
const MString manipName,
MPxManipulatorNode *&  proxyManip  
)

This method creates a custom MPxManipulatorNode and adds it to the MPxManipContainer container.

Parameters:
[in]  manipTypeName  manipulator name
[in]  manipName  name of the manip
[out]  proxyManip  returns a pointer to the new manipulator
Returns:

bool MPxManipContainer::isManipActive ( const MFn::Type manipType,
MObject manipObject  
)

This method determines if custom manip is active & gets the current manip object.

Parameters:
[in]  manipType  the type of the custom manip
[in]  manipObject  manipulator object
Returns:
  • true custom manip is active
  • false custom manip is inactive

MStatus MPxManipContainer::finishAddingManips (  ) 

This method should be called from the user-defined manipulator plug-in near the end of the connectToDependNode method so that the converter in the manipulator can be initialized. The converter cannot be initialized until all the connections from the manip values to the plug values have been specified.

Returns:

MStatus MPxManipContainer::addToManipConnectTable ( MTypeId mid  )  [static]

This method adds the user defined node as an entry in the manipConnectTable so that when this node is selected the user can use the show manip tool to get the user defined manipulator associated with this node. Note that the name of the manipulator node has to be the name of the plug-in node appended with "Manip".

Parameters:
[in]  mid  id of the user defined node
Returns:
MS::kSuccess if the node has been successfully added to the table.
Examples:

MStatus MPxManipContainer::removeFromManipConnectTable ( MTypeId id  )  [static]

This method removes the user defined node entry from the manipConnectTable.

Parameters:
[in]  id  id of the user defined node
Returns:
MS::kSuccess if the node has been successfully removed from the table.

MManipData MPxManipContainer::plugToManipConversion ( unsigned int  manipIndex  )  [virtual]

This virtual method calculates and returns the requested manipulator value, based upon the values of plugs on the nodes being manipulated.

To use, call addPlugToManipConversion() for each manipulator value (e.g. the start point of a distance manip) you want this method to calculate, then implement this method to calculate those manipulator values. Each manipulator value is identified by the unique index returned by the corresponding method of its functionset (e.g. MFnDistanceManip::startPointIndex).

Parameters:
[in]  manipIndex  the index of the manipulator value to be calculated
Returns:
New manipulator value.
Examples:

MManipData MPxManipContainer::manipToPlugConversion ( unsigned int  plugIndex  )  [virtual]

This virtual method calculates and returns the requested plug value, based upon the container's manipulator values.

To use, call addManipToPlugConversion() for each plug whose value you want this method to calculate then implement this method to calculate those plug values. Each plug is identified by the unique index returned by the addManipToPlugConversion() call.

Parameters:
[in]  plugIndex  the index of the plug value to be calculated
Returns:
New plug value.
Examples:

void MPxManipContainer::addPlugToManipConversion ( unsigned int  manipIndex  ) 

This method adds a plug to manipulator converter for the specified manipulator value (e.g. the start point of a distance manip). The converter must be implemented in the plugToManipConversion() virtual method of this class.

NOTE: The conversion methods and callback methods of this class should not be mixed. The conversion methods are: addManipToPlugConversion(), addManipToPlugConversion() The callback methods are: addPlugToManipConversionCallback() addManipToPlugConversionCallback()

Parameters:
[in]  manipIndex  the index of the manipulator value for which the converter is being requested. The index is determined by calling the appropriate method of the manipulator's functionset (e.g. MFnDistanceManip::startPointIndex).

unsigned int MPxManipContainer::addManipToPlugConversion ( MPlug plug  ) 

This method adds a manipulator to plug converter for the specified plug. The converter must be implemented in the manipToPlugConversion() virtual method of this class.

NOTE: The conversion methods and callback methods of this class should not be mixed. The conversion methods are: addManipToPlugConversion(), addManipToPlugConversion() The callback methods are: addPlugToManipConversionCallback() addManipToPlugConversionCallback()

Parameters:
[in]  plug  the plug for which the converter is being requested.
Returns:
Index used to identify the plug inside the manipToPlugConversion() method.

void MPxManipContainer::addPlugToManipConversionCallback ( unsigned int  manipIndex,
plugToManipConversionCallback  callback  
)

NO SCRIPT SUPPORT.

This method adds a callback which calculates the specified manipulator value (e.g. the start point of a distance manip) based on the plug values of the nodes being manipulated.

NOTE: The conversion methods and callback methods of this class should not be mixed. The conversion methods are: addManipToPlugConversion(), addManipToPlugConversion() The callback methods are: addPlugToManipConversionCallback() addManipToPlugConversionCallback()

Parameters:
[in]  manipIndex  the index of the manipulator value for which the callback will be registered. The index is determined by calling the appropriate method of the manipulator's functionset (e.g. MFnDistanceManip::startPointIndex).
[in]  callback  the callback that calculates a converterManipValue at the specified index from converterPlugValues

unsigned int MPxManipContainer::addManipToPlugConversionCallback ( MPlug plug,
manipToPlugConversionCallback  callback  
)

NO SCRIPT SUPPORT.

This method adds a callback that calculates the specified plug value based on the container's manipulator values. If the same callback is used to calculate several different plug values then the indices returned by this method can be used to distinguish between them.

NOTE: The conversion methods and callback methods of this class should not be mixed. The conversion methods are: addManipToPlugConversion(), addManipToPlugConversion() The callback methods are: addPlugToManipConversionCallback() addManipToPlugConversionCallback()

Parameters:
[in]  plug  the plug for which the callback will be registered
[in]  callback  the callback that calculates a converterPlugValue for the specified plug from converterManipValues
Returns:
Index used to identify the plug in calls to the callback.

MStatus MPxManipContainer::getConverterManipValue ( unsigned int  manipIndex,
unsigned int &  value  
)

This method retrieves the value of a converterManipValue of type unsigned int at a given index from the converter.

Parameters:
[in]  manipIndex  the index of the converterManipValue
[out]  value  the value at the specified index
Returns:

MStatus MPxManipContainer::getConverterManipValue ( unsigned int  manipIndex,
double &  value  
)

This method retrieves the value of a converterManipValue of type double at a given index from the converter.

Parameters:
[in]  manipIndex  the index of the converterManipValue
[out]  value  the value at the specified index
Returns:

MStatus MPxManipContainer::getConverterManipValue ( unsigned int  manipIndex,
double &  x,
double &  y  
)

This method retrieves the x and y values of a converterManipValue of type double at a given index from the converter.

Parameters:
[in]  manipIndex  the index of the converterManipValue
[out]  x  the x value at the specified index
[out]  y  the y value at the specified index
Returns:

MStatus MPxManipContainer::getConverterManipValue ( unsigned int  manipIndex,
MPoint point  
)

This method retrieves the value of a converterManipValue of type MPoint at a given index from the converter.

Parameters:
[in]  manipIndex  the index of the converterManipValue
[out]  point  the value at the specified index
Returns:

MStatus MPxManipContainer::getConverterManipValue ( unsigned int  manipIndex,
MVector vector  
)

This method retrieves the value of a converterManipValue of type MVector at a given index from the converter.

Parameters:
[in]  manipIndex  the index of the converterManipValue
[out]  vector  the value at the specified index
Returns:

MStatus MPxManipContainer::getConverterManipValue ( unsigned int  manipIndex,
MMatrix matrix  
)

This method retrieves the value of a converterManipValue of type MMatrix at a given index from the converter.

Parameters:
[in]  manipIndex  the index of the converterManipValue
[out]  matrix  the value at the specified index
Returns:

MStatus MPxManipContainer::getConverterManipValue ( unsigned int  manipIndex,
MEulerRotation rotation  
)

This method retrieves the value of a converterManipValue of type MEulerRotation at a given index from the converter.

Parameters:
[in]  manipIndex  the index of the converterManipValue
[out]  rotation  the value at the specified index
Returns:

MStatus MPxManipContainer::getConverterManipValue ( unsigned int  manipIndex,
MTransformationMatrix xform  
)

This method retrieves the value of a converterManipValue of type MTransformationMatrix at a given index from the converter.

Parameters:
[in]  manipIndex  the index of the converterManipValue
[out]  xform  the value at the specified index
Returns:

MStatus MPxManipContainer::getConverterPlugValue ( unsigned int  plugIndex,
double &  value  
)

This method retrieves the value of a converterPlugValue of type double at a given index from the converter.

Parameters:
[in]  plugIndex  the index of the converterPlugValue
[out]  value  the value at the specified index
Returns:

MStatus MPxManipContainer::getConverterPlugValue ( unsigned int  plugIndex,
double &  x,
double &  y  
)

This method retrieves the x and y values of a converterPlugValue of type double at a given index from the converter.

Parameters:
[in]  plugIndex  the index of the converterPlugValue
[out]  x  the x value at the specified index
[out]  y  the y value at the specified index
Returns:

MStatus MPxManipContainer::getConverterPlugValue ( unsigned int  plugIndex,
MPoint point  
)

This method retrieves the value of a converterPlugValue of type MPoint at a given index from the converter.

Parameters:
[in]  plugIndex  the index of the converterPlugValue
[out]  point  the value at the specified index
Returns:

MStatus MPxManipContainer::getConverterPlugValue ( unsigned int  plugIndex,
MVector vector  
)

This method retrieves the value of a converterPlugValue of type MVector at a given index from the converter.

Parameters:
[in]  plugIndex  the index of the converterPlugValue
[out]  vector  the value at the specified index
Returns:

MStatus MPxManipContainer::getConverterPlugValue ( unsigned int  plugIndex,
MMatrix matrix  
)

This method retrieves the value of a converterPlugValue of type MMatrix at a given index from the converter.

Parameters:
[in]  plugIndex  the index of the converterPlugValue
[out]  matrix  the value at the specified index
Returns:

MStatus MPxManipContainer::getConverterPlugValue ( unsigned int  plugIndex,
MEulerRotation rotation  
)

This method retrieves the value of a converterPlugValue of type MEulerRotation at a given index from the converter.

Parameters:
[in]  plugIndex  the index of the converterPlugValue
[out]  rotation  the value at the specified index
Returns:

MStatus MPxManipContainer::doPress (  )  [virtual]

This method gets called when the manipulator recieves a mouse down event.

You should return kUnknownParameter to specify that maya should handle this connection or if you want maya to process the connection as well.

Returns:
Examples:

MStatus MPxManipContainer::doDrag (  )  [virtual]

This method gets called when the manipulator recieves a mouse drag event.

You should return kUnknownParameter to specify that maya should handle this connection or if you want maya to process the connection as well.

Returns:
Examples:

MStatus MPxManipContainer::doRelease (  )  [virtual]

This method gets called when the manipulator recieves a mouse release event.

You should return kUnknownParameter to specify that maya should handle this connection or if you want maya to process the connection as well.

Returns:
Examples:

Autodesk® Maya® 2011 © 1997-2010 Autodesk, Inc. All rights reserved. Generated with doxygen 1.5.6