BabylonNode.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "stdafx.h"
  2. #include "BabylonNode.h"
  3. #include "NodeHelpers.h"
  4. BabylonNode::BabylonNode(FbxNode* fbxNode) : _node(fbxNode){
  5. auto childCount = fbxNode->GetChildCount();
  6. for (int i = 0; i < childCount; ++i){
  7. _children.emplace_back(fbxNode->GetChild(i));
  8. }
  9. }
  10. BabylonNodeType BabylonNode::nodeType(){
  11. if (_node->GetMesh()){
  12. return BabylonNodeType::Mesh;
  13. }
  14. if (_node->GetCamera()){
  15. return BabylonNodeType::Camera;
  16. }
  17. if (_node->GetSkeleton()){
  18. return BabylonNodeType::Skeleton;
  19. }
  20. if (_node->GetLight()) {
  21. return BabylonNodeType::Light;
  22. }
  23. return BabylonNodeType::Empty;
  24. }
  25. bool BabylonNode::isEmptySkeletonOrEmptyMesh()
  26. {
  27. auto type = nodeType();
  28. switch (type)
  29. {
  30. case BabylonNodeType::Mesh:
  31. {
  32. auto mesh = _node->GetMesh();
  33. if (mesh->GetPolygonCount() == 0) {
  34. return true;
  35. }
  36. else {
  37. return false;
  38. }
  39. }
  40. case BabylonNodeType::Skeleton:
  41. case BabylonNodeType::Empty:
  42. return true;
  43. default:
  44. return false;
  45. }
  46. }
  47. bool BabylonNode::isEmptySkeletonOrEmptyMeshRecursive()
  48. {
  49. if (!isEmptySkeletonOrEmptyMesh()) {
  50. return false;
  51. }
  52. for (auto& c : children()) {
  53. if (!c.isEmptySkeletonOrEmptyMeshRecursive()) {
  54. return false;
  55. }
  56. }
  57. return true;
  58. }