Maya C++ API Programming Tips
How to get the value of the attribute at the specified time
int frame = 101;
MPlug plg( thisMObject(), "abc" );
MDGContext ctx( MTime( frame, MTime.uiUnit() ) );
double value = 0.0;
plg.getValue( value, ctx );MDataBlock block = forceCache();const double dt = AnimControl::playbackBy();class MyNode{
private:
MCallbackId timeChangeCallbackId;
public:
void addedToModelCB();
void removedFromModelCB();
void update();
...
};
MyNode::MyNode{
...
timeChangeCallbackId = 0;
...
}
static void TimeChangeCallback( MTime& time, void* clientData ){
reinterpret_cast<ZShape*>(clientData)->update();
}
static void NodeAddedToModel( MObject& nodeObj, void* clientData ){
MFnDependencyNode nodeFn( nodeObj );
MyNode* nodePtr = (MyNode*)nodeFn.userNode();
if( !nodePtr ) { return; }
nodePtr->addedToModelCB();
}
static void NodeRemovedFromModel( MObject& nodeObj, void* clientData ){
MFnDependencyNode nodeFn( nodeObj );
MyNode* nodePtr = (MyNode*)nodeFn.userNode();
if( !nodePtr ) { return; }
nodePtr->removedFromModelCB();
}
void MyNode::postConstructor(){
MModelMessage::addNodeAddedToModelCallback( thisMObject(), NodeAddedToModel );
MModelMessage::addNodeRemovedFromModelCallback( thisMObject(), NodeRemovedFromModel );
}
void MyNode::addedToModelCB(){
timeChangeCallbackId = MDGMessage::addTimeChangeCallback( TimeChangeCallback, this );
}
void MyNode::removedFromModelCB(){
if( timeChangeCallbackId ){
MDGMessage::removeCallback( timeChangeCallbackId );
timeChangeCallbackId = 0;
}
}Last updated