| 2521 | // --------------------------------------------------------------------- |
| 2522 | |
| 2523 | bool MyFrame::LoadMesh(const wxFileName& mesh_filename, vtkUnstructuredGrid* ug) |
| 2524 | { |
| 2525 | bool all_ok = true; |
| 2526 | vtkObject::GlobalWarningDisplayOn(); // handling errors in this section |
| 2527 | try |
| 2528 | { |
| 2529 | if (mesh_filename.GetExt().Lower()==_T("vtp")) |
| 2530 | { |
| 2531 | vtkSmartPointer<vtkXMLPolyDataReader> vtp_reader = vtkSmartPointer<vtkXMLPolyDataReader>::New(); |
| 2532 | vtp_reader->ReadFromInputStringOn(); |
| 2533 | vtp_reader->SetInputString(ReadEntireFile(mesh_filename).ToStdString()); |
| 2534 | vtp_reader->AddObserver(vtkCommand::ErrorEvent, vtkSmartPointer<ThrowOnErrorObserver>::New()); |
| 2535 | vtp_reader->Update(); |
| 2536 | ug->SetPoints(vtp_reader->GetOutput()->GetPoints()); |
| 2537 | ug->SetCells(VTK_POLYGON, vtp_reader->GetOutput()->GetPolys()); |
| 2538 | } |
| 2539 | else if (mesh_filename.GetExt().Lower()==_T("vtu")) |
| 2540 | { |
| 2541 | vtkSmartPointer<vtkXMLUnstructuredGridReader> vtu_reader = vtkSmartPointer<vtkXMLUnstructuredGridReader>::New(); |
| 2542 | vtu_reader->ReadFromInputStringOn(); |
| 2543 | vtu_reader->SetInputString(ReadEntireFile(mesh_filename).ToStdString()); |
| 2544 | vtu_reader->AddObserver(vtkCommand::ErrorEvent, vtkSmartPointer<ThrowOnErrorObserver>::New()); |
| 2545 | vtu_reader->Update(); |
| 2546 | ug->DeepCopy(vtu_reader->GetOutput()); |
| 2547 | } |
| 2548 | else if (mesh_filename.GetExt().Lower() ==_T("obj")) |
| 2549 | { |
| 2550 | wxString source_filename(mesh_filename.GetFullPath()); |
| 2551 | bool made_temp_file = false; |
| 2552 | if(strlen(mesh_filename.GetFullPath().mb_str())==0) { |
| 2553 | // unicode characters in path, copy to temp file |
| 2554 | const wxString temp_name = wxFileName::CreateTempFileName(""); |
| 2555 | if (wxCopyFile(mesh_filename.GetFullPath(), temp_name)) { |
| 2556 | source_filename = temp_name; |
| 2557 | made_temp_file = true; |
| 2558 | } |
| 2559 | } |
| 2560 | { |
| 2561 | // temporarily turn off internationalisation, to avoid string-to-float conversion issues |
| 2562 | char* old_locale = setlocale(LC_NUMERIC, "C"); |
| 2563 | |
| 2564 | vtkSmartPointer<vtkOBJReader> obj_reader = vtkSmartPointer<vtkOBJReader>::New(); |
| 2565 | obj_reader->SetFileName(source_filename.mb_str()); |
| 2566 | obj_reader->AddObserver(vtkCommand::ErrorEvent, vtkSmartPointer<ThrowOnErrorObserver>::New()); |
| 2567 | obj_reader->Update(); |
| 2568 | |
| 2569 | ug->SetPoints(obj_reader->GetOutput()->GetPoints()); |
| 2570 | ug->SetCells(VTK_POLYGON, obj_reader->GetOutput()->GetPolys()); |
| 2571 | |
| 2572 | // restore the old locale |
| 2573 | setlocale(LC_NUMERIC, old_locale); |
| 2574 | } |
| 2575 | if (made_temp_file) { |
| 2576 | wxRemoveFile(source_filename); |
| 2577 | } |
| 2578 | } |
| 2579 | else |
| 2580 | { |
nothing calls this directly
no test coverage detected