三、OrcaSlicer預設顯示

一、界面類

主框架使用的是wxWidgets庫;3D模型的渲染區的控件,使用的是imgui庫。

1、Plater

? ? ? ? 此類在OrcaSlicer\src\slic3r\GUI\Plater.hpp文件中定義

1.1?Plater::priv

? ? ? ? 此結構體是Plater的數據類,各種數據的對象和指針保存在此結構體中。如Sidebar *sidebar。

2、Sidebar 邊欄(左側欄)類

? ? ? ? 此類在OrcaSlicer\src\slic3r\GUI\Plater.hpp文件中定義,此類是從wxPanel派生而來。

2.1 成員變量

? ? ? ? 1、struct Sidebar::priv

? ? ? ? ? ? ? ? 此結構體是Sidebar用來保存數據。申明為std::unique_ptr<priv> p,在構造函數中,通過new priv(parent)進行賦值。

2.1 成員函數

? ? ? ? 1、Sidebar::Sidebar(Plater *parent)

? ? ? ? ? ? ? ? 在構造函數中會創建:1)打印機下拉框(PlaterPresetComboBox類),new出來的對象指針保存在Sidebar::priv中,變量名為combo_printer;2)會創建耗材下拉框(PlaterPresetComboBox類),new出來的對象指針保存在Sidebar::priv中,變量名為combos_filament。3)工藝下拉框在ParamsPanel類中定義,此類的對象指針保存在MainFrame::m_param_panel中,此指針在MainFrame::init_tabpanel()函數中創建。

? ? ? ? ? ? ? ? Sidebar對象指針保存在Plater::priv中,指針的在priv構造函數中創建,Plater對象指針保存在MainFrame::m_plater中,此指針在MainFrame::init_tabpanel()函數中創建。

3、下拉框

3.1?ComboBox

? ? ? ? 此類在OrcaSlicer\src\slic3r\GUI\Widgets\ComboBox.hpp文件中定義。是從public wxWindowWithItems<TextInput, wxItemContainer>派生而來。

3.1.1 成員變量

? ? ? ? 1、std::vector<wxString> texts;下拉框中顯示的文本內容

? ? ? ? 2、std::vector<wxString> tips;下拉框中顯示行的提示內容

? ? ? ? 3、std::vector<wxBitmap> icons;下拉框顯示行的圖標

? ? ? ? 4、std::vector<void *> datas;下拉框顯示行的數據

? ? ? ? 5、std::vector<wxClientDataType> types;下拉框顯示行數據類型

? ? ? ? 6、DropDown drop; 點擊下拉時的彈窗

3.1.2 成員函數

? ? ? ? 1、int Append(const wxString &item, const wxBitmap &bitmap = wxNullBitmap);向下拉框中添加數據。

3.2?PresetComboBox

? ? ? ? 此類在OrcaSlicer\src\slic3r\GUI\PresetComboBoxs.hpp文件中定義。是從ComboBox派生而來。

3.2.1 成員變量

? ? ? ? 1、Preset::Type m_type;//TYPE_PRINTER打印機預設;TYPE_FILAMENT耗材預設;TYPE_PRINT工藝預設;

? ? ? ? 2、int m_last_selected; 最后一個選擇的行的下標。

3.2.2 成員函數

? ? ? ? 1、void update(std::string select_preset);

? ? ? ? ? ? ? ? 將collection中的用戶預設和系統預設,通過Append函數進行添加。

3.3?PlaterPresetComboBox

? ? ? ? 此類是從PresetComboBox派生而來。打印機預設下拉框和耗材預設下拉框,是由此類創建的對象。

3.3.1 成員函數

? ? ? ? 1、void update() override;

? ? ? ? ? ? ? ? 重寫update函數。循環collection中的presets,1)如果是default或system,則是系統預設;2)如果是is_project_embedded,則是項目預設;3)其他的是用戶預設。

? ? ? ? 2、void OnSelect(wxCommandEvent& evt) override;

? ? ? ? ? ? ? ? 重寫OnSelect函數。

3.3.2 切換打印機的流程

? ? ? ? 1、在Plater::priv::priv構造函數中,使用sidebar->Bind(wxEVT_COMBOBOX, &priv::on_combobox_select, this);將sidebar中的wxEVT_COMBOBOX消息綁定到on_combobox_select中。所在切換打印機預設時,會調用此函數。

二、文件的導入

1、3mf文件的導入

當點擊導入或拖入3mf文件時,會調用std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_files, LoadStrategy strategy, bool ask_multi)進行處理

1.1?_BBS_3MF_Importer

