pythonocc 拉伸特征

micromamba install -c conda-forge pythonocc-core

opencascade.js安裝不起來,ai用pythonocc練個手

拉伸線框 線成面

from OCC.Core.gp import gp_Pnt, gp_Dir, gp_Vec
from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeEdge, BRepBuilderAPI_MakeWire
from OCC.Core.BRep import BRep_Tool  # Add this import
from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakePrism
from OCC.Display.SimpleGui import init_displaydef create_closed_wire():# 定義閉合線段的頂點(示例為正方形輪廓)p1 = gp_Pnt(0, 0, 0)p2 = gp_Pnt(10, 0, 0)p3 = gp_Pnt(10, 10, 0)p4 = gp_Pnt(0, 10, 0)# 創建邊(線段)edge1 = BRepBuilderAPI_MakeEdge(p1, p2).Edge()edge2 = BRepBuilderAPI_MakeEdge(p2, p3).Edge()edge3 = BRepBuilderAPI_MakeEdge(p3, p4).Edge()edge4 = BRepBuilderAPI_MakeEdge(p4, p1).Edge()  # 閉合最后一條邊# 創建線框并添加所有邊wire_builder = BRepBuilderAPI_MakeWire()wire_builder.Add(edge1)wire_builder.Add(edge2)wire_builder.Add(edge3)wire_builder.Add(edge4)wire_builder.Build()# 檢查線框是否閉合(修正:使用 BRep_Tool.IsClosed)if not wire_builder.IsDone() or not BRep_Tool.IsClosed(wire_builder.Wire()):raise ValueError("線框未成功構建或未閉合")return wire_builder.Wire()def extrude_wire_to_solid(wire):# 定義拉伸方向(沿 Z 軸正方向,高度 20)direction = gp_Dir(0, 0, 1)vec = gp_Vec(direction) * 20  # 拉伸向量(長度決定高度)# 生成拉伸實體(BREP 特征)prism = BRepPrimAPI_MakePrism(wire, vec)prism.Build()if not prism.IsDone():raise ValueError("拉伸操作失敗")return prism.Shape()if __name__ == "__main__":display, start_display, add_menu, add_function_to_menu = init_display()try:# 生成閉合線框closed_wire = create_closed_wire()# 拉伸生成實體solid = extrude_wire_to_solid(closed_wire)# 顯示結果display.DisplayShape(solid, update=True)start_display()except Exception as e:print(f"錯誤:{e}")


拉伸面 實體

from OCC.Core.gp import gp_Pnt, gp_Dir, gp_Vec
from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeEdge, BRepBuilderAPI_MakeWire, BRepBuilderAPI_MakeFace  # 新增 BRepBuilderAPI_MakeFace
from OCC.Core.BRep import BRep_Tool
from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakePrism
from OCC.Display.SimpleGui import init_displaydef create_closed_wire():# 定義閉合線段的頂點(示例為正方形輪廓)p1 = gp_Pnt(0, 0, 0)p2 = gp_Pnt(10, 0, 0)p3 = gp_Pnt(10, 10, 0)p4 = gp_Pnt(0, 10, 0)# 創建邊(線段)edge1 = BRepBuilderAPI_MakeEdge(p1, p2).Edge()edge2 = BRepBuilderAPI_MakeEdge(p2, p3).Edge()edge3 = BRepBuilderAPI_MakeEdge(p3, p4).Edge()edge4 = BRepBuilderAPI_MakeEdge(p4, p1).Edge()  # 閉合最后一條邊# 創建線框并添加所有邊wire_builder = BRepBuilderAPI_MakeWire()wire_builder.Add(edge1)wire_builder.Add(edge2)wire_builder.Add(edge3)wire_builder.Add(edge4)wire_builder.Build()# 檢查線框是否閉合(修正:使用 BRep_Tool.IsClosed)if not wire_builder.IsDone() or not BRep_Tool.IsClosed(wire_builder.Wire()):raise ValueError("線框未成功構建或未閉合")return wire_builder.Wire()def extrude_wire_to_solid(wire):# 新增:將線框轉換為面(關鍵步驟)face_builder = BRepBuilderAPI_MakeFace(wire)face_builder.Build()if not face_builder.IsDone():raise ValueError("面構建失敗,線框可能未正確閉合或自相交")face = face_builder.Face()# 定義拉伸方向(沿 Z 軸正方向,高度 20)direction = gp_Dir(0, 0, 1)vec = gp_Vec(direction) * 20  # 拉伸向量(長度決定高度)# 拉伸面生成實體(BREP 特征)prism = BRepPrimAPI_MakePrism(face, vec)  # 改為拉伸面而非線框prism.Build()if not prism.IsDone():raise ValueError("拉伸操作失敗")return prism.Shape()if __name__ == "__main__":display, start_display, add_menu, add_function_to_menu = init_display()try:# 生成閉合線框closed_wire = create_closed_wire()# 拉伸生成實體solid = extrude_wire_to_solid(closed_wire)# 顯示結果display.DisplayShape(solid, update=True)start_display()except Exception as e:print(f"錯誤:{e}")

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

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

