diff --git a/src/Mod/Fem/App/FemVTKTools.cpp b/src/Mod/Fem/App/FemVTKTools.cpp index e1d3faa8a5..c5f8d337bb 100644 --- a/src/Mod/Fem/App/FemVTKTools.cpp +++ b/src/Mod/Fem/App/FemVTKTools.cpp @@ -108,7 +108,7 @@ template void writeVTKFile(const char* filename, vtkSmartPointer< writer->SetInputData(dataset); writer->Write(); } - + void FemVTKTools::importVTKMesh(vtkSmartPointer dataset, FemMesh* mesh) { const vtkIdType nPoints = dataset->GetNumberOfPoints(); @@ -184,7 +184,7 @@ FemMesh* FemVTKTools::readVTKMesh(const char* filename, FemMesh* mesh) Base::TimeInfo Start; Base::Console().Log("Start: read FemMesh from VTK unstructuredGrid ======================\n"); Base::FileInfo f(filename); - + if(f.hasExtension("vtu")) { vtkSmartPointer dataset = readVTKFile(filename); @@ -236,7 +236,7 @@ void exportFemMeshFaces(vtkSmartPointer grid, const SMDS_Fa quad->GetPointIds()->SetId(1, aFace->GetNode(1)->GetID()-1); quad->GetPointIds()->SetId(2, aFace->GetNode(2)->GetID()-1); quad->GetPointIds()->SetId(3, aFace->GetNode(3)->GetID()-1); - + quadArray->InsertNextCell(quad); } //quadratic triangle @@ -263,7 +263,7 @@ void exportFemMeshFaces(vtkSmartPointer grid, const SMDS_Fa quad->GetPointIds()->SetId(5, aFace->GetNode(5)->GetID()-1); quad->GetPointIds()->SetId(6, aFace->GetNode(6)->GetID()-1); quad->GetPointIds()->SetId(7, aFace->GetNode(7)->GetID()-1); - + quadQuadArray->InsertNextCell(quad); } } @@ -275,7 +275,7 @@ void exportFemMeshFaces(vtkSmartPointer grid, const SMDS_Fa if(quadTriangleArray->GetNumberOfCells()>0) grid->SetCells(VTK_QUADRATIC_TRIANGLE, quadTriangleArray); - + if(quadQuadArray->GetNumberOfCells()>0) grid->SetCells(VTK_QUADRATIC_QUAD, quadQuadArray); @@ -291,7 +291,7 @@ void exportFemMeshCells(vtkSmartPointer grid, const SMDS_Vo // quadratic elemnts with 13 and 15 nodes are not added yet vtkSmartPointer quadTetraArray = vtkSmartPointer::New(); vtkSmartPointer quadHexaArray = vtkSmartPointer::New(); - + for (;aVolIter->more();) { const SMDS_MeshVolume* aVol = aVolIter->next(); @@ -314,7 +314,7 @@ void exportFemMeshCells(vtkSmartPointer grid, const SMDS_Vo cell->GetPointIds()->SetId(2, aVol->GetNode(2)->GetID()-1); cell->GetPointIds()->SetId(3, aVol->GetNode(3)->GetID()-1); cell->GetPointIds()->SetId(4, aVol->GetNode(4)->GetID()-1); - + pyramidArray->InsertNextCell(cell); } if(aVol->NbNodes() == 6) { @@ -325,7 +325,7 @@ void exportFemMeshCells(vtkSmartPointer grid, const SMDS_Vo cell->GetPointIds()->SetId(3, aVol->GetNode(3)->GetID()-1); cell->GetPointIds()->SetId(4, aVol->GetNode(4)->GetID()-1); cell->GetPointIds()->SetId(5, aVol->GetNode(5)->GetID()-1); - + wedgeArray->InsertNextCell(cell); } if(aVol->NbNodes() == 8) { @@ -338,7 +338,7 @@ void exportFemMeshCells(vtkSmartPointer grid, const SMDS_Vo cell->GetPointIds()->SetId(5, aVol->GetNode(5)->GetID()-1); cell->GetPointIds()->SetId(6, aVol->GetNode(6)->GetID()-1); cell->GetPointIds()->SetId(7, aVol->GetNode(7)->GetID()-1); - + hexaArray->InsertNextCell(cell); } //quadratic tetrahedra @@ -371,10 +371,10 @@ void exportFemMeshCells(vtkSmartPointer grid, const SMDS_Vo if(hexaArray->GetNumberOfCells()>0) grid->SetCells(VTK_HEXAHEDRON, hexaArray); - + if(quadTetraArray->GetNumberOfCells()>0) grid->SetCells(VTK_QUADRATIC_TETRA, quadTetraArray); - + if(quadHexaArray->GetNumberOfCells()>0) grid->SetCells(VTK_QUADRATIC_HEXAHEDRON, quadHexaArray); @@ -382,11 +382,11 @@ void exportFemMeshCells(vtkSmartPointer grid, const SMDS_Vo void FemVTKTools::exportVTKMesh(const FemMesh* mesh, vtkSmartPointer grid) { - + SMESH_Mesh* smesh = const_cast(mesh->getSMesh()); SMESHDS_Mesh* meshDS = smesh->GetMeshDS(); const SMDS_MeshInfo& info = meshDS->GetMeshInfo(); - + //start with the nodes vtkSmartPointer points = vtkSmartPointer::New(); SMDS_NodeIteratorPtr aNodeIter = meshDS->nodesIterator(); @@ -409,11 +409,11 @@ void FemVTKTools::exportVTKMesh(const FemMesh* mesh, vtkSmartPointer grid = vtkSmartPointer::New(); exportVTKMesh(mesh, grid); //vtkSmartPointer dataset = vtkDataSet::SafeDownCast(grid); @@ -426,7 +426,7 @@ void FemVTKTools::writeVTKMesh(const char* filename, const FemMesh* mesh) else{ Base::Console().Error("file name extension is not supported to write VTK\n"); } - + Base::Console().Log(" %f: Done \n",Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); } @@ -487,7 +487,7 @@ App::DocumentObject* FemVTKTools::readFluidicResult(const char* filename, App::D Base::TimeInfo Start; Base::Console().Log("Start: read FemResult with FemMesh from VTK file ======================\n"); Base::FileInfo f(filename); - + vtkSmartPointer ds; if(f.hasExtension("vtu")) { @@ -501,7 +501,7 @@ App::DocumentObject* FemVTKTools::readFluidicResult(const char* filename, App::D { Base::Console().Error("file name extension is not supported\n"); } - + App::Document* pcDoc = App::GetApplication().getActiveDocument(); if(!pcDoc) { @@ -532,12 +532,12 @@ App::DocumentObject* FemVTKTools::readFluidicResult(const char* filename, App::D static_cast(mesh->getPropertyByName("FemMesh"))->setValue(*fmesh); static_cast(result->getPropertyByName("Mesh"))->setValue(mesh); // PropertyLink is the property type to store DocumentObject pointer - + importFluidicResult(dataset, result); pcDoc->recompute(); - + Base::Console().Log(" %f: Done \n", Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); - + return result; } @@ -561,12 +561,12 @@ void FemVTKTools::writeResult(const char* filename, const App::DocumentObject* r Base::TimeInfo Start; Base::Console().Log("Start: write FemResult or CfdResult to VTK unstructuredGrid dataset =======\n"); Base::FileInfo f(filename); - + vtkSmartPointer grid = vtkSmartPointer::New(); App::DocumentObject* mesh = static_cast(res->getPropertyByName("Mesh"))->getValue(); const FemMesh& fmesh = static_cast(mesh->getPropertyByName("FemMesh"))->getValue(); FemVTKTools::exportVTKMesh(&fmesh, grid); - + if(res->getPropertyByName("Velocity")){ FemVTKTools::exportFluidicResult(res, grid); } @@ -576,7 +576,7 @@ void FemVTKTools::writeResult(const char* filename, const App::DocumentObject* r else{ return; } - + //vtkSmartPointer dataset = vtkDataSet::SafeDownCast(grid); if(f.hasExtension("vtu")){ writeVTKFile(filename, grid); @@ -587,7 +587,7 @@ void FemVTKTools::writeResult(const char* filename, const App::DocumentObject* r else{ Base::Console().Error("file name extension is not supported to write VTK\n"); } - + Base::Console().Log(" %f: Done \n",Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); } @@ -604,7 +604,7 @@ void FemVTKTools::importFluidicResult(vtkSmartPointer dataset, App:: vars["TurbulenceEnergy"] = "k"; vars["TurbulenceDissipationRate"] = "epsilon"; vars["TurbulenceSpecificDissipation"] = "omega"; - + const int max_var_index = 11; std::vector stats(3*max_var_index, 0.0); @@ -620,10 +620,10 @@ void FemVTKTools::importFluidicResult(vtkSmartPointer dataset, App:: varids["TurbulenceDissipationRate"] = 8; //varids["TurbulenceThermalDiffusivity"] = 9; //varids["TurbulenceSpecificDissipation"] = 10; - + double ts = 0.0; // t=0.0 for static simulation static_cast(res->getPropertyByName("Time"))->setValue(ts); - + vtkSmartPointer pd = dataset->GetPointData(); const vtkIdType nPoints = dataset->GetNumberOfPoints(); if(pd->GetNumberOfArrays() == 0) { @@ -631,7 +631,7 @@ void FemVTKTools::importFluidicResult(vtkSmartPointer dataset, App:: // if pointData is empty, data may be in cellDate, cellData -> pointData interpolation is possible in VTK return; } - + std::vector nodeIds(nPoints); vtkSmartPointer vel = pd->GetArray(vars["Velocity"]); if(nPoints && vel && vel->GetNumberOfComponents() == 3) { @@ -692,7 +692,7 @@ void FemVTKTools::importFluidicResult(vtkSmartPointer dataset, App:: stats[index*3] = vmin; stats[index*3 + 2] = vmax; stats[index*3 + 1] = vmean/nPoints; - + Base::Console().Message("field \"%s\" has been loaded \n", kv.first); } } @@ -851,7 +851,7 @@ void FemVTKTools::exportMechanicalResult(const App::DocumentObject* obj, vtkSmar grid->GetPointData()->AddArray(data); }} - + if(!res->StressVectors.getValues().empty()) { const std::vector& vec = res->StressVectors.getValues(); if (vec.size()>1) { @@ -865,7 +865,7 @@ void FemVTKTools::exportMechanicalResult(const App::DocumentObject* obj, vtkSmar } grid->GetPointData()->AddArray(data); - }} + }} if(!res->StrainVectors.getValues().empty()) { const std::vector& vec = res->StrainVectors.getValues(); @@ -880,8 +880,8 @@ void FemVTKTools::exportMechanicalResult(const App::DocumentObject* obj, vtkSmar } grid->GetPointData()->AddArray(data); - }} - + }} + } } // namespace