? ? ? ? 在load_bbs_3mf函數中會調用此類來進行3mf文件的解析。此類在OrcaSlicer\src\libslic3r\Format\bbs_3mf.cpp文件中定義

1.1.1 成員變量

? ? ? ? 1、關系文件數據

? ? ? ? ????????std::string m_start_part_path;
? ? ? ? ????????std::string m_thumbnail_path;
? ? ? ? ????????std::string m_thumbnail_middle;
? ? ? ? ????????std::string m_thumbnail_small;
? ? ? ? ????????std::vector<std::string> m_sub_model_paths;

????????????????std::vector<ObjectImporter*> m_object_importers;

? ? ? ? 2、3mf模型數據

????????????????std::map<Id, CurrentObject> m_current_objects;

????????

1.1.2 成員函數

? ? ? ? 1、_load_model_from_file

? ? ? ? ? ? ? ? 1)使用miniz庫對3mf文件zip包,進行解壓。先讀取_rels/.rels文件,使用expat庫對xml文件進行解析。在_handle_start_relationship函數中,將3dmodel文件路徑讀取出來,保存在m_start_part_path中,子模型路徑保存在m_sub_model_paths中。.png的略縮圖路徑保持在m_thumbnail_path、m_thumbnail_middle、m_thumbnail_small中。

? ? ? ? ? ? ? ? 2)從3D/_rels/3dmodel.model.rels(通過m_start_part_path解析來)文件中,讀取子模型路徑保存在m_sub_model_paths中。每一個model_path都對應一個ObjectImporter對象。保存在std::vector<ObjectImporter*> m_object_importers;變量中。

? ? ? ? ? ? ? ? 3)使用并行計算輪詢_BBS_3MF_Importer.m_object_importers數據,調用ObjectImporter.extract_object_model讀取模型文件數據到ObjectImporter.object_list中。

? ? ? ? ? ? ? ? 4)輪詢ObjectImporter.object_list,將數據移動到_BBS_3MF_Importer.m_current_objects中。

? ? ? ? ? ? ? ? 5)調用_extract_from_archive函數

? ? ? ? ? ? ? ? 6)輪詢其它文件

? ? ? ? ? ? ? ? ? ? ? ? a?[Content_Types].xml ;

? ? ? ? 2、_extract_from_archive

? ? ? ? ? ? ? ? 1)讀取3D/3dmodel.model文件,使用_extract_model_from_archive函數進行解析

? ? ? ? 3、_extract_model_from_archive

? ? ? ? ? ? ? ? 1)使用expat庫對xml進行解析,會調用_BBS_3MF_Importer._extract_model_from_archive對數據進行解析

? ? ? ? 4、_extract_model_from_archive

????????????????????????????????

1.2?ObjectImporter

1.2.1 成員變量

????????std::map<Id, CurrentObject> object_list;

????????Geometry geometry;

????????CurrentObject *current_object

????????std::string obj_curr_metadata_name;

? ? ? ??float object_unit_factor; 對象單位因子

1.2.2 成員函數

? ? ? ? 1、_extract_object_from_archive

? ? ? ? ? ? ? ? 在調用extract_object_model時,最后會調用此函數來進行model文件的讀取,.model文件是xml文件,使用expat庫對xml文件進行解析。會調用_handle_object_start_model_xml_element函數對字段進行解析。

? ? ? ? 2、_handle_object_start_model_xml_element

? ? ? ? ? ? ? ? 1) model:unit為millimeter時,object_unit_factor=1.0f

? ? ? ? ? ? ? ? 2) metadata: name屬性保存在obj_curr_metadata_name中

? ? ? ? ? ? ? ? 3) object: type屬性值為model,new一個CurrentObject對象,保存在current_object中

? ? ? ? ? ? ? ? 4) mesh: 重置CurrentObject.geometry的值。

? ? ? ? ? ? ? ? 5) vertices:清空Geometry.vertices數據

? ? ? ? ? ? ? ? 6) vertex: 將向量數據x,y,z乘以object_unit_factor后的數據,保存在geometry.vertices中。

? ? ? ? ? ? ? ? 7) triangles:清空Geometry.triangles數據

? ? ? ? ? ? ? ? 8)?triangle:將頂點數據v1,v2,v3保存在geometry.triangles中,paint_supports保存在geometry.custom_supports中,paint_seam保存在geometry.custom_seam中,paint_color保存在geometry.mmu_segmentation中,face_property保存在geometry.face_properties中。

? ? ? ? 3、_handle_object_end_object

? ? ? ? ? ? ? ? 在object節點結束后,會將文件名和屬性id的值組合成一個std::pair鍵值對,做為key值,ObjectImporter.current_object對象做為value,添加到ObjectImporter.object_list中。

