// INFO MODEL NODE public void InfoModelNode(SkinModel model, SkinModel.ModelNode n, int tabLevel) { string ntab = ""; for (int i = 0; i < tabLevel; i++) { ntab += " "; } string rtab = "\n" + ntab; string msg = "\n"; msg += rtab + $"{n.name} "; msg += rtab + $"|_children.Count: {n.children.Count} "; if (n.parent == null) { msg += $"|_parent: IsRoot "; } else { msg += $"|_parent: " + n.parent.name; } msg += rtab + $"|_hasARealBone: {n.hasRealBone} "; msg += rtab + $"|_isThisAMeshNode: {n.isMeshNode}"; if (n.uniqueMeshBones.Count > 0) { msg += rtab + $"|_uniqueMeshBones.Count: {n.uniqueMeshBones.Count} "; int i = 0; foreach (var bone in n.uniqueMeshBones) { msg += rtab + $"|_node: {n.name} lists uniqueMeshBone[{i}] ... meshIndex: {bone.meshIndex} meshBoneIndex: {bone.boneIndex} " + $"mesh[{bone.meshIndex}]bone[{bone.boneIndex}].Name: {model.meshes[bone.meshIndex].meshBones[bone.boneIndex].name} " + $"in mesh[{bone.meshIndex}].Name: {model.meshes[bone.meshIndex].Name}"; var nameToCompare = model.meshes[bone.meshIndex].meshBones[bone.boneIndex].name; int j = 0; foreach (var anim in model.animations) { int k = 0; foreach (var animNode in anim.animatedNodes) { if (animNode.nodeName == nameToCompare) { msg += rtab + $"|^has corresponding Animation[{j}].Node[{k}].Name: {animNode.nodeName}"; } k++; } j++; } i++; } } Console.WriteLine(msg); for (int i = 0; i < n.children.Count; i++) { InfoModelNode(model, n.children[i], tabLevel + 1); } }
// SHOW NODE TREE INFO public void ShowNodeTreeInfo(int tabLevel, Node curAssimpNode, bool matrixInfo, SkinModel.ModelNode modelNode, SkinModel model, Scene scene) { string ntab = ""; for (int i = 0; i < tabLevel; i++) { ntab += " "; } string ntab2 = ntab + " "; Console.WriteLine("\n\n@@@CreateModelNodeTreeTransformsRecursively \n \n "); Console.Write("\n " + ntab + " ModelNode Name: " + modelNode.name + " curAssimpNode.Name: " + curAssimpNode.Name); if (curAssimpNode.MeshIndices.Count > 0) { Console.Write("\n " + ntab + " |_This node has mesh references. aiMeshCount: " + curAssimpNode.MeshCount + " Listed MeshIndices: "); for (int i = 0; i < curAssimpNode.MeshIndices.Count; i++) { Console.Write(" , " + curAssimpNode.MeshIndices[i]); } for (int i = 0; i < curAssimpNode.MeshIndices.Count; i++) { var nodesmesh = model.meshes[curAssimpNode.MeshIndices[i]]; Console.Write("\n " + ntab + " " + " |_Is a mesh ... Mesh nodeRefContainingAnimatedTransform Set to node: " + nodesmesh.node_with_anim_trans.name + " mesh: " + nodesmesh.Name); } } if (matrixInfo) { Console.WriteLine("\n " + ntab2 + "|_curAssimpNode.Transform: " + curAssimpNode.Transform.SrtInfoToString(ntab2)); } for (int mIndex = 0; mIndex < scene.Meshes.Count; mIndex++) { SkinModel.ModelBone bone; int boneIndexInMesh = 0; if (GetBoneForMesh(model.meshes[mIndex], modelNode.name, out bone, out boneIndexInMesh)) { var adjustedBoneIndexInMesh = boneIndexInMesh; Console.Write("\n " + ntab + " |_The node will be marked as having a real bone node along the bone route."); if (modelNode.isMeshNode) { Console.Write("\n " + ntab + " |_The node is also a mesh node so this is maybe a node targeting a mesh transform with animations."); } Console.Write("\n " + ntab + " |_Adding uniqueBone for Node: " + modelNode.name + " of Mesh[" + mIndex + " of " + scene.Meshes.Count + "].Name: " + scene.Meshes[mIndex].Name); Console.Write("\n " + ntab + " |_It's a Bone in mesh #" + mIndex + " aiBoneIndexInMesh: " + (boneIndexInMesh - 1) + " adjusted BoneIndexInMesh: " + adjustedBoneIndexInMesh); } } }