久久国产色av_国产人妻777人伦精品hd_欧美 国产 日本_好吊色欧美一区二区三区

您的位置:網(wǎng)站首頁(yè) > CAD新聞

GIS筆記—CAD二次開(kāi)發(fā)兩個(gè)技巧

時(shí)間:2012-12-17 15:07:36 來(lái)源:未知

前一段時(shí)間在做CAD二次開(kāi)發(fā)。不管是誠(chéng)懇地說(shuō)還是不誠(chéng)懇地說(shuō),做出來(lái)的東西都很坑爹,不值一提。現(xiàn)在那個(gè)任務(wù)已經(jīng)暫告一個(gè)段落了,所以寫(xiě)篇博客把值得總結(jié)得東西記錄下來(lái)。下面的兩個(gè)技巧都是困惑了很長(zhǎng)時(shí)間才解決的,應(yīng)當(dāng)略有一些價(jià)值。


第一個(gè)技巧是啟動(dòng)CAD的方法。CAD二次開(kāi)發(fā)的技術(shù)貌似有很多種,我不太熟悉所以不一一列舉。我是在 .net平臺(tái)下用C#開(kāi)發(fā)的,采用的方法是用代碼創(chuàng)建一個(gè)CAD實(shí)例并啟動(dòng),效果等同于直接運(yùn)行CAD可執(zhí)行程序。之后可以用代碼往里面發(fā)送命令。這個(gè)做法貌似十分非主流。由于CAD二次開(kāi)發(fā)的方法很多,在網(wǎng)上查到的資料比較混亂,所以我花了很長(zhǎng)時(shí)間才成功啟動(dòng)CAD。以下是方法。要聲明一點(diǎn),由于這件事已經(jīng)過(guò)去幾個(gè)月了,所以我不能完全保證下面這個(gè)方法有沒(méi)有遺漏什么細(xì)節(jié)。有遺漏的話請(qǐng)指出,謝謝!

首先當(dāng)然是添加引用(如果沒(méi)有裝CAD的話,第一步的第一步是先安裝CAD)。我這里添加的引用有三個(gè),分別是AutoCADAXDBLibMPolygonComlib。我忘了是不是有哪一條可以刪除了?

然后using下面兩條

using Autodesk.AutoCAD.Interop;

using Autodesk.AutoCAD.Interop.Common;

然后在窗體所在的命名空間里寫(xiě)這么一行

[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("00000016-0000-0000-C000-000000000046")]

#p#分頁(yè)標(biāo)題#e#然后在這個(gè)命名空間里寫(xiě)一個(gè)接口

public interface IMessageFilter

    {

        [PreserveSig]

        int HandleInComingCall(int dwCallType, IntPtr hTaskCaller, int dwTickCount, IntPtr lpInterfaceInfo);

        [PreserveSig]

        int RetryRejectedCall(IntPtr hTaskCallee, int dwTickCount, int dwRejectType);

        [PreserveSig]

        int MessagePending(IntPtr hTaskCallee, int dwTickCount, int dwPendingType);

    }

然后在窗體類(lèi)里寫(xiě)上下面這些東西

[DllImport("ole32.dll")]

static extern int CoRegisterMessageFilter(IMessageFilter lpMessageFilter, out IMessageFilter lplpMessageFilter);#p#分頁(yè)標(biāo)題#e#

int IMessageFilter.HandleInComingCall(int dwCallType, IntPtr hTaskCaller, int dwTickCount, IntPtr lpInterfaceInfo)

{

    return 0;

}

int IMessageFilter.RetryRejectedCall(IntPtr hTaskCallee, int dwTickCount, int dwRejectType)

{

    return 1000;

}

int IMessageFilter.MessagePending(IntPtr hTaskCallee, int dwTickCount, int dwPendingType)

{

    return 1;

}

然后在窗體的構(gòu)造函數(shù)里加上兩行,把構(gòu)造函數(shù)弄成下面這樣