1.3?CurrentObject

? ? ? ? 此結構體用來保存.model中的object節點數據

1.3.1 成員變量

? ? ? ? 1)int id;? ? ? ? ?//屬性id

? ? ? ? 2)??std::string uuid;? ? ? ? //屬性p:UUID

1.3.2 成員函數

1.4?Geometry

? ? ? ? 幾何數據放在此結構體中

1.4.1 成員變量

? ? ? ? 1)?std::vector<Vec3f> vertices;

? ? ? ? 2)?std::vector<Vec3i32> triangles;

? ? ? ? 3)std::vector<std::string> custom_supports;

? ? ? ? 4)std::vector<std::string> custom_seam;

? ? ? ? 5)std::vector<std::string> mmu_segmentation;

? ? ? ? 6)std::vector<std::string> face_properties;

????????????????

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

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

相關文章

00 QEMU源碼中文注釋與架構講解

QEMU源碼中文注釋與架構講解 先占坑&#xff1a;等后續完善后再更新此文章 注釋作者將狼才鯨創建日期2025-05-30更新日期NULL CSDN閱讀地址&#xff1a;00 QEMU源碼中文注釋與架構講解Gitee源碼倉庫地址&#xff1a;才鯨嵌入式/qemu 一、前言 參考網址 QEMU 源碼目錄簡介qe…

一、Sqoop歷史發展及原理

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月30日 專欄&#xff1a;Sqoop教程 在大數據時代&#xff0c;數據往往分散存儲在各種不同類型的系統中。其中&#xff0c;傳統的關系型數據庫 (RDBMS) 如 MySQL, Oracle, PostgreSQL 等&#xff0c;仍然承載著大量的關鍵業務…

【Halcon】圖像分割中的 regiongrowing 與dyn_threshold 動態閾值 算法詳解對比

圖像分割中的 regiongrowing 與動態閾值算法詳解對比 在使用 HALCON 進行圖像處理時&#xff0c;圖像分割是最常見也最關鍵的操作之一。本文將深入講解 regiongrowing 算子的原理與使用方法&#xff0c;并與另一常見方法——動態閾值 (dyn_threshold) 進行詳細對比&#xff0c…

Docker部署項目無法訪問,登錄超時完整排查攻略

項目背景&#xff1a;遷移前后端應用&#xff0c;prod環境要求保留443端口&#xff0c;開發環境37800端口&#xff0c;后端容器端口為8000&#xff0c;前端為80&#xff0c;fastAPI對外端口為41000 生產環境部署在VM01,開發環境部署在VM03&#xff0c;在VM01配置nginx轉發 [r…

充電便捷,新能源汽車移動充電服務如何預約充電

隨著新能源汽車的普及&#xff0c;充電便捷性成為影響用戶體驗的關鍵因素之一。傳統的固定充電樁受限于地理位置和數量&#xff0c;難以完全滿足用戶需求&#xff0c;而移動充電服務的出現&#xff0c;為車主提供了更加靈活的補能方式。通過手機APP、小程序或在線平臺&#xff…

探索C++標準模板庫(STL):從容器到底層奧秘-全面解析String類高效技巧(上篇)

前引&#xff1a;在現代軟件開發中&#xff0c;字符串處理是幾乎所有程序的核心需求之一。無論是文本解析、網絡通信&#xff0c;還是用戶交互&#xff0c;高效且安全的字符串操作能力直接決定了代碼的質量與可維護性。而C標準模板庫&#xff08;Standard Template Library, ST…

Python爬蟲實戰:抓取百度15天天氣預報數據

&#x1f310; 編程基礎第一期《9-30》–使用python中的第三方模塊requests&#xff0c;和三個內置模塊(re、json、pprint)&#xff0c;實現百度地圖的近15天天氣信息抓取 記得安裝 pip install requests&#x1f4d1; 項目介紹 網絡爬蟲是Python最受歡迎的應用場景之一&…

HTML常見事件詳解:從入門到實戰應用

前言 在Web開發中&#xff0c;事件是用戶與網頁交互的核心機制。HTML事件讓我們能夠響應用戶的各種操作&#xff0c;如點擊、鼠標移動、鍵盤輸入等。掌握HTML事件是前端開發的基礎技能之一&#xff0c;本文將深入探討HTML中的常見事件類型及其實際應用。 HTML事件概覽總結 H…

模具制造業數字化轉型:精密模塑,以數字之力鑄就制造基石

