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

基于PySide6的CATIA自动化工具开发实战——空几何体批量清理系统

一、功能概述

本工具通过PySide6构建用户界面,结合PyCATIA库实现CATIA V5的自动化操作,提供两大核心功能:

  • 空几何体清理:智能识别并删除零件文档中的无内容几何体(Bodies)
  • 空几何图形集清理:递归检测并清除所有层级的空几何图形集(Geometrical Sets)

工具亮点:

  • 采用Qt信号槽机制实现UI与逻辑解耦
  • 支持多层级递归检测的稳健算法  异常处理机制覆盖90%的COM接口操作异常
  • 窗口置顶特性提升操作便捷性 


二、技术实现详解

2.1 UI模块设计(PySide6)

# 窗口初始化(继承QMainWindow)
class Stats(QMainWindow):def __init__(self):super().__init__()# 动态加载Qt Designer生成的UI文件 [2,3](@ref)qfile_stats = QFile('ui/clear.ui')qfile_stats.open(QFile.ReadOnly)self.ui = QUiLoader().load(qfile_stats)# 窗口特性设置self.ui.setWindowFlags(self.windowFlags() | Qt.WindowStaysOnTopHint)self.ui.move(1200, 500)  # 屏幕坐标定位# 信号槽连接self.ui.delb_btn.clicked.connect(self.del_body)self.ui.delg_btn.clicked.connect(self.del_geos)

关键技术点

  • QUiLoader动态加载:实现UI设计与代码逻辑分离,便于后续维护 
  • WindowStaysOnTopHint:确保工具窗口始终位于CATIA界面之上 
  • QFile安全操作:采用QtCore的文件操作接口提升跨平台兼容性 

2.2 功能模块实现(PyCATIA)

2.2.1 CATIA对象获取
def get_catia_objects():try:catia = StartCatia.start_catia()  # 封装CATIA启动过程doc = PartDocument(catia.active_document.com_object)part = doc.partreturn catia, doc, partexcept pythoncom.com_error as e:raise RuntimeError(f"COM接口异常: {e.excepinfo[2]}") 

异常处理机制

  • 捕获pythoncom.com_error处理COM接口调用异常
  • 通过RuntimeError统一抛出业务异常 
2.2.2 空实体检测算法
def check_empty_geo(geo):# 递归检测子几何集current_empty = (hb.hybrid_shapes.count == 0 and hb.geometric_elements.count == 0)if hasattr(hb, 'hybrid_bodies'):for child in hb.hybrid_bodies:if not check_empty_geo(child):  # 递归调用return Falsereturn current_empty

算法优势

  • 多层级递归检测确保无遗漏 
  • 兼容HybridBody和Geometrical Set两种类型
  • 异常捕获避免意外崩溃 

三、关键代码解析

3.1 通用删除逻辑

def delete_empty_entities(entity_type):sel = doc.selectionsel.search("...")  # 使用CATIA内置搜索语法# 二次验证机制valid_geos = [geo for geo in sel if check_empty_geo(geo)]if sel.count > 0:sel.delete()part.update()  # 强制更新零件状态catia.message_box(f"已删除{count}个空{entity_type}", 64, "完成")

设计亮点

  • 结合CATIA Selection的快速筛选与Python的精确校验
  • part.update()确保删除操作后模型状态正确 
  • 使用CATIA原生消息框提升用户体验 

四、注意事项与优化建议

4.1 使用注意事项

  1. 权限要求:需以管理员身份运行CATIA
  2. 版本兼容:测试支持CATIA V5R25~V5-6R2020
  3. 数据备份:建议操作前保存CATPart文档

4.2 性能优化建议

# 在delete_empty_entities中增加:
with catia.suspend_display_refresh():  # 暂停界面刷新perform_batch_delete()
  • 批量操作时暂停界面刷新可提升30%执行效率 
  • 增加进度条显示(可通过QProgressDialog实现)

五、总结