public Form1()

{

    InitializeComponent();

    IMessageFilter oldFilter;

    CoRegisterMessageFilter(this, out oldFilter);

}

#p#分頁(yè)標(biāo)題#e#以上內(nèi)容除了加引用以外我都不知道是干什么用的,不過(guò)經(jīng)過(guò)實(shí)驗(yàn)以上內(nèi)容缺了哪一行都不能啟動(dòng)CAD

接下來(lái)的步驟就比較清晰了。

AcadApplication pCAD;

System.Type oType = System.Type.GetTypeFromProgID("AutoCAD.Application");

pCAD = System.Activator.CreateInstance(oType,true) as AcadApplication;

pCAD.Visible = true;

pCAD.Documents.Open("CAD文件的路徑"null, null);

CAD就成功啟動(dòng)了。


第二個(gè)技巧是用代碼往CAD里發(fā)送命令行。說(shuō)起來(lái)很慚愧,有很多操作,比如合并多段線,我沒(méi)有找到相應(yīng)的接口。解決方法之一是讀取兩條多段線的坐標(biāo),新畫(huà)一條合并后的多段線并刪除兩個(gè)舊的多段線,但是這個(gè)做法太惡心了。于是我找到了一個(gè)方法,用代碼往CAD里發(fā)送命令行。下面是一句合并多段線的代碼。

pCAD.ActiveDocument.SendCommand("pen(handent"" pObject2.Handle "")njn(handent"" pObject1.Handle "")nn(command)n");

里面這個(gè)命令行等價(jià)于下面這個(gè)操作。

首先,在CAD里輸入命令pe,回車(chē),進(jìn)入多段線操作。

然后,如果是在CAD#p#分頁(yè)標(biāo)題#e#里直接操作的話,這個(gè)時(shí)候應(yīng)該用鼠標(biāo)選擇一個(gè)實(shí)體。但是代碼不能實(shí)現(xiàn)這個(gè)操作,所以要用代碼指定一個(gè)實(shí)體。例如(handent"EX21")是指定了編號(hào)為EX21的實(shí)體。這個(gè)實(shí)體用代碼表示是"(handent"" pObject2.Handle "")"pObject2.Handle是實(shí)體的編號(hào)(或者叫句柄?)。然后回車(chē),即選中這個(gè)實(shí)體。需要注意的是"EX21"需要雙引號(hào),所以要用轉(zhuǎn)義字符"往字符串里嵌入雙引號(hào)。經(jīng)過(guò)實(shí)驗(yàn),如果在CAD界面里直接輸入(handent"EX21")并回車(chē),同樣可以選中編號(hào)為EX21的實(shí)體。

然后,往CAD里輸入命令j,即選擇合并多段線命令。

然后再用代碼選中另外一個(gè)實(shí)體,比如"XE78"號(hào)實(shí)體。這相當(dāng)于在CAD中輸入(handent"XE78")并回車(chē)。

然后再回車(chē),合并兩條多段線。

輸入(command),回車(chē),退出多段線操作命令。在CAD中,這個(gè)操作可以通過(guò)點(diǎn)擊esc鍵實(shí)現(xiàn),但是用代碼的話只能輸入(command)并回車(chē)。

