From 6f9f4755e7a28d4a9fe6f34c9665c4727f11a613 Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Mon, 11 Mar 2024 18:07:55 -0700 Subject: [PATCH] Add creating a ModelRegionID array and move adding Normal data into sv_tetgenmesh_utils.cxx. --- .../PythonAPI/MeshingMesher_PyClass.cxx | 36 ------------------- .../MeshingTetGenOptions_PyClass.cxx | 2 +- .../TetGenMeshObject/sv_tetgenmesh_utils.cxx | 35 ++++++++++++++++++ 3 files changed, 36 insertions(+), 37 deletions(-) diff --git a/Code/Source/PythonAPI/MeshingMesher_PyClass.cxx b/Code/Source/PythonAPI/MeshingMesher_PyClass.cxx index 1ea610633..81ee1c9c2 100644 --- a/Code/Source/PythonAPI/MeshingMesher_PyClass.cxx +++ b/Code/Source/PythonAPI/MeshingMesher_PyClass.cxx @@ -240,42 +240,6 @@ Mesher_get_face_polydata(PyMeshingMesher* self, PyObject* args, PyObject* kwargs vtkSmartPointer polydata = vtkSmartPointer::New(); polydata = cvPolydata->GetVtkPolyData(); - // Add a Normals point or cell array. - // - bool have_cell_normals = true; - #define compute_cell_normals - #ifdef compute_cell_normals - auto normals = vtkSmartPointer::New(); - normals->SplittingOff(); - normals->ConsistencyOn(); - normals->AutoOrientNormalsOn(); - normals->ComputeCellNormalsOn(); - normals->ComputePointNormalsOff(); - normals->SetInputData(polydata); - normals->Update(); - have_cell_normals = true; - - #else - auto normals = vtkSmartPointer::New(); - normals->SetInputData(polydata); - normals->ConsistencyOn(); - normals->AutoOrientNormalsOn(); - normals->FlipNormalsOff(); - normals->ComputePointNormalsOn(); - normals->ComputeCellNormalsOff(); - normals->SplittingOn(); - normals->Update(); - have_cell_normals = false; - #endif - - polydata->DeepCopy(normals->GetOutput()); - - if (have_cell_normals) { - polydata->GetCellData()->GetNormals()->SetName("Normals"); - } else { - polydata->GetPointData()->GetNormals()->SetName("Normals"); - } - return PyUtilGetVtkObject(api, polydata); } diff --git a/Code/Source/PythonAPI/MeshingTetGenOptions_PyClass.cxx b/Code/Source/PythonAPI/MeshingTetGenOptions_PyClass.cxx index 14ed7d67d..b154860d7 100644 --- a/Code/Source/PythonAPI/MeshingTetGenOptions_PyClass.cxx +++ b/Code/Source/PythonAPI/MeshingTetGenOptions_PyClass.cxx @@ -875,7 +875,7 @@ PyTetGenOptionsCreateFromList(cvMeshObject* mesher, std::vector& op try { SetValueMap[name](options, tokens, faceMap); } catch (const std::bad_function_call& except) { - std::cout << "[PyTetGenOptionsCreateFromList] Unknown name: " << name << std::endl; + std::cout << "[SV.PythonAPI] An unknown meshing option '" << name << "' was found in the MESH.msh file." << std::endl; } // Save commands not processed in cvTetGenMeshObject::SetMeshOptions(). diff --git a/Code/Source/sv/Mesh/TetGenMeshObject/sv_tetgenmesh_utils.cxx b/Code/Source/sv/Mesh/TetGenMeshObject/sv_tetgenmesh_utils.cxx index 16cd11357..602dfb8c3 100644 --- a/Code/Source/sv/Mesh/TetGenMeshObject/sv_tetgenmesh_utils.cxx +++ b/Code/Source/sv/Mesh/TetGenMeshObject/sv_tetgenmesh_utils.cxx @@ -662,6 +662,8 @@ int TGenUtils_GetFacePolyData(int id,vtkPolyData *mesh, vtkPolyData *face) vtkSmartPointer lessElementIds = vtkSmartPointer::New(); vtkSmartPointer globalElement2Ids = vtkSmartPointer::New(); vtkSmartPointer modelFaceIds = vtkSmartPointer::New(); + vtkSmartPointer modelFaceRegionIds = vtkSmartPointer::New(); + vtkSmartPointer modelRegionIds = vtkSmartPointer::New(); if (VtkUtils_PDCheckArrayName(mesh,0,"GlobalNodeID") != SV_OK) { @@ -669,12 +671,14 @@ int TGenUtils_GetFacePolyData(int id,vtkPolyData *mesh, vtkPolyData *face) fprintf(stderr," IDs on mesh may not have been assigned properly\n"); return SV_ERROR; } + if (VtkUtils_PDCheckArrayName(mesh,1,"GlobalElementID") != SV_OK) { fprintf(stderr,"Array name 'GlobalElementID' does not exist."); fprintf(stderr," IDs on mesh may not have been assigned properly\n"); return SV_ERROR; } + if (VtkUtils_PDCheckArrayName(mesh,1,"ModelFaceID") != SV_OK) { fprintf(stderr,"Array name 'ModelFaceID' does not exist. Regions must be identified"); @@ -682,6 +686,14 @@ int TGenUtils_GetFacePolyData(int id,vtkPolyData *mesh, vtkPolyData *face) return SV_ERROR; } + bool has_ModelRegionIDs = false; + + if (VtkUtils_PDCheckArrayName(mesh,1,"ModelRegionID") == SV_OK) + { + has_ModelRegionIDs = true; + modelRegionIds = vtkIntArray::SafeDownCast(mesh->GetCellData()->GetScalars("ModelRegionID")); + } + globalNodeIds = vtkIntArray::SafeDownCast(mesh->GetPointData()->GetScalars("GlobalNodeID")); globalElementIds = vtkIntArray::SafeDownCast(mesh->GetCellData()->GetScalars("GlobalElementID")); boundaryScalars = vtkIntArray::SafeDownCast(mesh->GetCellData()->GetScalars("ModelFaceID")); @@ -749,6 +761,9 @@ int TGenUtils_GetFacePolyData(int id,vtkPolyData *mesh, vtkPolyData *face) globalElement2Ids->InsertNextValue(globalElement2); lessElementIds->InsertNextValue(globalElementIds->GetValue(cellId)); modelFaceIds->InsertNextValue(id); + if (has_ModelRegionIDs) { + modelFaceRegionIds->InsertNextValue(modelRegionIds->GetValue(cellId)); + } } } @@ -773,6 +788,26 @@ int TGenUtils_GetFacePolyData(int id,vtkPolyData *mesh, vtkPolyData *face) tempFace->GetCellData()->AddArray(modelFaceIds); tempFace->GetCellData()->SetActiveScalars("ModelFaceID"); + if (has_ModelRegionIDs) { + modelFaceRegionIds->SetName("ModelRegionID"); + tempFace->GetCellData()->AddArray(modelFaceRegionIds); + tempFace->GetCellData()->SetActiveScalars("ModelRegionID"); + } + + // Add cell normals. + // + auto normals = vtkSmartPointer::New(); + normals->SplittingOff(); + normals->ConsistencyOn(); + normals->AutoOrientNormalsOn(); + normals->ComputeCellNormalsOn(); + normals->ComputePointNormalsOff(); + normals->SetInputData(tempFace); + normals->Update(); + + tempFace->DeepCopy(normals->GetOutput()); + tempFace->GetCellData()->GetNormals()->SetName("Normals"); + delete [] pointOnFace; delete [] pointMapping; delete [] cellOnFace;