999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于AutoCAD的軟件移植方法研究

2008-04-12 00:00:00金廣坤李昌華
現(xiàn)代電子技術(shù) 2008年6期

摘 要:基于AutoCAD的軟件是利用AutoDesk開發(fā)包二次開發(fā)的軟件,AutoCAD軟件不斷升級(jí)導(dǎo)致原來開發(fā)的應(yīng)用程序不能運(yùn)行于新的平臺(tái),必須對(duì)其進(jìn)行移植才能達(dá)到復(fù)用目的。該文就如何進(jìn)行移植展開分析,對(duì)基于AutoLISP,ADS以及ObjectARX的CAD二次開發(fā)過程,以及如何結(jié)合三者達(dá)到快速開發(fā)進(jìn)行研究,構(gòu)建新的ARX框架。分析如何復(fù)用ADS及AutoCAD自定義腳本等,并將3者整合到新的框架下,實(shí)現(xiàn)了應(yīng)用程序在新的AutoCAD平臺(tái)上的移植。

關(guān)鍵詞:ObjectARX;AutoLISP;ADS;移植

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A

文章編號(hào):1004-373X(2008)06-120-03

Research on Transplantation Method of AutoCAD-based Software

JIN Guangkun,LI Changhua

(College of Information Control,Xi′an University of Architecture Technology,Xi′an,710055,China)

Abstract:AutoCAD-based software is developed on the Software Development Kit of AutoDesk.AutoCAD upgrading leads to the developed applications can′t run on the new platform.To reuse them,the developer must transplant the developed applications.The article focuses on how to realize transplantation.AutoCAD development based on AutoLISP,ADS and ObjectARX,combination of the three achieves rapid development are researched,ARX frame is built under new platform,how to reuse ADS and AutoCAD-defined scripts,integrate them into new frame are expounded,transplantation of original application to new AutoCAD is implemented.

Keywords:ObjectARX;AutoLISP;ADS;transplantation

計(jì)算機(jī)輔助設(shè)計(jì)(Computer-Aided Design,CAD)技術(shù)的發(fā)展非常迅速,在機(jī)械、電子、建筑、土木、廣告等領(lǐng)域中,CAD技術(shù)應(yīng)用非常廣泛。作為CAD 軟件中的優(yōu)秀代表,AutoCAD采用開放式的體系結(jié)構(gòu),不僅可以用來進(jìn)行產(chǎn)品設(shè)計(jì),而且還可利用二次開發(fā)工具,實(shí)現(xiàn)產(chǎn)品的參數(shù)化設(shè)計(jì),并可以針對(duì)用戶的需求實(shí)現(xiàn)產(chǎn)品的二次軟件開發(fā),大大提高產(chǎn)品設(shè)計(jì)的效率[1]。由于AutoCAD版本的不斷升級(jí),其開發(fā)工具也發(fā)生著變化,如果不做修改,原來開發(fā)的程序很難使用,如果在新的框架下完全重寫,則造成對(duì)資源的浪費(fèi)。

1 AutoCAD二次開發(fā)過程及關(guān)系

作為AutoCAD的二次開發(fā)方法,AutoLISP,ADS及OjbectARX在不同的時(shí)期發(fā)揮著不同的作用。AutoLISP為第一代解釋性開發(fā)語言,他通過內(nèi)部進(jìn)程(IPC)與AuotCAD進(jìn)行通信。ADS是用C編寫,通過外部函數(shù)的形式加載到AutoCAD,由AtuoLISP解釋器調(diào)用,并通過IPC與CAD進(jìn)行通信。ObjectARX是一種類似于Windows下的DLL的一種C++編譯程序,不能單獨(dú)出現(xiàn)。他與AutoCAD共享地址空間,并能直接調(diào)用AutoCAD的核心函數(shù)。與通過IPC進(jìn)行調(diào)用的前兩者相比,他的運(yùn)行效率更高。3種開發(fā)工具與AutoCAD的互調(diào)用關(guān)系如圖1[2]所示。

2 軟件移植問題概述

AutoCAD的二次開發(fā)軟件對(duì)于版本有著嚴(yán)格的要求,不同的版本會(huì)出現(xiàn)不兼容現(xiàn)象。如果對(duì)原有程序進(jìn)行移植,首先你須確定實(shí)現(xiàn)的移植目標(biāo)平臺(tái),并在此基礎(chǔ)上構(gòu)建新的平臺(tái)框架;其次考慮如何在新框架下繼承原有的程序、資源。

2.1 ObjectARX整體框架構(gòu)建及移植

