VTK:平面和多边形数据之间的交点

VTK:平面和多边形数据之间的交点,vtk,bounding-box,intersect,Vtk,Bounding Box,Intersect,有没有一种简单的方法来计算平面和多边形数据对象是否相交 我想知道我的polydata对象在哪一侧突出我的边界框 我想使用VTK执行此任务。vtkIntersectionPolyDataFilter是否适合您 我用一个vtkBoundingBox解决了这个问题,它有平面位置,第二个vtkBoundingBox从我的vtkPolyData中得到了边界,如下所示: #include <vtkSmartPointer.h> #include <vtkCubeSource.h> #

有没有一种简单的方法来计算平面和多边形数据对象是否相交

我想知道我的polydata对象在哪一侧突出我的边界框


我想使用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();
交互器->开始();
返回退出成功;
}