当前位置: 首页 > news >正文

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}")

相关文章:

  • window server 2012安装sql server2008 r2
  • ChromeDriver 技术生态与应用场景深度解析
  • 高吞吐与低延迟的博弈:Kafka与RabbitMQ数据管道实战指南
  • 配置Hadoop集群-集群配置
  • C#调用YOLOV8实现定位
  • 基于React的高德地图api教程002:自定义地图样式
  • vue3+flask+sqlite前后端项目实战
  • C# 检查两个给定的圆是否相切或相交(Check if two given circles touch or intersect each other)
  • vue实现与后台springboot传递数据【传值/取值 Axios 】
  • 超越合并速度(merge speed):AI如何重塑开发者协作
  • FPGA----基于ZYNQ 7020实现定制化的EPICS程序开发
  • Chrome更新到136以后selenium等自动化浏览器失效
  • 【Redis】分布式锁的实现
  • 【AXI总线专题】AXI-FULL-Master
  • 从0开始学习大模型--Day07--大模型的核心知识点
  • 纽约时报发稿刊登案例:海外新闻媒体宣传如何赢得美国决策者
  • UE5.3 C++ 房屋管理系统(二)
  • PyTorch 中的 Autograd 实现细节解析和应用
  • Go语言:json 作用和语法
  • 请解释 React Native 的新架构(Fabric 和 TurboModules)与旧架构的主要区别
  • 美股全线收涨:道指涨逾千点,纳斯达克中国金龙指数涨5.4%
  • 美国三大指数全线高开:纳指涨逾4%,大型科技股、中概股大涨
  • 韩国总统选战打响:7人角逐李在明领跑,执政党临阵换将陷入分裂
  • 火车站员工迟到,致出站门未及时开启乘客被困?铁路部门致歉
  • 18世纪“精于剪切、复制、粘贴”的美国新闻界
  • 巴基斯坦外长:印巴停火