本次應(yīng)用程序的移植使用的平臺(tái)為微軟公司的Visual Studio.Net 2002,測試平臺(tái)為AutoCAD 2004,開發(fā)工具包為Autodesk的ObjectARX SDK 2006。安裝開發(fā)環(huán)境,解壓開發(fā)包,并將其目錄下的ArxWizards進(jìn)行安裝。利用ObjectARX的向?qū)?chuàng)建ARX應(yīng)用程序,需要進(jìn)一步對(duì)生成的解決方案進(jìn)行配置:將上述開發(fā)包下的include、lib文件路徑配置到解決方案,同時(shí)增加額外的acad.lib,acedapi.lib,rxapi.lib,acge16.lib庫等。當(dāng)配置完成并生成工程文件后,需要手動(dòng)為解決方案增加.def文件,并為添加:

EXPORTS

acrxEntryPoint PRIVATE

acrxGetApiVersion PRIVATE

AutoCAD在.Net下的ARX入口函數(shù)有了較大的變化:

class CCADProjectApp : public AcRxArxApp {

public:

CCADProjectApp () : AcRxArxApp () {}

virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt)

{

AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;

return (retCode) ;

}

virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt)

{

AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt)

return (retCode) ;

}

}

以往的消息入口函數(shù)acrxEntryPoint及其所包含的switch-case語句都被新的框架下的類及其虛函數(shù)所代替,在此框架下可以為應(yīng)用程序添加一些自定義命令,下面以自定義的命令WALL_BUILD為例講述ARX命令的編寫過程,大致分為3部:

(1) 利用向?qū)?,根?jù)需要定義是屬于模態(tài)(或透明)類型的命令(如圖2所示)。

(2)根據(jù)在(1)的選擇,調(diào)用如下的宏命令函數(shù)進(jìn)行注冊(cè):

ACED_ARXCOMMAND_ENTRY_AUTO(CArxProject1App,KingArxProject1,wall_build,wall_build,ACRX_CMD_MODAL,NULL)

(3) 根據(jù)ARX的產(chǎn)生的WALL_BUILD接口,其所對(duì)應(yīng)的函數(shù)實(shí)現(xiàn)為KingArxProject1wall_build,其中KingArxProject1為工程名稱,接下來為其編寫相應(yīng)的過程。與以往不同,這類的實(shí)現(xiàn)函數(shù)不能帶有返回值,形式化如下:

static void KingArxProject1wall_build(void)

{

//在這里編寫自定義函數(shù)

}

至此,一個(gè)ARX的命令編寫過程結(jié)束,只需要調(diào)用WALL_BUILD命令即可實(shí)現(xiàn)對(duì)以上函數(shù)功能調(diào)用。

2.2 原有程序ADS及AutoLISP的重利用

程序移植的目的是充分地利用原有資源。由于ADS函數(shù)及其經(jīng)由AutoLISP解釋的獨(dú)特性,在移植過程中對(duì)其進(jìn)行區(qū)別對(duì)待。ADS函數(shù)是當(dāng)ARX加載到AutoCAD后作為外部函數(shù)而調(diào)用,其通過消息入口函數(shù)為kInvkSubrMsg消息下的 dofun();進(jìn)而調(diào)用ads_defun()[3]進(jìn)行外部函數(shù)的注冊(cè),他們都以“c:funname”的固定格式定義名稱,其中“c: ”是作為固定標(biāo)識(shí),funname為真正的函數(shù)名稱。這是AutoCAD對(duì)于其特定的標(biāo)識(shí)。

這些ADS不再采用ads_defun函數(shù)進(jìn)行注冊(cè),而是統(tǒng)一采用宏定義函數(shù)ACED_ADSCOMMAND_ENTRY_AUTO實(shí)現(xiàn)。如對(duì)于刪除門操作的命令c:delete_door,其所對(duì)應(yīng)的宏注冊(cè)ACED_ADSCOMMAND_ENTRY_AUTO(ArxProject1App,delete_door,true)

與ARX命令注冊(cè)不同的是,ADS函數(shù)沒有本地命令和國際命名,也沒有命令的狀態(tài)區(qū)分。

2.3 資源文件管理

資源文件的管理在AutoCAD的二次開發(fā)工程中占據(jù)著重要的位置。在移植過程中,盡可能地繼承其中的菜單資源、工具欄,以及自定義對(duì)話框的腳本文件的調(diào)用。

AutoCAD包括相當(dāng)豐富的各類菜單,這些菜單的功能是由菜單文件來定義,他們共同定義和控制菜單區(qū)域的外觀和功能。菜單文件的類型為:.mnu,.mnc,.mnr,.mns,.mnl,.mnt。其中.mnu,.mns是基本相同的ASCII文件,一個(gè).mns生成后,他將被作為生成.mnc、.mnr的源文件,.mnl是為調(diào)用AutoLISP程序而調(diào)用的。如果在生成了.mns后改動(dòng)了.mnu文件,需要AutoCAD的Menu命令重新編譯[4],關(guān)于菜單文件編寫界面的各種格式,這里不再詳述。在AutoCAD升級(jí)的過程中,自身的資源在表示和標(biāo)識(shí)都有很大的改變。原有的資源表示需要參照所移植平臺(tái)依次改動(dòng),例如【文件】|【打開】的快捷方式中資源需做如下修改:

