MCPcopy Create free account
hub / github.com/Kitware/VTK / UpdateWithDecimation

Method UpdateWithDecimation

Rendering/HyperTreeGrid/vtkHyperTreeGridMapper.cxx:240–295  ·  view source on GitHub ↗

------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

238
239//------------------------------------------------------------------------------
240vtkSmartPointer<vtkCompositeDataSet> vtkHyperTreeGridMapper::UpdateWithDecimation(
241 vtkCompositeDataSet* cds, vtkRenderer* ren)
242{
243 bool useAdapt = this->UseAdaptiveDecimation;
244
245 vtkNew<vtkAdaptiveDataSetSurfaceFilter> adaptiveGeometryFilter;
246 vtkNew<vtkHyperTreeGridGeometry> geometryFilter;
247 vtkNew<vtkDataSetSurfaceFilter> surfaceFilter;
248
249 adaptiveGeometryFilter->SetRenderer(ren);
250
251 auto outputComposite = vtkSmartPointer<vtkCompositeDataSet>::Take(cds->NewInstance());
252 outputComposite->CopyStructure(cds);
253
254 auto iter = vtkSmartPointer<vtkCompositeDataIterator>::Take(cds->NewIterator());
255 iter->SkipEmptyNodesOn();
256 for (iter->InitTraversal(); !iter->IsDoneWithTraversal(); iter->GoToNextItem())
257 {
258 vtkDataObject* leaf = iter->GetCurrentDataObject();
259 if (auto* htg = vtkHyperTreeGrid::SafeDownCast(leaf))
260 {
261 if (useAdapt)
262 {
263 // use adaptive decimation
264 adaptiveGeometryFilter->SetInputDataObject(htg);
265 adaptiveGeometryFilter->Update();
266 vtkDataObject* outputDS = adaptiveGeometryFilter->GetOutputDataObject(0);
267 auto newBlock = vtkSmartPointer<vtkDataObject>::Take(outputDS->NewInstance());
268 newBlock->ShallowCopy(outputDS);
269 outputComposite->SetDataSet(iter.Get(), newBlock);
270 }
271 else
272 {
273 // simply transform to polydata
274 geometryFilter->SetInputDataObject(htg);
275 geometryFilter->Update();
276 vtkDataObject* outputDS = geometryFilter->GetOutputDataObject(0);
277 auto newBlock = vtkSmartPointer<vtkDataObject>::Take(outputDS->NewInstance());
278 newBlock->ShallowCopy(outputDS);
279 outputComposite->SetDataSet(iter.Get(), newBlock);
280 }
281 }
282 else if (auto* ds = vtkDataSet::SafeDownCast(leaf))
283 {
284 // other cases
285 surfaceFilter->SetInputDataObject(ds);
286 surfaceFilter->Update();
287 vtkDataObject* outputDS = surfaceFilter->GetOutputDataObject(0);
288 auto newBlock = vtkSmartPointer<vtkDataObject>::Take(outputDS->NewInstance());
289 newBlock->ShallowCopy(outputDS);
290 outputComposite->SetDataSet(iter.Get(), newBlock);
291 }
292 }
293
294 return outputComposite;
295}
296
297//------------------------------------------------------------------------------

Callers 1

RenderMethod · 0.95

Calls 15

TakeFunction · 0.85
SetRendererMethod · 0.45
NewInstanceMethod · 0.45
CopyStructureMethod · 0.45
NewIteratorMethod · 0.45
InitTraversalMethod · 0.45
IsDoneWithTraversalMethod · 0.45
GoToNextItemMethod · 0.45
GetCurrentDataObjectMethod · 0.45
SetInputDataObjectMethod · 0.45
UpdateMethod · 0.45
GetOutputDataObjectMethod · 0.45

Tested by

no test coverage detected