模具被譽為 “工業之母”&#xff0c;是制造業的重要基石&#xff0c;其精度直接決定了工業產品的質量與性能。在工業制造向高精度、智能化發展的當下&#xff0c;《模具制造業數字化轉型&#xff1a;精密模塑&#xff0c;以數字之力鑄就制造基石》這一主題&#xff0c;精準點明…

深度解讀漏洞掃描:原理、類型與應用實踐

在網絡安全領域&#xff0c;漏洞就像隱藏在系統中的定時炸彈&#xff0c;隨時可能被攻擊者利用&#xff0c;導致數據泄露、服務癱瘓等嚴重后果。而漏洞掃描作為發現這些潛在威脅的 “偵察兵”&#xff0c;是保障網絡安全的重要防線。本文將全面介紹漏洞掃描的相關知識&#xff…

[HNCTF 2022 Week1]silly_zip

下載附件 解壓發現需要密碼 用010打開看看&#xff0c;發現是偽加密 改成00點擊保存 解壓后得到圖片 感覺圖片看著怪怪的&#xff0c;修改一下高度看看有沒有其他線索 把47改成78 最后得到flag

Facebook 的隱私保護措施是否足夠?技術觀點

在數字時代&#xff0c;隱私保護成為了公眾關注的焦點&#xff0c;尤其是對于擁有數十億用戶的社交媒體巨頭 Facebook 來說&#xff0c;其隱私保護措施的有效性更是備受矚目。本文將從技術角度探討 Facebook 的隱私保護措施是否足夠。 數據收集與使用 Facebook 收集用戶數據的…

cocosCreator 1.8 升級到 2.4

現在負責的一個運營中的商業項目&#xff0c;使用的是 cocosCreator1.8&#xff0c;之前沒有做好設計&#xff0c;所以東西都是直接加載在內存中的&#xff0c;到了現在性能問題逐漸暴露出來&#xff0c;討論之后想進行引擎升級&#xff0c;升級到cocosCreator 2.4。 官方的升…

ubuntu 制作 ssl 證書

安裝 openssl sudo apt install openssl 生成 SSL 證書 # 生成私鑰 (Private Key) openssl genrsa -out private.key 2048 在當前目錄生成 private.key # 生成證書簽名請求 (CSR - Certificate Signing Request) openssl req -new -key private.key -out certificate.csr -…

【Java基礎-環境搭建-創建項目】IntelliJ IDEA創建Java項目的詳細步驟

在Java開發的世界里&#xff0c;選擇一個強大的集成開發環境&#xff08;IDE&#xff09;是邁向高效編程的第一步。而IntelliJ IDEA無疑是Java開發者中最受歡迎的選擇之一。它以其強大的功能、智能的代碼輔助和簡潔的用戶界面&#xff0c;幫助無數開發者快速構建和部署Java項目…

WEB3——什么是ABI

怎么獲得ABI&#xff1f; 在編譯完合約后&#xff0c;可以在左邊下面點擊復制ABI ABI&#xff08;Application Binary Interface&#xff0c;應用二進制接口&#xff09;是用來讓前端或服務端 JavaScript 代碼與智能合約進行交互的橋梁&#xff0c;它描述了合約的函數、事件和…

移動安全Android——客戶端數據安全

本地文件權限配置 測試流程 &#xff08;1&#xff09;手機運行待測APP應用&#xff0c;adb執行命令找到APP包名 adb shell dumpsys activity top|findstr ACTIVITY &#xff08;2&#xff09;adb shell 進入設備&#xff0c;以Root權限進入/data/data/package包名目錄下 c…

拉普拉斯噪聲

1. 概念 拉普拉斯噪聲是一種連續概率分布生成的隨機噪聲&#xff0c;其核心特點是符合拉普拉斯分布。這種噪聲被特意添加到數據&#xff08;尤其是查詢結果或統計量&#xff09;中&#xff0c;以實現差分隱私這一嚴格的隱私保護框架。 核心目的&#xff1a; 在保護數據集中的個…

django項目開啟debug頁面操作有數據操作記錄

在項目的主文件中setting中配置 """ Django settings for ProjectPrictice project.Generated by django-admin startproject using Django 3.0.1.For more information on this file, see https://docs.djangoproject.com/en/3.0/topics/settings/For the ful…

【科研繪圖系列】R語言繪制森林圖(forest plot)

禁止商業或二改轉載,僅供自學使用,侵權必究,如需截取部分內容請后臺聯系作者! 文章目錄 介紹加載R包數據下載導入數據數據預處理畫圖系統信息介紹 本文介紹使用R語言繪制森林圖(forest plot)的方法。首先加載必要的R包(grid、forestploter、openxlsx、stringr),導入并預處…