通过本工具的实现,展示了PySide6与CATIA二次开发的完美结合。这种开发模式可推广至其他CAD软件的自动化工具开发,具有极高的工程应用价值。

最新技术动态请关注作者:Python×CATIA工业智造​​
版权声明:转载请保留原文链接及作者信息

相关文章:

基于PySide6的CATIA自动化工具开发实战——空几何体批量清理系统

一、功能概述 本工具通过PySide6构建用户界面,结合PyCATIA库实现CATIA V5的自动化操作,提供两大核心功能: ​空几何体清理:智能识别并删除零件文档中的无内容几何体(Bodies)​空几何图形集清理&#xff1…...

【CSS文字渐变动画】

CSS文字渐变动画 HTML代码CSS代码效果图 HTML代码 <div class"title"><h1>今天是春分</h1><p>正是春天到来的日子&#xff0c;花都开了&#xff0c;小鸟也飞回来了&#xff0c;大山也绿了起来&#xff0c;空气也有点嫩嫩的气息了</p>…...

Mysql深分页的解决方案

在数据量非常大的情况下&#xff0c;深分页查询则变得很常见&#xff0c;深分页会导致MySQL需要扫描大量前面的数据&#xff0c;从而效率低下。例如&#xff0c;使用LIMIT 100000, 10时&#xff0c;MySQL需要扫描前100000条数据才能找到第10000页的数据。 在MySQL中解决深分页…...

使用pycel将Excel移植到Python

1.适用需求 有些工作可能长期适用excel来进行公式计算&#xff0c;当需要把工作流程转换为可视化界面时&#xff0c;开发人员不懂专业逻辑&#xff0c;手动摸索公式很大可能出错&#xff0c;而且费时费力 2.可用工具及缺点 pandas 方便进行数据处理&#xff0c;支持各种格…...

Apache Tomcat CVE-2025-24813 安全漏洞

Apache Tomcat CVE-2025-24813被广泛利用&#xff0c;但是他必须要满足两个点&#xff1a; 1.被广泛的使用&#xff0c;并且部署在服务器中。 2.漏洞必须依赖在服务器中的配置。 并且漏洞补丁已经发布。 漏洞攻击方式&#xff1a; CVE-2025-24813 是 Apache Tomcat 部分 PUT…...

Spring常用注解汇总

1. IOC容器与Bean管理 注解说明示例Component通用注解&#xff0c;标记类为Spring Bean Component public class MyService { ... } Controller标记Web控制器&#xff08;应用在MVC的控制层&#xff09; Controller public class UserController { ... } Service标记业务逻辑层…...

【CXX-Qt】2.1.1 为 WebAssembly 构建

CXX-Qt 及其编写的应用程序可以编译为 WebAssembly&#xff0c;但存在一些限制。以下是关于如何为 WASM 目标构建的详细说明。 你需要安装 Qt for WebAssembly。下一篇将展示已测试的版本。 此外&#xff0c;如果尚未完成&#xff0c;请从此处克隆 emsdk git 仓库。 使用正确…...

MySql创建分区表并且按月分区

前言 在mysql中&#xff0c;按月份分区&#xff0c;再使用分区字段时间来查询数据将会很快&#xff0c;因为这样只需要扫描指定的分区。因此&#xff0c;在处理大量数据时&#xff0c;使用分区表是一个非常好的选择。 1、创建表&#xff0c;并使用RANGE COLUMNS分区 按创建时间…...

YOLO-UniOW: 高效通用开放世界目标检测模型【附论文与源码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

Flink实战教程从入门到精通(基础篇)(一)Flink简介

目录 一、Flink 二、谁在用Flink? 三、Flink特点 1、批流统一 2、性能卓越 3、规模计算 4、生态兼容性 5、高容错性 四、Flink介绍 1、无界数据 2、有界数据流 3、有状态流处理 五、Flink的发展历史 六、Flink的核心特点 1、高吞吐和低延迟 2、结果的准确性 …...

