1. 得劳内三角网(Delaunay)
这里只用了vtkDelaunay2D,vtkDelaunay3D还没尝试。顺序是vtkPoints->vtkPolyData->vtkDelaunay2D(面) & vtkVertexGlyphFilter(顶点)->vtkPolyDataMapper->vtkActor。
int gridSize = 10;
vtkPoints points =vtkPoints.New();
for (int x = 0; x < gridSize; x++)
{
for (int y = 0; y < gridSize; y++)
{
points.InsertNextPoint(x, y, vtkMath.Random(0.0, 1.0));
}
}
vtkPolyData polydata =vtkPolyData.New();
polydata.SetPoints(points);
vtkDelaunay2D delaunay =vtkDelaunay2D.New();
delaunay.SetInput(polydata);
delaunay.Update();
vtkVertexGlyphFilter glyphFilter =vtkVertexGlyphFilter.New();
glyphFilter.SetInput(polydata);
glyphFilter.Update();
vtkPolyDataMapper pointsMapper =vtkPolyDataMapper.New();
pointsMapper.SetInput(glyphFilter.GetOutput());
vtkActor pointsActor =vtkActor.New();
pointsActor.SetMapper(pointsMapper);
pointsActor.GetProperty().SetPointSize(3);
pointsActor.GetProperty().SetColor(1, 0, 0);
vtkPolyDataMapper triangulatedMapper =vtkPolyDataMapper.New();
triangulatedMapper.SetInput(delaunay.GetOutput());
vtkActor triangulatedActor =vtkActor.New();
triangulatedActor.SetMapper(triangulatedMapper);
vtkRenderer renderer =vtkRenderer.New();
renderer.AddActor(pointsActor); //显示顶点
renderer.AddActor(triangulatedActor);
效果如图:
2. 直线
通过vtkLineSource创建,可以设置起始点、线宽等属性。
vtkLineSource line = vtkLineSource.New(); // 新建线
vtkPolyDataMapper lineMapper = vtkPolyDataMapper.New(); // 新建制图器
lineMapper.SetInputConnection(line.GetOutputPort()); // 连接管道
vtkActor lineActor = vtkActor.New(); // 新建角色
lineActor.SetMapper(lineMapper); // 传递制图器
line.SetPoint1(5, 5, 5);
line.SetPoint2(0, -2.071, 0);
lineActor.GetProperty().SetColor(1, 1, 1); // 设置“角色”颜色[RGB]
效果如图:
3. 平面
通过vtkPlaneSource设置,可以设置中心、法向、大小等等,这里通过点法式创建,也有其他创建方式。
double h = ProjectConfig.WaterLevel;
vtkActor planeActor = vtkActor.New();
vtkPlaneSource planeSource = vtkPlaneSource.New();//根据点法式创建
planeSource.SetCenter(0, 0, 0);
planeSource.SetNormal(0, 0, 1);
planeSource.Update();
vtkPolyData polydataPlane = vtkPolyData.New();
polydataPlane = planeSource.GetOutput();
vtkPolyDataMapper mapper = vtkPolyDataMapper.New();
mapper.SetInput(polydataPlane);
planeActor = vtkActor.New();
planeActor.SetMapper(mapper);
planeActor.SetScale(widthX.Max() - widthX.Min(), widthY.Max() - widthY.Min(), 1);
planeActor.GetProperty().SetOpacity(0.5); //设置透明度
planeActor.GetProperty().SetColor(ProjectConfig.WaterColor.R, ProjectConfig.WaterColor.G, ProjectConfig.WaterColor.B);
render.AddActor(planeActor);
效果如图: