CATIA二次开发入门教程
CATIA二次开发入门教程
本文是一篇CATIA VBA二次开发的入门教程,主要面向想要学习CATIA二次开发的初学者。文章从什么是CATIA VBA二次开发、需要的前提条件、工作环境、如何录制和修改宏程序等方面进行了详细的讲解,并配有具体的实例和代码。
什么是CATIA VBA二次开发?
使用CATIA三维绘制软件的时候,软件本身给我们提供了很多的功能,比如说初学者常见的拉伸,凹槽,旋转,扫描等等等等,但是当我们真正的使用软件的时候,我们发现有时,使用起来并不是那么方便,不是那么得心应手,感觉比如在proe 或者ug中的一些功能,catia中都没有呀,那这种情况下我们就可以自己来编写一个简单的小程序来实现一些catia软件本身没有提供的功能。这个就叫做二次开发了。
比如说从excel或者txt文本中导出点坐标到catia建模。
比如说用参数连接模型驱动模型发生变更。
比如说创建一个管路,隧道自动生成程序。
学习CATIA VBA二次开发需要的前提条件
这里所说的主要是你需要具备的基本素质:
你首先需要会使用CATIA这个软件,哪怕是最简单的一些操作,拉伸,旋转啊。
其次,因为是需要编程嘛,CATIA VBA里用的编程语言是vb语言,所以最好你有一点vb编程语言的基础,哎,即便你没有学过vb,那么也没有关系,高中的时候你起码学过算法吧,还记得不,流程图,下面这种,简单的if判断语句,while循环语句复习一下,还能再战斗吧?哈哈!
CATIA VBA二次开发的工作环境简介
CATIA VBA二次开发的工作环境其实可以有很多种。
我们可以在catia里直接进入 vba的集成开发环境,
也可以在office办公软件,比如excel或者word的vba开发界面中链接catia软件对其进行开发(因为office办公软件也可以进行vba二次开发,而vba是相通的),
当然我们也可以在编程软件,比如vb,vs,python中来获取到catia软件这个根对象,然后对其进行开发。
我们这边作为入门介绍,只讲怎么在CATIA软件的vba环境中进行二次开发,这样我们也没有必要再去下载其他的编程软件,是比较方便的。因为原理都是一样的,会了这种方式,其他方式也是不攻自破!都很简单的哦!
而在CATIA软件中直接进行开发也有两种开发环境,我们这边只介绍最常用,最好用的一种,即microsolf visual basic for application IDE开发环境(如下面截图所示),ide是integrated development environment的缩写。即集成开发环境。
我们可以通过下拉菜单 工具-宏-visual basic 编辑器打开这个界面,如下图所示
但是点击之后,如果之前没有建过宏库,那么这时我们需要创建一个新项目(如下)。
我们也可以通过如下方法创建一个新项目:
点击下拉菜单:工具—宏—宏,打开宏对话框,然后点击宏库,
点击宏库,打开宏库对话框,然后选择vba项目的库类型,并点击创建新库,
点击确定,进行创建
经过以上步骤,我们就创建好了如下的catvba格式的库文件。
当然除了vba类的宏,也还有catvbs,和catscript的宏(如下图),其创建方法我们就不演示了。
怎么录制一个宏程序?
上述所讲的我们创建了一个catvba格式的宏库项目,我们创建它的目的是啥呢?
其实我们可以将我们编写的代码放到这个宏库里面,同样的录制宏程序的代码也可以放到我们创建好的这个宏库里面,接下来我们简单的录制一个宏程序。
第一步,CATIA 切换到零件设计模块,点击下拉菜单工具-宏-启动录制,
弹出如下记录宏对话框,选择我们之前创建的catvba类型的宏库,
然后点击开始,开始录制宏程序
这个时候弹出来一个宏录制的工具条,上面有一个结束录制的小图标。
第二步,接下来我们就可以在catia软件中随心所欲的发挥了,宏会录制我们的操作!
比如我们拉伸了一个如下的小圆柱。
第三步,我们点击结束录制的小图标,停止录制宏程序。
第四步,我们通过如下点击,进入到开发环境中。
第五步,双击宏库中的模快,便可以看到我们录制的宏程序代码
以上便是我们录制宏程序的过程,很方便,也很简单。
我们可以创建一个新的空白part文件,然后通过下拉菜单依次点击工具-宏-宏,打开如下宏对话框。
在宏对话框中选中我们刚才录制的模快1,然后点击运行,发现绘图区域立即给我们生成了一个圆柱模型。这就是对录制的宏进行重新运行,这也是我们录制宏的目的。
注意!
我们可以在工具条上为录制的宏定制一个小图标,后续如果我们想生成一个圆柱体,直接像点击拉伸或者旋转这些命令一样去点击这个小图标就可以了,是不是很方便呢!
具体操作方法可以关注【CATIA小蚂蚁】微信公众号获取
所录制的宏代码如下
Sub CATMain()
Dim documents1 As Documents
Set documents1 = CATIA.Documents
Dim partDocument1 As PartDocument
Set partDocument1 = documents1.Add("Part")
Dim part1 As Part
Set part1 = partDocument1.Part
Dim bodies1 As Bodies
Set bodies1 = part1.Bodies
Dim body1 As Body
Set body1 = bodies1.Item("零件几何体")
Dim sketches1 As Sketches
Set sketches1 = body1.Sketches
Dim originElements1 As OriginElements
Set originElements1 = part1.OriginElements
Dim reference1 As Reference
Set reference1 = originElements1.PlaneXY
Dim sketch1 As Sketch
Set sketch1 = sketches1.Add(reference1)
Dim arrayOfVariantOfDouble1(8)
arrayOfVariantOfDouble1(0) = 0#
arrayOfVariantOfDouble1(1) = 0#
arrayOfVariantOfDouble1(2) = 0#
arrayOfVariantOfDouble1(3) = 1#
arrayOfVariantOfDouble1(4) = 0#
arrayOfVariantOfDouble1(5) = 0#
arrayOfVariantOfDouble1(6) = 0#
arrayOfVariantOfDouble1(7) = 1#
arrayOfVariantOfDouble1(8) = 0#
Set sketch1Variant = sketch1
sketch1Variant.SetAbsoluteAxisData arrayOfVariantOfDouble1
part1.InWorkObject = sketch1
Dim factory2D1 As Factory2D
Set factory2D1 = sketch1.OpenEdition()
Dim geometricElements1 As GeometricElements
Set geometricElements1 = sketch1.GeometricElements
Dim axis2D1 As Axis2D
Set axis2D1 = geometricElements1.Item("绝对轴")
Dim line2D1 As Line2D
Set line2D1 = axis2D1.GetItem("横向")
line2D1.ReportName = 1
Dim line2D2 As Line2D
Set line2D2 = axis2D1.GetItem("纵向")
line2D2.ReportName = 2
Dim circle2D1 As Circle2D
Set circle2D1 = factory2D1.CreateClosedCircle(0#, 0#, 16.288673)
Dim point2D1 As Point2D
Set point2D1 = axis2D1.GetItem("原点")
circle2D1.CenterPoint = point2D1
circle2D1.ReportName = 3
sketch1.CloseEdition
part1.InWorkObject = sketch1
part1.Update
Dim shapeFactory1 As ShapeFactory
Set shapeFactory1 = part1.ShapeFactory
Dim pad1 As Pad
Set pad1 = shapeFactory1.AddNewPad(sketch1, 20#)
Dim limit1 As Limit
Set limit1 = pad1.FirstLimit
Dim length1 As Length
Set length1 = limit1.Dimension
length1.Value = 62#
part1.Update
End Sub
怎么修改一个录制的宏程序?
对于以上录制的宏程序我们可以进行简化和修改,使其更适应于我们的需求。
比如插入一个窗体控件,绘制两个文本框,我们可以在文本框输入圆柱的半径和高度,点击生成按钮来生成对应的圆柱模型。
如下是窗体控件的界面:
如下是对应的窗体控件的内部代码,仅仅是在录制的代码的基础上做了轻微改动而已:
Private Sub CommandButton1_Click()
Dim documents1 As Documents
Set documents1 = CATIA.Documents
Dim partDocument1 As PartDocument
Set partDocument1 = documents1.Add("Part")
Dim part1 As Part
Set part1 = partDocument1.Part
Dim bodies1 As Bodies
Set bodies1 = part1.Bodies
Dim body1 As Body
Set body1 = bodies1.Item("零件几何体")
Dim sketches1 As Sketches
Set sketches1 = body1.Sketches
Dim originElements1 As OriginElements
Set originElements1 = part1.OriginElements
Dim reference1 As Reference
Set reference1 = originElements1.PlaneXY
Dim sketch1 As Sketch
Set sketch1 = sketches1.Add(reference1)
part1.InWorkObject = sketch1
Dim factory2D1 As Factory2D
Set factory2D1 = sketch1.OpenEdition()
Dim geometricElements1 As GeometricElements
Set geometricElements1 = sketch1.GeometricElements
Dim axis2D1 As Axis2D
Set axis2D1 = geometricElements1.Item("绝对轴")
Dim line2D1 As Line2D
Set line2D1 = axis2D1.GetItem("横向")
line2D1.ReportName = 1
Dim line2D2 As Line2D
Set line2D2 = axis2D1.GetItem("纵向")
line2D2.ReportName = 2
Dim circle2D1 As Circle2D
Set circle2D1 = factory2D1.CreateClosedCircle(0#, 0#, 11.466749)
Dim point2D1 As Point2D
Set point2D1 = axis2D1.GetItem("原点")
circle2D1.CenterPoint = point2D1
circle2D1.ReportName = 3
Dim constraints1 As Constraints
Set constraints1 = sketch1.Constraints
Dim reference2 As Reference
Set reference2 = part1.CreateReferenceFromObject(circle2D1)
Dim constraint1 As Constraint
Set constraint1 = constraints1.AddMonoEltCst(catCstTypeRadius, reference2)
constraint1.Mode = catCstModeDrivingDimension
Dim length1 As Length
Set length1 = constraint1.Dimension
length1.Value = TextBox2.Value
sketch1.CloseEdition
part1.InWorkObject = sketch1
part1.Update
Dim shapeFactory1 As ShapeFactory
Set shapeFactory1 = part1.ShapeFactory
Dim pad1 As Pad
Set pad1 = shapeFactory1.AddNewPad(sketch1, 20#)
Dim limit1 As Limit
Set limit1 = pad1.FirstLimit
Dim length2 As Length
Set length2 = limit1.Dimension
length2.Value = TextBox1.Value
part1.Update
End Sub
插件演示动画如下
我们甚至可以在录制的代码的基础上做出修改,使运行宏直接生成一排圆柱,比如说一次100个,或者1000个,只需要添加一个循环语句就ok!这个留给小伙伴们思考一下吧^^
感谢大家的阅读,想要了解更多关于CATIA二次开发的知识。