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.pswp.cn/news/34882.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/34882.shtml
英文地址,請注明出處:http://en.pswp.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…