This is still a work in progress, it doesnt yet do what I want. currently it only moves vertices in world y, it has no undo, it cant expect optional parameters ... But I thought this might be helpful.
(Note in includes remove the space after <, i put it so could be viewed in html) Before:
After:
Cheers,
Nate
Inspired by Rick Parent (cse dot ohio-state dot edu) accessVertices.cpp
/**@file rotatePolyCmd.cpp @brief v1.0.0 given selected polyShape it rotates all the vertices by 90 degrees @author Nathaniel O. Anozie (ogbonnawork at gmail dot com) @bug all functions no assert checks @note date created: 02/19/2013 @note this has some useful info for @note inspired by Rick Parent (cse dot ohio-state dot edu) accessVertices.cpp */ //note remove < ..> space after < , i put so could be viewed in html #include < maya/MSimple.h> #include < maya/MGlobal.h> //im guessing these are needed almost always //printing stuff, selecting stuff #include < maya/MItSelectionList.h> //need iterating for polygon vertex #include < maya/MFnMesh.h> #include < maya/MPointArray.h> //need finding outliner polys #include < maya/MDagpath.h> //the name used here is the command that will be typed in Maya like PolyEdit; DeclareSimpleCommand( PolyEdit, "Autodesk", "8.0"); /**the names here needs to match that used in DeclareSimpleCommand @note notice no dollar signs, also we @note need to do search manual to figure out the kind of thing that will help us find keyframes @note the ampersand is alot different from MEL cause in MEL @note i think only arrays are passed by reference @note here a boolean type thing can be edited somewhere else and we can see what we got for error checking */ MStatus PolyEdit::doIt( const MArgList& ) { //i'm not sure if this is required in some cases MStatus stat = MS::kSuccess; MSelectionList selList; MGlobal::getActiveSelectionList(selList); //not yet any restrictions MItSelectionList polyIt(selList); //not in MGlobal //get poly meshes only //MFnMesh mesh; //can use this and setObject(dagPath) to print the mesh looking at polyIt.setFilter(MFn::kMesh); MDagPath meshDag; //change poly vertex location for all selected polys for( polyIt.reset(); !polyIt.isDone(); polyIt.next() ) { polyIt.getDagPath(meshDag); //saves how to find this poly from outliner //not using getDependNode because its not a backend node //get vertices of this mesh using a helper for polys MFnMesh fnMesh(meshDag); MPointArray vtxList; fnMesh.getPoints( vtxList, MSpace::kObject );//getPoints and setPoints help to change our poly //move all vertices by 10 units up in y unsigned delta = 10; for( unsigned i = 0; i < vtxList.length(); i++ ) { vtxList[i].cartesianize(); MPoint pnt = vtxList[i]; pnt.y = pnt.y + delta; vtxList[i] = pnt;//i think cartesianize allows 3 places automatically for each element so can do this } fnMesh.setPoints(vtxList); // move our poly vertices }//end poly loop return MS::kSuccess; }
For a macbook this was the making of the .bundle that well use in Maya:
g++ -c rotatePolyCmd.cpp -arch i386 -DMAC_PLUGIN -DOSMac_MachO_ -DBits32_ -m32 -DUNIX -D_BOOL -DOSMac_ -DFUNCPROTO -D_GNU_SOURCE -fPIC -fno-strict-aliasing -DREQUIRE_IOSTREAM -Wno-deprecated -Wall -Wno-multichar -Wno-comment -Wno-sign-compare -funsigned-char -Wno-reorder -fno-gnu-keywords -ftemplate-depth-25 -pthread -Wno-deprecated -fno-gnu-keywords -g -I/Applications/Autodesk/maya2008/devkit/include -o rotatePolyCmd.o
g++ rotatePolyCmd.o -ldl -shared -L/Applications/Maya.app/Contents/MacOS -lOpenMaya -lFoundation -Wl,-executable_path,/Applications/Maya.app/Contents/MacOS -lFoundation -lOpenMaya -framework OpenGL -o rotatePolyCmd.bundle