vtkdelaunay3d的参数设置_vtk 点的显示

该博客介绍了如何利用VTK库进行3D Delaunay剖分,并展示了如何设置参数和显示点数据。通过创建随机点集,然后用vtkDelaunay3D进行3D Delaunay处理,最后用vtkActor和vtkMapper进行可视化。代码中包含了点云、2D点和轮廓的生成与处理。
摘要由CSDN通过智能技术生成

#include "vtkActor.h"

#include "vtkDelaunay2D.h"

#include "vtkDelaunay3D.h"

#include "vtkCamera.h"

#include "vtkShrinkFilter.h"

#include

"vtkCellArray.h"

#include

"vtkFloatArray.h"

#include

"vtkPointData.h"

#include

"vtkPoints.h"

#include

"vtkPolyData.h"

#include

"vtkPolyDataMapper.h"

#include

"vtkDataSetMapper.h"

#include

"vtkRenderWindow.h"

#include

"vtkRenderWindowInteractor.h"

#include

"vtkRenderer.h"

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include  #include "vtkProperty.h"

#include "vtkPolyVertex.h"

#include "vtkUnstructuredGrid.h"

#define PI 3.14

#define dir

2*PI/10

int

main()

{

int i,j,r;

double x,y;

//points

vtkPoints *points = vtkPoints::New();

vtkPoints *points2D = vtkPoints::New();

srand( (unsigned)time( NULL ) );

int RANGE_MIN = 1;

int RANGE_MAX = 10;

//

for(i=0;i<10;i++)

{

for(j=0;j<10;j++)

{

int rand10 = (((double) rand()

/(double) RAND_MAX) * RANGE_MAX + RANGE_MIN);

x=(i+1+(double)(rand10/10))*cos(j*dir+rand10*dir/10);

y=(i+1+(double)(rand10/10))*sin(j*dir+rand10*dir/10);

points->InsertPoint((i*10+j),x,y,i);

}

}

for(i=0;i<50;i++)

{

int rand10 = (((double) rand() /(double)

RAND_MAX) * RANGE_MAX + RANGE_MIN);

x=rand10*cos(i*2*PI/50);

y=rand10*sin(i*2*PI/50);

points2D->InsertPoint(i,x,y,0.0);

}

//轮廓

static vtkIdType

pts[10][10]={{0,1,2,3,4,5,6,7,8,9},{10,11,12,13,14,15,16,17,18,19},{20,21,22,23,24,25,26,27,28,29},{30,31,32,33,34,35,36,37,38,39},{40,41,42,43,44,45,46,47,48,49},{50,51,52,53,54,55,56,57,58,59},{60,61,62,63,64,65,66,67,68,69},{70,71,72,73,74,75,76,77,78,79},{80,81,82,83,84,85,86,87,88,89},{90,91,92,93,94,95,96,97,98,99}};

vtkCellArray *polys=vtkCellArray::New();

for(i=0;i<10;i++)polys->InsertNextCell(10,pts[i]);

vtkPolyData *contous=vtkPolyData::New();

contous->SetPoints(points);

contous->SetPolys(polys);

//3Dpoints 100

vtkPolyVertex * polyvertex =

vtkPolyVertex::New();

polyvertex->GetPointIds()->SetNumberOfIds(100);

for(i=0;i<100;i++) {polyvertex->GetPointIds()->SetId(i,i);

}

vtkUnstructuredGrid * pointscloud=vtkUnstructuredGrid::New();

pointscloud->SetPoints(points);

pointscloud->InsertNextCell(polyvertex->GetCellType(),

polyvertex->GetPointIds());

//2Dpoints 50

vtkPolyVertex * polyvertex2D =

vtkPolyVertex::New();

polyvertex2D->GetPointIds()->SetNumberOfIds(50);

for(i=0;i<50;i++) {polyvertex2D->GetPointIds()->SetId(i,i);

}

vtkUnstructuredGrid *

pointscloud2D=vtkUnstructuredGrid::New();

pointscloud2D->SetPoints(points2D);

pointscloud2D->InsertNextCell(polyvertex2D->GetCellType(),

polyvertex2D->GetPointIds());

//删除points和cell

points->Delete();

polys->Delete();

polyvertex->Delete();

polyvertex2D->Delete();

//

//delannay处理

vtkDelaunay3D* deln=vtkDelaunay3D::New();

deln->SetTolerance(0.001);

deln->SetInput(pointscloud);

vtkDelaunay2D*

deln2D=vtkDelaunay2D::New();

deln2D->SetTolerance(0.001);

deln2D->SetInput(pointscloud2D); /

//mapper

vtkDataSetMapper *mappoints =

vtkDataSetMapper::New();

mappoints->SetInput(pointscloud);

vtkDataSetMapper *mappoints2D =

vtkDataSetMapper::New();

mappoints2D->SetInput(pointscloud2D);

vtkPolyDataMapper

*mapcontous=vtkPolyDataMapper::New();

mapcontous->SetInput(contous);

vtkDataSetMapper *mapdeln =

vtkDataSetMapper::New();

mapdeln->SetInput(deln->GetOutput());

vtkDataSetMapper *mapdeln2D = vtkDataSetMapper::New();

mapdeln2D->SetInput(deln2D->GetOutput());

//actor

vtkActor *pointsActor = vtkActor::New();

pointsActor->SetMapper(mappoints);

pointsActor->GetProperty()->SetColor(1,0,

0);

pointsActor->GetProperty()->SetPointSize(3);

vtkActor *pointsActor2D =

vtkActor::New();

pointsActor2D->SetMapper(mappoints2D);

pointsActor2D->GetProperty()->SetColor(1,0,

0);

pointsActor2D->GetProperty()->SetPointSize(3);

vtkActor *contousActor = vtkActor::New();

contousActor->SetMapper(mapcontous);

contousActor->GetProperty()->SetRepresentationToWireframe();

contousActor->GetProperty()->SetColor(0,0.5,

0.5);

contousActor->GetProperty()->SetLineWidth(1);

vtkActor *delnActor = vtkActor::New();

delnActor->SetMapper(mapdeln);

delnActor->GetProperty()->SetRepresentationToWireframe();

delnActor->GetProperty()->SetColor(0,0.5,

0.5);

delnActor->GetProperty()->SetLineWidth(1);

vtkActor *delnActor2D = vtkActor::New();

delnActor2D->SetMapper(mapdeln2D);

delnActor2D->GetProperty()->SetRepresentationToWireframe();

delnActor2D->GetProperty()->SetColor(0,0.5,

0.5);

delnActor2D->GetProperty()->SetLineWidth(1);

//camera

vtkCamera *camera = vtkCamera::New();

camera->SetPosition(1,1,1);

camera->SetFocalPoint(0,0,0);

//render

vtkRenderer

*renderer = vtkRenderer::New();

renderer->AddActor(pointsActor);

// renderer->AddActor(pointsActor2D);

//

renderer->AddActor(contousActor);

renderer->AddActor(delnActor);

// renderer->AddActor(delnActor2D);

renderer->SetActiveCamera(camera);

renderer->ResetCamera();

renderer->SetBackground(1,1,1);

//renderwindow interactor

vtkRenderWindow *renWin =

vtkRenderWindow::New();

renWin->AddRenderer(renderer);

renWin->SetSize(300,300);

vtkRenderWindowInteractor

*iren = vtkRenderWindowInteractor::New();

iren->SetRenderWindow(renWin);

renWin->Render();

// start

iren->Start();

//delete

points->Delete();

points2D->Delete();

contous->Delete();

deln->Delete();

deln2D->Delete();

mappoints->Delete();

mappoints2D->Delete();

mapcontous->Delete();

mapdeln->Delete();

mapdeln2D->Delete();

pointsActor->Delete();

pointsActor2D->Delete();

contousActor->Delete();

delnActor->Delete();

delnActor2D->Delete();

camera->Delete();

renderer->Delete();

renWin->Delete();

iren->Delete();

return

0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值