void SMDImporter::RecurseCreateNull ( XSI::X3DObject in_pParent, SMDNode* in_pNode ) { LPWSTR l_wszModelName; DSA2W(&l_wszModelName,FixName ( in_pNode->m_szName ) ); XSI::Null myNull = DoesObjectExist ( in_pParent, XSI::CString(l_wszModelName) ); if ( !myNull.IsValid() ) { in_pParent.AddNull ( l_wszModelName, myNull ); } in_pNode->m_x3d = myNull; XSI::KinematicState l_lLocal = myNull.GetKinematics().GetLocal(); XSI::MATH::CTransformation xfo; if ( in_pNode->m_pKeys.GetUsed() ) { SMDKey* l_pKey = in_pNode->GetKey (0); xfo = l_lLocal.GetTransform(); xfo.SetRotationFromXYZAnglesValues ( l_pKey->m_vRotation.GetX(), l_pKey->m_vRotation.GetY(), l_pKey->m_vRotation.GetZ() ); xfo.SetTranslationFromValues ( l_pKey->m_vPosition.GetX(), l_pKey->m_vPosition.GetY(), l_pKey->m_vPosition.GetZ() ); } if ( in_pNode->m_pParent ==NULL ) { XSI::MATH::CTransformation xfo2; xfo2.SetRotationFromXYZAnglesValues ( -1.570796, 0.0, 0.0 ); xfo.MulInPlace(xfo2); } l_lLocal.PutTransform ( xfo ); for (int c=0;c<in_pNode->m_pChildren.GetUsed();c++) { RecurseCreateNull ( myNull, in_pNode->GetChild(c)); } }