当前位置: 首页 > news >正文

VTK学习笔记3:曲线与曲面源

文章目录

  • 一、直线vtkLineSource
    • 1.1 几何参数
    • 1.2 示例代码
      • 一条简单的直线
      • 简单折线
  • 二、复杂折线vtkPolyLineSource
    • 2.1 功能说明
    • 2.2 几何参数
    • 2.3 示例代码
    • 2.4 显示结果
    • 3.1 功能说明
    • 3.2 几何参数
    • 3.3 示例代码
    • 3.4 显示结果
  • 四、圆弧曲线vtkArcSource
    • 4.1 功能说明
    • 4.2 几何参数
    • 4.3 示例代码
    • 4.4 显示结果:
  • 五、椭圆弧vtkEllipseArcSource
    • 5.1 功能说明
    • 5.2 几何参数
    • 5.3 示例代码
    • 5.4 显示结果
  • 六、正多边形vtkRegularPolygonSource
    • 6.1 几何参数
    • 6.2 代码实现
    • 6.3 显示结果
  • 七、参数曲线vtkProgrammableSource
    • 7.1 功能说明
      • vtkPolyLineSource - 专用多段线生成器
      • vtkProgrammableSource - 通用可编程数据源
      • 选择
      • 性能考虑
    • 7.2 示例代码
    • 7.3 显示结果


一、直线vtkLineSource

1.1 几何参数

  • SetPoint1(double x,double y,double z):起点坐标;
  • SetPoint2(double x,double y,double z):终点坐标;
  • SetResolution(int res):线段分段;
  • SetPoints(vtkPoints points):折线折点集合;

1.2 示例代码

一条简单的直线

//1、数据源
vtkSmartPointer<vtkLineSource > line = vtkSmartPointer<vtkLineSource >::New();
line->SetPoint1(0, 0, 0);            // 起点
line->SetPoint2(5, 5, 5);            // 终点
line->SetResolution(10);             // 线段分段数
line->Update();

显示结果:
在这里插入图片描述

简单折线

//1、数据源
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
points->InsertNextPoint(1,1,0);
points->InsertNextPoint(2,0,1);
points->InsertNextPoint(3,1,1);
points->InsertNextPoint(1,5,1);
points->InsertNextPoint(1,1,3);
vtkSmartPointer<vtkLineSource > line = vtkSmartPointer<vtkLineSource >::New();
line->SetPoint1(0, 0, 0);            // 起点
line->SetPoint2(5, 5, 5);            // 终点
line->SetResolution(10);             // 线段分段数
line->SetPoints(points);             // 设置折线点
line->Update();

显示结果:
在这里插入图片描述

二、复杂折线vtkPolyLineSource

2.1 功能说明

  • 类型:数据源类(Source)
  • 功能:生成由多个点定义的折线(多线段)
  • 输出:vtkPolyData 包含一个多线段单元(vtkPolyLine)
  • 特点:
    • 可创建包含任意数量点的连续折线
    • 点之间按顺序连接
    • 直接输出可渲染的几何数据
    • VTK 9.0 及以上版本专用
  • 简化了老版本 vtkPoints + vtkPolyLine + vtkCellArray + vtkPolyData 组合,这些改成了类内部实现

2.2 几何参数

  • SetPoints(vtkPoints points):设置点坐标;
  • SetClosed(bool b):设置多段线是否闭合(首尾相连);默认值为False;

2.3 示例代码

//1、创建多段线的点
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
points->InsertNextPoint(0.0, 0.0, 0.0);
points->InsertNextPoint(1.0, 0.0, 0.0);
points->InsertNextPoint(1.0, 1.0, 0.0);
points->InsertNextPoint(1.0, 1.0, 5.0);
//2、创建多线段源
vtkSmartPointer<vtkPolyLineSource> polyLine = vtkSmartPointer<vtkPolyLineSource>::New();
polyLine->SetPoints(points);
polyLine->SetClosed(true);

2.4 显示结果

开口:
在这里插入图片描述

闭口:
在这里插入图片描述

三、圆盘vtkDiskSource

3.1 功能说明

生成一个代表圆盘(可以是实心圆,也可以是圆环)

3.2 几何参数

  • SetInnerRadius():设置内圆半径;默认值0;
  • SetOuterRadius():设置外圆半径;默认值为0;
  • SetRadialResolution():径向分辨率;该值决定了从内径到外径之间有多少个同心圆;默认值为1;
  • SetCircumferentialResolution():圆周分辨率;通俗来讲,设置是多少,圆就有多少条边,边越多,圆就越圆;默认值是6;

3.3 示例代码