相關文章

Vue.js 頁面切換空白與刷新 404 問題深度解析

在使用 Vue.js 開發單頁應用 (SPA) 的過程中,開發者經常會遇到兩個常見問題:頁面切換時出現短暫的空白屏幕,以及刷新頁面時返回 404 錯誤。這兩個問題不僅影響用戶體驗,還可能阻礙項目的正常上線。本文將深入探討這兩個問題的成因…

Go 語言 slice(切片) 的使用

序言 在許多開發語言中,動態數組是必不可少的一個組成部分。在實際的開發中很少會使用到數組,因為對于數組的大小大多數情況下我們是不能事先就確定好的,所以他不夠靈活。動態數組通過提供自動擴容的機制,極大地提升了開發效率。這…

Qt5.14.2 鏈接 MySQL 8.4 遇到的問題

問題一: "Plugin caching_sha2_password could not be loaded: 找不到指定的模塊。 Library path is caching_sha2_password.dll QMYSQL: Unable to connect" 解決方法: alter user root@localhost identified with mysql_native_password by root;問題二: ERR…

Docker 部署 - Crawl4AI 文檔 (v0.5.x)

Docker 部署 - Crawl4AI 文檔 (v0.5.x) 快速入門 🚀 拉取并運行基礎版本: # 不帶安全性的基本運行 docker pull unclecode/crawl4ai:basic docker run -p 11235:11235 unclecode/crawl4ai:basic# 帶有 API 安全性啟用的運行 docker run -p 11235:1123…

開發工具分享: Web前端編碼常用的在線編譯器

1.OneCompiler 工具網址:https://onecompiler.com/ OneCompiler支持60多種編程語言,在全球有超過1280萬用戶,讓開發者可以輕易實現代碼的編寫、運行和共享。 OneCompiler的線上調試功能完全免費,對編程語言的覆蓋也很全&#x…

Docker-配置私有倉庫(Harbor)

配置私有倉庫(Harbor) 一、環境準備安裝 Docker 三、安裝docker-compose四、準備Harbor五、配置證書六、部署配置Harbor七、配置啟動服務八、定制本地倉庫九、測試本地倉庫 Harbor(港灣),是一個用于 存儲 和 分發 Docker 鏡像的企業級 Regi…

關于高并發GIS數據處理的一點經驗分享

1、背景介紹 筆者過去幾年在參與某個大型央企的項目開發過程中,遇到了十分棘手的難題。其與我們平常接觸的項目性質完全不同。在一般的項目中,客戶一般只要求我們能夠通過桌面軟件對原始數據進行加工處理,將各類地理信息數據加工處理成地圖/場景和工作空間,然后再將工作空…

使用 DMM 測試 TDR

