添加捕捉吸附標識(使用QT+OpenGL開發三維CAD)

捕捉吸附標識怎么畫出來?在點吸附的時候能夠展示吸附標識可以讓用戶更直觀的看到當前捕捉點,從而更準確的進行設計和繪制。

效果視頻見原文:添加捕捉吸附標識(使用QT+OpenGL開發三維CAD)

16.Add snap label

鼠標捕捉吸附標識主要作用是提高用戶在使用鼠標時的操作效率和準確性?。當鼠標移動到某個特定區域時,捕捉吸附標識會觸發鼠標的吸附功能,使得鼠標指針能夠自動吸附到該區域,從而減少移動距離和操作時間,能夠顯著提升用戶的操作體驗和效率?。

我們把此功能的實現歸類到DrawingViewerElemHolder中,我們來看下實現后其public函數的調用邏輯。

<code>DrawingViewerElemHolder</code>接口調用邏輯
圖:`DrawingViewerElemHolder`接口調用邏輯

?

?

好像沒有增加接口,沒有看錯?畫錯?設計錯吧?是的,snapLabel的配置、繪制過程放在了已有的setupdrawViewElement中,并沒有對外新增接口,而內部的修改如下,

  • 新增:setupSnapprivate函數,負責snapLabel的配置,完成其數據到渲染橋梁的搭建;

  • 擴展:drawViewElement函數,使其能夠兼容繪制沒有紋理貼圖的viewer元素,如snapLabel

  • 擴展:ViewerCache類,增加字段;

  • 擴展:在GLView.paintGL中調用繪制,代碼如下;

// ?snap label
if?(ViewerSetting::previewData.previewNextPt)
{QMatrix4x4 modelSnap;modelSnap.translate(m_modelMatrix * QVector3D(ViewerSetting::previewData.previewNextPt->X, ViewerSetting::previewData.previewNextPt->Y, ViewerSetting::previewData.previewNextPt->Z));//modelSnap = m_modelMatrix * modelSnap;m_lightShader.setUniformValue("model", modelSnap);m_model->DrawViewElement(m_lightShader, ViewerCache::snapLabel);
}

可以看到我們沒有做太多的改動即實現了snapLabel的繪制,也沒有在DrawingViewerElemHolder中新增字段,其構建好的繪制數據放在了已有的map<string, MeshInfo> mapName2VMesh中;

盡管如此,我們還是做了關鍵的事情的,比如setupSnap,構建了一個只有圓形邊框的mesh,這個也就是顯示出來的效果,詳細請查看函數實現~

如果一切正常,或者遇到的問題被排查解決,那么鼠標捕捉吸附效果和下圖很像。

捕捉吸附標識效果
圖:捕捉吸附標識效果

專注于圖形學(渲染和幾何算法)、數據處理、并行計算相關研究和研發,歡迎交流~

學習!《從零開發一款三維CAD軟件(OpenGL/QT/C++)》課程上線啦

系列課程已上線,詳細的視頻講解,打下扎實的圖形學基礎,歡迎大家觀看和支持~

往期文章:

  • 學習!《從零開發一款三維CAD軟件(OpenGL/QT/C++)》課程上線啦

  • OpenGL模板緩沖:實現亮顯外輪廓效果

  • 30.抗鋸齒(anti aliasing):使用OpenGL+QT開發三維CAD

  • MSAA抗鋸齒技術的不足和優化(PPAA)

  • 相機:Camera原理講解(使用OpenGL+QT開發三維CAD)

  • 開發三維CAD:實現框選和反選功能

  • 視圖立方體:ViewCube的繪制(使用OpenGL+QT開發三維CAD)

  • 相機:以鼠標點為中心縮放(使用OpenGL+QT開發三維CAD)

  • 添加旋轉中心標識(使用OpenGL+QT開發三維CAD)

  • 構件選中效果:通過自定義幀緩沖實現(使用OpenGL+QT開發三維CAD)

  • 通過交互繪制圖片(使用OpenGL+QT開發三維CAD)

  • 撤銷和重做!支持數據驅動的事務機制啦(使用OpenGL+QT開發三維CAD)

  • 實現復制和預覽:(使用OpenGL+QT開發三維CAD)

  • 支持編輯!讓三維CAD內涵逐漸飽滿,一起開發三維CAD

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91318.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91318.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91318.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

