python二次开发CATIA:CATIA Automation

CATIA 软件中有一套逻辑与关系都十分严谨的自动化对象,它们从CATIA(Application)向下分支。每个自动化对象(Automation Object,以下简称Object)都有各自的属性与方法。我们通过程序语言调用这些 Object 的属性与方法,便可控制软件进行部分操作的自动进行。

1、Automation对象查找方法

Automation对象、属性和方法可以从一个叫做 CAA V5 Visual Basic Help 的文件中得到,这个文件存在与 CATIA 安装目录的 code/bin 路径下,文件名为 V5Automation.chm。

可以看到从最上面的 Application 向下有多个用不同颜色表示的子分支。并且有些蓝色对象的右侧带有红色箭头标志 ,点击该箭头可以展开并看以此 Object 为根节点的更深层的树状图。 接下来,我们对“对象 / Object”、“集合 / Collection”、“属性 /Property”、“方法 / Method”这四个概念加以说明。

1.1对象

在 CATIA 里,诸如文件,窗口,视图,视角,零件,草图,凸台特征,乃至直线曲线,这些以对象的形式存在。这种对象在树状图中会用蓝色表示。

1.2集合

集合,也是一种对象,只不过它是包含了其他对象的一种特殊对象。集合对象里包含的对象通常来说都是同一类型。举例来说, documents 集合里包含了 document 对象, 一个很好的识别集合对象的方式就是,它是对象 document 加了 s/es 的复数形式。树状图中的集合类对象用黄色表示。

1.3属性

属性主要是表达该对象有怎样的特征。举例来说, Document 对象,有个属性是FullName,它表示的就是该文件的完整路径,如“D:\xxx\Example1.CATPart” ,这是在我们通过代码打开/保存文件时必不可少的信息。通过读取对象的属性,我们才可以对同类对象加以区分,例如我们可以通过不同的 name 区分同样都是 Document 的两个对象。属性分为两种,一种是常规属性,我们可以读取它的信息,或是修改它的信息;另一种是只读属性,为了防止预期外的修改引起异常,有些对象会有只读属性,你仅可以读取它的值,但不能对其进行更改。读取或修改一个对象的属性值,格式为“对象.属性”。

同属性类似,获取某个对象也是通过“父级对象.子对象” 的方法。而对于 CATIAVBA,最大的父级对象就是 Application 也就是 CATIA。有了这个对象,我们“一路‘点’ 下去” 就可以轻松地获取自己想要的对象及属性。

1.4方法

所谓方法,就是你可以让对象执行某个动作。比如,你可以让当前激活的文档执行“保存” 这个动作。


2、关于宏录制

2.1录制宏的步骤

  1. 打开CATIA,关闭所有文档。
  2. 从菜单中选择“Tools——Macro——Star Recording”命令,以开始录制宏。
  3. 在弹出的记录宏对话框中选择宏的存贮位置、使用的语言,并定义宏的名称,单击确认按钮后,即开始宏的录制工作。
  4. 在录制过程中,可以随时单击“Stop宏录制”按钮。

2.2录制宏的局限性

宏录制是一种记录用户在软件中执行的一系列操作的方法,但这种方法存在一些局限性。

首先,并非所有的内容都会被录制下来。例如,一些对话框中的文本,或者图形界面中的某些元素,可能不会被宏录制下来。这样,录制的宏就无法完全复制用户在软件中的所有交互。

其次,默认的宏录制是不具备交互性的。也就是说,宏只会机械地完全重复之前录制的命令组合,无法与用户实现交互,也无法执行条件或循环语句。这样,录制的宏在执行时的功能就受到很大限制。

另外,宏录制通常无法处理复杂的工作流程或任务。在处理复杂任务时,可能需要更多的编程技巧和经验,才能实现所需的功能。

最后,宏录制可能存在一些安全风险。如果宏代码包含敏感信息,如用户名和密码等,这些信息可能会被恶意用户获取。因此,在使用宏录制时,需要注意信息安全问题。

总结:不是所有的手动操作都可以录制得到对应宏代码;不是所有手动操作,都有对应的 API。
 

3、Part Design 常用 Object 与 API

3.1文件操作