C/C++编程:Openssl使用 Windows安装包32和64位 RSA加密/解密、AES-GCM加密/解密以及ECDSA签名/验证示例

Openssl的头文件和库 C/C使用openssl&#xff0c;需要openssl的头文件和库&#xff0c;这些都在安装包里。从http://slproweb.com/products/Win32OpenSSL.html下载已经编译好的包含 lib 和 include 文件的安装包。 也可以从官网下载源码&#xff0c;再编译成安装包&#xff0…...

Es6新特性

1. let 和 const 概念 let&#xff1a;用于声明 块级作用域 的变量。const&#xff1a;用于声明 块级作用域 的常量&#xff0c;声明后不可重新赋值&#xff08;但可以修改对象的属性或数组的内容&#xff09;。 原理 JavaScript 在 ES5 中只有全局作用域和函数作用域&…...

大数据学习(80)-数仓分层

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…...

StarRocks 升级注意事项

前段时间升级了生产环境的 StarRocks&#xff0c;从 3.3.3 升级到了 3.3.9&#xff0c;期间还是踩了不少坑所以在这里记录下。 因为我们的集群使用的是存算分离的版本&#xff0c;也是使用官方提供的 operator 部署在 kubernetes 里的&#xff0c;所以没法按照官方的流程进入虚…...

Java 大视界 -- Java 大数据分布式计算中的通信优化与网络拓扑设计(145)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

LabVIEW软件长时间运行导致蓝屏问题排查与优化

计算机在长时间运行LabVIEW或其他软件后出现蓝屏&#xff08;BSOD&#xff09;&#xff0c;通常由硬件资源耗尽、驱动冲突或软件内存泄漏引发。本文提供从日志分析到根本性优化的全流程解决方案&#xff0c;确保系统稳定运行。 一、蓝屏记录查询方法 1. 查看Windows事件日志 操…...

【机密计算顶会解读】11:ACAI——使用 Arm 机密计算架构保护加速器执行

导读&#xff1a;本文介绍ACAI&#xff0c;其构建一个基于CCA的解决方案&#xff0c;使得机密虚拟机能够安全地使用加速器&#xff0c;同时保持与现有应用程序的兼容性和安全性&#xff0c;能够实现对加速器的安全访问。 原文链接&#xff1a;ACAI: Protecting Accelerator Ex…...

【WRF模拟】WPS预处理设置生成文件地址

目录 WPS 运行 geogrid.exe在 namelist.wps 中指定 geogrid.exe 输出路径WPS 运行 ungrid.exe方法 1:在 namelist.wps 中指定输出路径方法 2:手动移动 FILE:* 文件方法 3:使用环境变量 WPS_UNGRIB_OUTPUT(不推荐)另:设置文件链接地址WPS 运行 metgrid.exe方法 1:在 name…...

Midjourney使用教程—2.作品修改

当您已生成第一张Midjourney图像的时候&#xff0c;接下来该做什么&#xff1f;了解我们用于修改图像的工具&#xff01;使用 Midjourney 制作图像后&#xff0c;您的创意之旅就不会止步于此。您可以使用各种工具来修改和增强图像。 一、放大操作 Midjourney每次会根据提示词…...

基于 ABAP RESTful 应用程序编程模型开发 OData V4 服务

一、概念 以个人图书管理为例&#xff0c;创建一个ABAP RESTful 应用程序编程模型项目。最终要实现的效果&#xff1a; 用于管理书籍的程序。读取、修改和删除书籍。 二、Data Model-数据模型 2.1 创建项目基础数据库表 首先&#xff0c;创建一个图书相关的表&#xff0c;点…...

微信小程序登陆之反向代理

一.背景 在互联网架构中&#xff0c;反向代理是连接客户端与后端服务的核心组件。它的核心价值在于&#xff1a; 安全性&#xff1a;隐藏内部服务细节&#xff0c;防止直接暴露到公网。 负载均衡&#xff1a;分散请求到多个后端实例&#xff0c;提升吞吐量。 SSL终止&#x…...

