第01章 25 使用vtkUnstructuredGrid构建一个混合的表面

server/2025/1/22 14:44:40/

下面是一个使用C++和VTK库的代码示例,演示如何使用vtkUnstructuredGrid构建一个混合表面。该表面包含不同的几何形状,例如三角形、四边形和多边形。

#include <vtkSmartPointer.h>
#include <vtkUnstructuredGrid.h>
#include <vtkPoints.h>
#include <vtkCellArray.h>
#include <vtkTriangle.h>
#include <vtkQuad.h>
#include <vtkPolygon.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkCamera.h>int main(int, char *[])
{// 创建点集vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();points->InsertNextPoint(0.0, 0.0, 0.0); // 0points->InsertNextPoint(1.0, 0.0, 0.0); // 1points->InsertNextPoint(0.0, 1.0, 0.0); // 2points->InsertNextPoint(1.0, 1.0, 0.0); // 3points->InsertNextPoint(0.0, 2.0, 0.0); // 4points->InsertNextPoint(1.0, 2.0, 0.0); // 5points->InsertNextPoint(2.0, 0.0, 0.0); // 6points->InsertNextPoint(2.0, 1.0, 0.0); // 7points->InsertNextPoint(2.0, 2.0, 0.0); // 8points->InsertNextPoint(0.5, 1.5, 0.0); // 9// 创建单元数组vtkSmartPointer<vtkCellArray> cells = vtkSmartPointer<vtkCellArray>::New();// 创建三角形vtkSmartPointer<vtkTriangle> triangle = vtkSmartPointer<vtkTriangle>::New();triangle->GetPointIds()->SetId(0, 0);triangle->GetPointIds()->SetId(1, 1);triangle->GetPointIds()->SetId(2, 2);cells->InsertNextCell(triangle);// 创建四边形vtkSmartPointer<vtkQuad> quad = vtkSmartPointer<vtkQuad>::New();quad->GetPointIds()->SetId(0, 1);quad->GetPointIds()->SetId(1, 3);quad->GetPointIds()->SetId(2, 5);quad->GetPointIds()->SetId(3, 7);cells->InsertNextCell(quad);// 创建多边形vtkSmartPointer<vtkPolygon> polygon = vtkSmartPointer<vtkPolygon>::New();polygon->GetPointIds()->SetNumberOfIds(5);polygon->GetPointIds()->SetId(0, 0);polygon->GetPointIds()->SetId(1, 2);polygon->GetPointIds()->SetId(2, 4);polygon->GetPointIds()->SetId(3, 8);polygon->GetPointIds()->SetId(4, 6);cells->InsertNextCell(polygon);// 创建vtkUnstructuredGridvtkSmartPointer<vtkUnstructuredGrid> unstructuredGrid = vtkSmartPointer<vtkUnstructuredGrid>::New();unstructuredGrid->SetPoints(points);unstructuredGrid->SetCells(VTK_TRIANGLE, triangle);unstructuredGrid->SetCells(VTK_QUAD, quad);unstructuredGrid->SetCells(VTK_POLYGON, polygon);// 创建mapper和actorvtkSmartPointer<vtkDataSetMapper> mapper = vtkSmartPointer<vtkDataSetMapper>::New();mapper->SetInputData(unstructuredGrid);vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);actor->GetProperty()->EdgeVisibilityOn();actor->GetProperty()->SetColor(1.0, 0.0, 0.0); // 设置颜色为红色// 创建渲染器和渲染窗口vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();renderWindowInteractor->SetRenderWindow(renderWindow);// 添加actor到渲染器renderer->AddActor(actor);// 设置背景颜色renderer->SetBackground(0.2, 0.3, 0.4);// 开始渲染renderWindow->Render();renderWindowInteractor->Start();return EXIT_SUCCESS;
}

