CATIA二次开发—漫谈开发环境

简介: CATIA二次开发—漫谈开发环境

一、前言

上篇文章作为热身讲解了CATIA的前世今生,由于本人接触这个软件的时间比较短,所以有理解偏差或者叙述错误的部分,欢迎读者批评指正。本篇文章打算聊一聊CATIA二次开发环境,这是我们迈向二次开发的第一步,这一步要走好、走稳,才能开展后续的开发工作!


e21280b901de4d2a068fa0e4f0a2810e.png

二、开发环境概述

2.1 理论部分


无论是哪种软件的二次开发,首先我们都必须拿到这个软件在进程中的对象(object),CATIA也不例外。而通过编程的方式去访问CATIA对象又有很多种方法。根据所在进程的不同,我们可以将其分为两大阵营:进程内(In-process Application)和进程外(Out-process Application)。其中进程内,顾名思义就是跟CATIA软件在同一进程地址下运行,最典型的例子就是宏(Macro)了,这个词大家应该都在Micro Office开发中有所耳闻,比如说EXCEL 宏开发,其实就是编写一些简单的脚本来完成重复的操作,实现一些简单的自动化功能。而进程外,即CATIA软件与我们所开发的外部应用程序在不同进程地址空间运行,它们互不影响,但又可以互相通信。这种通信的方式是通过OLE技术(Object Linking and Embedding,对象连接与嵌入)实现的。


这里我们花点时间一起来了解一下这个技术,本人也是现学现卖😂。OLE,没有D,是定义和实现一种允许应用程序作为软件对象彼此进行连接的机制,这个应该好理解,就是把整个软件形象化成一个对象,只要你拿到这个对象,就能跟它进行数据传输了。而对于连接的机制得给它定个规范,不然不同的编程语言、不同的系统都要进行连接时,那就乱了套了。所以就有了COM(Component Object Model,部件对象模型),它是软件组件的编制规范。这里插一个对组件的介绍,组件是软件公司为了让开发人员拿到前文所说的软件对象而提供的类库。所以,回到正题,COM的出现有什么作用呢,不管你的组件用什么样的语言开发,只要它遵循COM规范,那么开发人员就能使用任意一种编程语言调用软件对象。例如我们的CATIA是使用C++开发的,如果它不支持COM,那么我们也只能用C++进行二次开发,反之,我们可以使用C#、python、VB等等你所熟悉的任一语言进行开发。这里很庆幸地告诉大家,CATIA,它支持COM,而我目前使用C#进行二次开发工作。对比Revit软件,其采用C#编写,遵循的是.NET 的CLS(COMMON LANGUAGE SPECIFICATION)规范,所以其API能被所有.NET平台的语言所调用,包括:C#、VB.NET、Managed C++等,但.NET以外的就不行了。之前我在CSDN博客里分享了国外大佬开发的 pyRevit,这个项目解决了这个问题,有需要的可以关注一下。


再次切回到进程外上面来,请读者原谅我的天马行空。对于进程内和进程外开发方式的对比我列了下面这张表格,以便大家根据自己的功能需求进行选择。此外,随便提一句,两者在运行时的状态也是不同的。进程内开发时,宏在运行的过程中,CATIA将处于非激活状态,待程序全部跑完,再把进程还给主程序,这就导致了程序假死的现象,交互体验很差;而进程外开发就显得极其友好,在不影响主程序正常操作的情况下,外部程序还能对其进行一些自动化操作!


image.png


2.2 实操部分


