VTK 建模方法:建模基础

VTK 建模方法:建模基础

  • VTK 建模方法:建模基础
    • VTK 中模型的表达
    • 实例1:自定义 vtkPolyData
    • 实例2:vtkTubeFilter
    • 实例3:vtkImplicitModeller
    • 实例4:vtkRegularPolygonSource
    • 实例5:vtkWarpTo

VTK 建模方法:建模基础

VTK 中模型的表达

  • 几何结构:存储在数据的 Points 里;
  • 拓扑结构:存储在数据的 Cells 里。

VTK 中常用的 Cell 类型:

在这里插入图片描述

实例1:自定义 vtkPolyData

设置好 Points 和 Cells 后,添加到 vtkPolyData 即可。

代码:

#include "VTKModeling.h"#include <vtkPoints.h>
#include <vtkCellArray.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>VTKModeling::VTKModeling(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);_pVTKWidget = new QVTKOpenGLNativeWidget();this->setCentralWidget(_pVTKWidget);vtkNew<vtkRenderer> renderer;this->_pVTKWidget->renderWindow()->AddRenderer(renderer);this->_pVTKWidget->renderWindow()->Render();vtkNew<vtkPoints> points;points->InsertNextPoint(0, 0, 0);points->InsertNextPoint(0, 2, 0);points->InsertNextPoint(2, 4, 0);points->InsertNextPoint(4, 4, 0);vtkNew<vtkCellArray> lines;lines->InsertNextCell(4);lines->InsertCellPoint(0);lines->InsertCellPoint(1);lines->InsertCellPoint(2);lines->InsertCellPoint(3);vtkNew<vtkPolyData> profile;profile->SetPoints(points);profile->SetLines(lines);vtkNew<vtkPolyDataMapper> mapper;mapper->SetInputData(profile);vtkNew<vtkActor> actor;actor->SetMapper(mapper);renderer->AddActor(actor);
}VTKModeling::~VTKModeling()
{}

运行结果:

在这里插入图片描述

实例2:vtkTubeFilter

给之前代码中的 profile 加上一个 vtkTubeFilter,可以把 line 转换成一个 tube。

新增代码:

    vtkNew<vtkTubeFilter> tubeFilter;tubeFilter->SetInputData(profile);tubeFilter->SetRadius(0.5);tubeFilter->SetNumberOfSides(12);vtkNew<vtkPolyDataMapper> mapper;mapper->SetInputConnection(tubeFilter->GetOutputPort());

运行结果:

在这里插入图片描述

实例3:vtkImplicitModeller

vtkImplicitModeller类计算从线(profile)到输出(vtkImageData)中的点的距离(取到任何线的最近距离),并将此距离分配为数据集中每个点的标量值。然后将输出传递给vtkContourFilter,它生成一个多边形等值面。

新增代码:

	vtkNew<vtkImplicitModeller> impModeller;impModeller->SetInputData(profile);impModeller->SetSampleDimensions(100, 100, 100);impModeller->SetMaximumDistance(0.25);impModeller->SetModelBounds(-10, 10, -10, 10, -10, 10);vtkNew<vtkContourFilter> contour;contour->SetInputConnection(impModeller->GetOutputPort());contour->SetValue(0, 0.5);vtkNew<vtkPolyDataMapper> contourMapper;contourMapper->SetInputConnection(contour->GetOutputPort());vtkNew<vtkActor> contourActor;contourActor->SetMapper(contourMapper);contourActor->SetPosition(5, 0, 0);renderer->AddActor(contourActor);

运行结果:

在这里插入图片描述

按W切换成线框模式,可以看出vtkTubeFilter的采样很简单,三角面较大;而我们对vtkImplicitModeller设置的采样率生效了,等值面还包裹了线的两端:

在这里插入图片描述

实例4:vtkRegularPolygonSource

vtkRegularPolygonSource类用于生成规则多边形数据源,设置原点、半径和边数,就可以近似地模拟出一个圆面。用vtkImplicitModeller类计算从圆面(circle)到输出(vtkImageData)中的点的距离(取到任何线的最近距离),并将此距离分配为数据集中每个点的标量值。然后将输出传递给vtkContourFilter,它生成一个多边形等值面。