由于我们要进行 Part 里面的操作,所以获取到目标 PartDocument 是首要任务,进而才能获取它的 Part 对象及其子对象,并进行相关建模操作。想要得到一个 PartDocument,无非就是以下几种情况:
• CATIA 当前窗口打开的就是一个 Part 文档,直接获取它;
• 打开一个现有的 Part 文件;
• 没有 Part 文档,我们需要自己新建一个;
• 编辑装配里面的某个 Part。
 

# 获取 Application 的 Documents 对象
docs=catia.documents
# 获取 CATIA 当前激活的 Part 文件
partdoc1=catia.activedocument
# 创建一个新的 Part 文件,注意 P 要大写
partdoc2=docs.add('Part')
# 打开 D 盘的 mypart.CATPart 文件,路径前加 r 是为了防止将路径中的\解析为转义字符
partdoc3=docs.open(r'D:\mypart.CATPart')
# 获取装配里的 prd 部件对应的 Part 文件(仅限该部件为零件时)
partdoc4=prd.ReferenceProduct.Parent

3.2几何体操作

获取到文件之后,通过 PartDocument.Part 即可获取到 Part 对象。 从帮助文档中可以查到, Bodies 隶属于 Part 下面,其 Object 的树状图如下:

其中 Bodies 是 Collection 集合类,因此我们可以使用集合通用的 Add、 Item 等方法对其进行操作, 并且由于 Python 自身语法的原因,对于 Item 的方法,我们可以直接用中括号[]代替,不过要注意序号问题,如:
 

part=partdoc.part
bodies=part.bodies
# 获取第 3 个几何体,两种写法都 OK
body1=bodies.item(3)
body1=bodies[2]
#获取名为 Body.5 的几何体,两种写法都 OK
body2=bodies.item('Body.5')
body2=bodies['Body.5']
# 获取零件几何体
mainbody=part.mainbody
# 由于零件几何体一般为第一个, 因此下面的写法也 OK
mainbody=bodies[0]

对于 Body 的删除,我们通常用 Selection 对象实现,以下代码模拟选中 mybody对象并删除的操作。

sel=document.selection
sel.add(mybody)
sel.delete()

将某一几何体定义为工作对象的方法为:
 

part.inworkobject=mybody

3.3草图操作

草图中的操作可分为草图的创建、进入/退出编辑及线条的绘制、约束的添加等操作。

3.3.1草图创建

对于创建操作,我们可以用 Sketches 这个 Collection 对象的 Add 方法创建新草图。其中 Add 需要一个参数,即草图所在的平面,该参数需是一个 Plane Object 的Reference,并且经实际验证,直接使用 Plane Object 亦可。以下代码先获取了 Part 的三个原始坐标平面中的 xy 平面,并在上面创建草图, 此草图由 mybody 下面的 sketches 对象创建,故创建后出现在 mybody 下:

plane=part.originelements.planexy
sketches=mybody.sketches
mysketch=sketches.add(plane)

如果想创建定位草图,我们需先在支持平面上创建普通草图,再用 sketch 的SetAbsoluteAxisData 方法指定草图的定位信息。该方法需要一个包含 9 个数值元素的矩阵, 其中:
• 前三个值代表草图的原点坐标;
• 中间三个值表示草图 H 轴的方向向量;
• 最后三个值表示草图 V 轴的方向向量。
根据上述内容,我们不难写出下面的代码,实现在 xy 平面上创建一个 H 轴与 x 方向成 45°的草图:

sketch=sketches.add(xyplane)
arr=[0,0,0,0.707,0.707,0,-0.707,0.707,0]
sketch.SetAbsoluteAxisData(arr)

3.3.2线条的绘制

想在草图里绘制线条,首先要进入草图编辑状态, 即调用 Sketch 的 OpenEdition 方法,并且此方法会返回一个 Factory2D 对象,该对象有 CreateLine, CreateCircle 等方法可以实现线条的绘制。需要注意的是,我们在绘制完草图的线条之后,要用 Sketch 的CloseEdition 方法退出编辑状态,并进行 Part 的 Update 操作,这样才可以正常显示并使用这个草图进行后续操作。一段草图中画线、画圆的示例代码如下,其他线条的绘制方法, 读者可自行查阅帮助文档中的 API。

fact2d=sketch.OpenEdition()
# 画线,四个参数分别为线段起、止点的坐标
myline=fact2d.CreateLine(x1,y1,x2,y2)
# 画整圆,三个参数分别为圆心坐标与半径
mycircle=fact2d.CreateClosedCircle(centerx,centery,radius)
sketch.CloseEdition()
part.update()

