如何使用StartCommand方法

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í)際的用戶輸入纽绍,因此您可能必須制定一種策略來處理此問題蕾久。通常,命令的用戶輸入要求將分為四類(以增加自動化處理難度的順序列出):

  1. 無需用戶輸入
  2. 在運(yùn)行命令之前需要進(jìn)行選擇
  3. 啟動命令后拌夏,只需進(jìn)行簡單的按鍵操作(可能只是單擊“確定”)
  4. 需要廣泛的用戶交互僧著。

讓我們深入研究這四個類別,看看如何在代碼中處理它們中的每個類別障簿。

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ù)雜的類別之一。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帽驯,一起剝皮案震驚了整個濱河市龟再,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌尼变,老刑警劉巖利凑,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嫌术,居然都是意外死亡哀澈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進(jìn)店門度气,熙熙樓的掌柜王于貴愁眉苦臉地迎上來割按,“玉大人,你說我怎么就攤上這事磷籍∈嗜伲” “怎么了?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵院领,是天一觀的道長弛矛。 經(jīng)常有香客問我,道長比然,這世上最難降的妖魔是什么丈氓? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮强法,結(jié)果婚禮上万俗,老公的妹妹穿的比我還像新娘。我一直安慰自己饮怯,他們只是感情好闰歪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著硕淑,像睡著了一般课竣。 火紅的嫁衣襯著肌膚如雪嘉赎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天于樟,我揣著相機(jī)與錄音公条,去河邊找鬼。 笑死迂曲,一個胖子當(dāng)著我的面吹牛靶橱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播路捧,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼关霸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了杰扫?” 一聲冷哼從身側(cè)響起队寇,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎章姓,沒想到半個月后佳遣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凡伊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年零渐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片系忙。...
    茶點(diǎn)故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡诵盼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出银还,到底是詐尸還是另有隱情风宁,我是刑警寧澤,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布见剩,位于F島的核電站杀糯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏苍苞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一狼纬、第九天 我趴在偏房一處隱蔽的房頂上張望羹呵。 院中可真熱鬧,春花似錦疗琉、人聲如沸冈欢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凑耻。三九已至太示,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間香浩,已是汗流浹背类缤。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留邻吭,地道東北人餐弱。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像囱晴,于是被迫代替她去往敵國和親膏蚓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評論 2 350