新增代码:

	// CirclevtkNew<vtkRegularPolygonSource> circle;circle->GeneratePolygonOn(); // 生成一个规则的多边形,不然只是折线circle->SetCenter(0, 0, 0);circle->SetRadius(2);circle->SetNumberOfSides(50);vtkNew<vtkImplicitModeller> circleImpModeller;circleImpModeller->SetInputConnection(circle->GetOutputPort());circleImpModeller->SetSampleDimensions(100, 100, 8);circleImpModeller->SetModelBounds(-3, 3, -3, 3, -0.2, 0.2);vtkNew<vtkContourFilter> circleContour;circleContour->SetInputConnection(circleImpModeller->GetOutputPort());circleContour->SetValue(0, 0.2);vtkNew<vtkPolyDataMapper> circleMapper;circleMapper->SetInputConnection(circleContour->GetOutputPort());vtkNew<vtkActor> circleActor;circleActor->SetMapper(circleMapper);circleActor->SetPosition(12, 0, 0);renderer->AddActor(circleActor);

运行结果:

在这里插入图片描述

按W进入线框模式,放大看看圆面的网格:

在这里插入图片描述

实例5:vtkWarpTo

vtkWarpTo类可以设置点和比例,通过朝着该点弯曲来修改点坐标。

新增代码:

	vtkNew<vtkWarpTo> circleWarpTo;circleWarpTo->SetInputConnection(circleContour->GetOutputPort());circleWarpTo->SetPosition(0, 0, 5);circleWarpTo->SetScaleFactor(1);circleWarpTo->AbsoluteOn();

效果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/9307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在mac电脑安装 Android SDK