vtkSmartPointer<vtkDiskSource> disk = vtkSmartPointer<vtkDiskSource>::New();
disk->SetInnerRadius(1.0);           // 内半径
disk->SetOuterRadius(3.0);           // 外半径
disk->SetRadialResolution(1);       // 径向分段数
disk->SetCircumferentialResolution(4); // 圆周分段数
disk->Update();

3.4 显示结果

边数<=3时,是一个三角形:
在这里插入图片描述

边数是4时,是一个正方形:
在这里插入图片描述

边数是N,是N边形:
在这里插入图片描述

边数越大,圆就越圆:
在这里插入图片描述

四、圆弧曲线vtkArcSource

4.1 功能说明

根据用户提供的参数(如起点、终点、中心点、角度、分辨率等),计算并生成一系列的点(Points)和单元(Cells,通常是多义线 Polyline 或多边形 Polygon),从而在三维空间中构建出一段圆弧的几何形状。

4.2 几何参数

  • SetPoint1(double x, double y, double z):起点;
  • SetPoint2( 0.0, 1.0, 0.0): 终点;
  • SetCenter( 0.0, 0.0, 0.0): 圆心;
  • NegativeOn()/NegativeOff():优弧、劣弧;通俗来讲优弧就是画大半弧,劣弧就是画小半弧;默认是劣弧;
  • SetResolution():分辨率;默认值是100;

4.3 示例代码

vtkSmartPointer<vtkArcSource> arcSource = vtkSmartPointer<vtkArcSource>::New();
arcSource->SetPoint1(-1.0, 0.0, 0.0); // 起点
arcSource->SetPoint2( 0.0, 1.0, 0.0); // 终点
arcSource->SetCenter( 0.0, 0.0, 0.0); // 圆心
arcSource->NegativeOn();
arcSource->SetResolution(50);         // 分辨率
//arcSource->SetOutputPointsPrecision(0);//控制生成的点的坐标是单精度(SINGLE_PRECISION)还是双精度(DOUBLE_PRECISION)。对于高精度要求的场景非常有用。
arcSource->Update();

4.4 显示结果:

劣弧:
在这里插入图片描述

优弧:
在这里插入图片描述

五、椭圆弧vtkEllipseArcSource

5.1 功能说明

与上述圆弧类似,这个是椭圆的圆弧;

5.2 几何参数

在这里插入图片描述

5.3 示例代码

// 1. 创建椭圆弧源
vtkSmartPointer<vtkEllipseArcSource> arcSource = vtkSmartPointer<vtkEllipseArcSource>::New();// 2. 设置参数(根据头文件完全正确的API)
arcSource->SetCenter(0.0, 0.0, 0.0);           // 中心在原点// 设置法向量(定义椭圆所在平面)
double normal[3] = {0.0, 0.0, 1.0};
arcSource->SetNormal(normal);                  // XY平面// 设置长轴向量(定义长轴方向和长度)
double majorRadiusVector[3] = {2.0, 0.0, 0.0};
arcSource->SetMajorRadiusVector(majorRadiusVector); // 长轴半径为2,沿X轴方向// 设置椭圆比例(短轴半径/长轴半径)
arcSource->SetRatio(0.5);                      // 短轴半径 = 0.5 * 2.0 = 1.0arcSource->SetStartAngle(45.0);                // 起始角度 45°
arcSource->SetSegmentAngle(270.0);             // 跨越 270° (逆时针)
arcSource->SetResolution(80);                  // 用 80 条线段来近似弧线// 可选:闭合弧线(连接起点和终点)
arcSource->SetClose(false);                    // 不闭合arcSource->Update();

5.4 显示结果

在这里插入图片描述

六、正多边形vtkRegularPolygonSource

6.1 几何参数

在这里插入图片描述

6.2 代码实现

// 1. 创建正多边形源
vtkSmartPointer<vtkRegularPolygonSource> polygonSource = vtkSmartPointer<vtkRegularPolygonSource>::New();// 2. 设置参数(根据头文件完全正确的API)
polygonSource->SetNumberOfSides(6);        // 设置边数为6(六边形)
polygonSource->SetCenter(0.0, 0.0, 0.0);   // 中心在原点// 设置法向量(定义多边形所在平面)
double normal[3] = {0.0, 0.0, 1.0};
polygonSource->SetNormal(normal);          // XY平面polygonSource->SetRadius(1.0);             // 半径为1// 设置生成选项
polygonSource->SetGeneratePolygon(true);   // 生成填充面片
polygonSource->SetGeneratePolyline(true);  // 生成轮廓线// 设置输出点精度(可选)
polygonSource->SetOutputPointsPrecision(vtkAlgorithm::DOUBLE_PRECISION);polygonSource->Update();

6.3 显示结果

不生成填充平面:
在这里插入图片描述

生成填充平面:
在这里插入图片描述

