響應(yīng)控制技術(shù)在PDM設(shè)計(jì)審批流管理上的應(yīng)用
1杭厘、響應(yīng)器技術(shù)概述
當(dāng)AutoCAD系統(tǒng)內(nèi)產(chǎn)生一個(gè)事件時(shí),特定的對(duì)象會(huì)調(diào)用通知程序自動(dòng)傳遞事件到其它對(duì)象郭销。例如當(dāng)用戶復(fù)制笙寻、刪除或修改對(duì)象或者用戶發(fā)出RODO或UNDO命令時(shí),對(duì)每個(gè)事件會(huì)自動(dòng)觸發(fā)相應(yīng)的通知骂铁。
對(duì)象接收事件稱為響應(yīng)吹零。一個(gè)響應(yīng)在它能從通知程序接收事件之前必須先明確增加到通知程序響應(yīng)列表中。當(dāng)事件發(fā)生時(shí)拉庵,通知程序?qū)憫?yīng)列表中的每個(gè)響應(yīng)自動(dòng)調(diào)用相應(yīng)的通知函數(shù)灿椅。所有響應(yīng)器函數(shù)都是虛函數(shù),所以其不能直接調(diào)用钞支,必須從相應(yīng)的響應(yīng)器類中派生后才能調(diào)用茫蛹。此時(shí)可以在相應(yīng)的函數(shù)中添加代碼,以實(shí)現(xiàn)用戶所需功能。
響應(yīng)器主要分為臨時(shí)響應(yīng)器和永久響應(yīng)器婴洼。
臨時(shí)響應(yīng)器主要用于接收事件通知骨坑,使用臨時(shí)響應(yīng)器可以監(jiān)控數(shù)據(jù)庫(kù)對(duì)象的事件,同時(shí)也可以在應(yīng)用程序運(yùn)行時(shí)監(jiān)控?cái)?shù)據(jù)庫(kù)事件柬采、用戶交互及其它系統(tǒng)事件欢唾。如將響應(yīng)器添加到目標(biāo)圖層上以監(jiān)視該圖層的修改狀況,若目標(biāo)圖層被非法解鎖粉捻,將會(huì)觸發(fā)該響應(yīng)器中的objectClosed()事件中的重新鎖層方法缅含。
臨時(shí)響應(yīng)器的構(gòu)造方法主要是在應(yīng)用程序加載時(shí)搜索或創(chuàng)建目錄對(duì)象,然后將目錄對(duì)象指針加載到響應(yīng)器的響應(yīng)列表中杖荤,一旦目錄對(duì)象指針內(nèi)容發(fā)生改變脓擅,則會(huì)觸發(fā)響應(yīng)器的相關(guān)事件,然后在響應(yīng)器事件中調(diào)用用戶所定義的方法窥吮。臨時(shí)響應(yīng)器可以使用addReactor()函數(shù)來(lái)添加嚣僚。
永久響應(yīng)器主要用于接收和發(fā)送通知,一旦永久響應(yīng)器被添加哗搏,便作為數(shù)據(jù)庫(kù)對(duì)象的一部分甫沉,并保存在DWG和DXF文件中,當(dāng)圖形文件被裝載時(shí)會(huì)被重新建立役倾。
永久響應(yīng)器的構(gòu)造方法主要是在數(shù)據(jù)庫(kù)增加對(duì)象響應(yīng)瞻聪,并使用目標(biāo)對(duì)象的ID號(hào)獲取其指針以與其建立約束。永久響應(yīng)器被添加到通知對(duì)象的響應(yīng)器列表中時(shí)刻跟蹤目標(biāo)對(duì)象刃撮,一旦目標(biāo)對(duì)象被更改椎崎,將會(huì)響應(yīng)用戶所規(guī)定的事件。永久響應(yīng)器可以使用addPersistentReactor()函數(shù)來(lái)添加畸裳。永久響應(yīng)器是數(shù)據(jù)庫(kù)的一部分缰犁,因此,在復(fù)制對(duì)象時(shí)怖糊,附加在其上的永久響應(yīng)器也會(huì)被復(fù)制帅容,而臨時(shí)響應(yīng)器則不會(huì)被復(fù)制。
2伍伤、工程圖審批流使用情況介紹
2.1 工程圖操作環(huán)境及其生命周期狀態(tài)描述
南摩研發(fā)部涉及設(shè)計(jì)圖紙的管理,該系統(tǒng)要求對(duì)工程圖的操作是在NM-PDM的基礎(chǔ)上進(jìn)行的并徘,該系統(tǒng)要求只有通過(guò)PDM授權(quán)后才能進(jìn)入工程圖的相關(guān)操作。
產(chǎn)品數(shù)據(jù)管理是一種面向?qū)ο蟮男畔⑾到y(tǒng)扰魂,它將所有與產(chǎn)品相關(guān)的信息和過(guò)程定義為對(duì)象麦乞,如文檔、工程圖劝评、關(guān)系和過(guò)程等姐直。對(duì)象在其生命周期中要發(fā)生許多變化倦淀,如版本、所有權(quán)声畏、訪問(wèn)權(quán)等撞叽。在生命周期的不同階段,對(duì)這些變化有不同的控制要求淤点。工程圖對(duì)象的生命周期狀態(tài)如圖1所示劣搪。
2.1 NM-PDM審批流系統(tǒng)實(shí)現(xiàn)模型圖
在傳統(tǒng)的手工管理工作流程中,對(duì)工程圖生命周期各狀態(tài)相應(yīng)功能的執(zhí)行是通過(guò)圖紙的傳遞來(lái)進(jìn)行拌驻。而在NM-PDM審批流管理系統(tǒng)中洒已,對(duì)工程圖生命周期狀態(tài)的確立是根據(jù)識(shí)別提供給操作者權(quán)限狀態(tài)代碼來(lái)實(shí)現(xiàn)對(duì)工程圖的處理界贮。全部過(guò)程在PDM控制下進(jìn)行牲晤。NM-PDM審批流系統(tǒng)的管理模型如圖2所示。
2.3 NM-PDM審批流管理模型功能分析
從審批流管理模型圖可看到驾萄,系統(tǒng)分為三部分:權(quán)限認(rèn)證碍逐、通訊和監(jiān)控響應(yīng)。
(1) 權(quán)限認(rèn)證過(guò)程
權(quán)限認(rèn)證過(guò)程也就是給操作者授權(quán)的過(guò)程亥戒,通過(guò)建立員工表存儲(chǔ)用戶登錄身份認(rèn)證數(shù)據(jù)薪丐、建立工作組表存儲(chǔ)不同用戶的不同權(quán)限認(rèn)證數(shù)據(jù)和建立項(xiàng)目組表存儲(chǔ)用戶在不同項(xiàng)目中所擔(dān)任的不同角色認(rèn)證數(shù)據(jù)來(lái)進(jìn)行。用戶操作時(shí)通過(guò)讀取這些信息來(lái)動(dòng)態(tài)地約束用戶操作率偏。這部分的工作在該項(xiàng)目的另一部分——權(quán)限認(rèn)證來(lái)單獨(dú)研究脱睛。
(2) 通訊
用戶選取項(xiàng)目成員后會(huì)有進(jìn)一步的操作行為,如新增項(xiàng)目成員浙于、修改等操作护盈。如果要啟動(dòng)AutoCAD進(jìn)行相應(yīng)操作,就必然要與AutoCAD進(jìn)行通訊羞酗。啟動(dòng)AutoCAD腐宋,新建AutoCAD文件,傳送數(shù)據(jù)到AutoCAD文件檀轨,如圖形加鎖參數(shù)胸竞、零件屬性參數(shù)等。進(jìn)入AutoCAD后参萄,對(duì)零件屬性參數(shù)的修改卫枝,必須使用我們?cè)贏utoCAD中開(kāi)發(fā)的應(yīng)用程序才可修改,這樣就可保證所修改的零件屬性參數(shù)通過(guò)合法的途徑傳送回到數(shù)據(jù)庫(kù)讹挎。
通過(guò)權(quán)限認(rèn)證后校赤,要通過(guò)AutoCAD打開(kāi)的文件,只有七種可能的狀態(tài):設(shè)計(jì)淤袜、校對(duì)痒谴、審核、標(biāo)檢、批準(zhǔn)椰严、打印發(fā)布善王、瀏覽。系統(tǒng)通訊就是要將這七種可能的信息分別傳送到AutoCAD荡偶,以實(shí)現(xiàn)其功能带蔬。本系統(tǒng)傳遞這些信息是采用PowerBuilder的OLE技術(shù)開(kāi)啟AutoCAD服務(wù)器、利用AutoCAD嵌入式開(kāi)發(fā)工具 VBA來(lái)完成的烧乙。
(3) 監(jiān)控
監(jiān)控機(jī)制是為了保證工程圖文件在不同的狀態(tài)下順利工作拐扛。由于系統(tǒng)整個(gè)工作流程的完成必須在AutoCAD中進(jìn)行,因此辱窘,監(jiān)控過(guò)程就加載在AutoCAD中楷焦。
工程圖工作狀態(tài)及過(guò)程監(jiān)控,主要研究在AutoCAD中進(jìn)行審批流程管理的保障問(wèn)題膝班。要在AutoCAD中有效地進(jìn)行工程圖的不同工作狀態(tài)的工作头位,就需要有比較完善的監(jiān)控機(jī)制,以監(jiān)督用戶的不同操作行為庇晤,使設(shè)計(jì)者不能手工更改工程圖的標(biāo)題欄信息虱硝、明細(xì)欄信息;圈閱者圈閱時(shí)厕氨,不能修改設(shè)計(jì)信息等进每。
通訊和監(jiān)控是工程圖審批過(guò)程牽涉的主要問(wèn)題,也是本篇文章討論的主要部分命斧。
對(duì)于面向設(shè)計(jì)的文檔管理來(lái)說(shuō)田晚,關(guān)心的是基礎(chǔ)數(shù)據(jù)是否正確、圖形文檔中基本信息和數(shù)據(jù)庫(kù)中的數(shù)據(jù)是否一致冯丙。本系統(tǒng)在使用過(guò)程中肉瓦,許多產(chǎn)品數(shù)據(jù)是從數(shù)據(jù)庫(kù)中提取,然后再添加到圖形數(shù)據(jù)庫(kù)中胃惜,為使產(chǎn)品數(shù)據(jù)庫(kù)與圖形數(shù)據(jù)庫(kù)中的內(nèi)容一致泞莉,就要求用戶不能在AutoCAD中修改在圖形數(shù)據(jù)庫(kù)中與產(chǎn)品數(shù)據(jù)庫(kù)必須一致的內(nèi)容。而要達(dá)到這一目的船殉,是不能靠用戶的個(gè)人行為來(lái)做到的鲫趁。在對(duì)AutoCAD進(jìn)行操作時(shí),由于操作者的失誤利虫,或者AutoCAD本身的不完善挨厚,很容易使一些不能修改的數(shù)據(jù)被修改和刪除掉。為了防止各種錯(cuò)誤的發(fā)生舔远,系統(tǒng)要求采用設(shè)計(jì)者和其他校審用戶在同一張圖紙上完成設(shè)計(jì)和審校工作弓席,同時(shí)要求設(shè)計(jì)者不能修改校審圖層上的信息阎员、校審用戶不能修改設(shè)計(jì)層上的信息;對(duì)于標(biāo)題欄的信息转是,任何操作者都不能在AutoCAD情況下對(duì)它進(jìn)行修改伐藕。明細(xì)欄的信息和指引線的信息,只能通過(guò)菜單中的操作項(xiàng)進(jìn)行操作粤段,其他的操作都是非法肝芯。
因此,我們必須在程序中建立這種約束機(jī)制幢剂。在本系統(tǒng)中智贰,我們將設(shè)計(jì)用線條信息、標(biāo)題欄信息凳赃、明細(xì)欄信息涣母、指引線和校審信息分別存入到不同的圖層中,并對(duì)它們進(jìn)行加鎖唁奢,通過(guò)對(duì)圖層加鎖并禁止解鎖的方法來(lái)約束用戶霎挟。在這種情況下窝剖,響應(yīng)器的應(yīng)用就顯得十分重要麻掸。
3、監(jiān)控實(shí)現(xiàn)過(guò)程
3.1 數(shù)據(jù)交換方式簡(jiǎn)述
(1)DDE(動(dòng)態(tài)數(shù)據(jù)交換赐纱,Dynanic Data Exchange)
DDE主要是一個(gè)發(fā)送消息和接收消息的機(jī)制脊奋,DDE能使兩個(gè)Windows應(yīng)用程序通過(guò)發(fā)送或接收命令和數(shù)據(jù)進(jìn)行相互之間的通信,它使應(yīng)用程序之間能夠?qū)崿F(xiàn)共享數(shù)據(jù)疙描,在遠(yuǎn)端執(zhí)行命令以及檢查錯(cuò)誤狀態(tài)等功能[3]诚隙。PowerBuildier 為實(shí)現(xiàn)DDE技術(shù)提供了相關(guān)的事件和函數(shù),利用這些事件和函數(shù)起胰,PowerBuildier應(yīng)用程序可以向另一個(gè)支持DDE的應(yīng)用程序發(fā)送消息,也可響應(yīng)其他DDE應(yīng)用的請(qǐng)求久又。
(2)OLE(Object Linking and Embedding, 對(duì)象鏈接與嵌入)
OLE技術(shù)提供了一種使Windows應(yīng)用程序之間共享數(shù)據(jù)和程序的機(jī)制,利用OLE技術(shù)效五,不同的應(yīng)用可以在一個(gè)統(tǒng)一的界面下協(xié)調(diào)工作地消。Powerbuilder以O(shè)LE控件作為容器(Containter)從中調(diào)用OLE服務(wù)器應(yīng)用程序來(lái)顯示及操縱OLE對(duì)象[3]。Powerbuilder中OLE控件是OLE對(duì)象的容器畏妖,用戶可激活OLE控件脉执,并使用由OLE服務(wù)器應(yīng)用程序提供的功能編輯其中的OLE對(duì)象。也可以通過(guò)編程激活OLE對(duì)象层掺,并向OLE服務(wù)應(yīng)用程序發(fā)送命令使OLE交互自動(dòng)化坠汹。PowerScript自動(dòng)化可以使用于窗口中的可視OLE控件上,也可使用于引用存儲(chǔ)在OLEObject變量中的不可視OLE對(duì)象上渴门,利用OLEbject數(shù)據(jù)類型逻烛,可以創(chuàng)建一個(gè)OLE對(duì)象宪隅,而不必為它在窗口中提供可視OLE容器。
3.2 AutoCAD 2000二次開(kāi)發(fā)工具ARX接口方法簡(jiǎn)介
利用Visual C++開(kāi)發(fā)AutoCAD應(yīng)用程序潭拖,其接口函數(shù)使用了三個(gè)關(guān)鍵函數(shù)昏滔,即:InitApp()、UnloadApp()琳宽、和acrxEntryPoint()挫肆。
通過(guò)對(duì)Object ARX應(yīng)用開(kāi)發(fā)工具的研究知道,Object ARX與AutoCAD 2000是通過(guò)專門的接口程序來(lái)實(shí)現(xiàn)的泛邮,因此料离,通過(guò)Object ARX開(kāi)發(fā)工具不能直接與PowerBuilder進(jìn)行通訊。但是盯质,可以通過(guò)在其應(yīng)用程序中增加參數(shù)接收機(jī)制袁串,通過(guò)調(diào)用ARX應(yīng)用程序時(shí)向它傳送參數(shù),以實(shí)現(xiàn)想要的功能呼巷。如:
const char *must_locklayer; //必須要加鎖的圖層
void NMYFWatchLayerReactor() //修改后的用戶函數(shù)囱修,可接收外部參數(shù)
{ char* hline1;
acedGetString(0,"\n",hline1);
if(hline1!=NULL)
{ must_locklayer=&hline1[0];
}else
return;
……
}
本系統(tǒng)就是在PowerBuilder中調(diào)用該函數(shù),并通過(guò)該函數(shù)接收權(quán)限代碼參數(shù)的王悍。
3.3 系統(tǒng)接口及數(shù)據(jù)交換技術(shù)在審批流中的具體應(yīng)用
系統(tǒng)要求在Powerbuilder中的命令和數(shù)據(jù)能在AutoCAD 中執(zhí)行和接收破镰,并能有效傳遞參數(shù)。由于在Powerbuilder窗口中并非要求一定要顯示AutoCAD 文件压储,而Powerbuilder窗口中又必須能成功地通過(guò)按扭實(shí)現(xiàn)打開(kāi)AutoCAD文件鲜漩、傳遞 Powerbuilder參數(shù)的功能,因此集惋,對(duì)Powerbuilder與AutoCAD服務(wù)應(yīng)用程序接口方法孕似,系統(tǒng)采用非可視OLE對(duì)象方法來(lái)定制打開(kāi)AutoCAD文件的行為,并控制打開(kāi)文件的方法刮刑。OLEObject是一個(gè)動(dòng)態(tài)的對(duì)象類型喉祭,編譯程序可以接受OLEObject對(duì)象類型的任何屬性名、函數(shù)名及參數(shù)列表张重。
使用OLEObject變量包括以下步驟:
(1). 聲明一個(gè)OLEObject 變量并初始化抛惶,為OLE變量分配內(nèi)存空間
(2). 與服務(wù)器應(yīng)用程序連接
(3). 根據(jù)需要使用服務(wù)器應(yīng)用程序的屬性和函數(shù)操縱該對(duì)象
OLEObject對(duì)象與AutoCAD2000服務(wù)器連接及通訊時(shí),可利用VBA嵌入AutoCAD應(yīng)用程序之中的特性紊竹,調(diào)用Active AutoMantion VBA所提供的函數(shù)為其服務(wù)牺道。本系統(tǒng)采用兩種方式打開(kāi)文檔,一種方式是用ConnectToObject函數(shù)壹会,該函數(shù)以讀寫方式打開(kāi)指明具體路徑的文檔颈顽,一般是用戶以設(shè)計(jì)、校審方式打開(kāi)文檔及键,這是因?yàn)橛脩粜枰獙?duì)文檔進(jìn)行改寫操作盖赛,當(dāng)系統(tǒng)使用該命令打開(kāi)文件時(shí)掺薪,會(huì)直接調(diào)用AutCAD應(yīng)用服務(wù)器,并以寫方式打開(kāi)文件甜届;另一種方式是啤邑,首先啟動(dòng)OLE服務(wù)器然后手工確定AutCAD服務(wù)器的顯示狀態(tài),然后按指定方式打開(kāi)目標(biāo)文件岩模。
(4).關(guān)閉OLE對(duì)象的連接并銷毀這個(gè)變量
當(dāng)服務(wù)器應(yīng)用程序運(yùn)行結(jié)束時(shí)津函,就當(dāng)關(guān)閉OLE對(duì)象與服務(wù)器應(yīng)用程序的連接,并釋放OLE對(duì)象所占用的內(nèi)存空間孤页。
(5).重要命令“SendCommand”的使用
“SendCommand”是一個(gè)非常重要的AuotoCAD服務(wù)器應(yīng)用程序命令尔苦,通過(guò)這個(gè)命令可以操縱AutCAD的任何命令。在使用SendComand命令時(shí)行施,應(yīng)特別注意允坚,如果使用ConnectToObject命令連接服務(wù)器應(yīng)用程序,直接用:
ole.Sendcommand()
但如果用ConnectToNewobject()命令直接打開(kāi)某一文件蛾号,則要使用:
ole.ActiveDocument.SendCommand()
這是因?yàn)槌硐睿褂肅onnectToObject命令連接服務(wù)器應(yīng)用程序時(shí),AutoCAD已打開(kāi)了一文檔并自動(dòng)將其激活鲜结;而用ConnectToNewobject()命令連接服務(wù)器應(yīng)用程序時(shí)展运,其只是首先連接上了服務(wù)器應(yīng)用程序,而未將相關(guān)文檔激活轻腺,因此必須加上“ActiveDocument”以激活目標(biāo)文檔乐疆。
但是用SendCommand 直接調(diào)用AutoCAD命令時(shí),要注意到這是一條典型的VBA命令贬养,但Powerbuilder中卻未發(fā)現(xiàn)該命令,在Powerbuilder中調(diào)用該命令時(shí)阶庆,其語(yǔ)法格式要作調(diào)整郎博。
在VBA中SendCommand命令格式的原型是:
object.SendCommand(Command)
在Powerbuilder中,該命令的格式卻是:
object.SendCommand(“Command”)
并且在調(diào)用時(shí)要做一些改動(dòng)铺享。
在VB應(yīng)用程序中用SendCommand發(fā)送畫圓命令至AutoCAD命令行用法如下:
ThisDrawing.SendCommand "_Circle" & vbCr & "2,2,0" & vbCr & "4" & vbCr
用vbCr表示在命令行中敲入了一個(gè)回車鍵抱壶。
由于VBA是直接嵌入到AutoCAD中的,它調(diào)用AutoCAD 時(shí)潘乖,只要按照語(yǔ)法規(guī)則加入合適的控制碼就可實(shí)現(xiàn)想要的語(yǔ)法功能院颜。
Powerbuilder中直接調(diào)用AutoCAD 命令不一樣,它直接采用如下語(yǔ)法格式來(lái)調(diào)用AutoCAD命令:
OLE控件.ActireDocument.SendCommand(“命令及參數(shù)列表”)
例如:畫一個(gè)圓:
OLE1. ActiveDocument SendCommand(“-Cirde 0,2,3 4 ”)
我們可以對(duì)比一下VBA的情況:
ThisDrawing.SendCommand “-Cirde2,2,3,4空格”
可以發(fā)現(xiàn)這兩種語(yǔ)法不同之處:在Powerbuilder中調(diào)用須增加一對(duì)括號(hào)毛龟。
使用時(shí)為了可靠調(diào)用驳墓,語(yǔ)句中須增加ActiveDocument。
3.4 Powerbuilder加載AutoCAD應(yīng)用程序的過(guò)程
在Powerbuilder中加載AutoCDA應(yīng)用程序胡撩,卻不能用以上語(yǔ)法來(lái)加載即:
OLE ActiveDocament SendCommand(“arx l D:\Myarx\Myarx,arx ”)
這是因?yàn)楫?dāng)輸入最后一個(gè)參數(shù)時(shí)韭张,空格不能認(rèn)為是回車鍵砍绞。但是,可以利用在AutoCAD中用的“Command”指令一次性輸完命令和參數(shù)的方法來(lái)加載應(yīng)用程序:
OLE ActiveDocament SendCommand (‘(command "arx" "l" &
"D:\\LAYERCONTRL\\layermena\\Debug\\LOCKLAYER.arx") ’)
可以看出策冕,這一段語(yǔ)法命令及參數(shù)列表可以理解為:
String tempref
Tempref=‘(command "arx" "l" &
"D:\\LAYERCONTRL\\layermena\\Debug\\LOCKLAYER.arx") ’
ole.SendCommand(tempref)
經(jīng)過(guò)測(cè)試冲杀,如果參數(shù)"D:\\LAYERCONTRL\\layermena\\Debug\\LOCKLAYER.arx"
寫成 "D:\LAYERCONTRL\layermena\Debug\LOCKLAYER.arx"
則在AutoCAD命令行參數(shù)輸入欄會(huì)顯示為:
"D:LAYERCONTRLlayermenaDebugLOCKLAYER.arx"
系統(tǒng)找不到文件。這是因?yàn)樵赩B中反斜杠“\”是控制符睹酌,只有成對(duì)出現(xiàn)才會(huì)表示為文件路徑中的“\”权谁。
這樣,通過(guò)在PowerBuilder中動(dòng)態(tài)加載AutoCAD的ARX程序就可全程監(jiān)控用戶所有操作行為憋沿。
正確加載應(yīng)用程序后就可實(shí)現(xiàn)要進(jìn)行的操作闯传。如執(zhí)行自行開(kāi)發(fā)的應(yīng)用程序中的創(chuàng)建新圖層、指定顏色卤妒、線寬:
contact_ltr.ActiveDocument.SendCommand("createnewlayer 校對(duì)層 5 1 ")
3.5 審批流中響應(yīng)器的運(yùn)用及要注意的方面
本系統(tǒng)利用圖層加載響應(yīng)器實(shí)現(xiàn)對(duì)產(chǎn)品數(shù)據(jù)庫(kù)參數(shù)甥绿、設(shè)計(jì)信息、校對(duì)信息则披、標(biāo)檢信息共缕、審查信息、審定信息士复、工藝審查信息的隔離保護(hù)图谷。將所要保護(hù)的信息放在相應(yīng)圖層,并加載圖層禁鎖響應(yīng)器阱洪,使用戶不能在AutoCAD下手工解鎖圖層便贵。通過(guò)程序控制,系統(tǒng)可將產(chǎn)品數(shù)據(jù)庫(kù)中的信息傳送到AutoCAD圖紙中的相應(yīng)圖層弱豹,然后再加鎖遂辐。
AutoCAD要知道在什么樣的情況下才能對(duì)相應(yīng)的圖層進(jìn)行加鎖,并怎樣才能正確鎖定目標(biāo)圖層履婆。這就要通過(guò)從PowerBuilder應(yīng)用程序中傳遞過(guò)來(lái)的參數(shù)信息骤扰,以對(duì)相應(yīng)目標(biāo)圖層加鎖。ARX應(yīng)用程序通過(guò)接收這一參數(shù)各囤,并通知圖層狀態(tài)監(jiān)視器胜姥,監(jiān)視目標(biāo)圖層狀態(tài)。
在arx程序中芭患,需要設(shè)置一些參數(shù)裤谆,當(dāng)系統(tǒng)檢索到的圖層與用戶要求加鎖的圖層相一致時(shí),就將其加鎖铡协,當(dāng)用戶打開(kāi)了圖層兢假,不管其是否對(duì)圖層進(jìn)行了修改,創(chuàng)建新層操作系統(tǒng)都會(huì)進(jìn)行一次檢索的钞,并將規(guī)定圖層加鎖兜蠕。
執(zhí)行以下語(yǔ)句就可將明細(xì)欄扰肌、審定層、校對(duì)層熊杨、審查層曙旭、標(biāo)準(zhǔn)化層加鎖:
//加載圖層響應(yīng)器應(yīng)用程序
contact_ltr.ActiveDocument.SendCommand(‘(command "arx" "l" &
"D:\\LAYERCONTRL\\layermena\\Debug\\LOCKLAYER.arx") ’)
其中“LOCKLAYER”為用ARX開(kāi)發(fā)的加載圖層響應(yīng)器應(yīng)用程序,“addlocklayerReactor”為圖層加鎖響應(yīng)器程序晶府。
將所有圖層解鎖的語(yǔ)法為:
contact_ltr.ActiveDocument.SendCommand("addlocklayerReactor ")
將校對(duì)層解鎖的語(yǔ)法為:
contact_ltr.ActiveDocument.SendCommand("addlocklayerReactor&
審定層+明細(xì)欄層+審查層+標(biāo)準(zhǔn)化層 ")
在AutoCAD新建或打開(kāi)一張?jiān)O(shè)計(jì)圖時(shí)桂躏,無(wú)論該設(shè)計(jì)圖有無(wú)設(shè)計(jì)對(duì)象,對(duì)該圖形對(duì)象來(lái)說(shuō)川陆,它都有一個(gè)永遠(yuǎn)不能被刪除剂习、也不能被改名的圖層——“0”層,本系統(tǒng)就是在“0”層加載圖層響應(yīng)器较沪,以監(jiān)視目標(biāo)圖層是否已被非法修改鳞绕。
當(dāng)用戶想將鎖定圖層解鎖時(shí),他必須打開(kāi)圖層表進(jìn)行操作尸曼,由于在“0”層上加載了圖層響應(yīng)器们何,該響應(yīng)器就會(huì)監(jiān)視“0”層的工作狀態(tài)。一旦“0”層被打開(kāi)犁谓,就會(huì)觸發(fā)OpenForModify函數(shù)箭烦;或者“0”層被關(guān)閉時(shí)觸發(fā)objectClosed函數(shù),系統(tǒng)就是在objectClosed函數(shù)中加載圖層搜索器和圖層狀態(tài)監(jiān)視器叫逸。圖層搜索器會(huì)將所有圖層都檢索出來(lái)苛豺,再根據(jù)圖層狀態(tài)監(jiān)視器反饋的信息,判斷不該解鎖的圖是否被非法解鎖俄耸,如被解鎖翅昏,則調(diào)用圖層加鎖函數(shù)重新將其加鎖。
在使用響應(yīng)器時(shí)應(yīng)當(dāng)注意以下方面侄伟,否則將引起系統(tǒng)崩潰:
(1)應(yīng)當(dāng)弄清事件執(zhí)行的先后順序
例如睁奶,對(duì)AcDbObjectReactor來(lái)說(shuō),響應(yīng)事件能立即發(fā)生或被推遲到提交時(shí)間后發(fā)生撇委。提交時(shí)間是指當(dāng)用戶在一個(gè)完整的對(duì)象的基礎(chǔ)上進(jìn)行操作時(shí),對(duì)象完成操作被關(guān)閉的時(shí)間或當(dāng)用戶在事務(wù)模式下執(zhí)行操作時(shí)最外層事務(wù)結(jié)束的時(shí)間捌唾。
(2) 必須對(duì)提交的事件進(jìn)行必要的檢測(cè)
在實(shí)際使用過(guò)程中汪仰,事件的提交過(guò)程一定要執(zhí)行相應(yīng)的測(cè)試工作后才能確認(rèn)。
例如吆视,在用戶非法對(duì)系統(tǒng)鎖定的圖層解鎖時(shí)典挑,如果只是簡(jiǎn)單地在目標(biāo)圖層響應(yīng)器的ObjectClosed事件中對(duì)目標(biāo)圖層重新加鎖,則會(huì)引發(fā)AutoCAD的eWasNotOpenFOrWrite錯(cuò)誤消息啦吧,并會(huì)使AutoCAD崩潰您觉。
要解決這一問(wèn)題拙寡,應(yīng)當(dāng)在目標(biāo)圖層修改完畢,且系統(tǒng)已成功關(guān)閉其相關(guān)的圖層表和圖層表記錄后才能調(diào)用用戶所定義的重新鎖層方法琳水。
通過(guò)研究AcDbObjectReactor肆糕、AcEditorReactor、AcTransactionReactor等與實(shí)體相關(guān)的響應(yīng)器在孝,發(fā)現(xiàn)只有AcTransactionReactor 能夠監(jiān)視實(shí)體的操作過(guò)程是否結(jié)束诚啃,但如果只用AcTransactionReactor的監(jiān)控函數(shù),則無(wú)法確定事務(wù)何時(shí)開(kāi)始私沮。因此為處理這一問(wèn)題始赎,應(yīng)同時(shí)加載AcDbObjectReactor和AcTransactionReactor兩種響應(yīng)器,AcDbObjectReactor可以監(jiān)控事務(wù)何時(shí)開(kāi)始仔燕,AcTransactionReactor可以監(jiān)控目標(biāo)事務(wù)何時(shí)結(jié)束造垛,一旦事務(wù)結(jié)束,就可調(diào)用用戶所定義的重新鎖層方法低腕。
4杰泡、結(jié)論
通過(guò)圖形數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)系統(tǒng)的集成,在PDM系統(tǒng)上運(yùn)行的基礎(chǔ)數(shù)據(jù)能動(dòng)態(tài)的與設(shè)計(jì)圖紙信息結(jié)合涯贝,當(dāng)設(shè)計(jì)圖紙信息發(fā)生改變列充,PDM往下傳輸?shù)臄?shù)據(jù)能隨之發(fā)生改變。
校對(duì)跃呛、審核频咨、標(biāo)準(zhǔn)化和審定在PDM上進(jìn)行,使最后定型的圖紙和計(jì)算機(jī)內(nèi)的圖紙統(tǒng)一起來(lái)秦砌。通過(guò)查詢埃账,某個(gè)機(jī)種設(shè)計(jì)情況一目了然。
在PDM審批流中引入響應(yīng)器技術(shù)经聊,從根本上解決了審批流中授權(quán)信息的安全問(wèn)題唱棍,能有效杜絕操作者對(duì)非授權(quán)信息的修改,由系統(tǒng)來(lái)保證信息數(shù)據(jù)的安全和可靠守譬;同時(shí)通過(guò)實(shí)現(xiàn)信息流在Powerbuilder和ACAD之間的傳遞估喷,使得PDM和AutoCAD能有效的集成在一起,提升了NM-PDM的層次澈灼。
聲明:本網(wǎng)站所收集的部分公開(kāi)資料來(lái)源于互聯(lián)網(wǎng)竞川,轉(zhuǎn)載的目的在于傳遞更多信息及用于網(wǎng)絡(luò)分享,并不代表本站贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé)叁熔,也不構(gòu)成任何其他建議委乌。本站部分作品是由網(wǎng)友自主投稿和發(fā)布、編輯整理上傳,對(duì)此類作品本站僅提供交流平臺(tái)遭贸,不為其版權(quán)負(fù)責(zé)戈咳。如果您發(fā)現(xiàn)網(wǎng)站上所用視頻、圖片壕吹、文字如涉及作品版權(quán)問(wèn)題著蛙,請(qǐng)第一時(shí)間告知,我們將根據(jù)您提供的證明材料確認(rèn)版權(quán)并按國(guó)家標(biāo)準(zhǔn)支付稿酬或立即刪除內(nèi)容算利,以保證您的權(quán)益册踩!聯(lián)系電話:010-58612588 或 Email:editor@mmsonline.com.cn。
- 暫無(wú)反饋
編輯推薦
- 2025新年特刊:打造新質(zhì)生產(chǎn)力泽衬,智啟未來(lái)新篇章
- 定義制造業(yè)未來(lái)的數(shù)控加工中心技術(shù)專題
- 航空航天及交通領(lǐng)域先進(jìn)制造技術(shù)應(yīng)用專題
- 解碼消費(fèi)電子產(chǎn)品生產(chǎn)的數(shù)字化之路技術(shù)專題
- 精密智能機(jī)床殿姑,助力制造升級(jí)技術(shù)專題
- 汽車輕量化驅(qū)動(dòng)下的零部件加工應(yīng)用專題
- 高性能銑刀實(shí)現(xiàn)高精加工生產(chǎn)技術(shù)專題
- 航空航天發(fā)動(dòng)機(jī)解決方案專題
- 高效齒輪加工生產(chǎn)技術(shù)方案專題
- 金屬加工液的性能不止?jié)櫥夹g(shù)應(yīng)用專題