我想看一级黄色大片_久久亚洲国产精品一区二区_久久精品免视看国产明星_91久久青青青国产免费

您的位置:網站首頁 > CAD新聞

GIS筆記—CAD二次開發兩個技巧

時間:2012-12-17 15:07:36 來源:未知

前一段時間在做CAD二次開發。不管是誠懇地說還是不誠懇地說,做出來的東西都很坑爹,不值一提。現在那個任務已經暫告一個段落了,所以寫篇博客把值得總結得東西記錄下來。下面的兩個技巧都是困惑了很長時間才解決的,應當略有一些價值。


第一個技巧是啟動CAD的方法。CAD二次開發的技術貌似有很多種,我不太熟悉所以不一一列舉。我是在 .net平臺下用C#開發的,采用的方法是用代碼創建一個CAD實例并啟動,效果等同于直接運行CAD可執行程序。之后可以用代碼往里面發送命令。這個做法貌似十分非主流。由于CAD二次開發的方法很多,在網上查到的資料比較混亂,所以我花了很長時間才成功啟動CAD。以下是方法。要聲明一點,由于這件事已經過去幾個月了,所以我不能完全保證下面這個方法有沒有遺漏什么細節。有遺漏的話請指出,謝謝!

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

然后using下面兩條

using Autodesk.AutoCAD.Interop;

using Autodesk.AutoCAD.Interop.Common;

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

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

#p#分頁標題#e#然后在這個命名空間里寫一個接口

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);

    }

然后在窗體類里寫上下面這些東西

[DllImport("ole32.dll")]

static extern int CoRegisterMessageFilter(IMessageFilter lpMessageFilter, out IMessageFilter lplpMessageFilter);#p#分頁標題#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;

}

然后在窗體的構造函數里加上兩行,把構造函數弄成下面這樣

public Form1()

{

    InitializeComponent();

    IMessageFilter oldFilter;

    CoRegisterMessageFilter(this, out oldFilter);

}

#p#分頁標題#e#以上內容除了加引用以外我都不知道是干什么用的,不過經過實驗以上內容缺了哪一行都不能啟動CAD

接下來的步驟就比較清晰了。

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就成功啟動了。


第二個技巧是用代碼往CAD里發送命令行。說起來很慚愧,有很多操作,比如合并多段線,我沒有找到相應的接口。解決方法之一是讀取兩條多段線的坐標,新畫一條合并后的多段線并刪除兩個舊的多段線,但是這個做法太惡心了。于是我找到了一個方法,用代碼往CAD里發送命令行。下面是一句合并多段線的代碼。

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

里面這個命令行等價于下面這個操作。

首先,在CAD里輸入命令pe,回車,進入多段線操作。

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

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

然后再用代碼選中另外一個實體,比如"XE78"號實體。這相當于在CAD中輸入(handent"XE78")并回車。

然后再回車,合并兩條多段線。

輸入(command),回車,退出多段線操作命令。在CAD中,這個操作可以通過點擊esc鍵實現,但是用代碼的話只能輸入(command)并回車。

用代碼發送命令行跟直接往CAD里輸入命令行是一樣的,上面那句代碼執行后CAD的命令行窗口里會顯示相應的命令。上面這個例子說明了命令行的構造規則,其他命令可以按照這個規則構造。同時這導致一個問題,即代碼執行完畢前千萬不要點擊CAD窗口,否則點擊操作可能被視為一個選擇實體的操作,從而干擾命令行的執行。例如,如果系統認為點擊操作是在"pen"之后、"(handent"" pObject2.Handle "")"之前發生的,那么被合并的第一條多段線不是pObject2,而是單擊點中的那條多段線。這件事困擾了我很久,因為用局部數據進行測試沒有問題,但是對全部數據進行處理的時候卻總會出錯,而且每次出的錯都不一樣。后來我才發覺出錯的原因。#p#分頁標題#e#


致謝:肖澤云編著的《基于Visual C#AutoCAD開發及其在工程中的應用》對我學習CAD二次開發做出了巨大幫助。如果對CAD二次開發感興趣可以參閱這本書。我在網上下載到了這本書的電子版,上面沒有出版社信息,只標注了“三峽大學”,不知道是不是內部資料。如有侵權請與博客作者聯系。


