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

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.xdnf.cn/news/5765.html

相关文章:

  • C语言 第六章 结构体(3)
  • 0前言(文章体系)
  • 数字滤波器应用介绍
  • 流体力学绪论(期末复习)
  • 【android bluetooth 框架分析 02】【Module详解 13】【CounterMetrics 模块介绍】
  • 继承关系下创建对象的具体流程
  • 生活破破烂烂,AI 缝缝补补(附提示词)
  • 进程间的通信
  • python-75-Nacos技术之Python+Nacos实现微服务架构
  • 打破效率枷锁,数企云外呼一骑绝尘
  • beyond compare 免密钥进入使用(删除注册表)
  • MacOS 上构建 gem5
  • 排错-harbor-db容器异常重启
  • PCB抄板过程、抄板软件介绍
  • 基于Qt6 + MuPDF在 Arm IMX6ULL运行的PDF浏览器(项目推介)
  • 做为一个平台,给第三方提供接口的时候,除了要求让他们申请 appId 和 AppSecret 之外,还应当有哪些安全选项,要过等保3级
  • BUUCTF Pwn hitcontraining_uaf WP
  • 学习黑客5分钟深入浅出理解系列之Windows注册表
  • Odoo 18 安全组与访问权限管理指南
  • SQLite 数据库常见问题及解决方法
  • 一般纯软工程学习路径
  • 使用达梦数据库官方管理工具SQLark导入与导出数据库表
  • 解决IDEA无法运行git的问题
  • CVE-2020-1957 漏洞报告
  • 基于MCP的智能体架构设计:实现智能体与外部世界的无缝连接
  • 辣椒青椒幼苗和杂草检测数据集VOC+YOLO格式706张2类别
  • IP协议、以太网包头及UNIX域套接字
  • 在 Java 8 中 常用时间日期类
  • 【Linux系统】自动化构建-make/Makefile的使用
  • AI Agent开发第64课-DIFY和企业现有系统结合实现高可配置的智能零售AI Agent(上)