#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;
}