1、在 Mac 电脑上安装 Android SDK 的步骤如下: 前往 Android 开发者网站下载 Android SDK 打开 Android 开发者网站 (https://developer.android.com/studio) 打开下载好的 Android SDK 安装包 2、解压 Android SDK 安装包 打开下载好的 Android SDK 安装包 将 android-…

深度主动学习(Deep Active Learning)——基于pytorch和ALipy工具包实现双向GRU模型

前言 在ALipy的官网说ALipy只支持sklearn和tensorflow模型&#xff0c;模型对象应符合 scikit-learn api。 但是alipy提供了ToolBox的工具箱&#xff0c;里面包装了多种查询策略&#xff0c;计算指标等工具&#xff0c;几乎具有Alipy的全部功能&#xff0c;虽然不能使用ALipy提…

Pycharm2024版,更换安装源

1、选择Python Packages 2、点击图中的小齿轮 3、点击 号 4、添加源地址 常用源如下&#xff1a; 清华&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple 阿里云&#xff1a;http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn…

HTML5 Canvas发光Loading动画特效源码

源码介绍 之前我们分享过很多基于CSS3的Loading动画效果&#xff0c;相信大家都很喜欢。今天我们要来分享一款基于HTML5 Canvas的发光Loading加载动画特效。Loading旋转图标是在canvas画布上绘制的&#xff0c;整个loading动画是发光3D的视觉效果&#xff0c;HTML5非常强大。 …

索引失效情况

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;面经 ⛺️稳中求进&#xff0c;晒太阳 一、索引列上运算操作。 不要在索引列上进行运算操作&#xff0c;否则索引会失效。 在tb_user的phone列加上索引&#xff0c;然后进行条件查询&am…

nginx自动部署-跨操作系统

项目里面有一个需求&#xff0c;就是需要用让nginx进程提供给系统管理一个start,stop和getPid方法&#xff0c;这样系统管理可以自动拉起来nginx&#xff0c;达到自动部署的目的。离线部署同样适用 这样一来&#xff0c;我就需要提供windows版本linux不同版本的nginx源码包&am…

解决Vue devtools插件数据变化不会自动刷新

我们使用devtools插件在监测vuex中表单或自定义组件的数据&#xff0c;发现页面数据发生变化后&#xff0c;但是devtools中还是老数据&#xff0c;必须手动点击devtools刷新才能拿到最新的数据。很烦&#xff01; 解决方案&#xff1a; 打开chrome的设置&#xff0c;向下翻&…

JavaEE企业级开发中常用的Stream流

介绍 在Java编程中&#xff0c;Stream流是Java 8引入的一个重要概念&#xff0c;它提供了一种新的处理集合的方式&#xff0c;可以更加简洁、高效地进行数据操作。Stream流支持各种常见的操作&#xff0c;比如过滤、映射、排序、聚合等&#xff0c;同时也支持并行处理&#xf…

自学错误合集--MessageSource国际化接口

java后端自学错误总结 一.MessageSource国际化接口总结 一.MessageSource国际化接口 今天第一次使用MessageSource接口,比较意外遇到了一些坑 messageSource是spring中的转换消息接口&#xff0c;提供了国际化信息的能力。MessageSource用于解析 消息&#xff0c;并支持消息的…

软件项目管理期末复习题8-16章

第八章软件项目质量计划 一、填空题 1、&#xff08;审计&#xff09;是对过程或产品的一次独立质量评估。 2、质量成本包括预防成本和&#xff08;缺陷成本&#xff09;。 3、&#xff08;软件质量&#xff09;是软件满足明确说明或者隐含的需求的程度。 5、McCall质量模…

【华为】IPSec VPN手动配置

【华为】IPSec VPN手动配置 拓扑配置ISP - 2AR1NAT - Easy IPIPSec VPN AR3NATIPsec VPN PC检验 配置文档AR1AR2 拓扑 配置 配置步骤 1、配置IP地址&#xff0c;ISP 路由器用 Lo0 模拟互联网 2、漳州和福州两个出口路由器配置默认路由指向ISP路由器 3、进行 IPsec VPN配置&…

数据的输入和输出

早期的总线系统 为了解决通信的问题、主板上铺设了一条公共线路、各个设备都连接到这条线路上、不管谁要和谁通信、都能使用它来传输、这条线路就是总线。 总线上有CPU、内存、鼠标、键盘、硬盘、网卡、声卡、显卡等… 说是一条总线、实际上是包含了传输数据的数据总线、传输…

场景文本检测识别学习 day09(Swin Transformer论文精读)

Swin Transformer Swin Transformer 提出ViT具有两个缺点&#xff1a; 1. 没有多尺度特征 &#xff0c;不能生成多尺度的特征图传给FPN (检测) \ U-Net (分割)&#xff0c;从而对于不同大小的物体都能进行良好感知&#xff0c;即只有16 * 16的patch尺寸 2. 全局计算自注意力浪…

大模型LLM:最清晰解读提示工程(Prompt Engineering)

提示工程&#xff08;Prompt Engineering&#xff09;&#xff0c;也称为上下文提示&#xff0c;是一种通过不更新模型的权重/参数来引导LLM行为朝着特定结果的方法。这是与AI有效交流所需结果的过程。提示工程可以用于各种任务&#xff0c;从回答问题到算术推理乃至各种应用领…

【触摸案例-手势解锁案例-按钮高亮 Objective-C语言】

一、我们来说这个self.btns,这个问题啊,为什么不用_btns, 1.我们说,在懒加载里边儿,经常是写下划线啊,_btns,为什么不写,首先啊,这个layoutSubviews:我们第一次,肯定会去执行这个layoutSubviews: 然后呢,去懒加载这个数组, 然后呢,接下来啊,走这一句话, 第一次…

邮件系统国产化,保障企业信息安全的重要举措

随着信息技术日益发展和成熟&#xff0c;企业信息化建设深入推进&#xff0c;企业信息化管理能力大幅提升&#xff0c;其中邮件系统在企业信息化建设中扮演着至关重要的角色。然而&#xff0c;长期以来&#xff0c;我国企业在邮件系统方面主要依赖于国外的产品&#xff0c;这不…

win11安装SQL Server 2012 企业版

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、硬件要求二、软件安装参考&#xff1…

在windows下使用VS Code、CMake、Make进行代码编译

软件环境 Windows11VS CodeNoneCMake3.26.4-windows-x86_64MinGWNone 电脑系统配置 安装MinGW将MinGW安装文件夹中bin文件夹下的mingw32-make.exe复制并重命名为make.exe在文件夹中添加系统路径&#xff0c;具体位置为 系统->系统信息->高级系统设置->高级->环境…

Linux运维:centos环境变量

前言 在 Linux 运维工作中&#xff0c;管理环境变量是至关重要的一项任务。在 CentOS 环境下&#xff0c;正确配置环境变量可以使系统更加高效和易于管理。 本文将重点讨论 CentOS 环境下的环境变量设置&#xff0c;并就python的环境变量配置方案进行讲解&#xff08;不包含Ano…

YOLOv9中模块总结补充|SPPELAN

专栏相关代码&#xff1a;目前售价售价69.9&#xff0c;改进点80 专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 1. SPPELAN SPPELAN是YOLOv9作者在SPPF的基础上创新的模块&#xff08;增加了一次…