元宇宙中的“蟲洞“:技術實現、應用場景與未來挑戰

一、技術定義與核心架構1.1 蟲洞的元宇宙隱喻概念來源&#xff1a;蟲洞在物理學中是連接不同時空的通道&#xff0c;而在元宇宙中&#xff0c;這一概念被引申為連接不同虛擬世界的跨平臺協議。英偉達Omniverse平臺通過USD&#xff08;通用場景描述&#xff09;實現了這一隱喻&a…

使用GIS中基于森林的分類與回歸模型來估算房屋價值

“基于森林的分類與回歸”&#xff0c;它可以幫助分析師有效地設計、測試和部署預測模型。 基于森林的分類與回歸應用了 Leo Breiman 的隨機森林算法&#xff0c;這是一種用于分類和預測的流行監督機器學習方法。該工具允許分析師輕松整合表格屬性、基于距離的要素和解釋柵格來…

《 java 隨想錄》| LeetCode鏈表高頻考題

前言&#xff1a;這是專門針對java語言講解的算法解析&#xff08;題目順序大致參考《代碼隨想錄》&#xff09;思維導圖操作鏈表刪除節點刪除鏈表中 D 節點時&#xff0c;只需將其前驅節點 C 的 next 指針指向 D 的下一個節點 E。添加節點?先讓 新節點 F 的 next 指針 指向 C…

學習嵌入式的第三十一天-數據結構-(2025.7.23)網絡協議封裝

今天的內容主要是網絡協議以及常用工具的介紹。協議頭與數據封包/拆包數據封包示例&#xff1a;MAC|IP|TCP|hello| ———————————— IP數據報IP頭信息默認20字節常用網絡測試工具telnetnetstatpingarpwiresharktcpdumpssh2secure crt工具安裝命令sudo ufw disable sud…

STL學習(十、常用排序、拷貝、替換算法)

目錄 一、常用排序算法 1.sort (1) 內置數據類型 (2)自定義數據類型 2. random_shuffle(iterator beg, iterator end) 3.merge 4.reverse 二、常用的拷貝和替換算法 1.copy(起始不如直接賦值) 2.replace 3.replace_if 4.swap 一、常用排序算法 1.sort 函數原型 s…

【Datawhale AI夏令營】科大訊飛AI大賽(大模型技術)/夏令營:讓AI理解列車排期表(Task3)

