Maya API [C ++] - WorldMatrix для переводаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Maya API [C ++] - WorldMatrix для перевода

Сообщение Anonymous »

Я новичок в 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Maya 2025 - окно Pyside6 с CloseEvent () сбой Maya
    Anonymous » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Maya 2025 - окно Pyside6 с CloseEvent () сбой Maya
    Anonymous » » в форуме Python
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Какие API платежных шлюзов доступны для GCash или Maya, которые принимают минимум 15 песо? [закрыто]
    Anonymous » » в форуме Android
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Какие API платежных шлюзов доступны для GCash или Maya, которые принимают минимум 15 песо? [закрыто]
    Anonymous » » в форуме Android
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Сделайте пользовательские mpxmanipulatornodes выбираемые с API Maya C ++
    Anonymous » » в форуме C++
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»