我想看一级黄色大片_久久亚洲国产精品一区二区_久久精品免视看国产明星_91久久青青青国产免费

            91网址在线看| 欧美日本一区二区在线观看| 日本午夜一区二区| 看电视剧不卡顿的网站| 成人污污视频在线观看| 欧美日韩一区二区三区高清| 久久综合九色综合欧美亚洲| 国产亚洲成av人在线观看导航| 亚洲精品成人精品456| 久久精品国内一区二区三区| 色综合天天综合网天天看片| 精品国产91洋老外米糕| 亚洲一区二区三区自拍| 国产乱对白刺激视频不卡| 在线亚洲欧美专区二区| 久久精品99国产精品日本| 成人精品视频.| 99视频国产精品| 欧美一二三区在线观看| 一二三区精品视频| 成人av手机在线观看| 欧美大片日本大片免费观看| 亚洲成人av在线电影| av在线播放成人| 久久久久久久久久电影| 麻豆91免费观看| 欧美日韩国产在线观看| 亚洲人成影院在线观看| 国产不卡一区视频| 精品福利一区二区三区免费视频| 国产视频一区二区在线观看| 免费高清视频精品| 欧美性色黄大片| 亚洲日本一区二区| 国产91在线观看丝袜| 91精品欧美一区二区三区综合在| 亚洲欧美中日韩| 久久se这里有精品| 日韩欧美国产一区二区三区| 亚洲欧美区自拍先锋| 丰满少妇在线播放bd日韩电影| 日韩一区二区三免费高清| 夜夜嗨av一区二区三区四季av| 成熟亚洲日本毛茸茸凸凹| 欧美成人一区二区| 日韩精品亚洲一区| 日本久久电影网| 亚洲欧美综合色| 国产精品一区二区三区网站| 91精品国产综合久久久久 | 日韩精品三区四区| 欧美在线播放高清精品| 日韩美女啊v在线免费观看| 国产精品一区在线观看你懂的| 日韩欧美一区在线| 日韩电影免费在线观看网站| 色成人在线视频| 日本一区二区免费在线观看视频| 国产在线国偷精品免费看| 精品日韩在线观看| 亚洲欧美日韩成人高清在线一区| 成人av网址在线| 欧美国产日本韩| 国产91丝袜在线18| 中文在线一区二区| 国产91丝袜在线播放0| 国产日韩欧美精品一区| 成人黄色av电影| 亚洲视频一二区| 91国产福利在线| 在线精品视频一区二区三四| 国产精品久久久久一区| 99精品黄色片免费大全| 亚洲日本韩国一区| 在线视频一区二区三区| 五月天视频一区| 日韩精品在线看片z| 国产一区二区精品久久91| 久久久久久电影| eeuss鲁片一区二区三区| 亚洲精品中文在线影院| 欧美猛男gaygay网站| 另类成人小视频在线| 国产亚洲精品aa| 欧美一区二区人人喊爽| 国产主播一区二区三区| 国产欧美视频在线观看| 成人av电影免费在线播放| 亚洲激情图片qvod| 欧美一区永久视频免费观看| 五月婷婷久久综合| 99精品国产视频| 久久久www成人免费毛片麻豆 | 日韩激情一二三区| 91在线观看免费视频| 国产精品美女久久久久高潮| 精品影视av免费| 国产精品成人一区二区三区夜夜夜| 色悠悠亚洲一区二区| 奇米色一区二区三区四区| 色婷婷av一区二区| 午夜激情一区二区三区| 亚洲精品一区二区在线观看| 国内外成人在线| 久久麻豆一区二区| 91免费看`日韩一区二区| 三级一区在线视频先锋| 国产欧美一区二区精品性色超碰| 日本韩国欧美在线| 精品亚洲porn| 亚洲午夜久久久久久久久电影网| 欧美日本在线视频| a亚洲天堂av| 久久精品二区亚洲w码| 亚洲免费大片在线观看| 久久在线观看免费| 欧美色老头old∨ideo| 成人网男人的天堂| 青青草一区二区三区| 亚洲男人天堂av网| 国产欧美精品在线观看| 欧美一级国产精品| 欧美少妇xxx| 国产一区二区按摩在线观看| 精品一区二区三区蜜桃| 日韩高清在线不卡| 亚洲成人手机在线| 亚洲免费三区一区二区| 国产精品看片你懂得| 精品欧美一区二区在线观看| 欧美日韩一区三区| 五月激情综合婷婷| 亚洲综合在线五月| 自拍偷拍亚洲激情| 欧美激情综合五月色丁香| 一区二区三区在线免费观看| 欧美一区二区三区色| 在线视频国内一区二区| 成人午夜免费电影| 亚洲一卡二卡三卡四卡无卡久久| 26uuu色噜噜精品一区二区| 国产精品乡下勾搭老头1| 一区二区三区中文字幕精品精品 | 精品国产一区久久| 在线播放日韩导航| 欧美日韩一区二区三区四区| 国产iv一区二区三区| 狠狠色丁香久久婷婷综| 久久精品免费观看| 蜜臀99久久精品久久久久久软件| 天天影视涩香欲综合网| 国产精品久久久久影视| 国产精品久久久久精k8 | 久久丝袜美腿综合| 国内偷窥港台综合视频在线播放| 亚洲国产aⅴ天堂久久| 亚洲午夜av在线| 五月天久久比比资源色| 视频在线观看91| 免费人成在线不卡| 日本美女一区二区三区视频| 日本美女视频一区二区| 日韩美女视频一区二区| 国产精品视频一二三区| 5566中文字幕一区二区电影| 欧美丰满少妇xxxbbb| 日韩欧美中文字幕精品| www.日韩在线| 国产成人亚洲综合a∨婷婷| 国产高清不卡一区| 99热国产精品| 欧美三级乱人伦电影| 91国在线观看| 在线不卡免费av| 久久综合网色—综合色88| 中文字幕成人网| 最新久久zyz资源站| 亚洲国产一二三| 国产在线播精品第三| 91在线无精精品入口| 欧美精品欧美精品系列| 精品国产乱码久久久久久闺蜜| 国产日本亚洲高清| 亚洲欧美日韩精品久久久久| 精品国产91久久久久久久妲己| 国产精品三级视频| 午夜成人在线视频| 国产毛片精品视频| 99久久久精品免费观看国产蜜| 在线观看www91| 日韩av电影免费观看高清完整版 | 国产成a人亚洲| 欧美三级在线看| 欧美视频一二三区| 久久亚洲精品小早川怜子| 精品国产乱子伦一区| 亚洲日本一区二区三区| 亚洲夂夂婷婷色拍ww47| 国内精品国产三级国产a久久| 色成年激情久久综合|