第2章 基本操作.docx
- 文档编号:3612683
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:8
- 大小:53.31KB
第2章 基本操作.docx
《第2章 基本操作.docx》由会员分享,可在线阅读,更多相关《第2章 基本操作.docx(8页珍藏版)》请在冰豆网上搜索。
第2章基本操作
第2章基本操作
第2章基本操作
第2章基本操作
本章旨在引导用户熟悉CATIA编程的基本流程和方法。
2.1API介绍
本节介绍对CATIA进行编程所必须的几个API和一些基本的操作。
2.1.1CATIA文档结构(如左图)
2.1.2对CATIA进行编程的基本流程(如右图)
2.1.3Application对象
要对CATIA进行操纵,首先是要连接到它的com接口,在第1章已经讲到过GetObject和CreatObject两种方法,即:
DimCATIAAsObject'GetCATIAorLaunchitifnecessary.
OnErrorResumeNext
SetCATIA=Wscript.GetObject(,"CATIA.Application")
IfErr.Number<>0Then
SetCATIA=Wscript.CreateObject("CATIA.Application")
CATIA.Visible=True
EndIf
OnErrorGoTo0
值得注意的是,在这里CATIA只是一个Object类型的变量,可以使用任何其他的名称作为Application对象。
但是在CATIA本身所使用的宏脚本里,CATIA是作为根对象(Application对象)存在的,在程序中使用这个名称使得将来将程序转化为宏脚本或是利用录制的宏脚本时变得非常方便。
2.1.4Documents和Document对象
获得Application对象后就能对它的文档进行操作。
在CATIA中,文档有很多种类型,包括零件(Part)、产品(Product)、工程图(Drawing)等,Documents对象是这几种对象的集合,换句话说,从Documents对象中并不能区分这几种对象。
Document对象则不同,它一定是上面几种文档中的一种。
当然,不同类型的文档有不同的属性和操作方法。
一般可以通过Add方法新加一个文档,如下所示:
DimoPartDocAsDocument
SetoPartDoc=CATIA.Documents.Add(“Part”)
其中Add方法的参数可以是Part,Product,Drawing三种,分别对应零件文档、产品文档和工程图文档。
也可以用open方法打开已经存在的文档,如下所示:
DimoPartDocAsDocument
SetoPartDoc=CATIA.Documents.Open(FileName)
其中FileName参数必须加上完整的路径。
另外,也可以用ActiveDocument属性来获取当前活动的文档,这时要注意加上一定的错误控制,因为CATIA并不一定有当前打开的文档。
下面是一段典型的示例代码:
OnErrorResumeNext
SetoPartDoc=CATIA.ActiveDocument
IfoPartDocIsNothingThen
Err.Clear
SetoPartDoc=CATIA.Documents.Add(“Part”)
EndIf
OnErrorGoTo0
获取Document对象后,就可以对它进行各种各样的操作,比如保存,另存为,关闭等的。
注意,在这里另存为命令不能把文档保存成另一种格式。
保存成另一种格式有一个专门的命令ExportData,这一点是和界面命令不同的。
以下的示例代码保存文档并关闭:
oPartDoc.Save
oPartDoc.Close
以下示例代码把当前文档以IGESDoc为名称,在当前目录输出成IGES格式:
oPartDoc.ExportData(“IGESDoc”,“igs”)
2.1.5Cameras和Camera对象
Document对象里储存了文档的视点,像前视图、左视图等,这些视点对象存储在Cameras对象里。
当然,这是对零件文档和产品文档来说的,对于工程图则没有这个概念。
Cameras和Camera对象的关系就像Documents和Document对象的关系一样,Cameras对象可以包含Camera2D和Camera3D两种Camera对象。
可以用Count属性得知当前文档中视点的个数,这其中也包括自定义的视点。
以下代码先显示零件文档中的视点个数,再逐一显示它们的名称:
DimmyCam3dAsCamera3D
MsgBoxoPartDoc.Cameras.Count
Fori=1TooPartDoc.Cameras.Count
SetmyCam3d=oPartDoc.Cameras.Item(i)
MsgBoxmyCam3d.Name
Next
Camera3D对象只有一个属性Viewpoint3D,它可以应用于当前的活动视图,从而改变零件在屏幕上的显示。
Camera2D对象应用于二维场景(2Dscence)。
2.1.6Windows和Window对象
一个零件在CATIA中可以用很多个窗口打开,每个窗口的视角都可以是不同的。
Windows对象即指所有打开的窗口的集合,而Window对象则指的是某一特定的窗口,这两者之间的关系就如Documents和Document对象的关系一样。
如下示例代码先显示当前打开的窗口个数,然后逐个激活并显示它们的名称:
DimmyWindowAsWindow
MsgBoxCATIA.Windows.Count
ForEachmyWindowInCATIA.Windows
myWindow.Activate
MsgBoxmyWindow.Name
Next
这一段代码和上面一段遍历Cameras对象的代码是一样的,但这里使用了ForEach的结构。
在集合中的元数个数变化时(如用Close方法关闭特定的窗口),这种语法结构显然更加简洁和强壮。
Windows对象还有一个更常用的属性即ActiveWindow属性,它指当前的活动窗口。
2.1.7Viewers和Viewer对象
有了上面这么多集合对象和实例对象的例子,读者应该很清楚这两者之间的关系了。
Viewer对象一般只有一个,它是Window对象的一个属性。
一般用Window.ActiveViewer就可以获取它了。
Viewer对象有很多有用的方法,如Reframe、ZoomeIn、ZoomOut等。
如下代码先放大视图,再缩小视图,最后重组视图。
DimmyViewerAsViewer3D
SetmyViewer=CATIA.AtiveWindow.ActiveViewer
myViewer.ZoomIn
myViewer.ZoomOut
myViewer.Reframe
myViewer.Update
没错,最后要用update方法更新视图。
Viewer对象还有一个比较有趣的功能是能把屏幕抓下来保存成图像,如下所示:
DimMyViewerAsViewer3D
MyViewer=CATIA.ActiveWindow.ActiveViewer
MyViewer.CaptureToFilecatCaptureFormatBMP,“c:
\MyImage.bmp”
当然,也可以转到任何一个标准视图,如前视图:
DimmyCam3dAsCamera3D
DimmyViewerAsViewer3D
SetmyCam3d=oPartDoc.Cameras.Item("*front")
SetmyViewer=CATIAActiveWindow.ActiveViewer
myViewer.Viewpoint3D=myCam3d.viewpoint3D
myViewer.Update
也可以遍历当前的Cameras对象,并把它们置为当前视图。
下一节就会讲到。
2.2文件及视图操作实例
本节通过实例说明如何打开、关闭文档及进行视图操作。
2.2.1本实例实现的功能
1.使用通用文件对话框打开文件;
2.对所打开文件进行视图操作;
3.保存并关闭文件。
该实例在“\光盘\02-基础操作\02-文件和视图操作”目录中。
2.2.2启动时的动作
PrivateSubForm_Load()
Me.MoveScreen.Width-Me.Width,Screen.Height-Me.Height
MakeMeOnTopMe.hwnd
EndSub
这段代码在窗体加载时执行,它先把窗口移到屏幕右下角,再用MakeMeOnTop这个函数把当前窗口置于其他窗口前面。
由于窗口不大,移到右下角后不会遮住CATIA的图形窗口,而且有置顶的属性,即使在CATIA中做操作也不会让窗口沉到下面去,它的行为就像是CATIA本身的一个工具条。
2.2.3打开文档
程序中加了一个通用文件对话框,用命令按钮来调用这个通用对话框,用于打开CATIA文档。
PrivateSubcmdOpen_Cick()
OnErrorResumeNext
首先加上一个错误控制,它指明如果程序发生错误则不理会继续往下执行。
这是因为通用对话框是由用户来选择文件的,用户若选择了一个不存在的文件或取消了操作则程序会产生一个取消错误,这段代码抑制了这个错误。
CommonDialog1.Filter="零件文件|*.CATPart"
CommonDialog1.ShowSave
这里设定了通用的打开对话框的过滤器属性,因为接下来的视图操作是针对零件文档的,因此这里只允许打开零件文件,然后程序用ShowOpen方法显示了通用的打开对话框。
一般在显示这个窗口前还应该把它的FileName属性置空。
IfCommonDialog1.FileName<>""Then
InitCATIAPartFalse,CommonDialog1.FileName
EndIf
OnErrorGoTo0
这段程序先判断通用对话框是否返回一个空的文件名(用户选择取消时发生),再用Documents的Open方法打开文档。
最后程序取消错误控制。
一般应该在最小范围内使用错误控制代码,这样当程序发生错误时调试器会告诉你那里发生了错误,是什么错误。
2.2.4视图操作
PrivateSubcmdViewer_Click()
DimmyViewerAsViewer3D'获得当前活动视图
SetmyViewer=CATIA.ActiveWindow.ActiveViewer
myViewer.RenderingMode=catRenderShading
定义活动视图对象,并修改当前的渲染模式。
注意,程序最前面定义了强制变量声明,因此每个变量都必须声明,如果想偷懒的话可以只写DimmyViewer把它定义为变体类型。
至于渲染模式常数则在代码键入的时候VB的自动完成功能会列出所有的选项供你选择。
'摄像机总数
MsgBoxoPartDoc.Cameras.Count
用提示对话框显示文档中的摄像机总数,可以加上一些提示信息,如“文档中共有X个'扫描所有的摄像机
DimiAsInteger
DimmyCam3dAsCamera3D
Fori=1TooPartDoc.Cameras.Count
使用For循环遍历所有摄像机,也可以使用ForEach结构。
SetmyCam3d=oPartDoc.Cameras.Item(i)
用Item属性获取集合中的对象,所有的集合对象中的元素都能通过这种方式访问。
'改变当前的活动视图
myViewer.Viewpoint3D=myCam3d.Viewpoint3D
这里不用使用Set.因为这是对象属性的赋值。
myViewer.Reframe
myViewer.ZoomIn
myViewer.Update
MsgBoxmyCam3d.Name
Next
EndSub
一般应该先取得集合中元数的个数井保存到一个变量当中,再用这个变量作为循环的参数遍历集合。
这个变量就像是去超市购物的收据,因为循环过程中集合的元素数量可能发生变化,这时你凭着收据很快就能发现问题的所在。
2.2.5保存文档
PrivateSubcmdSave_Click()
IfMsgBox("要保存文件并关闭吗?
",vbYesNo)=vbYesThen
OnErrorResumeNext
CommonDialog1.Filter="零件文件|*.CATPart"
CommonDialog1.ShowSave
凡是使用通用对话框的地方基本上都应该加上错误控制。
IfoPartDoc.FullName=CommonDialog1.FileNameThen
oPartDoc.Save
Else
IfDir(CommonDialog1.FileName)<>""Then
Kill(CommonDialog1.FileName)
EndIf
oPartDoc.SaveAsCommonDialog1.FileName
EndIf
注意,SaveAs命令是保存成另外的文件,如果只是保存在原来的文件中则应使用Save命令。
另外,SaveAs命令不会自动覆盖已有的文件,保存前必须删除已有的文件。
如果使用SaveAs命令时删除了原来的文件则会保存失败。
注意这段中if条件为真时的情况,如果不想破坏原来的文件则应该在这时加上一个提示对话框,而不是保存动作。
oPartDoc.Close
OnErrorGoTo0
EndIf
EndSub
仔细测试你的代码,保存文件是写文件的操作。
一段错误的代码可能会误删硬盘上的文件,使几个月的工作化为乌有。
本章小结
1.要按层级顺序获取对象访问CATIA。
2.视图修改后要用update更新。
3.在最小的范围内使用错误控制代码。
4.仔细编写文件的代码,不要让它成为你的噩梦。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第2章 基本操作 基本 操作