Я новичок в Maya API/C ++ в целом, и я пытаюсь написать простой плагин. У меня есть соответствующий код, наклеженный ниже, но я также прикрепил ссылку Dropbox к .zip, если вы предпочитаете загрузить его в качестве пакета.
https://dl.dropboxusercontent.com/u/403 ... Node03.zip
This code in particular is sampled from a .pdf I got off Autodesk Developer Network although I have tried other methods, including ones provided in "Complete Maya Programming" (David Gould). Файлы компилируются без ошибок, и поэтому я полагаю, что я ошибался где -то в своем методе. В любом случае, в код. < /P>
Синопсис файла: < /p>
[*] Считайте матрицу ввод как mtransformationmatrix < /li>
Инвертировать матрицу (используется позже для сравнения) < /li>
Vector
[*] Получите перевод инвертированной матрицы как, опять же, другой вектор
[*] Назначить каждый x, y, z -компонент двух векторов как индивидуальные удвоения, чтобы я мог получить tx, ty, tz для обоих исходных матриц и ее обратного
witchtrit />
-end-< /p>
.#include
#include
#include
#include
#include
#include
#include
#include
#include
class matrixInverseNode : public MPxNode
{
public:
matrixInverseNode();
virtual ~matrixInverseNode();
static void* creator();
virtual MStatus compute( const MPlug &plug, MDataBlock& data);
static MStatus initialize();
static MTypeId id;
//input
static MObject aInMatrix;
//output
static MObject aOutInvMatrix;
static MObject aOutTrans;
static MObject aOutTransX;
static MObject aOutTransY;
static MObject aOutTransZ;
static MObject aOutInvTrans;
static MObject aOutInvTransX;
static MObject aOutInvTransY;
static MObject aOutInvTransZ;
};
< /code>
и .cpp < /p>
#include "inverseMatrixNode.h"
MTypeId matrixInverseNode::id( 0x00000233 );
MObject matrixInverseNode::aInMatrix;
MObject matrixInverseNode::aOutTrans;
MObject matrixInverseNode::aOutTransX;
MObject matrixInverseNode::aOutTransY;
MObject matrixInverseNode::aOutTransZ;
MObject matrixInverseNode::aOutInvTrans;
MObject matrixInverseNode::aOutInvTransX;
MObject matrixInverseNode::aOutInvTransY;
MObject matrixInverseNode::aOutInvTransZ;
matrixInverseNode::matrixInverseNode()
{
}
matrixInverseNode::~matrixInverseNode()
{
}
MStatus matrixInverseNode::compute( const MPlug& plug, MDataBlock& data )
{
MStatus status;
//create matrix handle
MTransformationMatrix inMatrix = data.inputValue( aInMatrix, &status ).asMatrix();
CHECK_MSTATUS_AND_RETURN_IT( status );
// Get Translate as vector then assign vector components to individual values
MVector transInMatrix = inMatrix.getTranslation( MSpace::kWorld );
double transInMatrixX = transInMatrix.x;
double transInMatrixY = transInMatrix.y;
double transInMatrixZ = transInMatrix.z;
// And again for the inverseMatrix
MTransformationMatrix invInMatrix = inMatrix.asMatrixInverse();
MVector transInvInMatrix = invInMatrix.getTranslation( MSpace::kWorld );
double transInvInMatrixX = transInvInMatrix.x;
double transInvInMatrixY = transInvInMatrix.y;
double transInvInMatrixZ = transInvInMatrix.z;
//create handles for outTrans and its inverse
MDataHandle hOutTransX = data.outputValue( aOutTransX, &status );
CHECK_MSTATUS_AND_RETURN_IT( status );
MDataHandle hOutTransY = data.outputValue( aOutTransY, &status );
CHECK_MSTATUS_AND_RETURN_IT( status );
MDataHandle hOutTransZ = data.outputValue( aOutTransZ, &status );
CHECK_MSTATUS_AND_RETURN_IT( status );
MDataHandle hOutInvTransX = data.outputValue( aOutInvTransX, &status );
CHECK_MSTATUS_AND_RETURN_IT( status );
MDataHandle hOutInvTransY = data.outputValue( aOutInvTransY, &status );
CHECK_MSTATUS_AND_RETURN_IT( status );
MDataHandle hOutInvTransZ = data.outputValue( aOutInvTransZ, &status );
CHECK_MSTATUS_AND_RETURN_IT( status );
// set value to handle and then set clean
hOutTransX.set( transInMatrixX );
hOutTransX.setClean();
hOutTransY.set( transInMatrixY );
hOutTransY.setClean();
hOutTransZ.set( transInMatrixZ );
hOutTransZ.setClean();
hOutInvTransX.set( transInvInMatrixX );
hOutInvTransX.setClean();
hOutInvTransY.set( transInvInMatrixY );
hOutInvTransY.setClean();
hOutInvTransZ.set( transInvInMatrixZ );
hOutInvTransZ.setClean();
return MS::kSuccess;
}
void* matrixInverseNode::creator()
{
return new matrixInverseNode();
}
MStatus matrixInverseNode::initialize()
{
MStatus status;
MFnNumericAttribute nAttr;
aOutTransX = nAttr.create( "outTranslateX", "oTx", MFnNumericData::kFloat, 0.0 );
nAttr.setKeyable( false );
nAttr.setStorable( false );
nAttr.setReadable( true );
nAttr.setWritable( false );
nAttr.setCached( false );
addAttribute( aOutTransX );
aOutTransY = nAttr.create( "outTranslateY", "oTy", MFnNumericData::kFloat, 0.0 );
nAttr.setKeyable( false );
nAttr.setStorable( false );
nAttr.setReadable( true );
nAttr.setWritable( false );
nAttr.setCached( false );
addAttribute( aOutTransY );
aOutTransZ = nAttr.create( "outTranslateZ", "oTz", MFnNumericData::kFloat, 0.0 );
nAttr.setKeyable( false );
nAttr.setStorable( false );
nAttr.setReadable( true );
nAttr.setWritable( false );
nAttr.setCached( false );
addAttribute( aOutTransZ );
aOutTrans = nAttr.create( "outTranslate", "oT", aOutTransX, aOutTransY, aOutTransZ );
nAttr.setKeyable( false );
nAttr.setStorable( false );
nAttr.setReadable( true );
nAttr.setWritable( false );
nAttr.setCached( false );
addAttribute( aOutTrans );
aOutInvTransX = nAttr.create( "outInverseTranslateX", "oITx", MFnNumericData::kFloat, 0.0 );
nAttr.setKeyable( false );
nAttr.setStorable( false );
nAttr.setReadable( true );
nAttr.setWritable( false );
nAttr.setCached( false );
addAttribute( aOutInvTransX );
aOutInvTransY = nAttr.create( "outInverseTranslateY", "oITy", MFnNumericData::kFloat, 0.0 );
nAttr.setKeyable( false );
nAttr.setStorable( false );
nAttr.setReadable( true );
nAttr.setWritable( false );
nAttr.setCached( false );
addAttribute( aOutInvTransY );
aOutInvTransZ = nAttr.create( "outInverseTranslateZ", "oITz", MFnNumericData::kFloat, 0.0 );
nAttr.setKeyable( false );
nAttr.setStorable( false );
nAttr.setReadable( true );
nAttr.setWritable( false );
nAttr.setCached( false );
addAttribute( aOutInvTransZ );
aOutInvTrans = nAttr.create( "outInverseTranslate", "oIT", aOutInvTransX, aOutInvTransY, aOutInvTransZ );
nAttr.setKeyable( false );
nAttr.setStorable( false );
nAttr.setReadable( true );
nAttr.setWritable( false );
nAttr.setCached( false );
addAttribute( aOutInvTrans );
MFnMatrixAttribute mAttr;
aInMatrix = mAttr.create( "inMatrix", "inM", MFnMatrixAttribute::kDouble );
mAttr.setStorable( true );
mAttr.setKeyable( false );
mAttr.setReadable( true );
mAttr.setWritable( true );
mAttr.setCached( false );
addAttribute( aInMatrix );
attributeAffects( aInMatrix, aOutTransX );
attributeAffects( aInMatrix, aOutTransY );
attributeAffects( aInMatrix, aOutTransZ );
attributeAffects( aInMatrix, aOutTrans );
attributeAffects( aInMatrix, aOutInvTransX );
attributeAffects( aInMatrix, aOutInvTransY );
attributeAffects( aInMatrix, aOutInvTransZ );
attributeAffects( aInMatrix, aOutInvTrans );
return MS::kSuccess;
}
MStatus initializePlugin( MObject obj )
{
MStatus status;
MFnPlugin fnPlugin( obj, "Colin Kennedy", "1.0", "Any" );
status = fnPlugin.registerNode( "matrixInverse",
matrixInverseNode::id,
matrixInverseNode::creator,
matrixInverseNode::initialize );
CHECK_MSTATUS_AND_RETURN_IT( status );
return MS::kSuccess;
}
MStatus uninitializePlugin( MObject obj )
{
MStatus status;
MFnPlugin fnPlugin( obj );
status = fnPlugin.deregisterNode( matrixInverseNode::id );
CHECK_MSTATUS_AND_RETURN_IT( status );
return MS::kSuccess;
}
< /code>
Несмотря на это просто, я не получу результатов, когда плагин загружен внутри Maya. Мои файлы компилируются без предупреждения/ошибки, но когда я на самом деле пытаюсь взять. Проект производится с использованием мастера плагинов Maya в VS2010. Узел назван матриксинверно, чтобы не противоречить нативному узлу Inversematrix в Maya. О, также, если в моем коде есть какие -то вопиющие, нубильские ошибки, я бы тоже хотел узнать об этом. Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/235 ... -translate
Maya API [C ++] - WorldMatrix для перевода ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение