#include <maya/MFnPlugin.h>
#include <maya/MPxCommand.h>
#include <maya/MGlobal.h>
#include <maya/MSelectionList.h>
#include <maya/MItSelectionList.h>
#include <maya/MObject.h>
#include <maya/MDagPath.h>
#include <maya/MItMeshVertex.h>
#include <maya/MItMeshPolygon.h>
class convertVerticesToContainedFacesCommand :
public MPxCommand
{
public:
convertVerticesToContainedFacesCommand();
~convertVerticesToContainedFacesCommand() override;
static void* creator();
private:
};
convertVerticesToContainedFacesCommand::convertVerticesToContainedFacesCommand()
{
}
convertVerticesToContainedFacesCommand::~convertVerticesToContainedFacesCommand()
{
previousSelectionList.
clear();
}
void* convertVerticesToContainedFacesCommand::creator()
{
return new convertVerticesToContainedFacesCommand;
}
bool convertVerticesToContainedFacesCommand::isUndoable() const
{
return true;
}
{
return redoIt();
}
MStatus convertVerticesToContainedFacesCommand::redoIt()
{
MObject multiVertexComponent, singleVertexComponent;
int dummyIndex;
{
vertexComponentIter.getDagPath(meshDagPath, multiVertexComponent);
if (!multiVertexComponent.
isNull())
{
for (
MItMeshVertex vertexIter(meshDagPath, multiVertexComponent); !vertexIter.
isDone(); vertexIter.next())
{
vertexIter.getConnectedFaces(connectedFacesIndices);
for (
unsigned i=0; i<connectedFacesIndices.
length(); i++)
{
faceIter.setIndex(connectedFacesIndices[i], dummyIndex);
faceIter.getVertices(faceVerticesIndices);
bool faceIsContained=1;
for (
unsigned j=0; j<faceVerticesIndices.
length(); j++)
{
singleVertexList.
clear();
vertexName += ".vtx[";
vertexName += faceVerticesIndices[j];
vertexName += "]";
singleVertexList.
add(vertexName);
singleVertexList.
getDagPath(0, meshDagPath, singleVertexComponent);
if (!previousSelectionList.hasItem(meshDagPath, singleVertexComponent))
{
faceIsContained = 0;
break;
}
}
if (faceIsContained)
{
faceName += ".f[";
faceName += connectedFacesIndices[i];
faceName += "]";
finalFacesSelection.
add(faceName);
}
}
}
}
}
return MS::kSuccess;
}
MStatus convertVerticesToContainedFacesCommand::undoIt()
{
return MS::kSuccess;
}
{
MFnPlugin plugin(obj, PLUGIN_COMPANY,
"4.0",
"Any");
status = plugin.registerCommand("convertVerticesToFaces", convertVerticesToContainedFacesCommand::creator);
if (!status)
{
status.
perror(
"registerCommand");
return status;
}
return status;
}
{
status = plugin.deregisterCommand("convertVerticesToFaces");
if (!status)
{
status.
perror(
"deregisterCommand");
return status;
}
return status;
}