/// <summary> /// Save Mesh to disk. /// </summary> /// <param name="mesh">The mesh to save.</param> /// <returns>indicates success or failure</returns> HRESULT DepthSensor::SaveFile(INuiFusionMesh* pMesh, KinectFusionMeshTypes *saveMeshType) { HRESULT hr = S_OK; if (nullptr == pMesh) { return E_INVALIDARG; } //string filename; cout << "Please enter a file name to write: "; getline(cin, filename); if (filename.substr(filename.find_last_of(".") + 1) == "stl") { *saveMeshType = Stl; } else if (filename.substr(filename.find_last_of(".") + 1) == "obj") { *saveMeshType = Obj; } //with no extension name ,set default type ***a.stl else { filename = filename +"a"+".stl"; } //change file name from string to char* char *cfilename = (char*)filename.c_str(); if (Stl == *saveMeshType) { cout << "Creating and saving mesh in format stl,please waiting...... " << endl; hr = WriteBinarySTLMeshFile(pMesh, cfilename); } else if (Obj == *saveMeshType) { cout << "Creating and saving mesh in format obj,please waiting...... " << endl; hr = WriteAsciiObjMeshFile(pMesh, cfilename); } else { hr = E_FAIL; } return hr; }
/// <summary> /// Save Mesh to disk. /// </summary> /// <param name="mesh">The mesh to save.</param> /// <returns>indicates success or failure</returns> HRESULT CKinectFusionExplorer::SaveMeshFile(INuiFusionMesh* pMesh) { HRESULT hr = S_OK; if (nullptr == pMesh) { return E_INVALIDARG; } CComPtr<IFileSaveDialog> pSaveDlg; // Create the file save dialog object. hr = pSaveDlg.CoCreateInstance(__uuidof(FileSaveDialog)); if (FAILED(hr)) { return hr; } // Set the dialog title hr = pSaveDlg->SetTitle(L"Save Kinect Fusion Mesh"); if (SUCCEEDED(hr)) { // Set the button text hr = pSaveDlg->SetOkButtonLabel (L"Save"); if (SUCCEEDED(hr)) { // Set a default filename if (m_bStlMeshFormat) { hr = pSaveDlg->SetFileName(L"MeshedReconstruction.stl"); } else { hr = pSaveDlg->SetFileName(L"MeshedReconstruction.obj"); } if (SUCCEEDED(hr)) { // Set the file type extension if (m_bStlMeshFormat) { hr = pSaveDlg->SetDefaultExtension(L"stl"); } else { hr = pSaveDlg->SetDefaultExtension(L"obj"); } if (SUCCEEDED(hr)) { // Set the file type filters if (m_bStlMeshFormat) { COMDLG_FILTERSPEC allPossibleFileTypes[] = { { L"Stl mesh files", L"*.stl" }, { L"All files", L"*.*" } }; hr = pSaveDlg->SetFileTypes( ARRAYSIZE(allPossibleFileTypes), allPossibleFileTypes); } else { COMDLG_FILTERSPEC allPossibleFileTypes[] = { { L"Obj mesh files", L"*.obj" }, { L"All files", L"*.*" } }; hr = pSaveDlg->SetFileTypes( ARRAYSIZE(allPossibleFileTypes), allPossibleFileTypes ); } if (SUCCEEDED(hr)) { // Show the file selection box hr = pSaveDlg->Show(m_hWnd); // Save the mesh to the chosen file. if (SUCCEEDED(hr)) { CComPtr<IShellItem> pItem; hr = pSaveDlg->GetResult(&pItem); if (SUCCEEDED(hr)) { LPOLESTR pwsz = nullptr; hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pwsz); if (SUCCEEDED(hr)) { SetStatusMessage(L"Saving mesh file, please wait..."); SetCursor(LoadCursor(nullptr, MAKEINTRESOURCE(IDC_WAIT))); if (m_bStlMeshFormat) { hr = WriteBinarySTLMeshFile(pMesh, pwsz); } else { hr = WriteAsciiObjMeshFile(pMesh, pwsz); } CoTaskMemFree(pwsz); } } } } } } } } return hr; }