TDR(時域反射計)可能是實驗室中上升時間最快的儀器,但您可以使用直流歐姆表測試其準確性。 TDR 測量什么 在所有高速通道中,反射都很糟糕。我們嘗試設計一個通道來減少反射,這些反射都會導致符號間干擾 (…

可視化圖解算法37:序列化二叉樹-II

1. 題目 描述 請實現兩個函數,分別用來序列化和反序列化二叉樹,不對序列化之后的字符串進行約束,但要求能夠根據序列化之后的字符串重新構造出一棵與原二叉樹相同的樹。 二叉樹的序列化(Serialize)是指:把一棵二叉樹按照某種遍…

【Python】Python常用數據類型詳解

Python常用數據類型詳解:增刪改查全掌握 Python作為一門簡潔高效的編程語言,其豐富的數據類型是構建程序的基礎。本文將詳細介紹數字、字符串、列表、元組、字典、集合這六種核心數據類型的特點及增刪改查操作,并附代碼示例,助你全面掌握數據操作技巧。 一、數字(Number)…

模板引用、組件基礎

#### 組件基礎 1. 定義和使用簡單組件 - ![alt text](./img/image-2.png) vue <!-- 在App.vue里 --> <script setup>import HelloWorld from ./components/HelloWorld.vue </script> <template><HelloWorld></HelloWorld></temp…

深入探索 RKNN 模型轉換之旅

在人工智能蓬勃發展的當下&#xff0c;邊緣計算領域的應用愈發廣泛。瑞芯微的 RKNN 技術在這一領域大放異彩&#xff0c;它能讓深度學習模型在其芯片平臺上高效運行。而在整個應用流程中&#xff0c;模型轉換是極為關鍵的一環&#xff0c;今天就讓我們一同深入這個神奇的 RKNN …

iframe嵌套網站的安全機制實現

背景&#xff1a; 公司內部有一套系統A部署在內網&#xff0c;這套系統嵌套了B網站&#xff08;也是內網&#xff09;&#xff0c;只有內網才能訪問。現在需要將這個A系統暴露到公網。B系統的安全策略比較低&#xff0c;想快速上線并提高B系統的安全性。 通過 Nginx 代理層 設置…

青少年編程與數學 02-019 Rust 編程基礎 08課題、字面量、運算符和表達式

青少年編程與數學 02-019 Rust 編程基礎 08課題、字面量、運算符和表達式 一、字面量1. 字面量的分類1.1 整數字面量1.2 浮點數字面量1.3 字符字面量1.4 字符串字面量1.5 布爾字面量1.6 字節數組字面量 2. 字面量的類型推斷3. 字面量的用途4. 字面量的限制字面量總結 二、運算符…

危化品安全員職業發展方向的優劣對比

以下是危化品安全員不同職業發展方向的優劣對比&#xff1a; 縱向晉升 優勢 職業路徑清晰&#xff1a;從危化品安全員逐步晉升為安全主管、安全經理、安全總監等管理職位&#xff0c;層級明確&#xff0c;有較為清晰的上升通道。管理能力提升&#xff1a;隨著職位上升&#x…

談AI/OT 的融合

過去的十幾年間&#xff0c;工業界討論最多的話題之一就是IT/OT 融合&#xff0c;現在&#xff0c;我們不僅要實現IT/OT 的融合&#xff0c;更要面向AI/OT 的融合。看起來不太靠譜&#xff0c;卻留給我們無限的想象空間。OT 領域的專家們不要再當“九斤老太”&#xff0c;指責這…

計算機網絡核心技術解析:從基礎架構到應用實踐

計算機網絡作為現代信息社會的基石&#xff0c;承載著全球數據交換與資源共享的核心功能。本文將從網絡基礎架構、核心協議、分層模型到實際應用場景&#xff0c;全面解析計算機網絡的核心技術&#xff0c;并結合行業最新趨勢&#xff0c;為讀者構建系統的知識體系。 一、計算機…

大規模數據并行排序策略(Parallel Sample Sort)

大規模數據并行排序策略 對于上億條大型記錄的并行排序&#xff0c;基于MPI的多節點環境&#xff0c;可以采用以下策略來充分利用內存和網絡資源&#xff1a; 推薦算法&#xff1a;樣本排序(Sample Sort) 樣本排序是大規模并行排序的高效算法&#xff0c;特別適合MPI環境&am…

o.redisson.client.handler.CommandsQueue : Exception occured. Channel

1&#xff0c; 版本 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>2.15.2</version> </dependency>2&#xff0c;問題 2025-05-12 10:46:47.436 ERROR 27780 --- [sson-netty-5-…

Kotlin跨平臺Compose Multiplatform實戰指南

Kotlin Multiplatform&#xff08;KMP&#xff09;結合 Compose Multiplatform 正在成為跨平臺開發的熱門選擇&#xff0c;它允許開發者用一套代碼構建 Android、iOS、桌面&#xff08;Windows/macOS/Linux&#xff09;和 Web 應用。以下是一個實戰指南&#xff0c;涵蓋核心概念…