[解决] PDF转图片,中文乱码或显示方框的解决方案

在Java开发中,将PDF文件转换为图片是一项常见的需求,但过程中可能会遇到中文乱码或显示方框的问题。本文将深入探讨这一问题,并提供详细的解决方案,帮助开发者顺利地完成PDF到图片的转换。 一、问题现象 在使用Java库(如Apache PDFBox)将PDF转换为图片时,如果PDF文件中…...

面试康复训练-SQL语句

一&#xff0c;数据库操作 1查看所有库 show databases; --查看所有库2使用数据库 use 数据库名; --使用数据库&#xff1b; 3查看当前使用数据库 select database(); --查看当前使用的数据库 4 创建数据库 create databse 数据库名 charsetutf8; --创建数据库 5删…...

经典面试题:C/C++中static关键字的三大核心作用与实战应用

一、修饰局部变量&#xff1a;改变生命周期&#xff0c;保留跨调用状态 核心作用&#xff1a; ​延长生命周期&#xff1a;将局部变量从栈区移至静态存储区&#xff08;数据段或BSS段&#xff09;&#xff0c;生命周期与程序一致​保留状态&#xff1a;变量在函数多次调用间保…...

Linux固定IP方法(RedHat+Net模式)

1、查看当前网关 ip route | grep default 2、配置静态IP 双击重启 3、验证...

JVM 学习前置知识

JVM 学习前置知识 Java 开发环境层次结构解析 下图展示了 Java 开发环境的层级关系及其核心组件&#xff0c;从底层操作系统到上层开发工具&#xff0c;逐步构建完整的开发与运行环境&#xff1a; 1. 操作系统&#xff08;Windows, MacOS, Linux, Solaris&#xff09; 作用&…...

数据结构---图的深度优先遍历(DFS)

一、与树的深度优先遍历之间的联系 1.类似于树的先根遍历。 递归访问各个结点&#xff1a; 2.图的深度优先遍历 先设置一个数组&#xff0c;初始值全部设置为false&#xff0c;先访问一个结点&#xff0c;在用一个循环&#xff0c;依次检查和这个结点相邻的其他结点&#xff0c…...

QPrintDialog弹出慢的问题

开发环境 操作系统: openkylin2qt版本 : 5.15.10排查过程 首先看下问题的现象, 问题现象 复现问题的demo很简单,只能是从跟踪qt代码方面入手 void MainWindow::on_pushButton_clicked(){QPrinter printer;QPrintDialog dialog(&printer,this);dialog.exec();} 现在需要找一…...

QT-LINUX-Bluetooth蓝牙开发

BlueToothAPI QT-BlueToothApi Qt Bluetooth 6.8.2 官方提供的蓝牙API不支持linux。 D-Bus的API实现蓝牙 确保系统中安装了 BlueZ(版本需≥5.56),并且 Qt 已正确安装并配置了 D-Bus 支持。 默默看了下自己的版本.....D-BUS的API也不支持。 在 D-Bus 中,org 目录是 D-Bus…...

kvm虚拟机的基本使用

[rootkvm ~]# virsh destroy 虚拟机名 #关闭虚拟机 [rootkvm ~]# virsh undefine 虚拟机名 #删除虚拟机 [rootkvm ~]# virsh start 虚拟机名 #开启虚拟机 [rootkvm ~]# virsh console 虚拟机名 #登录虚拟机 [rootkvm ~]# virsh list --all …...

K8S中若要挂载其他命名空间中的 Secret

在Kubernetes&#xff08;k8s&#xff09;里&#xff0c;若要挂载其他命名空间中的Secret&#xff0c;你可以通过创建一个 Secret 的 ServiceAccount 和 RoleBinding 来实现对其他命名空间 Secret 的访问&#xff0c;接着在 Pod 中挂载这个 Secret。下面是详细的步骤和示例代码…...