七、参数曲线vtkProgrammableSource

7.1 功能说明

与vtkPolyLineSource类似,区别如下:

vtkPolyLineSource - 专用多段线生成器

  • 专用性:专门为创建多段线设计
  • 简单API:提供 AddPoint(), SetPoints(), SetClosed() 等直观方法
  • 内置优化:针对多段线创建进行了性能优化
  • 局限性:只能创建多段线,无法生成其他类型的数据

vtkProgrammableSource - 通用可编程数据源

  • 通用性:可以创建任何类型的 VTK 数据(PolyData、ImageData、StructuredGrid 等)
  • 高度灵活:完全由用户代码控制数据生成过程
  • 学习曲线:需要了解 VTK 数据模型和回调函数机制
  • 功能强大:可以实现任何复杂的数据生成逻辑

选择

  • 使用 vtkPolyLineSource 当:
    • 只需要创建简单的多段线
    • 希望代码简洁易读
    • 不需要高度定制化的数据生成逻辑
    • 追求最佳性能
  • 使用 vtkProgrammableSource 当:
    • 需要创建非标准或复杂几何体
    • 需要生成多种类型的数据(不仅仅是多段线)
    • 需要实现自定义的数据生成算法
    • 需要动态生成基于参数的数据
    • 现有的专用源无法满足需求

性能考虑

  • vtkPolyLineSource:经过优化,性能更好
  • vtkProgrammableSource:性能取决于用户实现的效率,可能需要进行优化

7.2 示例代码

回调函数:

void GenerateCustomLine(void* arguments) {vtkProgrammableSource* self = (vtkProgrammableSource*)arguments;vtkPolyData* output = self->GetPolyDataOutput();// 创建点和单元vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();vtkSmartPointer<vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New();// 添加点points->InsertNextPoint(0, 0, 0);points->InsertNextPoint(1, 1, 0);points->InsertNextPoint(2, 0, 0);points->InsertNextPoint(6, 2, 0);points->InsertNextPoint(0, 0, 7);// 创建线vtkSmartPointer<vtkPolyLine> polyLine = vtkSmartPointer<vtkPolyLine>::New();polyLine->GetPointIds()->SetNumberOfIds(5);for (int i = 0; i < 5; i++) {polyLine->GetPointIds()->SetId(i, i);}lines->InsertNextCell(polyLine);// 设置输出output->SetPoints(points);output->SetLines(lines);
}

调用:

// 使用自定义源
vtkSmartPointer<vtkProgrammableSource> customSource = vtkSmartPointer<vtkProgrammableSource>::New();
customSource->SetExecuteMethod(GenerateCustomLine, customSource);
customSource->Update();

7.3 显示结果

在这里插入图片描述

http://www.dtcms.com/a/344055.html

相关文章:

  • 闲置笔记本链接硬盘盒充当Windows NAS 网易UU远程助力数据读取和处理
  • 全球电商业财一体化趋势加速,巨益科技助力品牌出海精细化运营
  • 数字隔离器:新能源系统的安全与效能革命
  • JavaWeb前端04(Vue生命周期,钩子函数)
  • Jmeter自动化性能测试常见问题汇总
  • 什么是Jmeter?Jmeter使用的原理步骤是什么?
  • chapter07_初始化和销毁方法
  • 第2章 cmd命令基础:证书操作(certutil)
  • base64认识实际使用
  • Samba实现Windows与Linux文件共享
  • Linux下基于Electron的程序ibus输入法问题
  • Ubuntu20系统上离线安装MongoDB
  • Kafka Broker 核心原理全解析:存储、高可用与数据同步
  • Java性能优化实战(四):IO与网络优化的4个关键方向
  • 大视协作码垛机:颠覆传统制造,开启智能工厂新纪元
  • Linux C语言中socketpair的全面应用指南:进程与线程间高效通信
  • C++---多态(一个接口多种实现)
  • 【Linux进程控制详解】
  • Windows应急响应一般思路(二)
  • 3 种无误的方式删除 Itel 手机上的短信
  • 车载 GPS 与手机导航的终极对决:谁在复杂路况下更胜一筹?
  • 开源文件加密工具【PicoCrypt】
  • [net]基于asp.net的校园网站的设计与实现/基于c#的校园论坛系统的设计与实现
  • 微软获评2025年Gartner®容器管理魔力象限™领导者
  • 深度学习在股票量化中的应用
  • AP服务发现PRS_SOMEIPSD_00160的解析
  • 项目中优惠券计算逻辑全解析(处理高并发)
  • 河南萌新联赛2025第(六)场:郑州大学(补题)
  • Unity UnityWebRequest高级操作
  • Masked Language Model 如何重塑大模型的预训练