171 const char *mfilename,
172 int metricData,
int binary,
173 int npart,
int myid,
int master) {
174 int hasPointRef = 0, hasCellRef = 0;
177 vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
180 for ( MMG5_int k=1; k<=
mesh->
np; ++k ) {
182 if ( !
MG_VOK(ppt) )
continue;
186 if (
mesh->
dim == 2 ) ppt->
c[2] = 0.;
187 if ( ppt->
ref ) hasPointRef = 1;
189 points->InsertNextPoint(ppt->
c[0], ppt->
c[1], ppt->
c[2]);
193 auto dataset = vtkSmartPointer<T> :: New();
194 dataset->SetPoints(points);
198 vtkSmartPointer<vtkCellArray> cellArray = vtkSmartPointer<vtkCellArray> ::New();
199 vtkSmartPointer<vtkWedge> wedge = vtkSmartPointer<vtkWedge> ::New();
200 vtkSmartPointer<vtkTetra> tetra = vtkSmartPointer<vtkTetra> ::New();
201 vtkSmartPointer<vtkTriangle> tria = vtkSmartPointer<vtkTriangle> ::New();
202 vtkSmartPointer<vtkQuad> quadra = vtkSmartPointer<vtkQuad> ::New();
203 vtkSmartPointer<vtkLine> edge = vtkSmartPointer<vtkLine> ::New();
212 for ( MMG5_int k=1; k<=
mesh->
na; ++k ) {
214 if ( !pa || !pa->
a )
continue;
216 if ( pa->
ref ) hasCellRef = 1;
221 cellArray->InsertNextCell(edge);
222 types[ic++] = VTK_LINE;
228 for ( MMG5_int k=1; k<=
mesh->
nt; ++k ) {
230 if ( !
MG_EOK(ptt) )
continue;
232 if ( ptt->
ref ) hasCellRef = 1;
234 for (
int i=0; i<3; ++i ) {
237 cellArray->InsertNextCell(tria);
238 types[ic++] = VTK_TRIANGLE;
242 for ( MMG5_int k=1; k<=
mesh->
nquad; ++k ) {
244 if ( !
MG_EOK(pq) )
continue;
246 if ( pq->
ref ) hasCellRef = 1;
248 for (
int i=0; i<4; ++i ) {
251 cellArray->InsertNextCell(quadra);
252 types[ic++] = VTK_QUAD;
256 for ( MMG5_int k=1; k<=
mesh->
ne; ++k ) {
258 if ( !
MG_EOK(pt) )
continue;
260 if ( pt->
ref ) hasCellRef = 1;
262 for (
int i=0; i<4; ++i ) {
265 cellArray->InsertNextCell(tetra);
266 types[ic++] = VTK_TETRA;
272 if ( !
MG_EOK(ppr) )
continue;
274 if ( ppr->
ref ) hasCellRef = 1;
276 for (
int i=0; i<6; ++i ) {
279 cellArray->InsertNextCell(wedge);
280 types[ic++] = VTK_WEDGE;
290 auto *ar = vtkFloatArray::New();
292 ar->SetNumberOfComponents(1);
293 ar->SetNumberOfTuples(
mesh->
np);
294 ar->SetName(
"medit:ref");
296 for ( MMG5_int k = 0; k <
mesh->
np; k++ ) {
298 if ( !
MG_VOK(ppt) )
continue;
300 ar->SetTuple1(ppt->
tmp,ppt->
ref);
303 dataset->GetPointData()->AddArray(ar);
306 auto *ar = vtkFloatArray::New();
308 ar->SetNumberOfComponents(1);
309 ar->SetNumberOfTuples(nc);
310 ar->SetName(
"medit:ref");
313 for ( MMG5_int k = 1; k <=
mesh->
na; k++ ) {
317 for ( MMG5_int k = 1; k <=
mesh->
nt; k++ ) {
321 for ( MMG5_int k = 1; k <=
mesh->
nquad; k++ ) {
325 for ( MMG5_int k = 1; k <=
mesh->
ne; k++ ) {
329 for ( MMG5_int k = 1; k <=
mesh->
nprism; k++ ) {
334 dataset->GetCellData()->AddArray(ar);
341 if ( metricData==1 ) {
354 static int mmgWarn = 0;
355 for (
int isol=0; isol<nsols; ++isol) {
361 fprintf(stderr,
" ## Warning: %s: missing data for at least 1 solution."
362 " Skipped.\n",__func__);
368 if ( psl->
size == 1 ) {
371 else if ( psl->
size == psl->
dim ) {
378 auto *ar = vtkDoubleArray::New();
380 ar->SetNumberOfComponents(ncp);
381 ar->SetNumberOfTuples(
mesh->
np);
394 strcat ( data ,
":metric");
401 ar->SetName(
"no_name");
407 if ( psl->
size!= (psl->
dim*(psl->
dim+1))/2 ) {
409 for ( MMG5_int k=1; k<=
mesh->
np; k++) {
411 if ( !
MG_VOK(ppt) )
continue;
413 MMG5_int iadr = k*psl->
size;
414 for (
int i=0; i<psl->
size; ++i ) {
415 dfmt[i] = psl->
m[iadr+i];
418 if ( psl->
dim==2 && ncp==3 ) {
421 ar->SetTuple(ppt->
tmp,dfmt);
426 for ( MMG5_int k=1; k<=
mesh->
np; k++) {
428 if ( !
MG_VOK(ppt) )
continue;
430 MMG5_int iadr = k*psl->
size;
431 double *d = &psl->
m[iadr];
439 double dbuf[6] = {0,0,0,0,0,0};
445 for (
int i=0; i<psl->
size; i++) dbuf[i] = psl->
m[psl->
size*k+i];
457 ar->SetTuple(ppt->
tmp,dfmt);
460 dataset->GetPointData()->AddArray(ar);
467 vtkSmartPointer<PWriter> writer = vtkSmartPointer<PWriter>::New();
469#if VTK_MAJOR_VERSION <= 5
470 writer->SetInput(dataset);
472 writer->SetInputData(dataset);
475 writer->SetFileName(mfilename);
477 writer->SetNumberOfPieces(npart);
478 writer->SetStartPiece(myid);
479 writer->SetEndPiece(myid);
484 vtkSmartPointer<TWriter> writer = vtkSmartPointer<TWriter>::New();
486 writer->SetFileName(mfilename);
488#if VTK_MAJOR_VERSION <= 5
489 writer->SetInput(dataset);
491 writer->SetInputData(dataset);
int MMG5_saveVtkMesh_i(MMG5_pMesh mesh, MMG5_pSol *sol, const char *mfilename, int metricData, int binary, int npart, int myid, int master)