1. 引言

由于项目需要,最近搜集整理了一些关于CATIA二次开发的资料,貌似国内对于CATIA二次开发需求不大,相关资料比较有限,因此刚开始遇到了不少问题,通过分析网上的一些示例,以及结合CATIA的宏录制功能生成的代码,才算是对CATIA的开发方式有所了解。现总结一下学习中遇到的相关问题及解决办法,以作备忘。

2. CATIA简介

CATIA(Computer Aided Three Dimensional Interactive Application)是法国达索公司的产品开发旗舰解决方案。作为PLM协同解决方案的一个重要组成部分,它可以帮助制造厂商设计他们未来的产品,并支持从项目前阶段、具体的设计、分析、模拟、组装到维护在内的全部工业设计流程。通过使企业能够重用产品设计知识,缩短开发周期,CATIA解决方案加快企业对市场的需求的反应。CATIA比较广泛的用于汽车、航空航天、轮船、军工、仪器仪表、建筑工程、电气管道、通信等方方面面(来源-百度百科-CATIA)。

3. CATIA开发模式

CATIA提供了AutomationAPI组件和组件应用架构(CAA,Component Application Architecture)两种开发模式。

3.1 Automation组件

Automation API具备与任何OLE所兼容的平台进行通讯能力,自动化(Automation)组件使用VBScript作为编辑工具。通过宏录制功能(Macro Record),可以记录用户的操作过程并自动生成VBScript代码。这种方式比较简单,在CATIA环境就中可完成。

3.2 组件应用架构(CAA)

CAA采用组件对象模型(COM)和对象的连接和嵌入(OLE)技术,COM作为一种软件架构具备了更好的模块独立性、可扩展性,使CAA的程序设计更加容易且趋于标准化,使程序的代码更加简洁明了。在CATIA运行的情况下,外部进程可以通过访问COM组件实现对CATIA的操作,如创建、修改CATIA环境和几何形体的数据、尺寸等。

4. 为什么采用CSharp作为开发语言

VBScript脚本方法过于简单,无法实现CATIA的某些功能,如碰撞检测功能,且无法与现有项目进行集成。CAA/C++模式是最复杂的开发模式,其可以实现几乎所有的CATIA功能,但是其过于复杂,需要一定的学习时间,无法很快进行功能实现。因此这两种实现方式都不是很适合。由于CATIA提供了COM支持,因此我们可以通过.Net平台引入COM组件进行开发,其有如下优势:
1. 由于项目本身采用的是CSharp语言,因此能够很好的集成到项目中,并且能够满足项目需求。
2. 学习成本较低,通过对宏生成代码进行少许改造即可在.Net平台中运行。
3. 可以将通用操作进行封装,方便今后项目的开发,降低开发成本。

5. 准备开发

5.1 所需软件

  • CATIA V5 R20
  • Visual Studio 2010

5.2 引入类库

在正确安装CATIA之后即可在项目中引用CATIA COM类库,其类库名称均以CATIA V5开头。在引用为类库后,我们即可进行开发工作。


5.3 开发示例

该示例演示了如何连接CATIA,并生成一个新的Product。