ID_Open [_Button(\"打開\",\"ICON_16_OPEN\",\"ICON_24_OPEN\")]^C^C_open

修改為:

ID_Open [_Button(\"打開\",RCDATA_16_OPEN,RCDATA_16_OPEN)]^C^C_open

與AutoCAD本身命令表示不同,用戶自定義的菜單和工具欄需要指定圖標(biāo)資源,將ARX中自定義的ADS和ARX命令如delete_door等按照定義菜單命令方式寫入文件。

盡管AutoCAD利用微軟的MFC為ARX應(yīng)用程序提供強(qiáng)大的圖形支持,其自定義的腳本文件DCL(Dialog-box Control Language)編寫對(duì)話框有著一些獨(dú)特的優(yōu)勢(shì)。由于其不用編譯,即便ARX程序整體編譯完畢,依然可以對(duì)DCL文件進(jìn)行編輯修改,十分靈活。因?yàn)锳DS和AutoLISP也可為其編寫實(shí)現(xiàn)過程,所以無論在ARX程序內(nèi)部還是AutoCAD的菜單等資源均可實(shí)現(xiàn)DCL的調(diào)用,在移植的過程中沿用DCL,其調(diào)用詳見文獻(xiàn)[5]。

2.4 外部資源引用相關(guān)問題分析

在設(shè)計(jì)一些自定義命令的圖形化接口的過程中,除了利用原有的腳本文件,主要采用MFC類庫的開發(fā)方式。ObjectARX應(yīng)用程序可以使用動(dòng)態(tài)或靜態(tài)的MFC,也可以使用通常的DLL或擴(kuò)展的DLL[6]。在ARX應(yīng)用程序與AutoCAD 和其他應(yīng)用程序使用共享的MFC庫時(shí),資源管理變得極為重要。必須清晰地管理應(yīng)用資源,防止他與AutoCAD或ARX應(yīng)用程序之間發(fā)生資源沖突[1]。在移植的過程中,對(duì)使用到基于MFC的擴(kuò)展DLL資源,在配置的新平臺(tái)上重新編譯后,交付ARX程序調(diào)用。清晰的資源設(shè)置一般包括以下3步[2,6]

(1) 在執(zhí)行任何導(dǎo)致MFC 查找你的資源的步驟時(shí),調(diào)用函數(shù)AfxSetResourceHandle()將自定義資源設(shè)為系統(tǒng)缺省值;

(2) 在將系統(tǒng)資源設(shè)為應(yīng)用資源以前,調(diào)用AfxGetResourceHandle()函數(shù)獲得系統(tǒng)當(dāng)前資源;

(3) 在執(zhí)行完任何要求使用自定義資源的函數(shù)之后,立刻將系統(tǒng)資源還原為以前保存的資源句柄。

在應(yīng)用程序?qū)υ捒蛎罹浔枵{(diào)用要求獲得AutoCAD資源的AutoCAD API函數(shù)(或調(diào)用AutoCAD命令)時(shí),首先應(yīng)當(dāng)在調(diào)用函數(shù)項(xiàng)將資源設(shè)置為AutoCAD,在執(zhí)行完畢后再恢復(fù)應(yīng)用程序資源(acedGetAcadResourceInstance()函數(shù)可獲得AutoCAD的資源句柄)。

2.5 ARX程序調(diào)試

在移植的過程中,盡可能多地利用原有資源,如果能完成相應(yīng)的功能,則盡可能保持代碼風(fēng)格不變。對(duì)于ARX和ADS的部分,根據(jù)實(shí)現(xiàn)的功能,分別按上述方法將他們移植到新的框架下(AutoLISP和DCL的腳本,只需要配置到相應(yīng)路徑即可)。在上述.Net開發(fā)環(huán)境下進(jìn)行逐步增量編譯,對(duì)于因版本等原因出現(xiàn)的問題,參照ObjectARX開發(fā)文檔及微軟的MSDN即可。

與一般的可執(zhí)行文件不同,ARX不能單獨(dú)運(yùn)行,他必須依賴于測試容器AutoCAD 2004,以第三方軟件作為容器的測試方法在調(diào)試時(shí)采用一般采用如下方法:

(1) 直接啟動(dòng)AutoCAD軟件;

(2) 選擇.net環(huán)境下的菜單【工具】|【調(diào)試進(jìn)程】,打開進(jìn)程對(duì)話框;

(3) 在可用進(jìn)程列表中選擇acad.exe,然后點(diǎn) 【附加(A…)】 按鈕,出現(xiàn)“附加到進(jìn)程”對(duì)話框,程序類型選Native,確定;

(4) 關(guān)閉【進(jìn)程】對(duì)話框,回到AutoCAD界面,加載debug版ARX程序,此時(shí)可設(shè)斷點(diǎn)調(diào)試ARX。

3 結(jié) 語

通過構(gòu)建新的框架,并對(duì)原有的資源進(jìn)行整合、移植,實(shí)現(xiàn)在AutoCAD基礎(chǔ)上開發(fā)的應(yīng)用軟件能在當(dāng)前廣泛使用的AutoCAD 2004上加載、運(yùn)行,達(dá)到了軟件復(fù)用的目的。

參考文獻(xiàn)

[1]譚蘇.結(jié)合ARX與MFC開發(fā)AutoCAD應(yīng)用程序\\[J\\].四川建筑,2005,25(6):117-118.

[2]江麗芳.在ARX中運(yùn)用MFC技術(shù)快速開發(fā)AutoCAD應(yīng)用程序\\[J\\].重型機(jī)械,2005(6):23-26,30.

[3]Autotools工作組.AutoCAD ADS-C程序設(shè)計(jì)實(shí)務(wù)\\[M\\].北京:清華大學(xué)出版社,1995.

[4]郭朝勇.AutoCAD 2002定制與開發(fā)\\[M\\].北京:清華大學(xué)出版社,2002.

[5]邵劍平.DCL對(duì)話框設(shè)計(jì)與應(yīng)用的研究\\[J\\].機(jī)械制造與自動(dòng)化,2005,34(6):122-123.

[6]李長勛.AutoCAD ObjectARX程序開發(fā)技術(shù)\\[M\\].北京:國防工業(yè)出版社,2005.

作者簡介 金廣坤 男,1984年出生,河南固始人,碩士研究生。研究方向?yàn)槎嗝襟w與網(wǎng)絡(luò)。

主站蜘蛛池模板: 国产一区二区人大臿蕉香蕉| 久久中文字幕2021精品| 国产成人免费观看在线视频| 久久精品国产免费观看频道| 一区二区欧美日韩高清免费| 精品国产免费第一区二区三区日韩| 国产成人区在线观看视频| 国产 在线视频无码| 免费A∨中文乱码专区| 亚洲Aⅴ无码专区在线观看q| 久久久久亚洲精品成人网| 免费毛片全部不收费的| 成年免费在线观看| 香蕉国产精品视频| 在线观看精品国产入口| 色天堂无毒不卡| 成人噜噜噜视频在线观看| 激情综合婷婷丁香五月尤物| 免费国产无遮挡又黄又爽| 精品一區二區久久久久久久網站 | 精品色综合| 午夜福利在线观看成人| 综合人妻久久一区二区精品| 久久久久无码精品| 99久久精品视香蕉蕉| 97久久超碰极品视觉盛宴| 国产白浆一区二区三区视频在线| 高清无码一本到东京热| 国产精品区视频中文字幕| 成人国产精品视频频| 久青草网站| 亚洲国产精品一区二区高清无码久久| 四虎成人精品在永久免费| a毛片在线| 97人妻精品专区久久久久| 国产精品美女免费视频大全| 色首页AV在线| 四虎亚洲精品| 国产成在线观看免费视频| 亚洲性视频网站| 精品国产免费观看一区| 2019年国产精品自拍不卡| 亚洲天堂自拍| 色精品视频| 国产精品自在在线午夜| 亚洲精品人成网线在线| 国产美女在线观看| 在线国产三级| 热伊人99re久久精品最新地| 国内嫩模私拍精品视频| 久久熟女AV| 毛片视频网址| 秘书高跟黑色丝袜国产91在线| 秋霞国产在线| 国产乱视频网站| 久久国产精品麻豆系列| 真实国产乱子伦视频| 亚洲成年人网| 九九免费观看全部免费视频| 亚洲国产天堂久久综合| 欧美一级高清片欧美国产欧美| 国产aaaaa一级毛片| 国产99在线| 极品国产一区二区三区| 国产精品网曝门免费视频| 在线视频亚洲欧美| 久久a毛片| 美美女高清毛片视频免费观看| 亚洲日韩精品无码专区97| 国产精品19p| 国产一级二级三级毛片| 亚洲无线国产观看| 亚洲丝袜中文字幕| 在线亚洲小视频| 天天做天天爱天天爽综合区| 国产精品无码AⅤ在线观看播放| 亚洲男人的天堂久久香蕉| 亚洲国产91人成在线| 国产精品成人一区二区| 五月天天天色| 波多野结衣一区二区三区四区视频 | 国产高颜值露脸在线观看|