3.3.3添加约束

约束的创建需要用到 Sketch 下面 Constraints 这个 Collection 的 Add 方法。该对象创建约束有三个方法: AddMonoEltCst, AddBiEltCst, AddTriEltCst,对应的功能分别为为单个元素创建约束(如固定 a) 、为两个元素创建约束(如 a 与 b 相切)、为三个元素创建约束(如 a、 b 关于 c 对称)。至于每个方法创建的具体约束类型,需要通过方法的参数来控制。需要说明的一点是,几何元素不能直接用于创建约束,必须为其创建参考对象,再使用参考对象创建约束。

以下代码实现的功能为创建直线和圆的相切约束。 其他类型约束创建方法及对应参数,请读者自行查阅帮助文档。

mycons=sketch.Constraints
# 创建元素的参考
ref1=part.CreateReferenceFromObject(myline)
ref2=part.CreateReferenceFromObject(mycircle)
# 创建相切约束,查阅帮助文档可知,相切: catCstTypeTangency 的枚举值为 4
tan_con=mycons.AddBiEltCst(4,ref1,ref2)

3.4实体建模操作

实体的生成(凸台、凹槽等)、修饰(倒角、拔模等)、变换(平移、旋转等),以及几何体间的布尔运算这些实体特征, 统称为 Shape,它可以通过 Part 下的ShapeFactory 对象的 Add 方法进行添加。并且, 对于每个具体的 Shape 特征, 我们可以通过该 Shape 的子对象或属性进行相关参数的进一步设置。例如,下图为帮助文档中, Pad(凸台)对象的子对象。

sf=part.shapefactory
# 用 mysketch 拉伸凸台,高度为 50
mypad=sf.addnewpad(mysketch,50)
# 设置凸台的第二限制为-25
mypad.secondlimit.dimension.value=-25

Body 对象下面有 Shapes 这个 Collection 对象,每个 Shape 都属于这个Collection。同其他 Collection 对象一样,我们可以通过 Index 或 Name,获取到其内部指定的特征,如:

# 获取 Body 下的第 4 个特征
shape1=Body.shapes[4]
# 获取 Body 下名为 Pad.2 的特征
shape2=Body.shapes['Pad.2']


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/162703.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言 内存

内存分配 内存分配的类型 C/C中内存分为5个区,分别为栈区、堆区、全局/静态存储区、常量存储区、代码区 静态内存分配:编译时分配,包括全局、静态全局、静态局部三种变量。 动态内存分配:运行时分配,包括栈&#x…

SVM支持向量机

定义 支持向量机(SVM),Supported Vector Machine,基于线性划分,输出一个最优化的分隔超平面,该超平面不但能将两类正确分开,且使分类间隔(margin)最大 **所有训练数据点距离最优分类超平面的距离都要大于支持向量距离…

【docker】查看容器日志

目录 一.通过查找宿主机日志路径,通过Linux命令查看即可。 1.1 查看容器日志路径 1.2 按照日志路径检索日志 二、通过docker命令检索日志 2.1 查看指定时间后的日志,只显示最后20行 2.2 查看最近10分钟的日志 2.3 查看某时间段之后的日志 2.4 查…

SpringCloud-Nacos

一、介绍 (1)作为服务注册中心和配置中心 (2)等价于:EurekaConfigBus (3)nacos集成了ribbon,支持负载均衡 二、安装 (1)官网 (2) …

【算法设计zxd】第6章 回溯法

目录 6.1 回溯法的设计技术 : 四皇后问题 回溯法: 算法框架: 思考题: 回溯算法的适用条件 【例6-1】求满足下列不等式的所有整数解: 6.2回溯算法的经典例题 【例6-2】装载问题  问题分析 计算模型  算法设计与描…

网络安全常见问题隐患及其应对措施

随着数字化时代的到来,网络安全已经成为组织和个人面临的严重挑战之一。网络攻击日益普及,黑客和不法分子不断寻找机会侵入系统、窃取敏感信息、破坏服务和网络基础设施。在这种情况下,了解网络安全的常见问题隐患以及如何应对它们至关重要。…

Golang学习:基础知识篇(三)—— Map(集合)