代码说明:

  1. 点集定义:我们创建了一个vtkPoints对象,并插入了10个点。这些点将用于定义不同的几何形状。
  2. 单元数组定义:我们创建了一个vtkCellArray对象,并插入了三角形、四边形和多边形的单元。
  3. 三角形:使用vtkTriangle对象定义一个三角形,并将其插入到单元数组中。
  4. 四边形:使用vtkQuad对象定义一个四边形,并将其插入到单元数组中。
  5. 多边形:使用vtkPolygon对象定义一个五边形,并将其插入到单元数组中。
  6. vtkUnstructuredGrid:创建一个vtkUnstructuredGrid对象,并将点集和单元数组设置到该对象中。
  7. 渲染:使用vtkDataSetMappervtkActorvtkUnstructuredGrid渲染到窗口中。

运行结果:

运行此代码后,你将看到一个包含三角形、四边形和多边形的混合表面。网格的边缘将可见,颜色为红色。

注意事项:

  • 你需要安装VTK库并配置好开发环境来编译和运行此代码。
  • 你可以根据需要调整点的坐标和单元的定义。

http://www.ppmy.cn/server/160488.html

相关文章

什么是三高架构?

大家好&#xff0c;我是锋哥。今天分享关于【什么是三高架构?】面试题。希望对大家有帮助&#xff1b; 什么是三高架构? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 “三高架构”通常是指高可用性&#xff08;High Availability&#xff09;、高性能&#xff…

【数据库知识】PostgreSQL介绍

PostgreSQL介绍 概述一、起源与发展二、特性与功能三、PL/pgSQL语言四、应用场景五、配置与优化 核心概念一、基础数据结构二、数据操作三、高级特性四、应用场景 多版本控制MVCC说明一、MVCC的基本概念二、MVCC的实现原理三、MVCC的工作流程四、MVCC的优势五、MVCC的局限性 可…

w173疫苗发布和接种预约系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

Vue2.0的安装

1.首先查看是否已经安装了node.js 选择以管理员方式打开命令提示符&#xff08;权限较高&#xff09;&#xff0c;或者通过cmd的方式打开 打开后输入node -v 查看自己电脑是否安装node&#xff0c;以及版本号 node -v 如果没有的话&#xff0c;请查看Node.js的安装 2.Vue和脚…

25.1.21学习内容

A - 我是循环大王 问题陈述 有 N 条蛇。 最初&#xff0c;第 i 条蛇的厚度为 Ti​&#xff0c;长度为 Li​。 蛇的重量定义为其厚度和长度的乘积。 对于每个满足 1≤k≤D 的整数 k&#xff0c;找出当每条蛇的长度增加 k 时&#xff0c;最重蛇的重量。 约束条件 1≤N,D≤1…

《自动驾驶与机器人中的SLAM技术》ch4:基于预积分和图优化的 GINS

前言&#xff1a;预积分图优化的结构 1 预积分的图优化顶点 这里使用 《自动驾驶与机器人中的SLAM技术》ch4&#xff1a;预积分学 中提到的散装的形式来实现预积分的顶点部分&#xff0c;所以每个状态被分为位姿&#xff08;&#xff09;、速度、陀螺零偏、加计零偏四种顶点&am…

git常用命令学习

目录 文章目录 目录第一章 git简介1.Git 与SVN2.Git 工作区、暂存区和版本库 第二章 git常用命令学习1.ssh设置2.设置用户信息3.常用命令设置1.初始化本地仓库init2.克隆clone3.查看状态 git status4.添加add命令5.添加评论6.分支操作1.创建分支2.查看分支3.切换分支4.删除分支…

ASP.NET Blazor部署方式有哪些?

今天我们来说说Blazor的三种部署方式&#xff0c;如果大家还不了解Blazor&#xff0c;那么我先简单介绍下Blazor Blazor 是一种 .NET 前端 Web 框架&#xff0c;在单个编程模型中同时支持服务器端呈现和客户端交互性&#xff1a; ● 使用 C# 创建丰富的交互式 UI。 ● 共享使用…