用代碼發(fā)送命令行跟直接往CAD里輸入命令行是一樣的,上面那句代碼執(zhí)行后CAD的命令行窗口里會(huì)顯示相應(yīng)的命令。上面這個(gè)例子說(shuō)明了命令行的構(gòu)造規(guī)則,其他命令可以按照這個(gè)規(guī)則構(gòu)造。同時(shí)這導(dǎo)致一個(gè)問(wèn)題,即代碼執(zhí)行完畢前千萬(wàn)不要點(diǎn)擊CAD窗口,否則點(diǎn)擊操作可能被視為一個(gè)選擇實(shí)體的操作,從而干擾命令行的執(zhí)行。例如,如果系統(tǒng)認(rèn)為點(diǎn)擊操作是在"pen"之后、"(handent"" pObject2.Handle "")"之前發(fā)生的,那么被合并的第一條多段線不是pObject2,而是單擊點(diǎn)中的那條多段線。這件事困擾了我很久,因?yàn)橛镁植繑?shù)據(jù)進(jìn)行測(cè)試沒(méi)有問(wèn)題,但是對(duì)全部數(shù)據(jù)進(jìn)行處理的時(shí)候卻總會(huì)出錯(cuò),而且每次出的錯(cuò)都不一樣。后來(lái)我才發(fā)覺(jué)出錯(cuò)的原因。#p#分頁(yè)標(biāo)題#e#


致謝:肖澤云編著的《基于Visual C#AutoCAD開(kāi)發(fā)及其在工程中的應(yīng)用》對(duì)我學(xué)習(xí)CAD二次開(kāi)發(fā)做出了巨大幫助。如果對(duì)CAD二次開(kāi)發(fā)感興趣可以參閱這本書(shū)。我在網(wǎng)上下載到了這本書(shū)的電子版,上面沒(méi)有出版社信息,只標(biāo)注了“三峽大學(xué)”,不知道是不是內(nèi)部資料。如有侵權(quán)請(qǐng)與博客作者聯(lián)系。


