VTKFIG  0.20.20181114
Easy VTK based in situ visualization
template<class DATA , class FILTER >
void vtkfig::GridView::RTBuildVTKPipeline3D ( )
private

3D Filter

Definition at line 342 of file vtkfigGridView.cxx.

343  {
344  RTCalcTransform();
345  {
346  double range[2];
347  auto cr=vtkDoubleArray::SafeDownCast(DATA::SafeDownCast(data_producer->GetOutputDataObject(0))->GetCellData()->GetAbstractArray("cellregions"));
348 
349  auto scalar = vtkSmartPointer<vtkAssignAttribute>::New();
350  if (cr)
351  {
352  scalar->Assign("cellregions",vtkDataSetAttributes::SCALARS,vtkAssignAttribute::CELL_DATA);
353  scalar->SetInputConnection(data_producer->GetOutputPort());
354  cr->GetRange(range);
355 
356  cell_lut->SetTableRange(range[0],range[1]);
357  cell_lut->Modified();
358  }
359 
360 
361  planeX->SetOrigin(trans_center);
362  planeY->SetOrigin(trans_center);
363  planeZ->SetOrigin(trans_center);
364 
365  auto transgeometry=vtkSmartPointer<vtkTransformFilter>::New();
366  transgeometry->SetTransform(transform);
367 
368 
369  if (cr)
370  transgeometry->SetInputConnection(scalar->GetOutputPort());
371  else
372  transgeometry->SetInputConnection(data_producer->GetOutputPort());
373 
374 
375 
376 
377  cutgeometry->SetInputConnection(transgeometry->GetOutputPort());
378 
379  auto cutpolydata=vtkSmartPointer<vtkGeometryFilter>::New();
380  cutpolydata->SetInputConnection(cutgeometry->GetOutputPort());
381 
382  auto cells = vtkSmartPointer<vtkPolyDataMapper>::New();
383  cells->SetInputConnection(cutpolydata->GetOutputPort());
384 
385  if (cr)
386  {
387  cells->UseLookupTableScalarRangeOn();
388  cells->SetLookupTable(cell_lut);
389  }
390  else
391  cells->ScalarVisibilityOff();
392 #ifdef VTK_HAS_MAPPER_IMMEDIATE_RENDERING_ON
393  cells->ImmediateModeRenderingOn();
394 #endif
395  cellplot = vtkSmartPointer<vtkActor>::New();
396  cellplot->SetMapper(cells);
397  if (!cr)
398  cellplot->GetProperty()->SetColor(0.9,0.9,0.9);
400 
401 
402  // Extract edges is slow, plot cell polydata with wireframe instead
403  // auto edges= vtkSmartPointer<vtkExtractEdges>::New();
404  // edges->SetInputConnection(cutgeometry->GetOutputPort());
405  // auto emapper = vtkSmartPointer<vtkPolyDataMapper>::New();
406  // emapper->SetInputConnection(edges->GetOutputPort());
407  // emapper->ScalarVisibilityOff();
408  // edgeplot = vtkSmartPointer<vtkActor>::New();
409  // edgeplot->GetProperty()->SetColor(0,0,0);
410  // edgeplot->SetMapper(emapper);
411  // Figure::RTAddActor(edgeplot);
412 
413 
414  auto celledges = vtkSmartPointer<vtkPolyDataMapper>::New();
415  celledges->SetInputConnection(cutpolydata->GetOutputPort());
416  celledges->ScalarVisibilityOff();
417 #ifdef VTK_HAS_MAPPER_IMMEDIATE_RENDERING_ON
418  celledges->ImmediateModeRenderingOn();
419 #endif
420  auto celledgeplot = vtkSmartPointer<vtkActor>::New();
421  celledgeplot->SetMapper(celledges);
422  celledgeplot->GetProperty()->SetColor(0,0,0);
423  celledgeplot->GetProperty()->SetRepresentationToWireframe();
424  Figure::RTAddActor(celledgeplot);
425 
426 
427  if ( cr)
428  {
429  cbar=BuildColorBar(cells);
430  cbar->SetLabelFormat(" %-2.0f ");
431  cbar->SetNumberOfLabels((int)(range[1]-range[0]+1));
432  cbar->SetTitle("c ");
434  }
435  }
436 
437  auto boundary_data=vtkDataSet::SafeDownCast(boundary_data_producer->GetOutputDataObject(0));
438  if (boundary_data)
439  {
440  double brange[2];
441  auto bcr=vtkDoubleArray::SafeDownCast(boundary_data->GetCellData()->GetAbstractArray("boundarycellregions"));
442 
443  if (bcr)
444  {
445  auto bscalar = vtkSmartPointer<vtkAssignAttribute>::New();
446  bscalar->Assign("boundarycellregions",vtkDataSetAttributes::SCALARS,vtkAssignAttribute::CELL_DATA);
447  bscalar->SetInputDataObject(boundary_data);
448  bcr->GetRange(brange);
449 
450  bface_lut->SetTableRange(brange[0],brange[1]);
451  bface_lut->Modified();
452  auto bgeometry=vtkSmartPointer<FILTER>::New();
453  bgeometry->SetInputConnection(bscalar->GetOutputPort());
454 
455  auto transbgeometry=vtkSmartPointer<vtkTransformPolyDataFilter>::New();
456  transbgeometry->SetInputConnection(bgeometry->GetOutputPort());
457  transbgeometry->SetTransform(transform);
458 
459 
460  bcutgeometry->SetInputConnection(transbgeometry->GetOutputPort());
461 
462  auto bcutpolydata=vtkSmartPointer<vtkGeometryFilter>::New();
463  bcutpolydata->SetInputConnection(bcutgeometry->GetOutputPort());
464 
465 
466 
467  auto bcells = vtkSmartPointer<vtkPolyDataMapper>::New();
468  bcells->SetInputConnection(bcutpolydata->GetOutputPort());
469 
470  bcells->UseLookupTableScalarRangeOn();
471  bcells->SetLookupTable(bface_lut);
472  bcells->ScalarVisibilityOn();
473 #ifdef VTK_HAS_MAPPER_IMMEDIATE_RENDERING_ON
474  bcells->ImmediateModeRenderingOn();
475 #endif
476  bcellplot = vtkSmartPointer<vtkActor>::New();
477  bcellplot->SetMapper(bcells);
479 
480 
481  auto bedges= vtkSmartPointer<vtkExtractEdges>::New();
482  bedges->SetInputConnection(bcutgeometry->GetOutputPort());
483  auto bemapper = vtkSmartPointer<vtkPolyDataMapper>::New();
484  bemapper->SetInputConnection(bedges->GetOutputPort());
485  bemapper->ScalarVisibilityOff();
486  bedgeplot = vtkSmartPointer<vtkActor>::New();
487  bedgeplot->GetProperty()->SetColor(0,0,0);
488  bedgeplot->SetMapper(bemapper);
490 
491 
492  bcbar=BuildColorBar(bcells,1);
493  bcbar->SetTitle("b ");
494  bcbar->SetLabelFormat(" %-2.0f ");
495  bcbar->SetNumberOfLabels((int)(brange[1]-brange[0]+1));
497  }
498  }
499  }
void RTAddActor2D(vtkSmartPointer< vtkActor2D > prop)
Add vtk Actor to renderer showing figure.
vtkSmartPointer< vtkScalarBarActor > bcbar
Definition: vtkfigFigure.h:294
vtkSmartPointer< vtkActor > bcellplot
vtkSmartPointer< vtkExtractGeometry > cutgeometry
vtkSmartPointer< vtkLookupTable > bface_lut
Definition: vtkfigFigure.h:276
vtkSmartPointer< vtkActor > bedgeplot
vtkSmartPointer< vtkTrivialProducer > data_producer
Data producer for grid dataset.
Definition: vtkfigFigure.h:247
vtkSmartPointer< vtkActor > cellplot
vtkSmartPointer< vtkTransform > transform
Definition: vtkfigFigure.h:200
void RTCalcTransform()
Calculate transformation to unit cube This shall be applied to all data.
vtkSmartPointer< vtkExtractGeometry > bcutgeometry
vtkSmartPointer< vtkPlane > planeY
Definition: vtkfigFigure.h:209
vtkSmartPointer< vtkTrivialProducer > boundary_data_producer
Data producer for boundary grid dataset.
Definition: vtkfigFigure.h:250
vtkSmartPointer< vtkLookupTable > cell_lut
Definition: vtkfigFigure.h:275
void RTAddActor(vtkSmartPointer< vtkActor > prop)
Add vtk Actor to renderer showing figure.
vtkSmartPointer< vtkPlane > planeX
Plane equations for plane sections.
Definition: vtkfigFigure.h:208
vtkSmartPointer< vtkScalarBarActor > cbar
Definition: vtkfigFigure.h:293
vtkSmartPointer< vtkScalarBarActor > BuildColorBar(vtkSmartPointer< vtkPolyDataMapper > mapper, int irank=0)
Definition: vtkfigTools.cxx:88
vtkSmartPointer< vtkPlane > planeZ
Definition: vtkfigFigure.h:210
double trans_center[3]
Definition: vtkfigFigure.h:533

+ Here is the call graph for this function: