2020-12-16 activiz(vtk的c#包) 基础物体建立<二>

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);

效果如图:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值