【Java SE】抽象类/方法、模板设计模式

目录 1.抽象类/方法 1.1 基本介绍 1.2 语法格式 1.3 使用细节 2. 模板设计模式&#xff08;抽象类使用场景&#xff09; 2.1 基本介绍 2.2 具体例子 1.抽象类/方法 1.1 基本介绍 ① 当父类的某些方法&#xff0c;需要声明&#xff0c;但是又不确定如何实现时&#xff…...

如何理解java中Stream流?

在Java中&#xff0c;Stream 是 Java 8 引入的一个强大API&#xff0c;用于处理集合&#xff08;如 List、Set、Map 等&#xff09;数据的流式操作。它提供了一种声明式、函数式的编程风格&#xff0c;可以高效地进行过滤、映射、排序、聚合等操作。 Stream 的核心概念 流&…...

QT编程之数据库开发

一、架构层次 ‌用户接口层‌ ‌QSqlQueryModel‌&#xff1a;管理SQL查询结果&#xff0c;提供表格数据模型用于展示‌‌QSqlTableModel‌&#xff1a;支持直接操作数据库表&#xff08;增删改查&#xff09;‌‌QSqlRelationalTableModel‌&#xff1a;支持带外键关联的复杂表…...

【10】高效存储MongoDB的用法

目录 一、什么是MongoDB 二、准备工作 &#xff08;1&#xff09;安装MongoDB ​&#xff08;2&#xff09;安装pymongo库 三、连接MongoDB 四、指定数据库 五、指定集合 六、插入数据 &#xff08;1&#xff09; insert 方法 &#xff08;2&#xff09;insert_one(…...

使用Qdrant等其他向量数据库时需要将将numpy 数组转换为列表 确保数据能被正确处理和序列化,避免类型不兼容的问题。

在使用Qdrant等其他向量数据库时需要 转换 numpy 数组为列表主要是为了确保数据能被正确处理和序列化&#xff0c;避免类型不兼容的问题。具体原因如下&#xff1a; 序列化兼容性&#xff1a; 很多数据库接口、API 或者 JSON 序列化工具只能处理 Python 的内置类型&#xff08;…...

mayfly-go开源的一站式 Web 管理平台

mayfly-go 是一款开源的一站式 Web 管理平台&#xff0c;旨在通过统一的界面简化 Linux 服务器、数据库&#xff08;如 MySQL、PostgreSQL、Redis、MongoDB 等&#xff09;的运维管理。以下从多个维度对其核心特性、技术架构、应用场景及生态进行详细解析&#xff1a; 一、核心…...

Linux中的yum和vim工具使用总结

在Linux系统管理和文本编辑中&#xff0c;yum和vim是两个非常重要的工具。yum作为包管理器帮助我们轻松安装和管理软件&#xff0c;而vim则是一个功能强大的文本编辑器。下面我将对这两个工具进行详细介绍。 一、YUM包管理器 1. YUM简介 YUM (Yellowdog Updater Modified) 是…...

笔记:代码随想录算法训练营day58:101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿

学习资料&#xff1a;代码随想录 文中含大模型生成内容 101. 孤岛的总面积 卡码网&#xff1a;101. 孤岛的总面积 所以找周边都是水的陆地的方法就是找边缘的陆地然后删除它连同它的连通的陆地 深搜 #include <iostream> #include <vector> using namespac…...

Rust语言介绍和猜数字游戏的实现

文章目录 Rust语言介绍和猜数字游戏的实现cargo是什么使用Rust编写猜数字 Rust语言介绍和猜数字游戏的实现 Rust语言是一种系统编程语言&#xff0c;核心强调安全性、并发性以及高性能&#xff0c;由类似于C/C的底层控制能力&#xff0c;性能也非常接近&#xff0c;Rust有一些…...

