C++ VTK 8.2 如何绘制弹簧图形

//创建圆柱

        vtkSmartPointer<vtkCylinderSource> spCylinderSource = vtkSmartPointer<vtkCylinderSource>::New();
        spCylinderSource->SetHeight(m_dCylinderHeight);    // 设置圆柱的高度
        spCylinderSource->SetRadius(m_dCylinderRadius);    // 设置圆柱的半径
        spCylinderSource->SetResolution(50); // 设置圆柱的分辨率(面的数量)
        spCylinderSource->SetCenter(m_dCylinderCenter);
        //做旋转90°
        vtkSmartPointer<vtkTransform> spTransform = vtkSmartPointer<vtkTransform>::New();
        spTransform->RotateX(90);

        // 应用变换到圆柱几何数据
        vtkSmartPointer<vtkTransformPolyDataFilter> spTransformFilter = vtkSmartPointer<vtkTransformPolyDataFilter>::New();
        spTransformFilter->SetTransform(spTransform);
        spTransformFilter->SetInputConnection(spCylinderSource->GetOutputPort());
        spTransformFilter->Update();

        // 创建映射器和显示节点
        vtkSmartPointer<vtkPolyDataMapper> spCylinderMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
        spCylinderMapper->SetInputConnection(spTransformFilter->GetOutputPort());
        m_spCylinderActor = vtkSmartPointer<vtkActor>::New();
        m_spCylinderActor->SetMapper(spCylinderMapper);


        //创建螺旋线

        vtkSmartPointer<vtkPoints> spSpiralLinePoints =vtkSmartPointer<vtkPoints>::New();
        int nCountPoints = 5000;  //值设置大一下比较圆滑
        double dRadius = m_dCylinderRadius+0.1;
        double dHeight = m_dCylinderHeight;
        for (int nPoint = 0; nPoint < nCountPoints; ++nPoint)
        {
            double dAngle = (m_dCylinderHeight*5) * vtkMath::Pi() * nPoint / nCountPoints;  //高度的3倍,螺旋线的圈数
            double dX = dRadius * cos(dAngle);    //x轴的位置
            double dY = dRadius * sin(dAngle);
            double dZ = dHeight * nPoint / nCountPoints;
            spSpiralLinePoints->InsertNextPoint(dX, dY, dZ);   //螺旋上的点
        }

        // 点创建不封闭线
        vtkSmartPointer<vtkPolyLine> spSpiralLine =vtkSmartPointer<vtkPolyLine>::New();
        spSpiralLine->GetPointIds()->SetNumberOfIds(nCountPoints);
        for (int nPointIndex = 0; nPointIndex < nCountPoints; ++nPointIndex)
        {
            spSpiralLine->GetPointIds()->SetId(nPointIndex, nPointIndex);
        }

        // 给线段构造单元格
        vtkSmartPointer<vtkCellArray> spSpiralLineCells =vtkSmartPointer<vtkCellArray>::New();
        spSpiralLineCells->InsertNextCell(spSpiralLine);

        // 构造line的参数
        vtkSmartPointer<vtkPolyData> spSpiralLinePolyData = vtkSmartPointer<vtkPolyData>::New();
        spSpiralLinePolyData->SetPoints(spSpiralLinePoints);
        spSpiralLinePolyData->SetLines(spSpiralLineCells);

        // 设置弹簧的大小
        vtkSmartPointer<vtkTubeFilter> spSpiralLineTubeFilter =vtkSmartPointer<vtkTubeFilter>::New();
        spSpiralLineTubeFilter->SetInputData(spSpiralLinePolyData);
        spSpiralLineTubeFilter->SetRadius(0.04);            //弹簧半径的大小
        spSpiralLineTubeFilter->SetNumberOfSides(50);     
        spSpiralLineTubeFilter->Update();

        //创建映射
        vtkSmartPointer<vtkPolyDataMapper> spSpiralLineMapper =vtkSmartPointer<vtkPolyDataMapper>::New();
        spSpiralLineMapper->SetInputConnection(spSpiralLineTubeFilter->GetOutputPort());
        m_spSpiralLineActor =vtkSmartPointer<vtkActor>::New();
        m_spSpiralLineActor->SetMapper(spSpiralLineMapper);

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

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

相关文章

Spring(12) BeanFactory 和 ApplicationContext 区别

目录 一、BeanFactory 和 ApplicationContext 区别&#xff1f;二、既然 Spring Boot 中使用的是 ApplicationContext 进行应用程序的启动和管理&#xff0c;那么 Spring Boot 会用到 BeanFactory 吗&#xff1f; 一、BeanFactory 和 ApplicationContext 区别&#xff1f; Bea…

git clone使用https协议报错OpenSSL SSL_read: Connection was reset, errno 10054

在使用git 下载github上的代码时&#xff0c; 一般有ssh协议和https协议两种。使用ssh协议可以成功clone代码&#xff0c; 但使用https协议时出错&#xff1a; $ git clone https://github.com/openai/improved-diffusion.git Cloning into improved-diffusion... fatal: unab…

vue或uniapp使用pdf.js预览

一、先下载稳定版的pdf.js&#xff0c;可以去官网下载 官网下载地址 或 pdf.js包下载(已配置好&#xff0c;无需修改) 二、下载好的pdf.js文件放在public下静态文件里&#xff0c; uniapp是放在 static下静态文件里 三、使用方式 1. vue项目 注意路径 :src"static/pd…

每日一题 206反转链表

题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1a; …

块、行内块水平垂直居中

1.定位实现水平垂直居中 <div class"outer"><div class"test inner1">定位实现水平垂直居中</div></div><style>.outer {width: 300px;height: 300px;border: 1px solid gray;margin: 100px auto 0;position: relative;}.te…

