840 lines
27 KiB
C++
Executable File
840 lines
27 KiB
C++
Executable File
#ifndef _MFnMesh
|
|
#define _MFnMesh
|
|
//
|
|
//-
|
|
// ==========================================================================
|
|
// Copyright (C) 1995 - 2005 Alias Systems Corp. and/or its licensors. All
|
|
// rights reserved.
|
|
//
|
|
// The coded instructions, statements, computer programs, and/or related
|
|
// material (collectively the "Data") in these files contain unpublished
|
|
// information proprietary to Alias Systems Corp. ("Alias") and/or its
|
|
// licensors, which is protected by Canadian and US federal copyright law and
|
|
// by international treaties.
|
|
//
|
|
// The Data may not be disclosed or distributed to third parties or be copied
|
|
// or duplicated, in whole or in part, without the prior written consent of
|
|
// Alias.
|
|
//
|
|
// THE DATA IS PROVIDED "AS IS". ALIAS HEREBY DISCLAIMS ALL WARRANTIES RELATING
|
|
// TO THE DATA, INCLUDING, WITHOUT LIMITATION, ANY AND ALL EXPRESS OR IMPLIED
|
|
// WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND/OR FITNESS FOR A
|
|
// PARTICULAR PURPOSE. IN NO EVENT SHALL ALIAS BE LIABLE FOR ANY DAMAGES
|
|
// WHATSOEVER, WHETHER DIRECT, INDIRECT, SPECIAL, OR PUNITIVE, WHETHER IN AN
|
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, OR IN EQUITY,
|
|
// ARISING OUT OF ACCESS TO, USE OF, OR RELIANCE UPON THE DATA.
|
|
// ==========================================================================
|
|
//+
|
|
//
|
|
// CLASS: MFnMesh
|
|
//
|
|
// *****************************************************************************
|
|
//
|
|
// CLASS DESCRIPTION (MFnMesh)
|
|
//
|
|
// Function set for polygonal objects.
|
|
//
|
|
// *****************************************************************************
|
|
|
|
#if defined __cplusplus
|
|
|
|
// *****************************************************************************
|
|
|
|
// INCLUDED HEADER FILES
|
|
|
|
|
|
#include <maya/MFnDagNode.h>
|
|
#include <maya/MVector.h>
|
|
#include <maya/MPoint.h>
|
|
#include <maya/MObject.h>
|
|
#include <maya/MObjectArray.h>
|
|
#include <maya/MColor.h>
|
|
#include <maya/MVectorArray.h>
|
|
#include <maya/MStringArray.h>
|
|
#include <maya/MColorArray.h>
|
|
#include <maya/MDGModifier.h>
|
|
#include <maya/MString.h>
|
|
|
|
// *****************************************************************************
|
|
|
|
// DECLARATIONS
|
|
|
|
class MPointArray;
|
|
class MFloatArray;
|
|
class MFloatPoint;
|
|
class MFloatPointArray;
|
|
class MFloatVector;
|
|
class MFloatVectorArray;
|
|
class MIntArray;
|
|
class MDoubleArray;
|
|
class MSelectionList;
|
|
class MMeshIsectAccelParams;
|
|
|
|
// Default tolerance
|
|
#define kMFnMeshTolerance 1.0e-3
|
|
|
|
// Point equivalent tolerance
|
|
#define kMFnMeshPointTolerance 1.0e-10
|
|
|
|
// *****************************************************************************
|
|
|
|
// CLASS DECLARATION (MFnMesh)
|
|
|
|
/// Polygonal surface function set
|
|
/**
|
|
|
|
*/
|
|
#ifdef _WIN32
|
|
#pragma warning(disable: 4522)
|
|
#endif // _WIN32
|
|
|
|
class OPENMAYA_EXPORT MFnMesh : public MFnDagNode
|
|
{
|
|
|
|
declareDagMFn(MFnMesh, MFnDagNode);
|
|
|
|
public:
|
|
|
|
///
|
|
MObject create( int numVertices, int numPolygons,
|
|
const MFloatPointArray &vertexArray,
|
|
const MIntArray &polygonCounts,
|
|
const MIntArray &polygonConnects,
|
|
MObject parentOrOwner = MObject::kNullObj,
|
|
MStatus * ReturnStatus = NULL );
|
|
|
|
///
|
|
MObject create( int numVertices, int numPolygons,
|
|
const MPointArray &vertexArray,
|
|
const MIntArray &polygonCounts,
|
|
const MIntArray &polygonConnects,
|
|
MObject parentOrOwner = MObject::kNullObj,
|
|
MStatus * ReturnStatus = NULL );
|
|
|
|
///
|
|
MObject create( int numVertices, int numPolygons,
|
|
const MFloatPointArray &vertexArray,
|
|
const MIntArray &polygonCounts,
|
|
const MIntArray &polygonConnects,
|
|
const MFloatArray & uArray,
|
|
const MFloatArray & vArray,
|
|
MObject parentOrOwner = MObject::kNullObj,
|
|
MStatus * ReturnStatus = NULL );
|
|
///
|
|
MObject create( int numVertices, int numPolygons,
|
|
const MPointArray &vertexArray,
|
|
const MIntArray &polygonCounts,
|
|
const MIntArray &polygonConnects,
|
|
const MFloatArray & uArray,
|
|
const MFloatArray & vArray,
|
|
MObject parentOrOwner = MObject::kNullObj,
|
|
MStatus * ReturnStatus = NULL );
|
|
///
|
|
MObject addPolygon( const MPointArray & vertexArray,
|
|
bool mergeVertices = true,
|
|
double pointTolerance = kMFnMeshPointTolerance,
|
|
MObject parentOrOwner = MObject::kNullObj,
|
|
MStatus * ReturnStatus = NULL );
|
|
///
|
|
MObject addPolygon( const MPointArray & vertexArray,
|
|
int & faceIndex,
|
|
bool mergeVertices = true,
|
|
double pointTolerance = kMFnMeshPointTolerance,
|
|
MObject parentOrOwner = MObject::kNullObj,
|
|
MStatus * ReturnStatus = NULL );
|
|
|
|
/// OBSOLETE
|
|
MObject addPolygon( MPointArray & vertexArray,
|
|
double polyTolerance,
|
|
bool mergeVertices = true,
|
|
double pointTolerance = kMFnMeshPointTolerance,
|
|
bool forceGeometry = true,
|
|
MObject parentOrOwner = MObject::kNullObj,
|
|
MStatus * ReturnStatus = NULL );
|
|
|
|
///
|
|
MStatus deleteFace(int index, MDGModifier *modifier = NULL);
|
|
///
|
|
MStatus deleteEdge(int index, MDGModifier *modifier = NULL);
|
|
///
|
|
MStatus deleteVertex(int index, MDGModifier *modifier = NULL);
|
|
///
|
|
MStatus lockVertexNormals(MIntArray & vertexList);
|
|
///
|
|
MStatus lockFaceVertexNormals(MIntArray & faceList, MIntArray & vertexList);
|
|
///
|
|
MStatus unlockVertexNormals(MIntArray & vertexList);
|
|
///
|
|
MStatus unlockFaceVertexNormals( MIntArray & faceList, MIntArray & vertexList);
|
|
|
|
// Poly Operations
|
|
///
|
|
enum SplitPlacement {
|
|
///
|
|
kOnEdge,
|
|
///
|
|
kInternalPoint,
|
|
///
|
|
kInvalid
|
|
};
|
|
///
|
|
MStatus split(MIntArray & placements,
|
|
MIntArray & edgeList,
|
|
MFloatArray & edgeFactors,
|
|
MFloatPointArray & internalPoints);
|
|
///
|
|
MStatus subdivideFaces(MIntArray & faceList,
|
|
int divisionCount);
|
|
///
|
|
MStatus subdivideEdges(MIntArray & edgeList,
|
|
int divisionCount);
|
|
///
|
|
MStatus extrudeFaces(MIntArray & faceList,
|
|
int extrusionCount,
|
|
MFloatVector* translation,
|
|
bool extrudeTogether);
|
|
///
|
|
MStatus extrudeEdges(MIntArray & edgeList,
|
|
int extrusionCount,
|
|
MFloatVector* translation,
|
|
bool extrudeTogether);
|
|
///
|
|
MStatus duplicateFaces(MIntArray & faceList,
|
|
MFloatVector* translation);
|
|
///
|
|
MStatus extractFaces(MIntArray & faceList,
|
|
MFloatVector* translation);
|
|
///
|
|
MStatus collapseFaces(MIntArray & faceList);
|
|
///
|
|
MStatus collapseEdges(MIntArray & edgeList);
|
|
|
|
// Counts
|
|
///
|
|
int numVertices( MStatus * ReturnStatus = NULL) const;
|
|
///
|
|
int numEdges( MStatus * ReturnStatus = NULL ) const;
|
|
///
|
|
int numPolygons( MStatus * ReturnStatus = NULL ) const;
|
|
///
|
|
int numFaceVertices( MStatus * ReturnStatus = NULL ) const;
|
|
///
|
|
int polygonVertexCount( int polygonId,
|
|
MStatus * ReturnStatus = NULL ) const;
|
|
///
|
|
int numUVs( MStatus * ReturnStatus = NULL ) const;
|
|
///
|
|
int numUVs( const MString &uvSet,
|
|
MStatus * ReturnStatus = NULL ) const;
|
|
///
|
|
int numNormals( MStatus * ReturnStatus = NULL ) const;
|
|
|
|
// Intersection methods with acceleration options
|
|
///
|
|
static MMeshIsectAccelParams uniformGridParams( int xDiv, int yDiv, int zDiv );
|
|
|
|
///
|
|
static MMeshIsectAccelParams autoUniformGridParams();
|
|
|
|
///
|
|
bool closestIntersection( const MFloatPoint& raySource,
|
|
const MFloatVector& rayDirection,
|
|
const MIntArray* faceIds,
|
|
const MIntArray* triIds,
|
|
bool idsSorted,
|
|
MSpace::Space space,
|
|
float maxParam,
|
|
bool testBothDirections,
|
|
MMeshIsectAccelParams *accelerator,
|
|
MFloatPoint& hitPoint,
|
|
float* hitRayParam,
|
|
int* hitFace,
|
|
int* hitTriangle,
|
|
float* hitBary1,
|
|
float* hitBary2,
|
|
float tolerance = 1e-6,
|
|
MStatus* ReturnStatus = NULL );
|
|
|
|
///
|
|
bool anyIntersection( const MFloatPoint& raySource,
|
|
const MFloatVector& rayDirection,
|
|
const MIntArray* faceIds,
|
|
const MIntArray* triIds,
|
|
bool idsSorted,
|
|
MSpace::Space space,
|
|
float maxParam,
|
|
bool testBothDirections,
|
|
MMeshIsectAccelParams *accelerator,
|
|
MFloatPoint& hitPoint,
|
|
float* hitRayParam,
|
|
int* hitFace,
|
|
int* hitTriangle,
|
|
float* hitBary1,
|
|
float* hitBary2,
|
|
float tolerance = 1e-6,
|
|
MStatus* ReturnStatus = NULL );
|
|
///
|
|
bool allIntersections( const MFloatPoint& raySource,
|
|
const MFloatVector& rayDirection,
|
|
const MIntArray* faceIds,
|
|
const MIntArray* triIds,
|
|
bool idsSorted,
|
|
MSpace::Space space,
|
|
float maxParam,
|
|
bool testBothDirections,
|
|
MMeshIsectAccelParams *accelerator,
|
|
bool sortHits,
|
|
MFloatPointArray& hitPoints,
|
|
MFloatArray* hitRayParams,
|
|
MIntArray* hitFaces,
|
|
MIntArray* hitTriangles,
|
|
MFloatArray* hitBary1,
|
|
MFloatArray* hitBary2,
|
|
float tolerance = 1e-6,
|
|
MStatus* ReturnStatus = NULL );
|
|
|
|
///
|
|
MStatus sortIntersectionFaceTriIds( MIntArray* faceIds, MIntArray* triIds );
|
|
|
|
///
|
|
MStatus freeCachedIntersectionAccelerator();
|
|
|
|
///
|
|
MString cachedIntersectionAcceleratorInfo( MStatus *ReturnStatus = NULL );
|
|
|
|
///
|
|
static MString globalIntersectionAcceleratorsInfo();
|
|
|
|
///
|
|
static void clearGlobalIntersectionAcceleratorInfo();
|
|
|
|
// Intersection/getClosestPoint methods.
|
|
///
|
|
bool intersect( const MPoint & raySource,
|
|
const MVector & rayDirection,
|
|
MPointArray & points,
|
|
double tolerance = kMFnMeshPointTolerance,
|
|
MSpace::Space space = MSpace::kObject,
|
|
MIntArray * polygonIds = NULL,
|
|
MStatus * ReturnStatus = NULL ) const;
|
|
/// OBSOLETE
|
|
bool intersect( MPoint & raySource, MVector & rayDirection,
|
|
MPointArray & points,
|
|
MStatus * ReturnStatus = NULL ) const;
|
|
|
|
/// OBSOLETE
|
|
bool intersect( const MPoint & raySource,
|
|
const MVector & rayDirection,
|
|
MPointArray & points,
|
|
MStatus * ReturnStatus = NULL ) const;
|
|
///
|
|
MStatus getClosestPointAndNormal( const MPoint & toThisPoint,
|
|
MPoint & theClosestPoint,
|
|
MVector & theNormal,
|
|
MSpace::Space space = MSpace::kObject,
|
|
int * closestPolygon = NULL ) const;
|
|
///
|
|
MStatus getClosestPoint(const MPoint &toThisPoint,
|
|
MPoint &theClosestPoint,
|
|
MSpace::Space space = MSpace::kObject,
|
|
int * closestPolygon = NULL ) const;
|
|
|
|
///
|
|
MStatus getClosestNormal(const MPoint &toThisPoint,
|
|
MVector & theNormal,
|
|
MSpace::Space space = MSpace::kObject,
|
|
int * closestPolygon = NULL ) const;
|
|
|
|
|
|
// Shaders and membership methods.
|
|
///
|
|
MStatus getConnectedShaders(
|
|
unsigned instanceNumber,
|
|
MObjectArray & shaders,
|
|
MIntArray & indices ) const;
|
|
///
|
|
MStatus getConnectedSetsAndMembers(
|
|
unsigned instanceNumber,
|
|
MObjectArray & sets,
|
|
MObjectArray & comps,
|
|
bool renderableSetsOnly ) const;
|
|
|
|
///
|
|
MObject copy( const MObject & source,
|
|
MObject parentOrOwner = MObject::kNullObj,
|
|
MStatus * ReturnStatus = NULL );
|
|
///
|
|
MStatus updateSurface();
|
|
///
|
|
MStatus syncObject();
|
|
|
|
|
|
// Get/set methods for mesh vertices.
|
|
///
|
|
MStatus getPoints( MFloatPointArray & vertexArray,
|
|
MSpace::Space space = MSpace::kObject ) const;
|
|
///
|
|
MStatus getPoints( MPointArray & vertexArray,
|
|
MSpace::Space space = MSpace::kObject ) const;
|
|
///
|
|
MStatus setPoints( MFloatPointArray & vertexArray,
|
|
MSpace::Space space = MSpace::kObject );
|
|
///
|
|
MStatus setPoints( MPointArray & vertexArray,
|
|
MSpace::Space space = MSpace::kObject );
|
|
///
|
|
MStatus getPolygonVertices( int polygonId,
|
|
MIntArray & vertexList ) const;
|
|
///
|
|
MStatus getPolygonTriangleVertices( int polygonId,
|
|
int triangleId,
|
|
int triangleVertices[3] ) const;
|
|
///
|
|
MStatus setPoint( int vertexId, const MPoint & pos,
|
|
MSpace::Space space = MSpace::kObject );
|
|
///
|
|
MStatus getPoint( int vertexId, MPoint & pos,
|
|
MSpace::Space space = MSpace::kObject ) const;
|
|
|
|
|
|
// Methods for setting/getting Normals
|
|
///
|
|
MStatus getNormals( MFloatVectorArray& normals,
|
|
MSpace::Space space = MSpace::kObject ) const;
|
|
///
|
|
MStatus getFaceVertexNormal( int faceIndex, int vertexIndex,
|
|
MVector & normal,
|
|
MSpace::Space space = MSpace::kObject ) const;
|
|
///
|
|
MStatus getFaceVertexNormals( int faceIndex, MFloatVectorArray & normals,
|
|
MSpace::Space space = MSpace::kObject ) const;
|
|
///
|
|
MStatus getFaceNormalIds( int faceIndex, MIntArray &normals ) const;
|
|
///
|
|
MStatus setFaceVertexNormal( MVector &normal,
|
|
int faceIndex, int vertexIndex,
|
|
MSpace::Space space = MSpace::kObject,
|
|
MDGModifier *modifier = NULL);
|
|
///
|
|
MStatus setVertexNormal( MVector &normal,
|
|
int vertexIndex,
|
|
MSpace::Space space = MSpace::kObject,
|
|
MDGModifier *modifier = NULL);
|
|
///
|
|
MStatus setFaceVertexNormals( MVectorArray & normalArray,
|
|
MIntArray & faceList, MIntArray & vertexList,
|
|
MSpace::Space space = MSpace::kObject );
|
|
///
|
|
MStatus setVertexNormals( MVectorArray & normalArray,
|
|
MIntArray & vertexList,
|
|
MSpace::Space space = MSpace::kObject );
|
|
///
|
|
MStatus getVertexNormal( int vertexId, MVector & normal,
|
|
MSpace::Space space = MSpace::kObject ) const;
|
|
///
|
|
MStatus getPolygonNormal( int polygonId, MVector & normal,
|
|
MSpace::Space space = MSpace::kObject ) const;
|
|
|
|
|
|
// Methods for getting tangents and binormals
|
|
///
|
|
MStatus getTangents( MFloatVectorArray& normals,
|
|
MSpace::Space space = MSpace::kObject,
|
|
const MString * uvSet = NULL) const;
|
|
///
|
|
MStatus getFaceVertexTangent( int faceIndex, int vertexIndex,
|
|
MVector & normal,
|
|
MSpace::Space space = MSpace::kObject,
|
|
const MString * uvSet = NULL ) const;
|
|
///
|
|
MStatus getFaceVertexTangents( int faceIndex, MFloatVectorArray & normals,
|
|
MSpace::Space space = MSpace::kObject,
|
|
const MString * uvSet = NULL ) const;
|
|
///
|
|
MStatus getBinormals( MFloatVectorArray& normals,
|
|
MSpace::Space space = MSpace::kObject,
|
|
const MString * uvSet = NULL ) const;
|
|
///
|
|
MStatus getFaceVertexBinormal( int faceIndex, int vertexIndex,
|
|
MVector & normal,
|
|
MSpace::Space space = MSpace::kObject,
|
|
const MString * uvSet = NULL) const;
|
|
///
|
|
MStatus getFaceVertexBinormals( int faceIndex, MFloatVectorArray & normals,
|
|
MSpace::Space space = MSpace::kObject,
|
|
const MString * uvSet = NULL) const;
|
|
|
|
|
|
// Edge info methods.
|
|
///
|
|
MStatus getEdgeVertices( int edgeId, int2 & vertexList ) const;
|
|
///
|
|
bool isEdgeSmooth( int edgeId, MStatus * ReturnStatus = NULL ) const;
|
|
///
|
|
MStatus setEdgeSmoothing( int edgeId, bool smooth = true );
|
|
///
|
|
MStatus cleanupEdgeSmoothing();
|
|
|
|
|
|
// UVs operators and methods.
|
|
///
|
|
int numUVSets( MStatus *ReturnStatus = NULL) const;
|
|
///
|
|
MStatus createUVSet(MString &uvSetName,
|
|
MDGModifier *modifier = NULL);
|
|
///
|
|
MStatus copyUVSet(const MString &fromName, MString &toName,
|
|
MDGModifier *modifier = NULL);
|
|
///
|
|
MStatus renameUVSet(const MString &origName,
|
|
const MString &newName,
|
|
MDGModifier *modifier = NULL);
|
|
///
|
|
MStatus deleteUVSet(const MString &setName,
|
|
MDGModifier *modifier = NULL,
|
|
MSelectionList *currentSelection = NULL);
|
|
///
|
|
MStatus setCurrentUVSetName(const MString &setName,
|
|
MDGModifier *modifier = NULL,
|
|
MSelectionList *currentSelection = NULL);
|
|
///
|
|
MStatus getCurrentUVSetName(MString &setName) const;
|
|
///
|
|
MStatus getUVSetNames(MStringArray &setNames) const;
|
|
///
|
|
MStatus getFaceUVSetNames( int polygonId, MStringArray &setNames) const;
|
|
///
|
|
MStatus getAssociatedUVSetTextures(const MString uvSetName,
|
|
MObjectArray & textures) const;
|
|
///
|
|
MStatus setUVs( const MFloatArray& uArray, const MFloatArray& vArray,
|
|
const MString * uvSet = NULL );
|
|
///
|
|
MStatus setSomeUVs( const MIntArray & uvIds, const MFloatArray& uArray,
|
|
const MFloatArray& vArray, const MString * uvSet = NULL );
|
|
///
|
|
MStatus getUVs( MFloatArray& uArray, MFloatArray& vArray,
|
|
const MString * uvSet = NULL ) const;
|
|
///
|
|
MStatus setUV( int uvId, float u, float v,
|
|
const MString * uvSet = NULL );
|
|
///
|
|
MStatus getUV( int uvId, float & u, float & v,
|
|
const MString * uvSet = NULL ) const;
|
|
///
|
|
MStatus getPolygonUV( int polygonId, int vertexIndex,
|
|
float & u, float & v,
|
|
const MString * uvSet = NULL ) const;
|
|
///
|
|
MStatus getPolygonUVid( int polygonId, int vertexIndex,
|
|
int &uvId,
|
|
const MString * uvSet = NULL ) const;
|
|
///
|
|
MStatus assignUV( int polygonId, int vertexIndex, int uvId,
|
|
const MString * uvSet = NULL );
|
|
///
|
|
MStatus assignUVs( const MIntArray& uvCounts, const MIntArray& uvIds,
|
|
const MString * uvSet = NULL );
|
|
///
|
|
MStatus clearUVs( const MString * uvSet = NULL );
|
|
///
|
|
MStatus getAssignedUVs( MIntArray& uvCounts, MIntArray& uvIds,
|
|
const MString * uvSet = NULL ) const;
|
|
|
|
MStatus getUvShellsIds( MIntArray& uvShellIds,
|
|
unsigned int & nbUvShells,
|
|
const MString * uvSet = NULL ) const;
|
|
|
|
// Color Per Vertex Methods
|
|
///
|
|
MStatus setFaceColor(MColor &color, int index);
|
|
///
|
|
MStatus setVertexColor(MColor &color, int index, MDGModifier *modifier = NULL);
|
|
///
|
|
MStatus setFaceVertexColor( MColor &color, int faceIndex,
|
|
int vertexIndex,
|
|
MDGModifier *modifier = NULL);
|
|
///
|
|
MStatus setFaceColors(MColorArray &colors, MIntArray &faceList);
|
|
///
|
|
MStatus setVertexColors(MColorArray &colors, MIntArray &vertexList,
|
|
MDGModifier *modifier = NULL);
|
|
///
|
|
MStatus setFaceVertexColors(MColorArray &colors,
|
|
MIntArray &faceList, MIntArray &vertexList,
|
|
MDGModifier *modifier = NULL);
|
|
///
|
|
MStatus removeFaceColors(MIntArray &faceList);
|
|
///
|
|
MStatus removeVertexColors(MIntArray &vertexList);
|
|
///
|
|
MStatus removeFaceVertexColors( MIntArray &faceList, MIntArray &vertexList);
|
|
///
|
|
MStatus getVertexColors(MColorArray &colors);
|
|
///
|
|
MStatus getFaceVertexColors(MColorArray &colors);
|
|
///
|
|
MStatus getFaceVertexColorIndex(int faceIndex, int localVertexIndex,
|
|
int &colorIndex);
|
|
|
|
|
|
// Polygon Hole Query Method
|
|
///
|
|
int getHoles( MIntArray& holeInfoArray,
|
|
MIntArray& holeVertexArray,
|
|
MStatus * ReturnStatus = NULL );
|
|
|
|
|
|
|
|
// Blind Data Query Methods
|
|
///
|
|
bool isBlindDataTypeUsed( int blindDataId,
|
|
MStatus * ReturnStatus = NULL ) const;
|
|
///
|
|
MStatus createBlindDataType( int blindDataId,
|
|
MStringArray longNames,
|
|
MStringArray shortNames,
|
|
MStringArray formatNames);
|
|
///
|
|
bool hasBlindData( int compID,
|
|
MFn::Type compType,
|
|
int blindDataId,
|
|
MStatus * ReturnStatus = NULL ) const;
|
|
///
|
|
bool hasBlindData( MFn::Type compType,
|
|
int blindDataId,
|
|
MStatus * ReturnStatus = NULL ) const;
|
|
///
|
|
bool hasBlindData( int compID,
|
|
MFn::Type compType,
|
|
MStatus * ReturnStatus = NULL ) const;
|
|
///
|
|
bool hasBlindData( MFn::Type compType,
|
|
MStatus * ReturnStatus = NULL ) const;
|
|
// Get Blind Data Methods.
|
|
///
|
|
MStatus getBlindDataTypes(MFn::Type compType,
|
|
MIntArray& typeArray ) const;
|
|
|
|
/// OBSOLETE
|
|
MStatus getBlindDataAttrNames(int blindDataId,
|
|
MStringArray& longNames,
|
|
MStringArray& shortNames) const;
|
|
|
|
///
|
|
MStatus getBlindDataAttrNames(int blindDataId,
|
|
MStringArray& longNames,
|
|
MStringArray& shortNames,
|
|
MStringArray& typeNames) const;
|
|
|
|
///
|
|
MStatus getIntBlindData( int compID, MFn::Type compType,
|
|
int blindDataId, MString attrName,
|
|
int &data) const;
|
|
///
|
|
MStatus getIntBlindData( MFn::Type compType,
|
|
int blindDataId, MString attrName,
|
|
MIntArray& compIDs, MIntArray& data) const;
|
|
///
|
|
MStatus getFloatBlindData( int compID, MFn::Type compType,
|
|
int blindDataId, MString attrName,
|
|
float &data) const;
|
|
///
|
|
MStatus getFloatBlindData( MFn::Type compType,
|
|
int blindDataId, MString attrName,
|
|
MIntArray& compIDs, MFloatArray& data) const;
|
|
///
|
|
MStatus getDoubleBlindData( int compID, MFn::Type compType,
|
|
int blindDataId, MString attrName,
|
|
double &data) const;
|
|
///
|
|
MStatus getDoubleBlindData( MFn::Type compType,
|
|
int blindDataId, MString attrName,
|
|
MIntArray& compIDs, MDoubleArray& data) const;
|
|
///
|
|
MStatus getBoolBlindData( int compID, MFn::Type compType,
|
|
int blindDataId, MString attrName,
|
|
bool &data) const;
|
|
///
|
|
MStatus getBoolBlindData( MFn::Type compType,
|
|
int blindDataId, MString attrName,
|
|
MIntArray& compIDs, MIntArray& data) const;
|
|
///
|
|
MStatus getStringBlindData( int compID, MFn::Type compType,
|
|
int blindDataId, MString attrName,
|
|
MString &data) const;
|
|
///
|
|
MStatus getStringBlindData( MFn::Type compType,
|
|
int blindDataId, MString attrName,
|
|
MIntArray& compIDs, MStringArray& data) const;
|
|
///
|
|
MStatus getBinaryBlindData( int compID, MFn::Type compType,
|
|
int blindDataId, MString attrName,
|
|
MString &data) const;
|
|
///
|
|
MStatus getBinaryBlindData( MFn::Type compType,
|
|
int blindDataId, MString attrName,
|
|
MIntArray& compIDs, MStringArray& data) const;
|
|
|
|
// Set Blind Data Methods
|
|
///
|
|
MStatus setIntBlindData( int compID, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
int data);
|
|
///
|
|
MStatus setIntBlindData( MIntArray& compIDs, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
int data);
|
|
///
|
|
MStatus setIntBlindData( MIntArray& compIDs, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
MIntArray& data);
|
|
///
|
|
MStatus setFloatBlindData( int compID, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
float data);
|
|
///
|
|
MStatus setFloatBlindData( MIntArray& compIDs, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
float data);
|
|
///
|
|
MStatus setFloatBlindData( MIntArray& compIDs, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
MFloatArray &data);
|
|
///
|
|
MStatus setDoubleBlindData( int compID, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
double data);
|
|
///
|
|
MStatus setDoubleBlindData( MIntArray& compIDs, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
double data);
|
|
///
|
|
MStatus setDoubleBlindData( MIntArray& compIDs, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
MDoubleArray &data);
|
|
///
|
|
MStatus setBoolBlindData( int compID, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
bool data);
|
|
///
|
|
MStatus setBoolBlindData( MIntArray& compIDs, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
bool data);
|
|
///
|
|
MStatus setBoolBlindData( MIntArray& compIDs, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
MIntArray& data);
|
|
///
|
|
MStatus setStringBlindData( int compID, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
MString data);
|
|
///
|
|
MStatus setStringBlindData( MIntArray& compIDs, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
MString data);
|
|
///
|
|
MStatus setStringBlindData( MIntArray& compIDs, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
MStringArray &data);
|
|
///
|
|
MStatus setBinaryBlindData( int compID, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
MString data);
|
|
///
|
|
MStatus setBinaryBlindData( MIntArray& compIDs, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
MString data);
|
|
///
|
|
MStatus setBinaryBlindData( MIntArray& compIDs, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
MStringArray &data);
|
|
///
|
|
MStatus setBinaryBlindData( int compID, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName,
|
|
char *data, int length);
|
|
///
|
|
MStatus clearBlindData(int compID, MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName);
|
|
///
|
|
MStatus clearBlindData(MFn::Type compType,
|
|
int blindDataId,
|
|
MString attrName);
|
|
|
|
///
|
|
MStatus clearBlindData(MFn::Type compType);
|
|
///
|
|
MStatus clearBlindData(int compID,
|
|
MFn::Type compType,
|
|
int blindDataId);
|
|
///
|
|
MStatus clearBlindData(MFn::Type compType,
|
|
int blindDataId);
|
|
|
|
///
|
|
void setCheckSamePointTwice( bool check = true );
|
|
///
|
|
bool getCheckSamePointTwice( void );
|
|
|
|
protected:
|
|
virtual bool objectChanged( MFn::Type tp, MStatus * ReturnStatus );
|
|
bool getUVSetIndex( const MString * uvSetName,
|
|
int & uvSet) const;
|
|
bool getMeshForIntersection( MSpace::Space, MFloatPoint&, MFloatVector&,
|
|
void*&, MStatus* );
|
|
|
|
private:
|
|
// Private members
|
|
void *f_meshRef;
|
|
bool f_checkSamePoint;
|
|
|
|
};
|
|
|
|
// Class to define parameters for accelerated intersection operations.
|
|
// Use MFnMesh::uniformGridParams() or MFnMesh::autoUniformGridParams()
|
|
// to create one of these to pass into the allIntersections(),
|
|
// closestIntersection(), and anyIntersection() methods
|
|
//
|
|
class OPENMAYA_EXPORT MMeshIsectAccelParams
|
|
{
|
|
public:
|
|
MMeshIsectAccelParams();
|
|
|
|
private:
|
|
|
|
int type;
|
|
int xDiv;
|
|
int yDiv;
|
|
int zDiv;
|
|
bool verbose;
|
|
};
|
|
|
|
|
|
#ifdef _WIN32
|
|
#pragma warning(default: 4522)
|
|
#endif // _WIN32
|
|
|
|
// *****************************************************************************
|
|
#endif /* __cplusplus */
|
|
#endif /* _MFnMesh */
|