Guest User

Untitled

a guest
May 31st, 2017
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 14.34 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <fbxsdk.h>
  3. #include "FBXWrapper.h"
  4. #include "FBXUtils.h"
  5.  
  6. #ifdef IOS_REF
  7. #undef  IOS_REF
  8. #define IOS_REF (*(pManager->GetIOSettings()))
  9. #endif
  10.  
  11. using namespace System::Runtime::InteropServices;
  12.  
  13. FBXWrapper::FBXVector4::FBXVector4(double x, double y, double z, double w)
  14. {
  15.    vector = new FbxVector4(x, y, z, w);
  16. }
  17.  
  18. FBXWrapper::FBXVector4::FBXVector4()
  19. {
  20.    vector = new FbxVector4(0, 0, 0, 0);
  21. }
  22.  
  23. FBXWrapper::FBXVector4::FBXVector4(FbxVector4 v)
  24. {
  25.    vector = &v;
  26. }
  27.  
  28. List<double>^ FBXWrapper::FBXVector4::ToList()
  29. {
  30.     List<double>^ result = gcnew List<double>();
  31.     result->Add(vector->mData[0]);
  32.     result->Add(vector->mData[1]);
  33.     result->Add(vector->mData[2]);
  34.     result->Add(vector->mData[3]);
  35.     return result;
  36. }
  37.  
  38.  
  39.  
  40. FBXWrapper::FBXAMatrix::FBXAMatrix()
  41. {
  42.    mat = new FbxAMatrix();
  43. }
  44.  
  45. FBXWrapper::FBXAMatrix::FBXAMatrix(FbxAMatrix* m)
  46. {
  47.     mat = m;
  48. }
  49.  
  50. FBXWrapper::FBXVector4^ FBXWrapper::FBXAMatrix::getR()
  51. {
  52.    return gcnew FBXVector4(mat->GetR());
  53. }
  54.  
  55. void FBXWrapper::FBXAMatrix::SetRow(int Y, FBXVector4^ row)
  56. {
  57.    mat->SetRow(Y, *row->vector);
  58. }
  59.  
  60. void FBXWrapper::FBXAMatrix::SetTRS(FBXVector4^ lT, FBXVector4^ lR, FBXVector4^ lS)
  61. {
  62.     mat->SetTRS(*lT->vector, *lR->vector, *lS->vector);
  63. }
  64.  
  65.  
  66.  
  67. FBXWrapper::FBXCluster::FBXCluster(FbxCluster* c)
  68. {
  69.     cluster = c;
  70. }
  71.  
  72. void FBXWrapper::FBXCluster::SetLink(Object^ node)
  73. {
  74.     cluster->SetLink(((FBXNode^)node)->node);
  75. }
  76.  
  77. void FBXWrapper::FBXCluster::AddControlPointIndex(int idx, double weight)
  78. {
  79.     cluster->AddControlPointIndex(idx, weight);
  80. }
  81.  
  82. void FBXWrapper::FBXCluster::SetTransformMatrix(FBXAMatrix^ mat)
  83. {
  84.     cluster->SetTransformMatrix(*mat->mat);
  85. }
  86.  
  87. void FBXWrapper::FBXCluster::SetTransformLinkMatrix(FBXAMatrix^ mat)
  88. {
  89.     cluster->SetTransformLinkMatrix(*mat->mat);
  90. }
  91.  
  92. FBXWrapper::FBXCluster^ FBXWrapper::FBXCluster::Create(Object^ scene, String^ name)
  93. {
  94.     FBXScene^ s = (FBXScene^)scene;
  95.     IntPtr ptrToNativeString = Marshal::StringToHGlobalAnsi(name);
  96.     const char* lMeshName = static_cast<char*>(ptrToNativeString.ToPointer());
  97.     FBXCluster^ result = gcnew FBXCluster(FbxCluster::Create(s->scene, lMeshName));
  98.     Marshal::FreeHGlobal(ptrToNativeString);
  99.     return result;
  100. }
  101.  
  102.  
  103.  
  104. FBXWrapper::FBXGeometryElementNormal::FBXGeometryElementNormal(FbxGeometryElementNormal* n)
  105. {
  106.     normal = n;
  107. }
  108.  
  109. void FBXWrapper::FBXGeometryElementNormal::SetMappingMode(MappingMode mode)
  110. {
  111.     normal->SetMappingMode((FbxLayerElement::EMappingMode)mode);
  112. }
  113.  
  114. void FBXWrapper::FBXGeometryElementNormal::Add(FBXVector4 ^v)
  115. {
  116.     normal->GetDirectArray().Add(*v->vector);
  117. }
  118.  
  119.  
  120.  
  121. FBXWrapper::FBXGeometryElementBinormal::FBXGeometryElementBinormal(FbxGeometryElementBinormal* n)
  122. {
  123.     binormal = n;
  124. }
  125.  
  126. void FBXWrapper::FBXGeometryElementBinormal::SetMappingMode(MappingMode mode)
  127. {
  128.     binormal->SetMappingMode((FbxLayerElement::EMappingMode)mode);
  129. }
  130.  
  131. void FBXWrapper::FBXGeometryElementBinormal::Add(FBXVector4 ^v)
  132. {
  133.     binormal->GetDirectArray().Add(*v->vector);
  134. }
  135.  
  136.  
  137.  
  138. FBXWrapper::FBXGeometryElementTangent::FBXGeometryElementTangent(FbxGeometryElementTangent* t)
  139. {
  140.     tangent = t;
  141. }
  142.  
  143. void FBXWrapper::FBXGeometryElementTangent::SetMappingMode(MappingMode mode)
  144. {
  145.     tangent->SetMappingMode((FbxLayerElement::EMappingMode)mode);
  146. }
  147.  
  148. void FBXWrapper::FBXGeometryElementTangent::Add(FBXVector4 ^v)
  149. {
  150.     tangent->GetDirectArray().Add(*v->vector);
  151. }
  152.  
  153.  
  154.  
  155. FBXWrapper::FBXGeometryElementMaterial::FBXGeometryElementMaterial(FbxGeometryElementMaterial* m)
  156. {
  157.     mat = m;
  158. }
  159.  
  160. void FBXWrapper::FBXGeometryElementMaterial::SetMappingMode(MappingMode mode)
  161. {
  162.     mat->SetMappingMode((FbxLayerElement::EMappingMode)mode);
  163. }
  164.  
  165. void FBXWrapper::FBXGeometryElementMaterial::SetReferenceMode(ReferenceMode mode)
  166. {
  167.     mat->SetReferenceMode((FbxLayerElement::EReferenceMode)mode);
  168. }
  169.  
  170.  
  171.  
  172. FBXWrapper::FBXGeometryElementUV::FBXGeometryElementUV(FbxGeometryElementUV* t)
  173. {
  174.     uv = t;
  175. }
  176.  
  177. void FBXWrapper::FBXGeometryElementUV::SetMappingMode(MappingMode mode)
  178. {
  179.     uv->SetMappingMode((FbxLayerElement::EMappingMode)mode);
  180. }
  181.  
  182. void FBXWrapper::FBXGeometryElementUV::SetReferenceMode(ReferenceMode mode)
  183. {
  184.     uv->SetReferenceMode((FbxLayerElement::EReferenceMode)mode);   
  185. }
  186.  
  187. void FBXWrapper::FBXGeometryElementUV::SetIndexArrayCount(int count)
  188. {
  189.     uv->GetIndexArray().SetCount(count);
  190. }
  191.  
  192. void FBXWrapper::FBXGeometryElementUV::Add(FBXVector4 ^v)
  193. {
  194.     uv->GetDirectArray().Add(*new FbxVector2(v->vector->mData[0], v->vector->mData[1]));
  195. }
  196.  
  197. FBXWrapper::FBXNodeAttribute::FBXNodeAttribute(FbxNodeAttribute* a)
  198. {
  199.     attrib = a;
  200. }
  201.  
  202. Object^ FBXWrapper::FBXNodeAttribute::ToGeometry()
  203. {
  204.     return gcnew FBXGeometry((FbxGeometry*)attrib);
  205. }
  206.  
  207. FBXWrapper::NodeAttribType FBXWrapper::FBXNodeAttribute::GetAttributeType()
  208. {
  209.     return (NodeAttribType)attrib->GetAttributeType();
  210. }
  211.  
  212.  
  213. FBXWrapper::FBXNode::FBXNode(FbxNode* n)
  214. {
  215.     node = n;
  216. }
  217.  
  218. void FBXWrapper::FBXNode::AddChild(FBXNode^ n)
  219. {
  220.     node->AddChild(n->node);
  221. }
  222.  
  223. FBXWrapper::FBXNode^ FBXWrapper::FBXNode::FindChild(String^ name)
  224. {
  225.     IntPtr ptrToNativeString = Marshal::StringToHGlobalAnsi(name);
  226.     const char* lBoneName = static_cast<char*>(ptrToNativeString.ToPointer());
  227.     FBXNode^ result = gcnew FBXNode(node->FindChild(lBoneName));   
  228.     Marshal::FreeHGlobal(ptrToNativeString);
  229.     return result;
  230. }
  231.  
  232. FBXWrapper::FBXNode^ FBXWrapper::FBXNode::GetParent()
  233. {  
  234.     return gcnew FBXNode(node->GetParent());
  235. }
  236.  
  237. bool FBXWrapper::FBXNode::Equals(FBXNode^ n)
  238. {
  239.     return node == n->node;
  240. }
  241.  
  242. void FBXWrapper::FBXNode::SetNodeAttribute(Object^ obj)
  243. {
  244.     FBXMesh^ mesh = (FBXMesh^)obj;
  245.     node->SetNodeAttribute(mesh->mesh);
  246. }
  247.  
  248. void FBXWrapper::FBXNode::AddMaterial(Object^ scene, String^ name)
  249. {
  250.     FBXScene^ s = (FBXScene^)scene;
  251.     IntPtr pStr = Marshal::StringToHGlobalAnsi(name);
  252.     const char* lname = static_cast<char*>(pStr.ToPointer());
  253.     FbxSurfacePhong* lMaterial = FbxSurfacePhong::Create(s->scene, lname);
  254.     node->AddMaterial(lMaterial);
  255.     Marshal::FreeHGlobal(pStr);
  256. }
  257.  
  258. FBXWrapper::FBXAMatrix^ FBXWrapper::FBXNode::EvaluateGlobalTransform()
  259. {
  260.     return gcnew FBXAMatrix(&node->EvaluateGlobalTransform());
  261. }
  262.  
  263. FBXWrapper::FBXNode^ FBXWrapper::FBXNode::Create(Object^ scene, String^ name)
  264. {
  265.     FBXScene^ s = (FBXScene^)scene;
  266.     IntPtr ptrToNativeString = Marshal::StringToHGlobalAnsi(name);
  267.     const char* lMeshName = static_cast<char*>(ptrToNativeString.ToPointer());
  268.     FBXNode^ result = gcnew FBXNode(FbxNode::Create(s->scene, lMeshName));
  269.     Marshal::FreeHGlobal(ptrToNativeString);
  270.     return result;
  271. }
  272.  
  273. FBXWrapper::FBXNodeAttribute^ FBXWrapper::FBXNode::GetNodeAttribute()
  274. {
  275.     return gcnew FBXNodeAttribute(node->GetNodeAttribute());
  276. }
  277.  
  278. Object^ FBXWrapper::FBXNode::GetMesh()
  279. {
  280.     return gcnew FBXMesh(node->GetMesh());
  281. }
  282.  
  283.  
  284.  
  285. FBXWrapper::FBXNode^ FBXWrapper::FBXScene::GetRootNode()
  286. {
  287.     return gcnew FBXNode(scene->GetRootNode());
  288. }
  289.  
  290. void FBXWrapper::FBXScene::AddPose(Object^ pose)
  291. {
  292.     FBXPose^ p = (FBXPose^)pose;
  293.     scene->AddPose(p->pose);
  294. }
  295.  
  296.  
  297. FBXWrapper::FBXMesh::FBXMesh(FbxMesh* m)
  298. {
  299.     mesh = m;
  300. }
  301.  
  302. FBXWrapper::FBXMesh^ FBXWrapper::FBXMesh::Create(FBXScene^ scene, String^ name)
  303. {
  304.     IntPtr ptrToNativeString = Marshal::StringToHGlobalAnsi(name);
  305.     const char* lMeshName = static_cast<char*>(ptrToNativeString.ToPointer());
  306.     FBXMesh^ result = gcnew FBXMesh(FbxMesh::Create(scene->scene, lMeshName));
  307.     Marshal::FreeHGlobal(ptrToNativeString);
  308.     return result;
  309. }
  310.  
  311. FBXWrapper::FBXGeometryElementNormal^ FBXWrapper::FBXMesh::CreateElementNormal()
  312. {
  313.     return gcnew FBXGeometryElementNormal(mesh->CreateElementNormal());
  314. }
  315.  
  316. FBXWrapper::FBXGeometryElementBinormal^ FBXWrapper::FBXMesh::CreateElementBinormal()
  317. {
  318.     return gcnew FBXGeometryElementBinormal(mesh->CreateElementBinormal());
  319. }
  320.  
  321. FBXWrapper::FBXGeometryElementTangent^ FBXWrapper::FBXMesh::CreateElementTangent()
  322. {
  323.     return gcnew FBXGeometryElementTangent(mesh->CreateElementTangent());
  324. }
  325.  
  326. FBXWrapper::FBXGeometryElementMaterial^ FBXWrapper::FBXMesh::CreateElementMaterial()
  327. {
  328.     return gcnew FBXGeometryElementMaterial(mesh->CreateElementMaterial());
  329. }
  330.  
  331. FBXWrapper::FBXGeometryElementUV^ FBXWrapper::FBXMesh::CreateElementUV(String^ MeshName)
  332. {
  333.     IntPtr ptrToNativeString = Marshal::StringToHGlobalAnsi(MeshName);
  334.     const char* lMeshName = static_cast<char*>(ptrToNativeString.ToPointer());
  335.     FBXGeometryElementUV^ result = gcnew FBXGeometryElementUV(mesh->CreateElementUV(lMeshName));
  336.     Marshal::FreeHGlobal(ptrToNativeString);
  337.     return result;
  338. }
  339.  
  340. void FBXWrapper::FBXMesh::InitControlPoints(int count)
  341. {
  342.     mesh->InitControlPoints(count);
  343. }
  344.  
  345. void FBXWrapper::FBXMesh::SetControlPoint(int n, FBXVector4^ v)
  346. {
  347.     mesh->mControlPoints[n] = *v->vector;
  348. }
  349.  
  350. void FBXWrapper::FBXMesh::BeginPolygon()
  351. {
  352.     mesh->BeginPolygon();
  353. }
  354.  
  355. void FBXWrapper::FBXMesh::BeginPolygon(int i)
  356. {
  357.     mesh->BeginPolygon(i);
  358. }
  359.  
  360. void FBXWrapper::FBXMesh::EndPolygon()
  361. {
  362.     mesh->EndPolygon();
  363. }
  364.  
  365. void FBXWrapper::FBXMesh::AddPolygon(int idx)
  366. {
  367.     mesh->AddPolygon(idx);
  368. }
  369.  
  370. void FBXWrapper::FBXMesh::AddDeformer(Object^ shape)
  371. {
  372.     mesh->AddDeformer(((FBXBlendShape^)shape)->shape);
  373. }
  374.  
  375. int FBXWrapper::FBXMesh::GetControlPointsCount()
  376. {
  377.     return mesh->GetControlPointsCount();
  378. }
  379.  
  380.  
  381.  
  382. FBXWrapper::FBXSkeleton::FBXSkeleton(FbxSkeleton* skel)
  383. {
  384.     skeleton = skel;
  385. }
  386.  
  387. FBXWrapper::FBXSkeleton^ FBXWrapper::FBXSkeleton::Create(FBXScene^ scene, String^ name)
  388. {
  389.     IntPtr pStr = Marshal::StringToHGlobalAnsi(name);
  390.     const char* str = static_cast<char*>(pStr.ToPointer());
  391.     FBXWrapper::FBXSkeleton^ result = gcnew FBXSkeleton(FbxSkeleton::Create(scene->scene, str));
  392.     Marshal::FreeHGlobal(pStr);
  393.     return result;
  394. }
  395.  
  396. void FBXWrapper::FBXSkeleton::SetSkeletonType(SkelType type)
  397. {
  398.     skeleton->SetSkeletonType((FbxSkeleton::EType)type);
  399. }
  400.  
  401. void FBXWrapper::FBXSkeleton::SetSize(double d)
  402. {
  403.     skeleton->Size.Set(d);
  404. }
  405.  
  406.  
  407.  
  408. FBXWrapper::FBXSkin::FBXSkin(FbxSkin* s)
  409. {
  410.     skin = s;
  411. }
  412.  
  413. void FBXWrapper::FBXSkin::AddCluster(FBXCluster^ cluster)
  414. {
  415.     skin->AddCluster(cluster->cluster);
  416. }
  417.  
  418. int FBXWrapper::FBXSkin::GetClusterCount()
  419. {
  420.     return skin->GetClusterCount();
  421. }
  422.  
  423. FBXWrapper::FBXNode^ FBXWrapper::FBXSkin::GetClusterLink(int i)
  424. {
  425.     return gcnew FBXNode(skin->GetCluster(i)->GetLink());
  426. }
  427.  
  428. FBXWrapper::FBXSkin^ FBXWrapper::FBXSkin::Create(FBXScene^ scene, String^ name)
  429. {
  430.     IntPtr pStr = Marshal::StringToHGlobalAnsi(name);
  431.     const char* str = static_cast<char*>(pStr.ToPointer());
  432.     FBXWrapper::FBXSkin^ result = gcnew FBXSkin(FbxSkin::Create(scene->scene, str));
  433.     Marshal::FreeHGlobal(pStr);
  434.     return result;
  435. }
  436.  
  437.  
  438.  
  439. FBXWrapper::FBXGeometry::FBXGeometry(FbxGeometry* g)
  440. {
  441.     geo = g;
  442. }
  443.  
  444. void FBXWrapper::FBXGeometry::AddDeformer(FBXSkin^ skin)
  445. {
  446.     geo->AddDeformer(skin->skin);
  447. }
  448.  
  449. int FBXWrapper::FBXGeometry::GetDeformerCount(EDeformerType type)
  450. {
  451.     return geo->GetDeformerCount((FbxDeformer::EDeformerType)type);
  452. }
  453.  
  454. FBXWrapper::FBXSkin^ FBXWrapper::FBXGeometry::GetSkinDeformer(int n)
  455. {  
  456.     FbxDeformer* d = geo->GetDeformer(n, (FbxDeformer::EDeformerType)EDeformerType::eSkin, 0);
  457.     return gcnew FBXSkin((FbxSkin*)d);
  458. }
  459.  
  460.  
  461.  
  462. FBXWrapper::FBXPose::FBXPose(FbxPose* p)
  463. {
  464.     pose = p;
  465. }
  466.  
  467. FBXWrapper::FBXPose^ FBXWrapper::FBXPose::Create(FBXScene^ scene, String^ name)
  468. {
  469.     IntPtr pStr = Marshal::StringToHGlobalAnsi(name);
  470.     const char* str = static_cast<char*>(pStr.ToPointer());
  471.     FBXPose^ result = gcnew FBXPose(FbxPose::Create(scene->scene, str));
  472.     Marshal::FreeHGlobal(pStr);
  473.     return result;
  474. }
  475.  
  476. void FBXWrapper::FBXPose::SetIsBindPose(bool b)
  477. {
  478.     pose->SetIsBindPose(b);
  479. }
  480.  
  481. void FBXWrapper::FBXPose::Add(FBXNode^ n, FBXAMatrix^ mat)
  482. {
  483.     pose->Add(n->node, *mat->mat);
  484. }
  485.  
  486.  
  487.  
  488. FBXWrapper::FBXShape::FBXShape(FbxShape* s)
  489. {
  490.     shape = s;
  491. }
  492.  
  493. void FBXWrapper::FBXShape::InitControlPoints(int n)
  494. {
  495.     shape->InitControlPoints(n);
  496. }
  497.  
  498. FBXWrapper::FBXShape^ FBXWrapper::FBXShape::Create(FBXScene^ scene, String^ name)
  499. {
  500.     IntPtr pStr = Marshal::StringToHGlobalAnsi(name);
  501.     const char* str = static_cast<char*>(pStr.ToPointer());
  502.     FBXShape^ result = gcnew FBXShape(FbxShape::Create(scene->scene, str));
  503.     Marshal::FreeHGlobal(pStr);
  504.     return result;
  505. }
  506.  
  507. List<FBXWrapper::FBXVector4^>^ FBXWrapper::FBXShape::GetControlPoints()
  508. {
  509.     List<FBXVector4^>^ result = gcnew List<FBXVector4^>();
  510.     int count = shape->mControlPoints.GetCount();
  511.     for (int i = 0; i < count; i++)
  512.         result->Add(gcnew FBXVector4(shape->mControlPoints[i]));
  513.     return result;
  514. }
  515.  
  516.  
  517.  
  518. FBXWrapper::FBXBlendShape::FBXBlendShape(FbxBlendShape* s)
  519. {
  520.     shape = s;
  521. }
  522.  
  523. FBXWrapper::FBXBlendShape^ FBXWrapper::FBXBlendShape::Create(FBXScene^ scene, String^ name)
  524. {
  525.     IntPtr pStr = Marshal::StringToHGlobalAnsi(name);
  526.     const char* str = static_cast<char*>(pStr.ToPointer());
  527.     FBXBlendShape^ result = gcnew FBXBlendShape(FbxBlendShape::Create(scene->scene, str));
  528.     Marshal::FreeHGlobal(pStr);
  529.     return result;
  530. }
  531.  
  532. void FBXWrapper::FBXBlendShape::AddBlendShapeChannel(Object^ c)
  533. {
  534.     shape->AddBlendShapeChannel(((FBXBlendShapeChannel^)c)->channel);
  535. }
  536.  
  537.  
  538.  
  539. FBXWrapper::FBXBlendShapeChannel::FBXBlendShapeChannel(FbxBlendShapeChannel* c)
  540. {
  541.     channel = c;
  542. }
  543.  
  544. FBXWrapper::FBXBlendShapeChannel^ FBXWrapper::FBXBlendShapeChannel::Create(FBXScene^ scene, String^ name)
  545. {
  546.     IntPtr pStr = Marshal::StringToHGlobalAnsi(name);
  547.     const char* str = static_cast<char*>(pStr.ToPointer());
  548.     FBXBlendShapeChannel^ result = gcnew FBXBlendShapeChannel(FbxBlendShapeChannel::Create(scene->scene, str));
  549.     Marshal::FreeHGlobal(pStr);
  550.     return result;
  551. }
  552.  
  553. void FBXWrapper::FBXBlendShapeChannel::AddTargetShape(FBXShape^ shape)
  554. {
  555.     channel->AddTargetShape(shape->shape);
  556. }
  557.  
  558.  
  559.  
  560. void FBXWrapper::FBXHelper::InitializeSdkObjects(FBXManager^ manager, FBXScene^ scene)
  561. {
  562.     FbxManager* m = manager->manager;
  563.     FbxScene* s = scene->scene;
  564.     FBXUtils::InitializeSdkObjects(m, s);
  565. }
  566.  
  567. void FBXWrapper::FBXHelper::DestroySdkObjects(FBXManager^ manager, bool result)
  568. {
  569.     FbxManager* m = manager->manager;
  570.     FBXUtils::DestroySdkObjects(m, result);
  571. }
  572.  
  573. bool FBXWrapper::FBXHelper::SaveScene(FBXManager^ manager, FBXScene^ scene, String^ targetDir)
  574. {
  575.     return SaveScene(manager, scene, targetDir, 0, false);
  576. }
  577.  
  578. bool FBXWrapper::FBXHelper::SaveScene(FBXManager^ manager, FBXScene^ scene, String^ targetDir, int pFileFormat, bool pEmbedMedia)
  579. {
  580.     IntPtr pStr = Marshal::StringToHGlobalAnsi(targetDir);
  581.     const char* str = static_cast<char*>(pStr.ToPointer());
  582.     bool result = FBXUtils::SaveScene(manager->manager, scene->scene, str);
  583.     Marshal::FreeHGlobal(pStr);
  584.     return result;
  585. }
  586.  
  587. void FBXWrapper::FBXHelper::SetGlobalDefaultPosition(FBXNode^ n, FBXAMatrix^ m)
  588. {
  589.     FBXUtils::SetGlobalDefaultPosition(n->node, *m->mat);
  590. }
Advertisement
Add Comment
Please, Sign In to add comment