理论讲得差不多了,我们结合实际操作进行一个对比。打开VS中的引用管理器,找到COM一栏,我们任意引用一个组件,如图1所示。引用之后,如图2多出了3个关于CATIA的类库,也就说明CATIA中的COM组件对应一组类库(图3),它会自动引用与功能相关的其他类库。此外,细心的人还会发现组件引用的类库和一般的类库存在一些差异,例如通过COM组件引用过来的类库,其属性中包含标识这一属性,即GUID(全球唯一标识码),也就是说这些组件是被唯一标识的。外部程序只在运行期间才动态地建立一个组件的实例,并使用这个组件的功能。这种方式虽然释放了内存空间,但其缺点就是当计算机上的DLL版本与创建程序时使用的版本不同时,就会出现DLL地狱,我有同事遇到过这个问题,他安装了两个版本的CATIA,在程序编制时,他引用了最新版本的COM组件,但运行过程中,系统却总是去实例化那个老版本的DLL,导致程序无法运行,后来将两个版本都卸载,重新安装最新版才得以解决!

d88a791911e1262fa3d134440c5a62dc.png

36b1966c880599afe24535810c39d7d4.png

a33c30afee2ed5806fd1e7118f7d0ca6.png


步骤1:根据界面不同新建VS项目


e49d97cb2ef21e4ee71e2db6e246be33.png

步骤2:导入COM

每个COM组件都是一系列相关函数的集合,暂时还没有花精力去一个个搞明白哪个COM对应哪些功能,所以目前的做法是不管三七二十一,一股脑都导进来,只不过导的过程会多花点时间。


e51b423b8d3aef9bb436ce2eb5749086.png

步骤3:拿到CATIA对象

public  Application GetCatiaAPP()
{
  Application CATIA = null;
  try
  {
    // 已打开CATIA
    CATIA = (INFITF.Application)Marshal.GetActiveObject("CATIA.Application");
  }
  catch
  {
    // 未打开
    Type oType = System.Type.GetTypeFromProgID("CATIA.Application");
    CATIA = (INFITF.Application)Activator.CreateInstance(oType);
    CATIA.Visible = true;
  }
  return CATIA;
}

步骤4:按照国际惯例, Hello CATIA!


ac8f7acfcebe7ad6ac09216789e270af.png

我个人新建了一个CATIA 二次开发的交流学习群,有兴趣的可以加一下,大家一起交流共同进步,我也会把自己收集到的一些学习资料分享在里面,供大家免费下载。

三、参考文章

OLE

COM, COM+ and .NET 程序集的区别

DLL地狱


相关文章
|
8月前
|
IDE JavaScript API
HarmonyOS开发第一步,熟知开发工具DevEco Studio
本文主要以常见的功能点作为概述希望可以帮助到学习HarmonyOS的开发者。
217 0
|
IDE 开发工具 开发者
HarmonyOS(鸿蒙)开发软件DevEco Studio基本配置(兼容IDEA)
HarmonyOS(鸿蒙)开发软件DevEco Studio基本配置(兼容IDEA)
502 0
HarmonyOS(鸿蒙)开发软件DevEco Studio基本配置(兼容IDEA)
|
6月前
|
Linux 开发工具 git
[笔记]ubuntun18.0+clion+qt5 搭建跨平台应用环境
[笔记]ubuntun18.0+clion+qt5 搭建跨平台应用环境
|
2月前
|
运维 IDE 小程序
社区每周丨开发工具IDE 3.6.4 稳定版上线(4.17-4.21)
社区每周丨开发工具IDE 3.6.4 稳定版上线(4.17-4.21)
40 0
|
9月前
|
测试技术 开发工具
软件的开发工具
软件的开发工具
57 0
|
10月前
|
Linux C++ iOS开发
InsCode 搭建 C/C++ 开发环境
InsCode 搭建 C/C++ 开发环境
192 0
|
Python
VsCode集成Python开发环境
VsCode 环境下构建 Python 开发环境
232 0
VsCode集成Python开发环境
|
存储 数据管理 程序员
CATIA V6 二次开发—概述
CATIA V6 二次开发—概述
CATIA V6 二次开发—概述
|
自然语言处理 API
CATIA二次开发—参数那点事
CATIA二次开发—参数那点事
CATIA二次开发—参数那点事
Revit二次开发—获取并修改指定标高
Revit二次开发—获取并修改指定标高