gpt4 book ai didi

c++ - 如何获得两个组合的 vtkPolyData 表面的边界?

转载 作者:行者123 更新时间:2023-11-30 02:46:26 32 4
gpt4 key购买 nike

我的 VTK 程序使用 vtkCubeAxesActor 在坐标系中绘制一个 vtkPolyData 对象 surface1。我按以下方式定位立方体轴:

cubeAxesActor->SetBounds( surface1->GetBounds() );

我最近添加了另一个 vtkPolyData 对象,surface2。有没有一种好方法可以计算两个表面的“总”边界?

我知道我可以做这样的事情:

float *bounds1 = surface1->GetBounds();
float *bounds2 = surface2->GetBounds();
float *bounds_total;
bounds_total[0] = min( bounds1[0], bounds2[0] );
bounds_total[1] = max( bounds1[1], bounds2[1] );
bounds_total[2] = min( bounds1[2], bounds2[2] );
// ...

但我认为使用 VTK 内置函数有更好的方法吗?

最佳答案

你是如何添加这个新的 vtkPolyData 的?通过向 vtkActor 添加一个 vtkPolyDataMapper(其中包含一个 vtkPolyData),可以自动计算边界

vtkSphereSource *sphere = vtkSphereSource::New(); 
sphere->SetRadius(10.0);
sphere->Update();

vtkPolyDataMapper *map = vtkPolyDataMapper::New();
map->SetInputData(sphere->GetOutput());
vtkActor *aSphere = vtkActor::New();
aSphere->SetMapper(map);

std::cout << aSphere->GetBounds ()[0] << " "
<< aSphere->GetBounds ()[1] << std::endl; // print : -10 10

您可以在使用具有 vtkAppendPolyData 的 actor 之前计算多个 vtkPolyData 的边界

 vtkSphereSource *sphere2 = vtkSphereSource::New(); 
sphere2->SetRadius(10.0);
sphere2->SetCenter (15, 15, 0);
sphere2->Update();

vtkAppendPolyData *app = vtkAppendPolyData::New();
app->AddInputData (sphere->GetOutput ());
app->AddInputData (sphere2->GetOutput ());
app->Update();

std::cout << app->GetOutput()->GetBounds ()[0] << " "
<< app->GetOutput()->GetBounds ()[1] << std::endl; // prints -10 25

关于c++ - 如何获得两个组合的 vtkPolyData 表面的边界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23580170/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com