途乐证券-新股行情持续火爆,哪些因素影响首日表现?

全面注册制以来&#xff0c;参加打新的投资者数量全体呈现下降。打新收益下降&#xff0c;破发频出的布景下&#xff0c;投资者打新策略从逢新必打逐步向优选个股改变。 经过很多历史数据&#xff0c;从商场定价、参加者热度以及机构重视度维度揭秘了上市后股价体现优秀的个股具…

在多页面应用和单页面应用中(例如vue)怎么提高seo搜索引擎优化

那么 我们要先知道 搜索引擎是怎么工作的&#xff1f; 搜索引擎是通过一系列步骤来工作的&#xff0c;以下是其基本原理&#xff1a; 1、网络爬虫&#xff1a;搜索引擎使用网络爬虫&#xff08;也称为蜘蛛、机器人&#xff09;来从互联网上抓取网页。网络爬虫按照预定义的规则…

Redis 之 缓存预热 缓存雪崩 缓存击穿 缓存穿透

目录 一、缓存预热 1.1 缓存预热是什么&#xff1f; 1.2 解决方案&#xff1a; 二、缓存雪崩 2.1 缓存雪崩是什么&#xff1f;怎么发生的&#xff1f; 2.2 怎么解决 三、缓存穿透 3.1 是什么&#xff1f;怎么产生的呢&#xff1f; 3.2 解决方案 3.2.1、采用回写增强&a…

Ceph入门到精通-分布式存储产品的测试实践

分布式存储产品的测试实践 在分布式存储产品的测试过程中&#xff0c;测试到底做了些什么事情呢&#xff1f; 一&#xff1a;测试工作内容 需求&#xff0c;设计评审 测试需要参与到每一个过程中 在设计评审的时候就需要知道验收的标准&#xff0c;这是最重要的开始。因为这…

SpringBoot基础之注册Servlet三大组件

文章目录 前言一、介绍二、注入Bean2.1.ServletRegistrationBean2.2.FilterRegistrationBean2.3.ServletListenerRegistrationBean 三.演示结果总结 前言 本文章将介绍SpringBoot注册Servlet的三大组件 一、介绍 由于SpringBoot默认是以jar包的方式运行嵌入式Servlet容器来启…

Protues如何安装下载使用:STM32利用Protues进行仿真

文章目录&#xff1a; 一&#xff1a;Proteus仿真的使用步骤 第一步&#xff1a;Proteus新建项目 第二步&#xff1a;Proteus设计电路图&#xff08;选取元器件、摆放元器件、编辑元器件属性、原理图布线&#xff09; 第三步&#xff1a;程序代码编写 第四步&#xff1a;…

窥孔优化(Peephole Optimization)

窥孔优化&#xff08;Peephole Optimization&#xff09;是编译器中的一个技术&#xff0c;用于优化生成的中间代码或目标代码。该优化方法通过查看代码的小部分&#xff08;或称为“窥孔”&#xff09;来识别并提供更高效的代码替代方案。 1. 基本概念 定义&#xff1a;窥孔优…

如何在CSS中水平居中一个元素?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 margin: 0 auto⭐ 使用 Flexbox 布局⭐ 使用绝对定位和负边距⭐ 使用表格布局⭐ 使用网格布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅…

Vue组件的边界情况

01.$root&#xff1b; 访问组件的根实例&#xff1b;用的不多&#xff0c;基本上在vuex上进行数据操作&#xff1b; 02.$parent/$children; 可以获得父组件或者子组件上边的数据&#xff1b;一般不建议使用$parent,因为如果获取这个值进行修改的话&#xff0c;也会更改父组件上…

VUE3组件

组件基础 {#components-basics} 组件允许我们将 UI 划分为独立的、可重用的部分&#xff0c;并且可以对每个部分进行单独的思考。在实际应用中&#xff0c;组件常常被组织成层层嵌套的树状结构&#xff1a; 这和我们嵌套 HTML 元素的方式类似&#xff0c;Vue 实现了自己的组件…

《使用 VMware 在 Windows 上搭建 Linux 系统的完整指南》

《使用 VMware 在 Windows 上搭建 Linux 系统的完整指南》 1、准备工作1.1 安装 VMware 软件1.2 下载 Linux 发行版镜像文件1.3 安装SSH工具 2、创建新的虚拟机2.1 VMware页面2.2 打开VMware页面并点击创建新的虚拟机&#xff0c;选择自定义2.3 选择系统兼容性&#xff0c;默认…

微信小程序读取本地json

首先在项目录下新建【server】文件夹&#xff0c;新建data.js文件&#xff0c;并定义好json数据格式。如下&#xff1a; pages/index/index.ts导入data.js并请求json pages/index/index.wxml页面展示数据

Vue关闭语法检查

在创建项目的时候&#xff0c;如果不小心开启了 eslint 语法检查&#xff0c;就会导致页面经常报错。 eslint 是一个 JavaScript 的效验插件&#xff0c;用来效验语法和代码的书写风格。 eslint 可以规范开发人员的代码。但是有些像缩进、空格、空行之类的规范&#xff0c;在…

PHP实践:分布式场景下的Session共享解决方案实现

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责…

[gdc]Rendering ‘God of War Ragnark‘

gdc23&#xff0c; sony santa monica关于god of war的分享&#xff1b; back ground 作者stephen mcauley现在是santa monica的technical director&#xff1b;20年加入santa monica&#xff0c;作为rendering lead&#xff0c;有9年的经验&#xff0c;之前在ubisoft montre…