Show
Ignore:
Timestamp:
07/24/14 16:14:35 (2 days ago)
Author:
robert
Message:

Added support for changing background colour of LineEdit? widget when focus changes

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgPlugins/fbx/fbxRNode.cpp

    r12583 r13466  
    3030#include "fbxReader.h" 
    3131 
    32 bool isAnimated(KFbxProperty& prop, KFbxScene& fbxScene) 
    33 { 
    34     for (int i = 0; i < fbxScene.GetSrcObjectCount(FBX_TYPE(KFbxAnimStack)); ++i) 
    35     { 
    36         KFbxAnimStack* pAnimStack = KFbxCast<KFbxAnimStack>(fbxScene.GetSrcObject(FBX_TYPE(KFbxAnimStack), i)); 
    37  
    38         const int nbAnimLayers = pAnimStack->GetMemberCount(FBX_TYPE(KFbxAnimLayer)); 
     32bool isAnimated(FbxProperty& prop, FbxScene& fbxScene) 
     33{ 
     34    for (int i = 0; i < fbxScene.GetSrcObjectCount<FbxAnimStack>(); ++i) 
     35    { 
     36        FbxAnimStack* pAnimStack = FbxCast<FbxAnimStack>(fbxScene.GetSrcObject<FbxAnimStack>(i)); 
     37 
     38        const int nbAnimLayers = pAnimStack->GetMemberCount<FbxAnimLayer>(); 
    3939        for (int j = 0; j < nbAnimLayers; j++) 
    4040        { 
    41             KFbxAnimLayer* pAnimLayer = pAnimStack->GetMember(FBX_TYPE(KFbxAnimLayer), j); 
     41            FbxAnimLayer* pAnimLayer = pAnimStack->GetMember<FbxAnimLayer>(j); 
    4242            if (prop.GetCurveNode(pAnimLayer, false)) 
    4343            { 
     
    4949} 
    5050 
    51 bool isAnimated(KFbxProperty& prop, const char* channel, KFbxScene& fbxScene) 
    52 { 
    53     for (int i = 0; i < fbxScene.GetSrcObjectCount(FBX_TYPE(KFbxAnimStack)); ++i) 
    54     { 
    55         KFbxAnimStack* pAnimStack = KFbxCast<KFbxAnimStack>(fbxScene.GetSrcObject(FBX_TYPE(KFbxAnimStack), i)); 
    56  
    57         const int nbAnimLayers = pAnimStack->GetMemberCount(FBX_TYPE(KFbxAnimLayer)); 
     51bool isAnimated(FbxProperty& prop, const char* channel, FbxScene& fbxScene) 
     52{ 
     53    for (int i = 0; i < fbxScene.GetSrcObjectCount<FbxAnimStack>(); ++i) 
     54    { 
     55        FbxAnimStack* pAnimStack = FbxCast<FbxAnimStack>(fbxScene.GetSrcObject<FbxAnimStack>(i)); 
     56 
     57        const int nbAnimLayers = pAnimStack->GetMemberCount<FbxAnimLayer>(); 
    5858        for (int j = 0; j < nbAnimLayers; j++) 
    5959        { 
    60             KFbxAnimLayer* pAnimLayer = pAnimStack->GetMember(FBX_TYPE(KFbxAnimLayer), j); 
    61             if (prop.GetCurve<KFbxAnimCurve>(pAnimLayer, channel, false)) 
     60            FbxAnimLayer* pAnimLayer = pAnimStack->GetMember<FbxAnimLayer>(j); 
     61            if (prop.GetCurve(pAnimLayer, channel, false)) 
    6262            { 
    6363                return true; 
     
    6868} 
    6969 
    70 osg::Quat makeQuat(const fbxDouble3& degrees, ERotationOrder fbxRotOrder) 
     70osg::Quat makeQuat(const FbxDouble3& degrees, EFbxRotationOrder fbxRotOrder) 
    7171{ 
    7272    double radiansX = osg::DegreesToRadians(degrees[0]); 
     
    7676    switch (fbxRotOrder) 
    7777    { 
    78     case eEULER_XYZ: 
     78    case eEulerXYZ: 
    7979        return osg::Quat( 
    8080            radiansX, osg::Vec3d(1,0,0), 
    8181            radiansY, osg::Vec3d(0,1,0), 
    8282            radiansZ, osg::Vec3d(0,0,1)); 
    83     case eEULER_XZY: 
     83    case eEulerXZY: 
    8484        return osg::Quat( 
    8585            radiansX, osg::Vec3d(1,0,0), 
    8686            radiansZ, osg::Vec3d(0,0,1), 
    8787            radiansY, osg::Vec3d(0,1,0)); 
    88     case eEULER_YZX: 
     88    case eEulerYZX: 
    8989        return osg::Quat( 
    9090            radiansY, osg::Vec3d(0,1,0), 
    9191            radiansZ, osg::Vec3d(0,0,1), 
    9292            radiansX, osg::Vec3d(1,0,0)); 
    93     case eEULER_YXZ: 
     93    case eEulerYXZ: 
    9494        return osg::Quat( 
    9595            radiansY, osg::Vec3d(0,1,0), 
    9696            radiansX, osg::Vec3d(1,0,0), 
    9797            radiansZ, osg::Vec3d(0,0,1)); 
    98     case eEULER_ZXY: 
     98    case eEulerZXY: 
    9999        return osg::Quat( 
    100100            radiansZ, osg::Vec3d(0,0,1), 
    101101            radiansX, osg::Vec3d(1,0,0), 
    102102            radiansY, osg::Vec3d(0,1,0)); 
    103     case eEULER_ZYX: 
     103    case eEulerZYX: 
    104104        return osg::Quat( 
    105105            radiansZ, osg::Vec3d(0,0,1), 
    106106            radiansY, osg::Vec3d(0,1,0), 
    107107            radiansX, osg::Vec3d(1,0,0)); 
    108     case eSPHERIC_XYZ: 
     108    case eSphericXYZ: 
    109109        { 
    110110            //I don't know what eSPHERIC_XYZ means, so this is a complete guess. 
     
    119119} 
    120120 
    121 void makeLocalMatrix(const KFbxNode* pNode, osg::Matrix& m) 
     121void makeLocalMatrix(const FbxNode* pNode, osg::Matrix& m) 
    122122{ 
    123123    /*From http://area.autodesk.com/forum/autodesk-fbx/fbx-sdk/the-makeup-of-the-local-matrix-of-an-kfbxnode/ 
     
    144144    bool rotationActive = pNode->RotationActive.Get(); 
    145145 
    146     ERotationOrder fbxRotOrder = rotationActive ? pNode->RotationOrder.Get() : eEULER_XYZ; 
    147  
    148     fbxDouble3 fbxLclPos = pNode->LclTranslation.Get(); 
    149     fbxDouble3 fbxRotOff = pNode->RotationOffset.Get(); 
    150     fbxDouble3 fbxRotPiv = pNode->RotationPivot.Get(); 
    151     fbxDouble3 fbxPreRot = pNode->PreRotation.Get(); 
    152     fbxDouble3 fbxLclRot = pNode->LclRotation.Get(); 
    153     fbxDouble3 fbxPostRot = pNode->PostRotation.Get(); 
    154     fbxDouble3 fbxSclOff = pNode->ScalingOffset.Get(); 
    155     fbxDouble3 fbxSclPiv = pNode->ScalingPivot.Get(); 
    156     fbxDouble3 fbxLclScl = pNode->LclScaling.Get(); 
     146    EFbxRotationOrder fbxRotOrder = rotationActive ? pNode->RotationOrder.Get() : eEulerXYZ; 
     147 
     148    FbxDouble3 fbxLclPos = pNode->LclTranslation.Get(); 
     149    FbxDouble3 fbxRotOff = pNode->RotationOffset.Get(); 
     150    FbxDouble3 fbxRotPiv = pNode->RotationPivot.Get(); 
     151    FbxDouble3 fbxPreRot = pNode->PreRotation.Get(); 
     152    FbxDouble3 fbxLclRot = pNode->LclRotation.Get(); 
     153    FbxDouble3 fbxPostRot = pNode->PostRotation.Get(); 
     154    FbxDouble3 fbxSclOff = pNode->ScalingOffset.Get(); 
     155    FbxDouble3 fbxSclPiv = pNode->ScalingPivot.Get(); 
     156    FbxDouble3 fbxLclScl = pNode->LclScaling.Get(); 
    157157 
    158158    m.makeTranslate(osg::Vec3d( 
     
    182182} 
    183183 
    184 void readTranslationElement(KFbxTypedProperty<fbxDouble3>& prop, 
     184void readTranslationElement(FbxPropertyT<FbxDouble3>& prop, 
    185185                            osgAnimation::UpdateMatrixTransform* pUpdate, 
    186186                            osg::Matrix& staticTransform, 
    187                             KFbxScene& fbxScene) 
    188 { 
    189     fbxDouble3 fbxPropValue = prop.Get(); 
     187                            FbxScene& fbxScene) 
     188{ 
     189    FbxDouble3 fbxPropValue = prop.Get(); 
    190190    osg::Vec3d val( 
    191191        fbxPropValue[0], 
     
    208208} 
    209209 
    210 void getRotationOrder(ERotationOrder fbxRotOrder, int order[/*3*/]) 
     210void getRotationOrder(EFbxRotationOrder fbxRotOrder, int order[/*3*/]) 
    211211{ 
    212212    switch (fbxRotOrder) 
    213213    { 
    214     case eEULER_XZY: 
     214    case eEulerXZY: 
    215215        order[0] = 0; order[1] = 2; order[2] = 1; 
    216216        break; 
    217     case eEULER_YZX: 
     217    case eEulerYZX: 
    218218        order[0] = 1; order[1] = 2; order[2] = 0; 
    219219        break; 
    220     case eEULER_YXZ: 
     220    case eEulerYXZ: 
    221221        order[0] = 1; order[1] = 0; order[2] = 2; 
    222222        break; 
    223     case eEULER_ZXY: 
     223    case eEulerZXY: 
    224224        order[0] = 2; order[1] = 0; order[2] = 1; 
    225225        break; 
    226     case eEULER_ZYX: 
     226    case eEulerZYX: 
    227227        order[0] = 2; order[1] = 1; order[2] = 0; 
    228228        break; 
     
    232232} 
    233233 
    234 void readRotationElement(KFbxTypedProperty<fbxDouble3>& prop, 
    235                          ERotationOrder fbxRotOrder, 
     234void readRotationElement(FbxPropertyT<FbxDouble3>& prop, 
     235                         EFbxRotationOrder fbxRotOrder, 
    236236                         bool quatInterpolate, 
    237237                         osgAnimation::UpdateMatrixTransform* pUpdate, 
    238238                         osg::Matrix& staticTransform, 
    239                          KFbxScene& fbxScene) 
     239                         FbxScene& fbxScene) 
    240240{ 
    241241    if (isAnimated(prop, fbxScene)) 
     
    254254        else 
    255255        { 
    256             const char* curveNames[3] = {KFCURVENODE_R_X, KFCURVENODE_R_Y, KFCURVENODE_R_Z}; 
     256            const char* curveNames[3] = {FBXSDK_CURVENODE_COMPONENT_X, FBXSDK_CURVENODE_COMPONENT_Y, FBXSDK_CURVENODE_COMPONENT_Z}; 
    257257            osg::Vec3 axes[3] = {osg::Vec3(1,0,0), osg::Vec3(0,1,0), osg::Vec3(0,0,1)}; 
    258258 
    259             fbxDouble3 fbxPropValue = prop.Get(); 
     259            FbxDouble3 fbxPropValue = prop.Get(); 
    260260            fbxPropValue[0] = osg::DegreesToRadians(fbxPropValue[0]); 
    261261            fbxPropValue[1] = osg::DegreesToRadians(fbxPropValue[1]); 
     
    292292} 
    293293 
    294 void readScaleElement(KFbxTypedProperty<fbxDouble3>& prop, 
     294void readScaleElement(FbxPropertyT<FbxDouble3>& prop, 
    295295                      osgAnimation::UpdateMatrixTransform* pUpdate, 
    296296                      osg::Matrix& staticTransform, 
    297                       KFbxScene& fbxScene) 
    298 { 
    299     fbxDouble3 fbxPropValue = prop.Get(); 
     297                      FbxScene& fbxScene) 
     298{ 
     299    FbxDouble3 fbxPropValue = prop.Get(); 
    300300    osg::Vec3d val( 
    301301        fbxPropValue[0], 
     
    318318} 
    319319 
    320 void readUpdateMatrixTransform(osgAnimation::UpdateMatrixTransform* pUpdate, KFbxNode* pNode, KFbxScene& fbxScene) 
     320void readUpdateMatrixTransform(osgAnimation::UpdateMatrixTransform* pUpdate, FbxNode* pNode, FbxScene& fbxScene) 
    321321{ 
    322322    osg::Matrix staticTransform; 
     
    324324    readTranslationElement(pNode->LclTranslation, pUpdate, staticTransform, fbxScene); 
    325325 
    326     fbxDouble3 fbxRotOffset = pNode->RotationOffset.Get(); 
    327     fbxDouble3 fbxRotPiv = pNode->RotationPivot.Get(); 
     326    FbxDouble3 fbxRotOffset = pNode->RotationOffset.Get(); 
     327    FbxDouble3 fbxRotPiv = pNode->RotationPivot.Get(); 
    328328    staticTransform.preMultTranslate(osg::Vec3d( 
    329329        fbxRotPiv[0] + fbxRotOffset[0], 
     
    335335    bool rotationActive = pNode->RotationActive.Get(); 
    336336 
    337     ERotationOrder fbxRotOrder = (rotationActive && pNode->RotationOrder.IsValid()) ? 
    338         pNode->RotationOrder.Get() : eEULER_XYZ; 
     337    EFbxRotationOrder fbxRotOrder = (rotationActive && pNode->RotationOrder.IsValid()) ? 
     338        pNode->RotationOrder.Get() : eEulerXYZ; 
    339339 
    340340    if (rotationActive) 
     
    352352    } 
    353353 
    354     fbxDouble3 fbxSclOffset = pNode->ScalingOffset.Get(); 
    355     fbxDouble3 fbxSclPiv = pNode->ScalingPivot.Get(); 
     354    FbxDouble3 fbxSclOffset = pNode->ScalingOffset.Get(); 
     355    FbxDouble3 fbxSclPiv = pNode->ScalingPivot.Get(); 
    356356    staticTransform.preMultTranslate(osg::Vec3d( 
    357357        fbxSclOffset[0] + fbxSclPiv[0] - fbxRotPiv[0], 
     
    372372} 
    373373 
    374 osg::Group* createGroupNode(KFbxSdkManager& pSdkManager, KFbxNode* pNode, 
     374osg::Group* createGroupNode(FbxManager& pSdkManager, FbxNode* pNode, 
    375375    const std::string& animName, const osg::Matrix& localMatrix, bool bNeedSkeleton, 
    376     std::map<KFbxNode*, osg::Node*>& nodeMap, KFbxScene& fbxScene) 
     376    std::map<FbxNode*, osg::Node*>& nodeMap, FbxScene& fbxScene) 
    377377{ 
    378378    if (bNeedSkeleton) 
     
    385385        osgBone->setUpdateCallback(pUpdate); 
    386386 
    387         nodeMap.insert(std::pair<KFbxNode*, osg::Node*>(pNode, osgBone)); 
     387        nodeMap.insert(std::pair<FbxNode*, osg::Node*>(pNode, osgBone)); 
    388388 
    389389        return osgBone; 
     
    414414 
    415415osgDB::ReaderWriter::ReadResult OsgFbxReader::readFbxNode( 
    416     KFbxNode* pNode, 
     416    FbxNode* pNode, 
    417417    bool& bIsBone, int& nLightCount) 
    418418{ 
    419     if (KFbxNodeAttribute* lNodeAttribute = pNode->GetNodeAttribute()) 
    420     { 
    421         KFbxNodeAttribute::EAttributeType attrType = lNodeAttribute->GetAttributeType(); 
     419    if (FbxNodeAttribute* lNodeAttribute = pNode->GetNodeAttribute()) 
     420    { 
     421        FbxNodeAttribute::EType attrType = lNodeAttribute->GetAttributeType(); 
    422422        switch (attrType) 
    423423        { 
    424         case KFbxNodeAttribute::eNURB: 
    425         case KFbxNodeAttribute::ePATCH: 
    426         case KFbxNodeAttribute::eNURBS_CURVE: 
    427         case KFbxNodeAttribute::eNURBS_SURFACE: 
    428             { 
    429                 KFbxGeometryConverter lConverter(&pSdkManager); 
     424        case FbxNodeAttribute::eNurbs: 
     425        case FbxNodeAttribute::ePatch: 
     426        case FbxNodeAttribute::eNurbsCurve: 
     427        case FbxNodeAttribute::eNurbsSurface: 
     428            { 
     429                FbxGeometryConverter lConverter(&pSdkManager); 
     430#if FBXSDK_VERSION_MAJOR < 2014 
    430431                if (!lConverter.TriangulateInPlace(pNode)) 
     432#else 
     433                if (!lConverter.Triangulate(lNodeAttribute,true,false)) 
     434#endif 
    431435                { 
    432436                    OSG_WARN << "Unable to triangulate FBX NURBS " << pNode->GetName() << std::endl; 
     
    442446    bool bCreateSkeleton = false; 
    443447 
    444     KFbxNodeAttribute::EAttributeType lAttributeType = KFbxNodeAttribute::eUNIDENTIFIED; 
     448    FbxNodeAttribute::EType lAttributeType = FbxNodeAttribute::eUnknown; 
    445449    if (pNode->GetNodeAttribute()) 
    446450    { 
    447451        lAttributeType = pNode->GetNodeAttribute()->GetAttributeType(); 
    448         if (lAttributeType == KFbxNodeAttribute::eSKELETON) 
     452        if (lAttributeType == FbxNodeAttribute::eSkeleton) 
    449453        { 
    450454            bIsBone = true; 
     
    462466    for (unsigned i = 0; i < nMaterials; ++i) 
    463467    { 
    464         KFbxSurfaceMaterial* fbxMaterial = pNode->GetMaterial(i); 
     468        FbxSurfaceMaterial* fbxMaterial = pNode->GetMaterial(i); 
    465469        assert(fbxMaterial); 
    466470        stateSetList.push_back(fbxMaterialToOsgStateSet.convert(fbxMaterial)); 
     
    472476    for (int i = 0; i < nChildCount; ++i) 
    473477    { 
    474         KFbxNode* pChildNode = pNode->GetChild(i); 
     478        FbxNode* pChildNode = pNode->GetChild(i); 
    475479 
    476480        if (pChildNode->GetParent() != pNode) 
     
    513517    switch (lAttributeType) 
    514518    { 
    515     case KFbxNodeAttribute::eMESH: 
     519    case FbxNodeAttribute::eMesh: 
    516520        { 
    517521            size_t bindMatrixCount = boneBindMatrices.size(); 
     
    544548        } 
    545549        break; 
    546     case KFbxNodeAttribute::eCAMERA: 
    547     case KFbxNodeAttribute::eLIGHT: 
     550    case FbxNodeAttribute::eCamera: 
     551    case FbxNodeAttribute::eLight: 
    548552        { 
    549553            osgDB::ReaderWriter::ReadResult res = 
    550                 lAttributeType == KFbxNodeAttribute::eCAMERA ? 
     554                lAttributeType == FbxNodeAttribute::eCamera ? 
    551555                readFbxCamera(pNode) : readFbxLight(pNode, nLightCount); 
    552556            if (res.error()) 
     
    602606} 
    603607 
    604 osgAnimation::Skeleton* getSkeleton(KFbxNode* fbxNode, 
    605     const std::set<const KFbxNode*>& fbxSkeletons, 
    606     std::map<KFbxNode*, osgAnimation::Skeleton*>& skeletonMap) 
     608osgAnimation::Skeleton* getSkeleton(FbxNode* fbxNode, 
     609    const std::set<const FbxNode*>& fbxSkeletons, 
     610    std::map<FbxNode*, osgAnimation::Skeleton*>& skeletonMap) 
    607611{ 
    608612    //Find the first non-skeleton ancestor of the node. 
    609613    while (fbxNode && 
    610614        ((fbxNode->GetNodeAttribute() && 
    611         fbxNode->GetNodeAttribute()->GetAttributeType() == KFbxNodeAttribute::eSKELETON) || 
     615        fbxNode->GetNodeAttribute()->GetAttributeType() == FbxNodeAttribute::eSkeleton) || 
    612616        fbxSkeletons.find(fbxNode) != fbxSkeletons.end())) 
    613617    { 
     
    615619    } 
    616620 
    617     std::map<KFbxNode*, osgAnimation::Skeleton*>::const_iterator it = skeletonMap.find(fbxNode); 
     621    std::map<FbxNode*, osgAnimation::Skeleton*>::const_iterator it = skeletonMap.find(fbxNode); 
    618622    if (it == skeletonMap.end()) 
    619623    { 
    620624        osgAnimation::Skeleton* skel = new osgAnimation::Skeleton; 
    621625        skel->setDefaultUpdateCallback(); 
    622         skeletonMap.insert(std::pair<KFbxNode*, osgAnimation::Skeleton*>(fbxNode, skel)); 
     626        skeletonMap.insert(std::pair<FbxNode*, osgAnimation::Skeleton*>(fbxNode, skel)); 
    623627        return skel; 
    624628    }