MCPcopy Create free account
hub / github.com/GollyGang/ready / LoadMesh

Method LoadMesh

src/gui/frame.cpp:2523–2596  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2521// ---------------------------------------------------------------------
2522
2523bool 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 {

Callers

nothing calls this directly

Calls 2

ReadEntireFileFunction · 0.85
UpdateMethod · 0.45

Tested by

no test coverage detected