00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "System/stdafx.h"
00026 #include "Translator/Instance/TranslationInstance.h"
00027 #include "Translator/Instance/TranslationInstanceManager.h"
00028 #include "Graphics/SceneNode/SceneNodeManager.h"
00029 #include "Animation/System/AnimationManager.h"
00030 #include "Animation/System/AnimationSet.h"
00031 #include "Animation/System/ObjectAnimation.h"
00032
00033 namespace LampForMaya{
00034
00035
00036
00037 TranslationInstance::TranslationInstance(
00038 const MDagPath& initializePath, const String& initializeName) :
00039 dagPath_(initializePath), name_(initializeName){
00040 MStatus result;
00041
00042 object_ = dagPath_.node(&result);
00043 MayaStatusCheck(result);
00044 }
00045
00046
00047 TranslationInstance::~TranslationInstance(){
00048 }
00049
00050
00051 bool TranslationInstance::analyzeInstance(){
00052 MStatus result;
00053 MFnDagNode dagNode(dagPath_, &result);
00054 MayaStatusCheck(result);
00055
00056 u_int instanceNumber = dagPath_.instanceNumber(&result);
00057 MayaStatusCheck(result);
00058 MObject parent = dagNode.parent(instanceNumber, &result);
00059 MayaStatusCheck(result);
00060 parentSceneNodeName_ = MayaNodeUtility::getName(parent);
00061
00062 visibility_ = MayaAttributeUtility::getBool(object_, "visibility");
00063 return true;
00064 }
00065
00066
00067 bool TranslationInstance::convertSceneNodeAnimation(
00068 AnimationManager* animationManager, AnimationSet* animationSet,
00069 SceneNode* sourceSceneNode, SceneNode* destinationSceneNode){
00070 Animation* source = animationManager->search(sourceSceneNode->getName());
00071 if((source != NULL) && (source->isObjectAnimation())){
00072 ObjectAnimation* destination = source->copy()->castObjectAnimation();
00073 Assert(destination != NULL);
00074 destination->setTargetName(destinationSceneNode->getName());
00075 animationSet->addAnimation(destination);
00076 }
00077
00078 int sceneNodeCount = sourceSceneNode->getSceneNodeCount();
00079 for(int i = 0; i < sceneNodeCount; i++){
00080 convertSceneNodeAnimation(animationManager, animationSet,
00081 sourceSceneNode->getSceneNode(i),
00082 destinationSceneNode->getSceneNode(i));
00083 }
00084
00085 int sceneLeafCount = sourceSceneNode->getSceneLeafCount();
00086 for(int i = 0; i < sceneLeafCount; i++){
00087 convertSceneLeafAnimation(animationManager, animationSet,
00088 sourceSceneNode->getSceneLeaf(i),
00089 destinationSceneNode->getSceneLeaf(i));
00090 }
00091 return true;
00092 }
00093
00094
00095 bool TranslationInstance::convertSceneLeafAnimation(
00096 AnimationManager* animationManager, AnimationSet* animationSet,
00097 SceneLeaf* sourceSceneLeaf, SceneLeaf* destinationSceneLeaf){
00098 Animation* source = animationManager->search(sourceSceneLeaf->getName());
00099 if(source == NULL){ return true; }
00100 if(!source->isObjectAnimation()){ return true; }
00101 ObjectAnimation* destination = source->copy()->castObjectAnimation();
00102 Assert(destination != NULL);
00103 destination->setTargetName(destinationSceneLeaf->getName());
00104 animationSet->addAnimation(destination);
00105 return true;
00106 }
00107
00108 }
00109