https://v5vb.wordpress.com/2010/01/20/startcommand/
在本文中芒粹,我將展示如何從您的代碼中啟動幾乎所有交互式CATIA命令。當(dāng)我需要在程序中使用的命令未通過自動化API公開時废菱,有時會使用此方法技矮。在少數(shù)情況下,從程序中啟動實(shí)際的交互式命令可能會很有用殊轴。這使用戶可以與熟悉的CATIA對話框進(jìn)行交互以完成某些任務(wù)衰倦,但是我將指出一個潛在的問題,該問題將取決于命令和您的程序流程旁理。
這個怎么運(yùn)作
CATIA Application對象提供了StartCommand方法樊零。您只需將要啟動的命令的名稱作為參數(shù)傳遞,然后CATIA即可啟動它孽文,就像您單擊其圖標(biāo)或在“電源輸入”框中鍵入命令一樣驻襟。這是一般語法,
|
CATIA.StartCommand “CommandName”
|
如何找出命令名稱
有幾種方法可以找出可用的命令名稱芋哭。通常沉衣,我嘗試做的第一件事是將鼠標(biāo)懸停在該圖標(biāo)上,然后僅在Power Input框的左側(cè)看减牺。如果您不熟悉它豌习,那是CATIA窗口右下角的小文本框。
[圖片上傳失敗...(image-3a20bf-1597934107828)]
在這里烹植,您經(jīng)常會看到顯示的命令名稱(在上圖中是Line命令)斑鸦。命令名稱前面會有一個c :,但要意識到這不是命令名稱的一部分草雕,因此不應(yīng)在您的VB代碼中使用巷屿。僅當(dāng)您在電源輸入框中手動鍵入以告訴CATIA輸入命令時,才使用c:語法墩虹。這種使用鼠標(biāo)懸停在命令上方的常規(guī)技術(shù)也適用于主下拉菜單和上下文(右鍵單擊)菜單中的許多項(xiàng)目嘱巾。
查找命令名稱的另一種方法是從主菜單中選擇“查看”,然后選擇“命令列表”诫钓。這將顯示所有可用命令名稱的列表旬昭。此處列出的命令名稱通常由CATIA.StartCommand方法識別。另外菌湃,如果您在列表中選擇一個項(xiàng)目问拘,則該項(xiàng)目通常(但并非總是)在對話框面板的底部顯示有關(guān)該命令的一些有用信息,以幫助您了解其功能。
考慮命令的用戶輸入要求
某些命令可以通過這種方式啟動骤坐,并且無需用戶輸入即可執(zhí)行某些任務(wù)绪杏。但是,大多數(shù)命令將需要一些實(shí)際的用戶輸入纽绍,因此您可能必須制定一種策略來處理此問題蕾久。通常,命令的用戶輸入要求將分為四類(以增加自動化處理難度的順序列出):
- 無需用戶輸入
- 在運(yùn)行命令之前需要進(jìn)行選擇
- 啟動命令后拌夏,只需進(jìn)行簡單的按鍵操作(可能只是單擊“確定”)
- 需要廣泛的用戶交互僧著。
讓我們深入研究這四個類別,看看如何在代碼中處理它們中的每個類別障簿。
1.無需用戶輸入
顯然盹愚,這是在代碼中使用的最簡單的命令類型,因?yàn)槟枰龅木褪钦{(diào)用命令卷谈,然后完成杯拐。例如霞篡,也許您需要保存某些幾何形狀的屏幕截圖世蔗,但可能會將查看器放大,以使所有內(nèi)容都無法容納在窗口中朗兵。您需要重新設(shè)置框架污淋,以確保每次保存圖像時所有可見的幾何圖形都在屏幕上。在這種情況下余掖,命令名稱為“ Fit All In”寸爆,它不需要任何用戶輸入,因此只需調(diào)用它就可以了-無需考慮盐欺。
|
CATIA.StartCommand “Fit All
In``”
|
2.在運(yùn)行命令之前赁豆,需要進(jìn)行選擇
實(shí)際上,某些需要用戶選擇的命令將允許在啟動命令之前進(jìn)行那些選擇冗美。盡管并非在所有情況下都是如此魔种,所以您只需要嘗試找出答案即可。我過去使用的這種情況的一個很好的例子是更改草圖支撐粉洼。如您所知节预,草圖必須位于平面,平面或平面上属韧。因此安拟,如果您需要將現(xiàn)有草圖從一種支撐移至另一種支撐,則實(shí)際上可以通過自動化來完成宵喂,而無需用戶進(jìn)行任何此類交互糠赦,
|
'Get the part object (Assume the part is open in it’s own window)
Set
objPart = CATIA.ActiveDocument.Part
'Get the first sketch in the first geometrical set
Set
objSketch = objPart.HybridBodies.Item(1).HybridSketches.Item(1)
'Get the plane called Plane.1 in the first geometrical set
Set
objPlane = objPart.HybridBodies.Item(1).HybridShapes.Item(“Plane.1”)
'Select the sketch first then the new support plane
Set
objSel = CATIA.ActiveDocument.Selection
objSel.Clear
objSel.Add objSketch
objSel.Add objPlane
'Call the Change Sketch Support command
CATIA.StartCommand “Change Sketch Support”
|
3.啟動命令后,只需簡單的擊鍵
某些命令可能會顯示一個對話框,您只需要發(fā)送一個簡單的按鍵即可拙泽,例如按ENTER鍵即可完成任務(wù)唆铐。請注意,要發(fā)送擊鍵奔滑,您將需要在CATIA VBA項(xiàng)目內(nèi)部或在CATIA外部的代碼從單獨(dú)的可執(zhí)行文件運(yùn)行艾岂。腳本語言(CATScript和catvbs)無法將擊鍵發(fā)送到CATIA。
此類命令的一個非常有用的示例是“生成形狀設(shè)計(jì)(GSD)”工作臺中的“反匯編”朋其。實(shí)際上王浴,“反匯編”命令有兩個選項(xiàng)-第一個選項(xiàng)將元素拆分為每個子元素,第二個選項(xiàng)僅將元素拆分為非連接域梅猿。有一個用于反匯編命令的自動化API氓辣,但不幸的是,它只能執(zhí)行后一個選項(xiàng)袱蚓。因此钞啸,如果需要將元素拆分為每個子元素,則程序必須使用StartCommand方法喇潘。
代碼看起來像這樣体斩,
|
'Get the part object (Assume the part is open in it’s own window)
Set
objPart = CATIA.ActiveDocument.Part
'Get Surface.1 from the first geometrical set so that it can be disassembled
Set
objSurf = objPart.HybridBodies.Item(1).HybridShapes.Item(“Surface.1”)
'Select the surface
Set
objSel = CATIA.ActiveDocument.Selection
objSel.Clear
objSel.Add objSurf
'Call the Disassemble command
CATIA.StartCommand “Disassemble”
'Make sure CATIA window is activated then send
'Enter keystroke to click the OK button
AppActivate “CATIA V5”
SendKeys “{ENTER}”,
True
|
4.需要廣泛的用戶交互
如果您真的想完全自動化一個更復(fù)雜的命令,則必須使用Windows API颖低,通常稱為WinAPI絮吵。我必須警告您,這是一個高級主題(有整本書籍專門針對此主題)忱屑,因此我僅在此處介紹該概念蹬敲。如果您想了解更多,可以從Wikipedia頁面開始莺戒。WinAPI非常強(qiáng)大伴嗡,因此要縮小范圍,我在談?wù)摼S基百科頁面“概述–用戶界面”中描述的功能从铲。
如您所知瘪校,Windows應(yīng)用程序由各種窗口,工具欄食店,對話框面板和控件(例如按鈕渣淤,復(fù)選框,組合框等)組成吉嫩。Windows為這些對象中的每個對象維護(hù)所謂的句柄(您可以看到如何(在“任務(wù)管理器”窗口中的任何給定時間)因此价认,如果要將鼠標(biāo)單擊發(fā)送到特定對話框上的特定按鈕,則只需要知道它的句柄自娩,就可以使用Windows API向其發(fā)送單擊用踩。應(yīng)用程序確實(shí)不知道單擊是由鼠標(biāo)進(jìn)行的還是使用WinAPI通過程序發(fā)送的單擊-它將對兩者做出相同的響應(yīng)渠退。雖然這個概念聽起來很簡單,但最困難的部分是獲取要使用的特定控件的句柄脐彩。
了解命令執(zhí)行行為
請注意碎乃,當(dāng)您使用CATIA.StartCommand執(zhí)行啟動后需要用戶進(jìn)行某些選擇或交互的命令時,CATIA 不會等待該命令完成才可以繼續(xù)執(zhí)行程序的其余部分惠奸。例如梅誓,如果啟動“行”命令,CATIA將僅顯示“行創(chuàng)建”對話框面板佛南,然后立即繼續(xù)執(zhí)行下一行代碼梗掰。因此,您應(yīng)該真正考慮一下程序流嗅回,并嘗試在程序流中最后調(diào)用這樣的命令及穗。
另一方面,CATIA 確實(shí)等待許多命令完成绵载,然后再執(zhí)行程序中的下一行代碼埂陆。當(dāng)命令不需要任何用戶輸入時,通常會看到此行為娃豹。例如焚虱,如果調(diào)用“ Fit All In”命令,CATIA將等待直到該操作完成培愁,然后它將繼續(xù)執(zhí)行程序中的下一行代碼著摔。知道這很高興,因?yàn)槿绻4嫒缜八龅钠聊唤貓D定续,很高興知道在嘗試捕獲圖像之前命令將完全完成。
提示
在將命令包含在程序中之前禾锤,請對其進(jìn)行手動測試私股。有時,一個命令名聽起來像您想要的恩掷,但實(shí)際上卻有所不同倡鲸。最好在程序執(zhí)行前先找出來,而您不知道發(fā)生了什么或發(fā)生了更嚴(yán)重的問題黄娘。要測試任何命令峭状,只需在電源輸入框中鍵入c:,然后鍵入命令名稱逼争,然后按Enter优床。一旦確定自己具有正確的命令名稱并且它可以執(zhí)行所需的操作,然后將其添加到代碼中誓焦。
許多命令名稱在其名稱后都顯示有點(diǎn)胆敞。我的經(jīng)驗(yàn)是,通常在調(diào)用StartCommand方法時不需要包含這些點(diǎn)。但是移层,我已經(jīng)看到一些需要使用它們的情況仍翰,因此如果沒有它們就無法使用,請嘗試使用圓點(diǎn)观话。
當(dāng)某些命令按命令名稱啟動時予借,即使單擊它們的圖標(biāo)也會顯示對話框。前面顯示的更改草圖支撐的示例就是一個很好的例子频蛔。找出這一點(diǎn)的唯一方法就是嘗試蕾羊!不要僅僅因?yàn)橐粋€命令通常具有一個對話框來處理就認(rèn)為它會屬于上面列出的更復(fù)雜的類別之一。