удаление объектов из MObjectArray в отмене - PullRequest
0 голосов
/ 07 сентября 2018

В соответствии с приведенным ниже кодом, сначала я пытаюсь добавить объекты в MObjectArray, который я хотите удалить в функции отмены.

Undo, Redo работает нормально. Но Undo удаляет только первый элемент массива / объекта не все из них. Хотелось бы знать, что происходит не так и как лучше всего удалять объекты в функции отмены.

.h

#include <maya/MPxCommand.h>
#include <maya/MArgList.h>
#include <maya/MObject.h>
#include <maya/MGlobal.h>
#include <maya/MSelectionList.h>
#include <maya/MDagPath.h>
#include <maya/MFnMesh.h>
#include <maya/MPointArray.h>
#include <maya/MIntArray.h>
#include <maya/MItSelectionList.h>
#include <maya/MItMeshEdge.h>
#include <maya/MDagModifier.h>



class deleteObj : public MPxCommand
{
public:
    deleteObj() {};
    virtual MStatus doIt(const MArgList& argList);
    static void* creator();
    virtual MStatus redoIt();
    virtual MStatus undoIt();
    MObjectArray objectTransforms;
    virtual bool isUndoable() const { return true; }
};

.cpp

#include <maya\MFnPlugin.h>
#include "undoredo.h"


MStatus deleteObj::doIt(const MArgList & argList)
{   
    return redoIt();
}

MStatus deleteObj::redoIt()
{
    for (int j = 0; j < 3; j++)
    {
        MString cmd("maya.cmds.polyCube()");
        MGlobal::executePythonCommand(cmd);
        MSelectionList selection;
        MGlobal::getActiveSelectionList(selection);
        MObject selObj;
        selection.getDependNode(j, selObj);
        objectTransforms.append(selObj);

    }   

    return MS::kSuccess;
}

MStatus deleteObj::undoIt()
{


    for (unsigned int i = 0; i <objectTransforms.length(); i++)
    {

        MGlobal::deleteNode(objectTransforms[i]);
    }

    return MS::kSuccess;
}



void * deleteObj::creator()
{
    return new deleteObj;
}




MStatus initializePlugin(MObject obj)
{
    MFnPlugin plugin(obj, "Atri Dave", "1.0", "Any");
    MStatus status = plugin.registerCommand("deleteObj", deleteObj::creator);
    CHECK_MSTATUS_AND_RETURN_IT(status);
    return status;
}

MStatus uninitializePlugin(MObject obj)
{
    MFnPlugin plugin(obj);
    MStatus status = plugin.deregisterCommand("deleteObj");
    CHECK_MSTATUS_AND_RETURN_IT(status);
    return status;
}
...