2016-06-06 16 views
0

Ich versuche, Funktion zu erstellen, die einen MFnMesh Zeiger erhalten und Dinge darauf tun.Erstellen Sie einen Zeiger auf ein MFnMesh

Das Problem ist, dass ich nicht meinen MFnMesh auf einen Zeiger umwandeln kann, denke ich, das Problem ist nicht nur auf dieser Klasse ist aber auf MFnBaseClass weil ich diesen Fehler.

/usr/autodesk/maya2015-x64/include/maya/MFnBase.h:168:14: error: ‘MFnMesh* MFnMesh::operator&() const’ is private 
    MFnClass * operator&() const 
      ^
/usr/autodesk/maya2015-x64/include/maya/MFnDagNode.h:237:2: note: in expansion of macro ‘declareMinimalMFn’ 
    declareMinimalMFn(MFnClass);   \ 
^
/usr/autodesk/maya2015-x64/include/maya/MFnMesh.h:243:2: note: in expansion of macro ‘declareDagMFn’ 
    declareDagMFn(MFnMesh, MFnDagNode); 
^
/home/k.masson/Documents/maya/km_extendedColorSet/src/km_particlesToColorSet.cpp:159:9: error: within this context 
    test(&meshFn); 
     ^

Hier ist die Funktionsprüfung, die in somefile.h und in die Datei, die die Funktion aufrufen ist.

void test(MFnMesh * meshFn){ 
    MStatus status = MS::kSuccess; 
    MString csName("YOLOSWAQDAZD"); 
    status = meshFn->createColorSetDataMesh(csName); 
    MCheckStatus(status,"Error creating new color set"); 
} 

Und hier ist das, was ich vor der test Funktion aufrufen.

// Get the out mesh data 
     MDataHandle outMeshHandle = data.outputValue(aOutGeometry, &status); 
     MCheckStatus(status,"ERROR getting aOutGeometry"); 

     // Copy the in mesh to the output 
     outMeshHandle.copy(inMeshData); 

     // Create a function set for the out mesh 
     MFnMesh meshFn(outMeshHandle.asMesh()); 
     test(&meshFn); 

Ich habe jede mögliche Weise nicht gefunden zu meinem konvertieren MFnMesh auf einen Zeiger so versuchte ich es direkt als Objekt zu rufen und nicht einen Zeiger wie diese.

test(meshFn); 

void test(MFnMesh meshFn){ 
    MStatus status = MS::kSuccess; 
    MString csName("YOLOSWAQDAZD"); 
    status = meshFn.createColorSetDataMesh(csName); 
    MCheckStatus(status,"Error creating new color set"); 
} 

Und ich bekomme diese:

/usr/autodesk/maya2015-x64/include/maya/MFnMesh.h:243:16: error: ‘MFnMesh::MFnMesh(const MFnMesh&)’ is private 
    declareDagMFn(MFnMesh, MFnDagNode); 
       ^
/usr/autodesk/maya2015-x64/include/maya/MFnBase.h:166:9: note: in definition of macro ‘declareMinimalMFn’ 
     MFnClass(const MFnClass &rhs);       \ 
     ^
/usr/autodesk/maya2015-x64/include/maya/MFnMesh.h:243:2: note: in expansion of macro ‘declareDagMFn’ 
    declareDagMFn(MFnMesh, MFnDagNode); 
^
/home/k.masson/Documents/maya/km_extendedColorSet/src/km_particlesToColorSet.cpp:159:14: error: within this context 
    test(meshFn); 
      ^
In file included from /home/k.masson/Documents/maya/km_extendedColorSet/src/km_particlesToColorSet.cpp:29:0: 
/home/k.masson/Documents/maya/km_extendedColorSet/src/kmColorSetTool.h:29:6: error: initializing argument 1 of ‘void test(MFnMesh)’ 
void test(MFnMesh meshFn){ 

So wissen Sie, wenn es trotzdem zu ist eine Funktion erstellen, die in einer Art und Weise Art und Weise auf einer MFnBase Klasse wirkt oder sogar eine Klasse mit einem MFnBase Attribut? Ich weiß nicht, wir können nicht diese Art von Prozess, der wirklich aktuell ist.

Ich bin neu in C++ so kann es möglich sein, dass ich einen dummen Fehler gemacht habe.

+0

Ok Ich habe eine Lösung gefunden, aber ich weiß nicht, was das bedeutet, ich habe mich geändert die Signatur zu 'MFnMesh & Mesh' und es funktioniert –

Antwort

0

Die MFnBaseClass erlaubt nicht die Umwandlung zu einem Zeiger zu verwenden, stattdessen verwenden Sie eine Referenz, die fast das gleiche funktioniert. Weitere Informationen finden Sie unter References vs. Pointers.

Die korrekte Signatur für meine Funktion ist

void test(MFnMesh& meshFn) 

Und so, wie es

test(meshFn); 

zu bedienen ist und die Referenz in der Funktion zu nutzen, es nur als reguläres Objekt verwenden

void test(MFnMesh& meshFn){ 
    MStatus status = MS::kSuccess; 
    MString csName("YOLOSWAQDAZD"); 
    status = meshFn.createColorSetDataMesh(csName); 
    MCheckStatus(status,"Error creating new color set"); 
}