public void Node_SetNodeAttribute_SetsNodeAttribute() { // given: var node = new FbxNode("Node"); var nullattr = new FbxNull("nullattr"); // require: Assert.AreEqual(0, node.GetSrcObjectCount()); Assert.AreEqual(0, node.GetDstObjectCount()); Assert.AreEqual(0, node.GetSrcPropertyCount()); Assert.AreEqual(0, node.GetDstPropertyCount()); Assert.AreEqual(0, node.GetNodeAttributeCount()); Assert.AreEqual(null, node.GetNodeAttribute()); Assert.AreEqual(-1, node.GetDefaultNodeAttributeIndex()); Assert.AreEqual(0, nullattr.GetSrcObjectCount()); Assert.AreEqual(0, nullattr.GetDstObjectCount()); Assert.AreEqual(0, nullattr.GetSrcPropertyCount()); Assert.AreEqual(0, nullattr.GetDstPropertyCount()); Assert.AreEqual(0, nullattr.GetNodeCount()); // when: node.SetNodeAttribute(nullattr); // then: Assert.AreEqual(1, node.GetSrcObjectCount()); Assert.AreEqual(nullattr, node.GetSrcObject(0)); Assert.AreEqual(0, node.GetDstObjectCount()); Assert.AreEqual(0, node.GetSrcPropertyCount()); Assert.AreEqual(0, node.GetDstPropertyCount()); Assert.AreEqual(1, node.GetNodeAttributeCount()); Assert.AreEqual(nullattr, node.GetNodeAttribute()); Assert.AreEqual(0, node.GetDefaultNodeAttributeIndex()); Assert.AreEqual(nullattr, node.GetNodeAttributeByIndex(0)); Assert.AreEqual(0, nullattr.GetSrcObjectCount()); Assert.AreEqual(1, nullattr.GetDstObjectCount()); Assert.AreEqual(node, nullattr.GetDstObject(0)); Assert.AreEqual(0, nullattr.GetSrcPropertyCount()); Assert.AreEqual(0, nullattr.GetDstPropertyCount()); Assert.AreEqual(1, nullattr.GetNodeCount()); Assert.AreEqual(node, nullattr.GetNode()); Assert.AreEqual(node, nullattr.GetNode(0)); }
public static bool IsNodeSkeleton(FbxNode node) { for (int i = 0; i < node.GetNodeAttributeCount(); i++) { if (node.GetNodeAttributeByIndex(i).GetAttributeType() == FbxNodeAttribute.EType.eSkeleton) { return(true); } } return(false); }
public static bool GetNodeMesh(FbxNode pNode, out FbxMesh pMesh) { pMesh = null; for (int i = 0; i < pNode.GetNodeAttributeCount(); i++) { if (pNode.GetNodeAttributeByIndex(i).GetAttributeType() == FbxNodeAttribute.EType.eMesh) { pMesh = FbxMesh.Cast(pNode.GetNodeAttributeByIndex(i)); return(true); } } return(false); }
public static FbxNodeAttribute[] GetAttributes(FbxNode node) { //не null только когда node.GetNodeAttributeCount()==1. Иначе использовать GetNodeAttributeByIndex var attribute = node.GetNodeAttribute(); if (attribute != null) { return new[] { attribute } } ; var ret = new FbxNodeAttribute[node.GetNodeAttributeCount()]; for (int i = 0; i < ret.Length; i++) { ret[i] = node.GetNodeAttributeByIndex(i); } return(ret); }
void Run() { FbxManager manager = FbxManager.Create(); FbxIOSettings setting = FbxIOSettings.Create(manager, "IOSRoot"); manager.SetIOSettings(setting); FbxImporter impoter = FbxImporter.Create(manager, ""); bool status = impoter.Initialize(@"D:\develop\FbxWrapper\1.fbx", -1, setting); Log.Info(status); if (!status) { return; } FbxScene scene = FbxScene.Create(manager, "scene1"); status = impoter.Import(scene); Log.Info(status); int numTrack = scene.GetSrcObjectCount(FbxAnimStack.ClassId); Log.Info("num stack " + numTrack); FbxObject obj = scene.GetSrcObject(FbxAnimStack.ClassId, 0); FbxAnimStack stack = FbxAnimStack.Cast(obj); if (stack == null) { Log.Error("can not get anim stack!"); return; } FbxCriteria cri = FbxCriteria.ObjectTypeStrict(FbxAnimLayer.ClassId); int numLayer = stack.GetMemberCount(cri); Log.Info("anim layer count : " + numLayer); FbxAnimLayer layer = null; if (numLayer > 0) { FbxObject layerobj = stack.GetMember(cri, 0); layer = FbxAnimLayer.Cast(layerobj); if (layer == null) { Log.Error("anim layer is null!"); return; } Log.Info("anim layer name " + layer.GetName()); } Log.Info("node count " + scene.GetNodeCount()); for (int i = 0; i < scene.GetNodeCount(); i++) { FbxNode node = scene.GetNode(i); Log.Info("node " + i + " " + node.GetName()); if (node.LclTranslation.IsAnimated(layer)) { FbxAnimCurveNode curveNode = node.LclTranslation.GetCurveNode(layer); if (curveNode == null) { Log.Error("curve node is null"); } else { for (int c = 0; c < curveNode.GetCurveCount(0); c++) { FbxAnimCurve curve = curveNode.GetCurve(0, (uint)c); if (curve != null) { Log.Info("curve " + curve.GetName()); Log.Info("key count " + curve.KeyGetCount()); FbxAnimCurveKey key = curve.KeyGet(0); FbxTime t = key.GetTime(); Log.Info("key " + t.GetTimeString() + " value " + key.GetValue()); } } } } if (node.GetNodeAttribute() != null) { Log.Info("got attribu"); FbxNodeAttribute att = node.GetNodeAttribute(); PrintAttribute(att); } else { Log.Info("att count " + node.GetNodeAttributeCount()); for (int j = 0; j < node.GetNodeAttributeCount(); j++) { FbxNodeAttribute att = node.GetNodeAttributeByIndex(j); PrintAttribute(att); } } FbxVector4 rot = node.GetPostRotation(FbxNode.EPivotSet.eSourcePivot); FbxQuaternion q; } }
void Run() { FbxManager manager = FbxManager.Create(); FbxIOSettings setting = FbxIOSettings.Create(manager, "IOSRoot"); //fbxiosettingspath.h //PostProcessSteps.CalculateTangentSpace = #define EXP_TANGENTSPACE EXP_GEOMETRY "|" IOSN_TANGENTS_BINORMALS //PostProcessSteps.JoinIdenticalVertices = #define IOSN_DXF_WELD_VERTICES "WeldVertices" //PostProcessSteps.Triangulate = #define IOSN_TRIANGULATE "Triangulate" //PostProcessSteps.RemoveComponent = //PostProcessSteps.GenerateSmoothNormals = //setting.AddProperty() setting.SetBoolProp("Import|AdvOptGrp|Dxf|WeldVertices", true); setting.SetBoolProp("Triangulate", true); manager.SetIOSettings(setting); FbxImporter impoter = FbxImporter.Create(manager, ""); bool status = impoter.Initialize(@"1.fbx", -1, setting); Log.Info(status); if (!status) { return; } FbxScene scene = FbxScene.Create(manager, "scene1"); status = impoter.Import(scene); Log.Info(status); int numTrack = scene.GetSrcObjectCount(FbxCriteria.ObjectType(FbxAnimStack.ClassId)); Log.Info("num stack " + numTrack); FbxObject obj = scene.GetSrcObject(FbxCriteria.ObjectType(FbxAnimStack.ClassId), 0); FbxAnimStack stack = FbxAnimStack.Cast(obj); if (stack == null) { Log.Error("can not get anim stack!"); return; } FbxCriteria cri = FbxCriteria.ObjectTypeStrict(FbxAnimLayer.ClassId); int numLayer = stack.GetMemberCount(cri); Log.Info("anim layer count : " + numLayer); FbxAnimLayer layer = null; if (numLayer > 0) { FbxObject layerobj = stack.GetMember(cri, 0); layer = FbxAnimLayer.Cast(layerobj); if (layer == null) { Log.Error("anim layer is null!"); return; } Log.Info("anim layer name " + layer.GetName()); } Log.Info("node count " + scene.GetNodeCount()); for (int i = 0; i < scene.GetNodeCount(); i++) { FbxNode node = scene.GetNode(i); Log.Info("node " + i + " " + node.GetName() + " ChildCount:" + node.GetChildCount()); //---------------- //node.LclTranslation.IsAnimated //---------------- //ToDo : if (node.LclTranslation.IsAnimated(layer)) { FbxAnimCurveNode curveNode = node.LclTranslation.GetCurveNode(layer); if (curveNode == null) { Log.Error("curve node is null"); } else { for (int c = 0; c < curveNode.GetCurveCount(0); c++) { FbxAnimCurve curve = curveNode.GetCurve(0, (uint)c); if (curve != null) { Log.Info("curve " + curve.GetName()); Log.Info("key count " + curve.KeyGetCount()); FbxAnimCurveKey key = curve.KeyGet(0); FbxTime t = key.GetTime(); Log.Info("key " + t.GetTimeString() + " value " + key.GetValue()); } } } } if (node.GetNodeAttribute() != null) { Log.Info("got attribu"); FbxNodeAttribute att = node.GetNodeAttribute(); PrintAttribute(manager, att); } else { Log.Info("att count " + node.GetNodeAttributeCount()); for (int j = 0; j < node.GetNodeAttributeCount(); j++) { FbxNodeAttribute att = node.GetNodeAttributeByIndex(j); PrintAttribute(manager, att); } } FbxVector4 rot = node.GetPostRotation(FbxNode.EPivotSet.eSourcePivot); FbxQuaternion q; } }