久久国产色av_国产人妻777人伦精品hd_欧美 国产 日本_好吊色欧美一区二区三区
日本黄网站免费| 国产日韩欧美另类| 国产精品网址在线| 亚洲 国产 欧美一区| 久久九九国产视频| 热99久久精品| 国产精品电影一区| 北条麻妃在线一区| 日本欧美一级片| 国产精品久久久久免费a∨大胸| 精品婷婷色一区二区三区蜜桃| 欧美激情在线一区| 91精品久久久久久久久久另类| 日韩欧美精品免费| 国产精品初高中精品久久| 99免费在线视频观看| 日韩免费一级视频| 国产成人看片| 国产精品一区二区欧美黑人喷潮水| 熟妇人妻va精品中文字幕| 久久久久久久久久久久久9999| 国模精品一区二区三区| 欧美日韩xxxxx| 国产成人综合精品在线| 精品欧美一区免费观看α√| 在线播放豆国产99亚洲| 久久av免费一区| 国产主播喷水一区二区| 亚洲精品欧美一区二区三区| 国产成人免费电影| 国产精品一区二区久久国产 | 久久波多野结衣| 免费高清一区二区三区| 天天综合狠狠精品| 久久综合网hezyo| 久久国产亚洲精品无码| 国产伦精品一区二区三区四区免费| 日韩av免费电影| 欧美激情一区二区久久久| 日韩中文字幕精品| 97久久超碰福利国产精品…| 国内精品一区二区三区| 日韩在线第一区| 久久国产精品久久精品| 久久久久久中文| 国产青青在线视频| 欧美精品久久久久久久免费| 午夜一区二区三区| 久久99久久99精品免观看粉嫩| 久久久久免费网| 91精品视频免费| 国产美女主播在线播放| 欧美欧美一区二区| 偷拍盗摄高潮叫床对白清晰| 九九热精品在线| 久久精品中文字幕| 久久久精品有限公司| 欧美日韩成人黄色| 国产在线一区二| 亚洲 日韩 国产第一| 久久久久久久爱| 国产三区精品| 久久成人资源| 狠狠色噜噜狠狠色综合久| 热99在线视频| 日本精品一区二区三区不卡无字幕| 亚洲国产精品久久久久婷蜜芽 | 日韩亚洲欧美成人| 国产日韩中文字幕在线| 欧美一区二区三区综合 | 久久成人国产精品| 动漫3d精品一区二区三区| 久久精品男人天堂| 日韩在线激情视频| 久久久噜噜噜久久久| 国产精品2018| 久久久噜噜噜久久中文字免| 国产精品一区二区三区免费| 欧美视频小说| 日日摸日日碰夜夜爽av| 久久99久久99精品免观看粉嫩| 日韩专区在线播放| 久久久人人爽| av一区二区三区免费| 成人免费毛片播放| 97精品一区二区三区| 91精品视频在线看| 久久精品一二三区| 久久9精品区-无套内射无码| 久久久久免费视频| 久久久久久久久久久91| 久久久久久亚洲精品不卡| 久久精品网站视频| 日韩中文字幕国产| 国产精品青青草| 久久夜色精品国产亚洲aⅴ| 久久国产精品网站| 欧美激情一级精品国产| 一本久道高清无码视频| 在线视频精品一区| 亚洲一区二区三区免费看| 午夜精品久久久久久久久久久久久 | 日韩中文在线不卡| 99久久国产宗和精品1上映| 国产一区二区在线观看免费播放| 欧美亚洲一二三区| 日韩精品第1页| 欧美一区二区福利| 亚洲专区中文字幕| 一区二区三区四区不卡| 美女精品视频一区| 欧美精品少妇videofree| 久久国产一区| 国产不卡一区二区三区在线观看 | 青青草精品毛片| 日本三级久久久| 日本欧美一级片| 日韩精品一区二区三区色欲av| 色欲色香天天天综合网www | 国内成+人亚洲| 精品人妻人人做人人爽| 欧美另类一区| 黄页免费在线观看视频| 欧美日韩亚洲一| 男人舔女人下面高潮视频| 免费在线成人av| 精品免费视频123区| 美乳视频一区二区| 国产午夜精品在线| 国产精品一区二区三区久久| 成人免费观看a| 91久久精品一区二区别| 久久天堂国产精品| 久草青青在线观看| 精品国偷自产在线视频99| 国产精品三区四区| 精品国产综合区久久久久久| 中文字幕黄色大片| 婷婷亚洲婷婷综合色香五月| 欧美中文字幕在线| 国产中文字幕免费观看| 国产精品亚洲第一区| 91久久中文字幕| 久久久久久久久久久免费精品| 国产精品日日做人人爱| 国产aⅴ精品一区二区三区黄 | 国产乱子伦精品| 91精品久久久久久久久| 久草精品在线播放| 国产精品美女免费| 久久久久国产精品www| 丁香色欲久久久久久综合网| 欧美亚洲免费在线| 国产日本欧美视频| 国产精品91在线观看| 国产成人免费电影| 欧美激情精品久久久久久变态 | 久久精品国产一区二区三区不卡| 久久免费看av| 久久99国产精品99久久| 国产精品久久激情| 亚洲 高清 成人 动漫| 欧美精品一区二区三区免费播放| 国产精品一色哟哟| 国产a级片网站| 精品自在线视频| 日韩精品在线中文字幕| 国产精品又粗又长| 日韩视频在线免费观看| 伊人久久大香线蕉综合75| 日韩精品一区二区三区色偷偷| 国产午夜精品一区| 久久国产色av免费观看| 精品国产一区二区三区久久久久久| 色999日韩自偷自拍美女| 国产视频一视频二| 色婷婷av一区二区三区在线观看 | 免费一区二区三区| 国产成人一区二区三区免费看 | 欧美极品日韩| 91精品视频免费| 欧美精品免费在线| 欧美亚洲免费在线| 91精品国产99| 欧美激情区在线播放| 欧美资源一区| 久久综合色一本| 欧美激情a在线| 黄色一级片黄色| 久久精品国产精品青草色艺| 中文精品无码中文字幕无码专区| 欧美中文字幕在线观看视频| 91免费看蜜桃| 欧美片一区二区三区| 欧美成人精品欧美一级乱| 国产激情片在线观看| 亚洲一区二区三区在线观看视频| 国产中文字幕二区| 国产精品无码一区二区在线| 日本一区二区三区四区视频 |