Golang学习:基础知识篇(三)—— Map集合 前言什么是Golang?Map集合定义 Map综合实例补充 前言 很久之前就想学Go语言了,但是一直有其他东西要学,因为我学的是Java嘛,所以后面学的东西一直是跟J…

机器学习基础之《回归与聚类算法(3)—线性回归优化:岭回归》

一、什么是岭回归 其实岭回归就是带L2正则化的线性回归 岭回归,其实也是一种线性回归。只不过在算法建立回归方程时候,加上L2正则化的限制,从而达到解决过拟合的效果 二、API 1、sklearn.linear_model.Ridge(alpha1.0, fit_interceptTrue…

使用UniApp实现视频数组自动下载与播放功能:一步步指导

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

5分钟内在Linux上安装.NET Core应用程序

作为开源的忠实粉丝,我喜欢 .NET Core 的跨平台特性。它开启了无限的可能性,从业余爱好项目、实验和概念验证,到在具有高安全性和可扩展性的经济高效基础设施上运行的大规模高负载生产应用程序。我通常从任何云平台提供商那里获得最简单、最便…

Java:SpringBoot整合Spring Batch示例

目录 文档基础概念Tasklet方式示例Chunk方式示例参考文章 文档 https://docs.spring.io/spring-batch/docs/4.3.9/reference/html/index.html 基础概念 JobLauncher:作业启动器,启动作业的入口。对应的实现类为SimpleJobLauncher。Job:作业…

上海亚商投顾:沪指震荡调整跌 减肥药、华为概念股持续活跃

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 沪指上个交易日低开后震荡调整,深成指、创业板指盘中跌超1%,宁德时代一度跌超3%&#xff…

apk和小程序渗透

apk和小程序域服务器通信使用的还是http协议,只是使用了加密。只要可以获取到http的请求报文,就可以回归到web渗透的层面。apk和小程序的渗透很复杂,涉及逆向时要进行脱壳,脱壳后反编译了,源代码没做加密就能直接逆向出…

华为eNSP配置专题-NAT的配置

文章目录 华为eNSP配置专题-NAT的配置0、参考文档1、前置环境1.1、宿主机1.2、eNSP模拟器 2、基本环境搭建2.1、基本终端构成和连接2.2、各终端基本配置2.2.1、PC1和PC2的配置2.2.2、交换机不做任何配置2.2.3、网关路由器的配置2.2.4、模拟互联网的路由器的配置 3、配置静态NAT…

代码随想录第四十三天|343. 整数拆分 ● 96.不同的二叉搜索树

343.整数拆分 题目: 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: 10 输出: 36 解释: 10 3 3 4, 3 3 4 …

强化学习 | 强化学习基础知识(图解)

强化学习是机器学习的一个领域。它是关于在特定情况下采取适当的行动来最大化奖励。它被各种软件和机器用来找到在特定情况下应该采取的最佳行为或路径。强化学习与监督学习的不同之处在于,在监督学习中,训练数据具有答案键,因此模型本身使用…

RabbitMQ从0到1完整学习笔记一:《基础篇》

目录 启篇 一、初识MQ 1.1 同步调用 1.2异步调用 1.3 技术选型 二、RabbitMQ 架构 2.2 收发消息 2.2.1 交换机 2.2.2 队列 2.2.3 绑定关系 2.2.4 发送消息 2.3 数据隔离 2.3.1 用户管理 2.3.2 virtual host 三、SpringAMQP 3.1 案例入门 3.1.1 导入依赖 3.1.2 消息发送 3.1.2 消…

图像识别-人脸识别与疲劳检测 - python opencv 计算机竞赛

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是…

threejs(2)-Geometry进阶详解

一、全面讲解UV与应用 在本节中,我们将讨论Three.js中的UV映射,包括UV映射的概念、与顶点位置的关系和区别以及如何在Geometry中设置UV坐标。我们将使用BufferGeometry进行示例说明。 颜色对应 什么是UV映射? UV映射是一种将二维纹理映…

Ubuntu系统如何进行网络连接-连接电脑局域网-物联网开发-Ubuntu系统维护

一、前言 在Ubuntu系统的维护中,我们常常需要对VMware中的Ubuntu虚拟机配置网络连接,以连接服务器下载或安装软件包以及进行网络通信等。 基于上述问题,本文将着重分享Ubuntu配置网络链接的若干方法。 二、网络连接模式 打开VM,右…