我沒招了jpgimport pandas as pd import requests import re import json from tqdm import tqdm from datetime import datetime, timedeltadef calculate_stop_duration(arrival_time_str, departure_time_str):"""計算列車停留時長&#xff0c;處理跨天和異常…

【前后端】node mock.js+json-server

JSON-Server 一個在前端本地運行&#xff0c;可以存儲json數據的server。前端開發可以模擬服務端接口數據&#xff0c;在本地搭建一個JSON服務&#xff0c;自己產生測試數據。 使用npm全局安裝json-server &#xff1a;npm install -g json-server可以通過查看版本號&#xff0…

疏老師-python訓練營-Day30模塊和庫的導入

浙大疏錦行 知識點回顧&#xff1a; 導入官方庫的三種手段導入自定義庫/模塊的方式導入庫/模塊的核心邏輯&#xff1a;找到根目錄&#xff08;python解釋器的目錄和終端的目錄不一致&#xff09; 作業&#xff1a;自己新建幾個不同路徑文件嘗試下如何導入 一.學習知識點 DAY30 …

神經網絡知識討論

AI 核心任務與數據類型&#xff1a;特征提取核心&#xff1a;AI 的核心是從原始輸入數據中提取特征&#xff0c;CV 是將圖像數據轉換為計算機可識別的特征&#xff0c;NLP 是將文本數據轉換為特征&#xff0c;數據挖掘是將結構化數據轉換為特征。數據類型特點&#xff1a;圖像數…

kotlin類型可為空,進行空安全的區別

定義一個可為空的變量b(String?),默認沒有&#xff1f;是不可以為空的 var b: String? "Kotlin" b null print(b) // 輸出 null默認不可為空 var a: String "Kotlin" a null // 編譯器報錯&#xff0c;null 不能被賦給不為空的變量空安全調用&#x…

Mysql事務基礎

事務是一個不可分割的數據庫操作序列&#xff0c;也是數據庫并發控制的基本單位&#xff0c;其執行的結果必須使數據庫從一種一致性狀態變到另一種一致性狀態。事務是邏輯上的一組操作&#xff0c;要么都執行&#xff0c;要么都不執行 事務的特點 A&#xff08;Atomicity&#…

FastAPI入門:安裝、Pydantic、并發和并行

本系列參考FastAPI官方文檔&#xff1a;https://fastapi.tiangolo.com/zh/python-types/安裝 使用pip安裝&#xff1a; pip install fastapi此外還需要 ASGI 服務器&#xff0c;生產環境可以使用 Uvicorn 或者 Hypercorn。 ASGI服務器&#xff1a;異步服務網關接口&#xff0c;…

歡樂的周末 - 華為OD統一考試(JavaScript 題解)

題目描述 小華和小為是很要好的朋友,他們約定周末一起吃飯。 通過手機交流,他們在地圖上選擇了多個聚餐地點(由于自然地形等原因,部分聚餐地點不可達)。 求小華和小為都能到達的聚餐地點有多少個? 輸入描述 第一行輸入m和n,m代表地圖的長度,n代表地圖的寬度 第二行…

算法競賽階段二-數據結構(38)數據結構動態鏈表list

動態鏈表&#xff08;List&#xff09;的基本概念動態鏈表是一種線性數據結構&#xff0c;通過節點間的指針連接實現動態內存分配。與數組不同&#xff0c;鏈表的大小可隨需增減&#xff0c;插入和刪除操作的時間復雜度為 O(1)&#xff08;已知位置時&#xff09;&#xff0c;但…

Qt 移動應用推送通知實現

推送通知是移動應用提升用戶粘性的核心功能——無論是即時消息提醒、活動推送還是狀態更新&#xff0c;都需要通過推送功能觸達用戶。Qt雖未直接提供跨平臺推送API&#xff0c;但可通過集成原生服務&#xff08;如Firebase Cloud Messaging、Apple Push Notification service&a…

Word和WPS文字如何制作分欄試卷?想分幾欄分幾欄

使用Word和WPS文字制作試卷的時候&#xff0c;通常會使用A3大小的紙張&#xff0c;橫向布局。但是如果題目的題干、問題、選項文字太少&#xff0c;會帶來試卷上有較大的空白&#xff0c;既不美觀又浪費紙&#xff0c;解決辦法就是將試卷分欄&#xff0c;根據需要分成多欄&…

ubuntu 安裝vmware tools

VMware Workstation菜單欄->虛擬機->安裝VMware Tools 打開ubuntu內加載的光盤&#xff0c;復制VMwareTools-10.3.26-22085142.tar.gz&#xff0c;解壓出來 sudo ./vmware-install.pl #執行安裝軟件 VMware Tools 安裝完成以后重啟Ubuntu&#xff0c;重啟以后就可以直…

【實時Linux實戰系列】在實時應用中進行負載均衡

在實時應用中&#xff0c;負載均衡是確保系統能夠高效處理多個任務的關鍵技術。通過合理調度任務到不同的處理單元&#xff0c;負載均衡可以提高系統的整體性能&#xff0c;減少延遲&#xff0c;并提高資源利用率。在實時 Linux 系統中&#xff0c;負載均衡尤為重要&#xff0c…

bash的特性-命令和文件自動補全

一、前言在 Linux Shell 編程和日常使用中&#xff0c;Bash 的自動補全功能 是一個非常強大且實用的特性。它不僅可以節省輸入時間&#xff0c;還能有效減少拼寫錯誤&#xff0c;提升命令執行效率。本文將帶你全面了解 Bash 的自動補全機制&#xff0c;包括&#xff1a;? 命令…

Ubuntu系統 系統盤和數據盤擴容具體操作

Linux磁盤配置和需求&#xff0c;以下是完整的操作方案&#xff1a; 可以看到系統盤vda3 還有48GB 數據盤則是還有512GB沒有掛載使用&#xff0c;下面是完成數據擴容的具體操作 一、完成系統盤擴容&#xff08;使用98GB空間&#xff09; # 1. 擴展邏輯卷&#xff08;LVM架構&am…