高并发库存系统是否适合使用 ORM(Hibernate / MyBatis)

在设计高并发的库存管理系统时&#xff0c;数据层的选择至关重要。许多企业开发中习惯使用 ORM&#xff08;如 Hibernate、MyBatis&#xff09;来简化数据库访问&#xff0c;但在高并发、高吞吐的场景下&#xff0c;ORM 的适用性往往成为争议焦点。本文将探讨高并发库存系统是否…...

Spring Boot中接口数据字段为 Long 类型时,前端number精度丢失问题解决方案

Spring Boot中接口数据字段为 Long 类型时&#xff0c;前端number精度丢失问题解决方案 在Spring Boot中&#xff0c;当接口数据字段为 Long 类型时&#xff0c;返回页面的JSON中该字段通常会被序列化为数字类型。 例如&#xff0c;一个Java对象中有一个 Long 类型的属性 id …...

Java-servlet(七)详细讲解Servlet注解

Java-servlet&#xff08;七&#xff09;详细讲解Servlet注解 前言一、注解的基本概念二、Override 注解2.1 作用与优势2.2 示例代码 三、Target 注解3.1 定义与用途3.2 示例代码 四、WebServlet 注解4.1 作用4.2 示例代码 五、反射与注解5.1 反射的概念5.2 注解与反射的结合使…...

OpenCV Imgproc 模块使用指南(Python 版)

一、模块概述 imgproc 模块是 OpenCV 的图像处理核心&#xff0c;提供从基础滤波到高级特征提取的全流程功能。核心功能包括&#xff1a; 图像滤波&#xff1a;降噪、平滑、锐化几何变换&#xff1a;缩放、旋转、透视校正颜色空间转换&#xff1a;BGR↔灰度 / HSV/Lab 等阈值…...

PostgreSQL:简介与安装部署

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

流畅如丝:利用requestAnimationFrame优化你的Web动画体验

requestAnimationFrame 是前端开发中用于优化动画性能的 API。它允许浏览器在下一次重绘之前执行指定的回调函数&#xff0c;通常用于实现平滑的动画效果。 1.作用 优化性能&#xff1a;requestAnimationFrame 会根据浏览器的刷新率&#xff08;通常是 60Hz&#xff0c;即每秒…...

OpenCV 基础模块 Python 版

OpenCV 基础模块权威指南&#xff08;Python 版&#xff09; 一、模块全景图 plaintext OpenCV 架构 (v4.x) ├─ 核心层 │ ├─ core&#xff1a;基础数据结构与操作&#xff08;Mat/Scalar/Point&#xff09; │ └─ imgproc&#xff1a;图像处理流水线&#xff08;滤…...

代码随想录算法训练营第十五天 | 数组 |长度最小的子数组和螺旋矩阵II

长度最小的子数组 【题目简介】 【自写数组解法】 class Solution:def minSubArrayLen(self, target: int, nums: List[int]) -> int:minLength float(inf)slow 0fast 0cur_sum nums[slow]# 终止条件&#xff1a;fast不能超过最大索引值while slow < fast and fas…...

C++ 入门第27天:异常处理详细讲解

往期回顾&#xff1a; C 入门第24天&#xff1a;C11 多线程基础-CSDN博客 C 入门第25天&#xff1a;线程池&#xff08;Thread Pool&#xff09;基础-CSDN博客 C 入门第26天&#xff1a;文件与流操作基础-CSDN博客 C 入门第27天&#xff1a;异常处理详细讲解 前言 在 C 开发中…...

Powershell WSL导出导入ubuntu22.04.5子系统

导出Linux子系统 导出位置在C盘下,根据自己的实际情况更改即可Write-Host "export ubuntu22.04.5" -ForegroundColor Green wsl --export Ubuntu-22.04 c:\Ubuntu-22.04.tar 导入Linux子系统 好处是目录可用在任意磁盘路径,便于迁移不同的设备之间Write-Host &quo…...