VTK:平面和多边形数据之间的交点
有没有一种简单的方法来计算平面和多边形数据对象是否相交 我想知道我的polydata对象在哪一侧突出我的边界框VTK:平面和多边形数据之间的交点,vtk,bounding-box,intersect,Vtk,Bounding Box,Intersect,有没有一种简单的方法来计算平面和多边形数据对象是否相交 我想知道我的polydata对象在哪一侧突出我的边界框 我想使用VTK执行此任务。vtkIntersectionPolyDataFilter是否适合您 我用一个vtkBoundingBox解决了这个问题,它有平面位置,第二个vtkBoundingBox从我的vtkPolyData中得到了边界,如下所示: #include <vtkSmartPointer.h> #include <vtkCubeSource.h> #
我想使用VTK执行此任务。vtkIntersectionPolyDataFilter是否适合您 我用一个
vtkBoundingBox
解决了这个问题,它有平面位置,第二个vtkBoundingBox
从我的vtkPolyData
中得到了边界,如下所示:
#include <vtkSmartPointer.h>
#include <vtkCubeSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkPlane.h>
#include <vtkCutter.h>
#include <vtkProperty.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
int main(int, char *[])
{
vtkSmartPointer<vtkCubeSource> cube =
vtkSmartPointer<vtkCubeSource>::New();
cube->SetXLength(40);
cube->SetYLength(30);
cube->SetZLength(20);
vtkSmartPointer<vtkPolyDataMapper> cubeMapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
cubeMapper->SetInputConnection(cube->GetOutputPort());
// Create a plane to cut,here it cuts in the XZ direction (xz normal=(1,0,0);XY =(0,0,1),YZ =(0,1,0)
vtkSmartPointer<vtkPlane> plane =
vtkSmartPointer<vtkPlane>::New();
plane->SetOrigin(10,0,0);
plane->SetNormal(1,0,0);
// Create cutter
vtkSmartPointer<vtkCutter> cutter =
vtkSmartPointer<vtkCutter>::New();
cutter->SetCutFunction(plane);
cutter->SetInputConnection(cube->GetOutputPort());
cutter->Update();
vtkSmartPointer<vtkPolyDataMapper> cutterMapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
cutterMapper->SetInputConnection( cutter->GetOutputPort());
// Create plane actor
vtkSmartPointer<vtkActor> planeActor =
vtkSmartPointer<vtkActor>::New();
planeActor->GetProperty()->SetColor(1.0,1,0);
planeActor->GetProperty()->SetLineWidth(2);
planeActor->SetMapper(cutterMapper);
// Create cube actor
vtkSmartPointer<vtkActor> cubeActor =
vtkSmartPointer<vtkActor>::New();
cubeActor->GetProperty()->SetColor(0.5,1,0.5);
cubeActor->GetProperty()->SetOpacity(0.5);
cubeActor->SetMapper(cubeMapper);
// Create renderers and add actors of plane and cube
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(planeActor); //display the rectangle resulting from the cut
renderer->AddActor(cubeActor); //display the cube
// Add renderer to renderwindow and render
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
renderWindow->SetSize(600, 600);
vtkSmartPointer<vtkRenderWindowInteractor> interactor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
interactor->SetRenderWindow(renderWindow);
renderer->SetBackground(0,0,0);
renderWindow->Render();
interactor->Start();
return EXIT_SUCCESS;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int main(int,char*[])
{
VTKSmart指针多维数据集=
vtkSmartPointer::New();
立方体->设置X长度(40);
立方体->设置长度(30);
立方体->设置长度(20);
VTKSmart指针立方映射器=
vtkSmartPointer::New();
cubeMapper->SetInputConnection(多维数据集->GetOutputPort());
//创建一个要剪切的平面,在此平面沿XZ方向剪切(XZ法线=(1,0,0);XY=(0,0,1),YZ=(0,1,0)
VTKSmart指针平面=
vtkSmartPointer::New();
平面->设置原点(10,0,0);
平面->设置法线(1,0,0);
//创建切割器
VTKSmart指针切割器=
vtkSmartPointer::New();
刀具->设置切削功能(平面);
cutter->SetInputConnection(多维数据集->GetOutputPort());
刀具->更新();
vtkSmartPointer切割器=
vtkSmartPointer::New();
cutterMapper->SetInputConnection(cutter->GetOutputPort());
//创建平面演员
vtksmart=
vtkSmartPointer::New();
planeActor->GetProperty()->SetColor(1.0,1,0);
planeActor->GetProperty()->SetLineWidth(2);
planeActor->SetMapper(切割机);
//创建多维数据集参与者
vtkSmartPointer立方振荡器=
vtkSmartPointer::New();
cubeActor->GetProperty()->SetColor(0.5,1,0.5);
cubeActor->GetProperty()->SetOpacity(0.5);
cubeActor->SetMapper(cubeMapper);
//创建渲染器并添加平面和立方体的角色
VTKSmart指针渲染器=
vtkSmartPointer::New();
renderer->AddActor(planeActor);//显示剪切产生的矩形
renderer->AddActor(cubeActor);//显示多维数据集
//将渲染器添加到renderwindow并渲染
vtkSmartPointer渲染窗口=
vtkSmartPointer::New();
renderWindow->AddRenderer(渲染器);
渲染窗口->设置大小(600600);
vtkSmartPointer交互器=
vtkSmartPointer::New();
交互器->设置渲染窗口(渲染窗口);
渲染器->背景(0,0,0);
renderWindow->Render();
交互器->开始();
返回退出成功;
}