BabylonNode.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. BabylonNode::BabylonNode(BabylonNode && moved) :
  11. _node(moved._node),
  12. _children(std::move(moved._children))
  13. {
  14. }
  15. BabylonNodeType BabylonNode::nodeType(){
  16. if (_node->GetMesh()){
  17. return BabylonNodeType::Mesh;
  18. }
  19. if (_node->GetCamera()){
  20. return BabylonNodeType::Camera;
  21. }
  22. if (_node->GetSkeleton()){
  23. return BabylonNodeType::Skeleton;
  24. }
  25. if (_node->GetLight()) {
  26. return BabylonNodeType::Light;
  27. }
  28. return BabylonNodeType::Empty;
  29. }
  30. bool BabylonNode::isEmptySkeletonOrEmptyMesh()
  31. {
  32. auto type = nodeType();
  33. switch (type)
  34. {
  35. case BabylonNodeType::Mesh:
  36. {
  37. auto mesh = _node->GetMesh();
  38. if (mesh->GetPolygonCount() == 0) {
  39. return true;
  40. }
  41. else {
  42. return false;
  43. }
  44. }
  45. case BabylonNodeType::Skeleton:
  46. case BabylonNodeType::Empty:
  47. return true;
  48. default:
  49. return false;
  50. }
  51. }
  52. bool BabylonNode::isEmptySkeletonOrEmptyMeshRecursive()
  53. {
  54. if (!isEmptySkeletonOrEmptyMesh()) {
  55. return false;
  56. }
  57. for (auto& c : children()) {
  58. if (!c.isEmptySkeletonOrEmptyMeshRecursive()) {
  59. return false;
  60. }
  61. }
  62. return true;
  63. }