#include <MPxSurfaceShape.h>
MPxSurfaceShape is the parent class of all user defined shapes. User defined shapes are dependency nodes (and DAG nodes) which contain overridable drawing, selection, and component methods.
This class can be used to implement new kinds of shapes within Maya that can have selectable/manipulatable components and behave in a similar manner to the default shapes in maya.
The UI dependent aspects of the shape should be implemented in a class derived from MPxSurfaceShapeUI. This includes the drawing and interactive selection of the shape and any components that the shape implements.
Public Types | |
enum | MVertexCachingMode { kNoPointCaching, kSavePoints, kRestorePoints, kUpdatePoints } |
Vertex caching modes. More... | |
enum | MVertexOffsetMode { kNormal, kUTangent, kVTangent, kUVNTriad } |
Vertex offset modes. More... | |
enum | MatchResult { kMatchOk, kMatchNone, kMatchTooMany, kMatchInvalidName, kMatchInvalidAttribute, kMatchInvalidAttributeIndex, kMatchInvalidAttributeRange, kMatchInvalidAttributeDim } |
Return values for the matchComponent() method. More... | |
enum | MChildChanged { kObjectChanged, kBoundingBoxChanged } |
Scope of change. More... | |
Public Member Functions | |
MPxSurfaceShape () | |
virtual | ~MPxSurfaceShape () |
virtual MPxNode::Type | type () const |
virtual bool | isBounded () const |
virtual MBoundingBox | boundingBox () const |
virtual void | transformUsing (const MMatrix &mat, const MObjectArray &componentList) |
virtual void | transformUsing (const MMatrix &mat, const MObjectArray &componentList, MVertexCachingMode cachingMode, MPointArray *pointCache) |
virtual void | tweakUsing (const MMatrix &mat, const MObjectArray &componentList, MVertexCachingMode cachingMode, MPointArray *pointCache, MArrayDataHandle &handle) |
bool | convertToTweakNodePlug (MPlug &plug) const |
virtual bool | vertexOffsetDirection (MObject &component, MVectorArray &direction, MVertexOffsetMode mode, bool normalize) |
virtual MObject | newControlPointComponent () const |
virtual void | componentToPlugs (MObject &component, MSelectionList &selectionList) const |
virtual bool | match (const MSelectionMask &mask, const MObjectArray &componentList) const |
virtual MatchResult | matchComponent (const MSelectionList &item, const MAttributeSpecArray &spec, MSelectionList &list) |
virtual MObject | createFullVertexGroup () const |
virtual bool | deleteComponents (const MObjectArray &componentList, MDoubleArray &undoInfo) |
virtual bool | undeleteComponents (const MObjectArray &componentList, MDoubleArray &undoInfo) |
virtual MObject | localShapeInAttr () const |
virtual MObject | localShapeOutAttr () const |
virtual MObject | worldShapeOutAttr () const |
virtual MObject | cachedShapeAttr () const |
virtual MObject | geometryData () const |
virtual void | closestPoint (const MPoint &toThisPoint, MPoint &theClosestPoint, double tolerance) |
virtual bool | pointAtParm (const MPoint &atThisParm, MPoint &evaluatedPoint) |
virtual MPxGeometryIterator * | geometryIteratorSetup (MObjectArray &, MObject &, bool forReadOnly=false) |
virtual bool | acceptsGeometryIterator (bool writeable=true) |
virtual bool | acceptsGeometryIterator (MObject &, bool writeable=true, bool forReadOnly=false) |
MObjectArray | activeComponents () const |
bool | hasActiveComponents () const |
void | childChanged (MChildChanged=kObjectChanged) |
bool | isRenderable () const |
void | setRenderable (bool) |
MMatrix | getWorldMatrix (MDataBlock &, unsigned int) const |
Static Public Attributes | |
static MObject | mControlPoints |
Control points for the derived shapes. | |
static MObject | mControlValueX |
X value of a control point. | |
static MObject | mControlValueY |
Y value of a control point. | |
static MObject | mControlValueZ |
Z value of a control point. | |
static MObject | nodeBoundingBox |
bounding box attribute | |
static MObject | nodeBoundingBoxMin |
bounding box minimum point | |
static MObject | nodeBoundingBoxMinX |
X component of boundingBoxMin. | |
static MObject | nodeBoundingBoxMinY |
Y component of boundingBoxMin. | |
static MObject | nodeBoundingBoxMinZ |
Z component of boundingBoxMin. | |
static MObject | nodeBoundingBoxMax |
bounding box maximum point | |
static MObject | nodeBoundingBoxMaxX |
X component of boundingBoxMax. | |
static MObject | nodeBoundingBoxMaxY |
Y component of boundingBoxMax. | |
static MObject | nodeBoundingBoxMaxZ |
Z component of boundingBoxMax. | |
static MObject | nodeBoundingBoxSize |
bounding box size vector | |
static MObject | nodeBoundingBoxSizeX |
X component of boundingBoxSize. | |
static MObject | nodeBoundingBoxSizeY |
Y component of boundingBoxSize. | |
static MObject | nodeBoundingBoxSizeZ |
Z component of boundingBoxSize. | |
static MObject | center |
object center attribute | |
static MObject | boundingBoxCenterX |
X component of boundingBoxCenter. | |
static MObject | boundingBoxCenterY |
Y component of boundingBoxCenter. | |
static MObject | boundingBoxCenterZ |
Z component of boundingBoxCenter. | |
static MObject | matrix |
matrix attribute | |
static MObject | inverseMatrix |
inverse matrix attribute | |
static MObject | worldMatrix |
world matrix attribute | |
static MObject | worldInverseMatrix |
inverse world matrix attribute | |
static MObject | parentMatrix |
parent matrix attribute | |
static MObject | parentInverseMatrix |
inverse parent matrix attribute | |
static MObject | visibility |
visibility attribute | |
static MObject | intermediateObject |
intermediate object attribute | |
static MObject | isTemplated |
template attribute | |
static MObject | instObjGroups |
instances object group info attribute | |
static MObject | objectGroups |
object groups attributes | |
static MObject | objectGrpCompList |
component in object groups attribute | |
static MObject | objectGroupId |
group id attribute | |
static MObject | objectGroupColor |
group id attribute | |
static MObject | useObjectColor |
controls choice of wireframe dormant object color | |
static MObject | objectColor |
the per object dormant wireframe color |
Return values for the matchComponent() method.
MPxSurfaceShape::MPxSurfaceShape | ( | ) |
Class constructor.
Any calls the MPxSurfaceShape methods must be done in the postConstructor method and not here.
MPxSurfaceShape::~MPxSurfaceShape | ( | ) | [virtual] |
Class destructor.
MPxNode::Type MPxSurfaceShape::type | ( | ) | const [virtual] |
Returns the type of node that this is. This is used to differentiate user defined nodes that are derived off different MPx base classes.
It is not necessary to override this method.
Reimplemented from MPxNode.
bool MPxSurfaceShape::isBounded | ( | ) | const [virtual] |
This method should be overridden to return true if the user supplies a bounding box routine. Supplying a bounding box routine makes refresh and selection more efficient.
MBoundingBox MPxSurfaceShape::boundingBox | ( | ) | const [virtual] |
This method should be overridden to return a bounding box for the shape. If this method is overridden, then MPxSurfaceShape::isBounded should also be overridden to return true.
void MPxSurfaceShape::transformUsing | ( | const MMatrix & | matrix, | |
const MObjectArray & | componentList | |||
) | [virtual] |
Transform the given components using the specified transformation matrix. This method should be overridden if the shape supports components that can be transformed using maya's move, scale, and rotate tools.
[in] | matrix | the matrix representing the transformation that is to be applied to the components |
[in] | componentList | a list of components to be tranformed. If the list is empty, it indicates that every point in the geometry should be transformed. |
Reimplemented in MPxComponentShape.
void MPxSurfaceShape::transformUsing | ( | const MMatrix & | mat, | |
const MObjectArray & | componentList, | |||
MVertexCachingMode | cachingMode, | |||
MPointArray * | pointCache | |||
) | [virtual] |
Transform the given components using the specified transformation matrix. This method should be overridden if the shape supports components that can be transformed using maya's move, scale, and rotate tools.
[in] | mat | the matrix representing the transformation that is to be applied to the components |
[in] | componentList | a list of components to be transformed. If the list is empty, it indicates that every point in the geometry should be transformed. |
[in] | cachingMode | whether the points should be cached in the pointCache argument, or restored from the pointCache |
[in] | pointCache | used to store for undo and restore points during undo |
Reimplemented in MPxComponentShape.
void MPxSurfaceShape::tweakUsing | ( | const MMatrix & | mat, | |
const MObjectArray & | componentList, | |||
MVertexCachingMode | cachingMode, | |||
MPointArray * | pointCache, | |||
MArrayDataHandle & | handle | |||
) | [virtual] |
Transform the given components using the specified transformation matrix. This method should be overridden if the shape supports components that can be transformed using maya's move, scale, and rotate tools. This method is called when the shape has history & connected to a tweak node. The most common reason why the shape would be connected to a tweak node is if it is being deformed. When a shape is connected to a tweak node, transformations applied to the points are placed in the tweak node rather than in the shape itself.
[in] | mat | the matrix representing the transformation that is to be applied to the components |
[in] | componentList | a list of components to be tranformed. If the list is empty, it indicates that every point in the geometry should be transformed. |
[in] | cachingMode | whether the points should be cached in the pointCache argument, or restored from the pointCache |
[in] | pointCache | used to store for undo and restore points during undo |
[in] | handle | array data handle where the tweaks are stored |
bool MPxSurfaceShape::convertToTweakNodePlug | ( | MPlug & | plug | ) | const |
Check if a tweak node is connected to this node. If it is, then reset the supplied plug to contain the controlPoints attribute on the tweak node.
[in] | plug | plug which will be set to point to the associated tweak node plug if a tweak node is connected |
bool MPxSurfaceShape::vertexOffsetDirection | ( | MObject & | component, | |
MVectorArray & | direction, | |||
MVertexOffsetMode | mode, | |||
bool | normalize | |||
) | [virtual] |
This method should be overridden if the shape supports components that can be moved in the direction of the normal or UV's using the move vertex normal tool.
This method should calculate the offset direction for a vertex components. The direction vector array is an array of offsets corresponding to the elements in the component. The mode argument specifies the type of movement that is being performed.
The default for this method is to return false, i.e. no support for move normal tool.
[in] | component | |
[in] | direction | |
[in] | mode | The type of vertex movement |
[in] | normalize | specifies whether the offset vectors should be normalized |
MObject MPxSurfaceShape::newControlPointComponent | ( | ) | const [virtual] |
The default action of this method is to return an MFnSingleIndexedComponent (of type MFn::kMeshVertComponent) in order to support rigid skinning binds.
This method can be overriden to support other types of components such as MFnDoubleIndexedComponent and MFnTripleIndexedComponent and should return a new component of that type. The types allowed are those listed in the create() method docs for each MFn*IndexedComponent.
No argument is required.
The skinning code handles the deallocation of the new component.
void MPxSurfaceShape::componentToPlugs | ( | MObject & | component, | |
MSelectionList & | list | |||
) | const [virtual] |
Converts the given component into a selection list of plugs. This method is used to associate a shapes components into the corresponding attributes (plugs) within the shape. For example, it gets called by the translate manipulator to determine which attributes should be driven by the manipulator, and by the setKeyframe command to determine where to connect animCurves for components.
This method should be overridden if the shape supports components that can be selected and moved in Maya.
[in] | component | the component to be converted |
[in] | list | a selection list where the plug should be added |
Reimplemented in MPxComponentShape.
bool MPxSurfaceShape::match | ( | const MSelectionMask & | mask, | |
const MObjectArray & | componentList | |||
) | const [virtual] |
This method is used to check for matches between a selection type (or mask) and a given component. If your shape has components representing attributes then this method is used to match up your components with selection masks.
This is used by sets and deformers to make sure that the selected components fall into the "vertex only" category. This is useful when you want to make sure that only a particular component can be deformed.
[in] | mask | the selection mask to test against |
[in] | componentList | a list of components to be tested |
Reimplemented in MPxComponentShape.
MPxSurfaceShape::MatchResult MPxSurfaceShape::matchComponent | ( | const MSelectionList & | item, | |
const MAttributeSpecArray & | spec, | |||
MSelectionList & | list | |||
) | [virtual] |
This method is used to convert the string representation of a component into a component object and to validate that the indices.
This method should be overridden if the shape has components.
[in] | item | DAG selection item for the object being matched |
[in] | spec | attribute specification object |
[in] | list | list to add components to |
MObject MPxSurfaceShape::createFullVertexGroup | ( | ) | const [virtual] |
This method is used to create a component containing every vertex/CV in the object.
This method is supposed to return non-NULL only if the dag object contains vertices/CVs (control points), so derived classes that do should override this method.
Eg: use MFnSingleIndexedComponent::setCompleteData( numVertices ) to specify that a component represents all the vertices of the shape.
Reimplemented in MPxComponentShape.
bool MPxSurfaceShape::deleteComponents | ( | const MObjectArray & | componentList, | |
MDoubleArray & | undoInfo | |||
) | [virtual] |
This method should be overridden if the shape is to support deletion of components. A list of components to be deleted will be passed in as well as an array of doubles where information about each deleted component can be stored for undo purposes. A typical use for this array is to store knot values or weights for control points that are deleted.
[in] | componentList | List of components to be deleted |
[in] | undoInfo | Values used for undo purposes |
bool MPxSurfaceShape::undeleteComponents | ( | const MObjectArray & | componentList, | |
MDoubleArray & | undoInfo | |||
) | [virtual] |
This method should be overridden if the shape is to support undeletion of components. A list of components to be deleted will be passed in as well as an array of doubles where information about each deleted component is stored for undo purposes. A typical use for this array is to store knot values or weights for control points that are deleted.
[in] | componentList | List of components that were deleted |
[in] | undoInfo | Values used for undo purposes |
MObject MPxSurfaceShape::localShapeInAttr | ( | ) | const [virtual] |
Returns the input attribute of the shape. This method will be called by Maya to determine if the shape has construction history.
Reimplemented in MPxComponentShape.
MObject MPxSurfaceShape::localShapeOutAttr | ( | ) | const [virtual] |
Returns the local output attribute of the shape.
MObject MPxSurfaceShape::worldShapeOutAttr | ( | ) | const [virtual] |
Returns the world space output attribute of the shape.
MObject MPxSurfaceShape::cachedShapeAttr | ( | ) | const [virtual] |
Returns the cached shape attribute of the shape.
MObject MPxSurfaceShape::geometryData | ( | ) | const [virtual] |
Returns the geometry data of the shape. The geometry data must be derived from the MPxGeometryData class.
The data is used by Maya to add, edit and query component grouping (set) information for the shape. This set information is stored and managed by Maya's shape base class, geometryShape.
void MPxSurfaceShape::closestPoint | ( | const MPoint & | toThisPoint, | |
MPoint & | theClosestPoint, | |||
double | tolerance | |||
) | [virtual] |
This method is used by Maya in functions (such as select) that require closest point information from your surface.
[in] | toThisPoint | the point to test against |
[out] | theClosestPoint | the closest point on your surface
|
This method is used by Maya in functions (such as select) that require point at parameter values. This only makes sense for parametric surfaces such as NURBS.
[in] | atThisParm | the parameter to check |
[out] | evaluatedPoint | the surface point |
MPxGeometryIterator * MPxSurfaceShape::geometryIteratorSetup | ( | MObjectArray & | componentList, | |
MObject & | components, | |||
bool | forReadOnly = false | |||
) | [virtual] |
This method should be overridden by the user to return a geometry iterator compatible with the user's geometry. A geometry iterator is used for iterating over the components of a shape, such as the vertices of a mesh, in a generic manner.
The components to be iterated over are passed to this function in on of two ways, as a list of components, or as a single component. Only one of these arguments is used at any particular time.
[in] | componentList | a list of components to be iterated over |
[in] | components | the components to be iterated over |
[in] | forReadOnly | specifies whether the iterator is for read-only |
bool MPxSurfaceShape::acceptsGeometryIterator | ( | bool | writeable = true |
) | [virtual] |
If the shape can supply a component iterator then then this method should be overridden to return true. The default is to return false.
[in] | writeable | is this component type writable by an iterator |
bool MPxSurfaceShape::acceptsGeometryIterator | ( | MObject & | component, | |
bool | writeable = true , |
|||
bool | forReadOnly = false | |||
) | [virtual] |
If the shape can supply a component iterator then then this method should be overridden to return true. The default is to return false. The component argument can be used to when the shape has multiple components and not all of them can be iterator over.
[in] | component | the component to test |
[in] | writeable | is this component type writable by an iterator |
[in] | forReadOnly | is this component type readable by an iterator |
MObjectArray MPxSurfaceShape::activeComponents | ( | ) | const |
Returns a list of active (selected) components for the shape.
bool MPxSurfaceShape::hasActiveComponents | ( | ) | const |
This method is used to determine whether or not the shape has active (selected) components.
void MPxSurfaceShape::childChanged | ( | MChildChanged | state = kObjectChanged |
) |
This method can be used to trigger the shape to recalculate its bounding box.
[in] | state | the type of change that has occurred |
bool MPxSurfaceShape::isRenderable | ( | ) | const |
Returns true if the shape is a renderable shape. Making a shape renderable allows the shape to have shading group assignments.
void MPxSurfaceShape::setRenderable | ( | bool | flag | ) |
Specifies whether the shape is a renderable shape. Making a shape renderable allows the shape to have shading group assignments.
[in] | flag | true if the shape is to be renderable, false otherwise |
MMatrix MPxSurfaceShape::getWorldMatrix | ( | MDataBlock & | block, | |
unsigned int | instanceGeom | |||
) | const |
Returns MMatrix which takes a point from local object space to world space.
[in] | block | a MDataBlock |
[in] | instanceGeom | the instance this MPxSurfaceShape corresponds to |
Autodesk® Maya® 2010 © 1997-2009 Autodesk, Inc. All rights reserved. | Generated with 1.5.6 |