using INFITF;
using MECMOD;
using PARTITF;
using ProductStructureTypeLib;
using SPATypeLib;
using NavigatorTypeLib;namespace CATIATest
{class Program{static void Main(string[] args){// 连接CATIAApplication Catia =(Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Catia.Application");// 获取当前活动ProductDocumentProductDocument pd = (ProductDocument)Catia.ActiveDocument;// 创建一个ID为newProduct的Productpd.Product.Products.AddNewProduct("newProduct");}}
}

【注意】在调试之前请确保CATIA已经运行,否则无法连接到CATIA,程序无法运行。

6. 开发中使用到的操作总结

6.1 加载CATIA文件

public void AddNewComponent(string filePath)
{object[] files = new object[1] { filePath };this.ActiveProductDocument.Product.Products.AddComponentsFromFiles(files, "All");
}

6.2 向当前Product中添加Part

// 向当前Product中添加一个指定长度的圆柱体
public void CreateCylinder(string name, double length)
{// 添加一个新零件Product product = this.ActiveProductDocument.Product.Products.AddNewComponent("Part", name);// 绘制圆Part part = ((PartDocument)this._catia.Documents.Item(name + ".CATPart")).Part;Sketch sketch = (part.Bodies.GetItem("零件几何体") as Body).Sketches.Add((Reference)part.OriginElements.PlaneXY);sketch.SetAbsoluteAxisData(new object[] { 0, 0, 0, 1, 0, 0, 0, 1, 0 });part.InWorkObject = sketch;Factory2D factory = sketch.OpenEdition();Axis2D axis = (Axis2D)sketch.GeometricElements.GetItem("绝对轴");(axis.GetItem("横向") as Line2D).ReportName = 1;(axis.GetItem("纵向") as Line2D).ReportName = 2;Circle2D circle = factory.CreateClosedCircle(0, 0, 5);circle.CenterPoint = (Point2D)axis.GetItem("原点");circle.ReportName = 3;sketch.CloseEdition();part.Update();// 绘制圆柱(part.ShapeFactory as ShapeFactory).AddNewPad(sketch, length);part.Update();
}

6.3 查找Product

// 根据产品名称获取指定Product
public Product GetProduct(string productId)
{return (Product)this.ActiveProductDocument.Product.Products.GetItem(productId);
}

6.4 移除Product

protected void RemoveProduct(Product product)
{Selection selection = this.ActiveProductDocument.Selection;selection.Clear();selection.Add(product);selection.Delete();
}

6.5 碰撞检测

// 检测两个产品间是否存在冲突
public bool ConflictCheck(Product product1, Product product2)
{Groups groups = this.ActiveProductDocument.Product.GetTechnologicalObject("Groups") as Groups;Group first = groups.Add();Group second = groups.Add();first.AddExplicit(product1);second.AddExplicit(product2);Clash clash = (this.ActiveProductDocument.Product.GetTechnologicalObject("Clashes") as Clashes).Add();clash.ComputationType = CatClashComputationType.catClashComputationTypeBetweenTwo;clash.InterferenceType = CatClashInterferenceType.catClashInterferenceTypeContact;clash.FirstGroup = first;clash.SecondGroup = second;clash.Compute();Conflicts conflicts = clash.Conflicts;groups.Remove(first.get_Name());groups.Remove(second.get_Name());return conflicts.Count != 0;
}

6.6 自动调整视图

protected void AdapteAllView()
{this._catia.ActiveWindow.ActiveViewer.Reframe();
}

7. 其他功能探索

一般来说,对于CATIA中能够手工解决的问题均应能够通过编程的方式处理,我们可以通过以下三种途径获取编程帮助以及Sample。

  1. V5 Automation API 手册(推荐)
  2. CATIA 宏录制功能
  3. Baidu 以及 Google

方式一:在安装好CATIA后,再其安装目录中%Install Root%\Dassault Systemes\B20\intel_a\code\bin中已经包含了V5 Automation API .chm帮助文档。该文档中包含了全部的可用API及类继承结构,同时提供了丰富的代码示例供读者参考。


方式二:通过启用CATIA的宏录制功能,可以获得所有操作的VBScript代码,我们可以参考该代码进行CSharp代码的开发。下图通过CATIA录制了一个绘制圆柱的过程,右侧窗口内显示的即为生成的VBScript代码。


8. 结语

事实上,我们也可以在VB上以同样方式进行开发。如果读者对VB更加了解,更推荐采用VB进行开发,因为无论是帮助文档和宏生成代码均是以VBScript编写,采用VB编程可以无需或少量修改即可。另外,本文仅仅展示了少部分基本的内容,仍有大量的功能尚未涉及,算是作为一个积累和备忘吧,也希望能对和我一样的小伙伴提供一点思路。由于本人水平有限,如果有什么错误之处,还望不吝赐教啊~~

【二次开发】如何使用C#进行CATIA二次开发相关推荐

  1. CATIA二次开发资源汇总

    http://blog.olizax.com/post/46403531888/catia 按:本来是为了偷懒,利用python写了一点catia的脚本,结果被领导发现,让我拿出一个成熟点的东西出来, ...

  2. catia三维轴承_浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文

    浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文 一.概述 单排四点接触球转盘轴承是一种能够同时承受较大轴向负荷.径向负荷和倾覆力矩等综合载荷,集支承.旋转.传动.固定等多种功能于一身的特殊 ...

  3. Catia 二次开发 资料

    Catia 二次开发 CATIA V5在开发之初就遵循面向对象的设计思想(OO),构建了完全基于组件的体系结构(PPR: Products,Process,Resource),有效地解决了维护.管理. ...

  4. 想入门CATIA二次开发CAA的盆友看过来(谈谈开发经验,或许对你有帮助!)

    前言 刚开始接触CATIA二次开发时候还是比较难熬的,因为没接触过CATIA.更重要的是没有C++基础.帮助文档 很难翻译成可以理解的中文.刚开始时候一头雾水,身边也没人做过开发,都是我一个人在默默的 ...

  5. catia二次开发_侧长条花纹定义

    1. 前言 想多写点博文,就把以前完成的小作品贴出来,与大家共勉. 工具:VS2010 C# .Catia R21 参考:<CATIA二次开发技术基础>.API 最好是多写一点模板类,可以 ...

  6. CAA教程——CATIA二次开发环境搭建

    CAA教程--CATIA二次开发环境搭建 前言 开发环境搭建所需资源 安装注意事项 安装完成后的一些操作 测试程序的运行效果 CATIA帮助文档的设置 VS里利用CATIA帮助文档的查询接口功能 编译 ...

  7. catia二维图坐标如何表示_【二次开发】CATIA二维图一键标注投影点信息

    原标题:[二次开发]CATIA二维图一键标注投影点信息 CATIA软件不仅可以用来建立三维模型,用它来出二维图纸也是个不错的选择.且相对于传统的铅笔橡皮丁字尺和AutoCAD来说,CATIA二维图中的 ...

  8. CATIA 二次开发 CAA笔记.新的开始

    CATIA 二次开发 CAA笔记.新的开始 序 正题: 序 之前并没有什么编程的项目经验,说道本人的教育背景,本科化工机械,研究生考的车辆工程,然后在导师的建议下选择了协同方向, 自学了一点微不足道的 ...

  9. CATIA二次开发:定制化需求、降低错误率和提高工作效率的完美解决方案

    CATIA二次开发:让您的设计更高效 如果您是一位CAD工程师,您一定知道CATIA软件.CATIA是目前工业设计领域中使用最广泛的三维CAD软件之一.但是,您可能不知道CATIA还可以通过二次开发来 ...

最新文章

  1. 影像组学视频学习笔记(27)-SimpleITK包介绍、Li‘s have a solution and plan.
  2. jquery文本折叠
  3. OS / Linux / 文件描述符以及 file 结构体
  4. 调用有密码Web Service接口
  5. (PotPlayer)Windows视频播放神器
  6. tomcat启动时报错ports are invalid,默认端口不要为-1
  7. 企业微信oauth认证_企业微信开发之授权登录
  8. jdk帮助文档在哪_jdk帮助文档在哪里下载
  9. 帝国CMS二次开发在模板里调用本地正规api代码自动生成二维码
  10. 常见网络厂商Mib库文件
  11. Cause: java.sql.SQLException: Incorrect string value: ‘\xF4\x80\x80\x82\xF4\x80...‘ for column ‘xxx‘
  12. Linux Shell脚本中压缩包解压到目标目录下
  13. Pytorch房价预测
  14. Autolayout的一点理解
  15. Qt纯代码实现菜单栏、工具栏、状态栏
  16. 设置电子围栏 高德地图_地理围栏-API文档-开发指南-Web服务 API | 高德地图API
  17. http请求从浏览器到tomcat过程
  18. c 当前计算机时间格式,C# 当前系统时间获取及时间格式详解
  19. win10下安装虚拟系统
  20. 十四、商城 - 商城架构-SSM(2)

热门文章

  1. nginx 502 Bad Gateway解决办法
  2. QQ在线客服的二种代码,感觉很不错
  3. webpack css loader
  4. 学校标准化计算机室的设备配置,幸福小学创建标准化学校汇报材料
  5. 数据预处理之特征选择(Feature Selections Methods)
  6. 这次,认真搞了个外包兼职搞钱群!
  7. 上海交通大学学生生存手册_给学生的生存技巧
  8. AS3 setTimeOut、setInterval、Timer 的区别和用法
  9. js中settimeout的终止
  10. HTTP/HTTPS与流量劫持/DNS劫持