我想看一级黄色大片_久久亚洲国产精品一区二区_久久精品免视看国产明星_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久久青青青国产免费

            中文字幕一区二区三区在线播放 | 石原莉奈在线亚洲三区| 一区二区三区鲁丝不卡| 国产老妇另类xxxxx| 精品欧美一区二区久久| 蜜臀精品一区二区三区在线观看| 韩国精品久久久| 91麻豆精品国产自产在线观看一区 | 成人一区二区三区视频在线观看| 成人国产精品视频| 国产人成一区二区三区影院| 韩国av一区二区三区四区| 日韩丝袜情趣美女图片| 精品综合免费视频观看| 精品粉嫩超白一线天av| 免费黄网站欧美| 久久综合狠狠综合久久激情 | 综合久久综合久久| 成人18精品视频| 亚洲乱码一区二区三区在线观看| 美女一区二区久久| 精品三级av在线| 国产成人免费视频网站| 国产精品午夜在线观看| 91亚洲永久精品| 亚洲永久免费av| 欧美一级精品在线| 国产精品资源在线观看| 中文字幕在线不卡国产视频| 91影视在线播放| 午夜天堂影视香蕉久久| 欧美刺激午夜性久久久久久久 | 欧美肥妇bbw| 蜜芽一区二区三区| 久久九九99视频| 91性感美女视频| 日本午夜一区二区| 在线观看日韩精品| 日韩精品欧美精品| 国产日韩欧美麻豆| 91福利在线导航| 美女视频黄免费的久久| 国产精品家庭影院| 7777精品伊人久久久大香线蕉经典版下载 | 福利电影一区二区| 日韩精品一区二区三区三区免费 | 一区二区三区精品在线| 欧美一区二区在线免费播放| 一区二区久久久| 欧美大白屁股肥臀xxxxxx| 成人av资源在线| 蜜臀精品久久久久久蜜臀| 国产精品乱码妇女bbbb| 欧美区在线观看| 99视频在线精品| 人妖欧美一区二区| 亚洲免费av观看| 久久久国产一区二区三区四区小说 | 欧美精品一区二区三区在线播放| 青椒成人免费视频| 91精品国产乱| av亚洲精华国产精华| 国产精品久久久99| 欧美videos大乳护士334| 色诱亚洲精品久久久久久| 精东粉嫩av免费一区二区三区| 精品电影一区二区三区| 色综合中文综合网| 亚洲18女电影在线观看| 欧美三级电影一区| 波波电影院一区二区三区| 韩国视频一区二区| 日韩精品久久久久久| 亚洲色大成网站www久久九九| 91高清视频在线| 成人av网站免费观看| 国产自产高清不卡| 久久国产精品色婷婷| 午夜精品福利视频网站| 亚洲一区影音先锋| 一区二区日韩电影| 亚洲天堂免费看| 国产精品电影一区二区| 久久久国际精品| 精品电影一区二区| 色哟哟在线观看一区二区三区| 一区二区三区四区蜜桃| 7777精品久久久大香线蕉| 久久成人免费网| 老司机午夜精品| 全部av―极品视觉盛宴亚洲| 日韩精品三区四区| 婷婷国产在线综合| 日本va欧美va精品| 久久精工是国产品牌吗| 久久国产精品无码网站| 精品制服美女丁香| 激情成人午夜视频| 国产福利91精品一区二区三区| 亚洲综合在线视频| 亚洲制服欧美中文字幕中文字幕| 精品国内片67194| 日韩精品一区二区三区中文不卡| av一区二区三区四区| 日本女优在线视频一区二区 | 欧美国产精品久久| 久久久久久久久久久电影| 中文字幕乱码亚洲精品一区| 中文字幕一区视频| 精品福利一区二区三区免费视频| 日本高清不卡视频| 欧美色图天堂网| 欧美一区二区在线不卡| 在线观看日韩av先锋影音电影院| 国产一区二区福利| 成人激情午夜影院| 欧美无乱码久久久免费午夜一区| 丁香啪啪综合成人亚洲小说| 成人爱爱电影网址| 欧美理论片在线| 久久精品一级爱片| 亚洲在线视频免费观看| 免费成人结看片| 波多野结衣中文字幕一区 | 99re这里只有精品6| 精品视频999| 久久这里只有精品6| 91精品福利在线一区二区三区| 97久久精品人人做人人爽| 欧美午夜片在线看| 久久久久久综合| 亚洲午夜国产一区99re久久| 韩国v欧美v日本v亚洲v| 激情综合网av| 99re这里只有精品视频首页| 91精品国产综合久久久久久漫画| 欧美三级电影网站| 久久新电视剧免费观看| 亚洲一区二区三区中文字幕在线| 亚洲免费在线观看视频| 麻豆精品视频在线观看| 色偷偷88欧美精品久久久| 欧美成人a视频| 亚洲制服丝袜av| 成人激情黄色小说| 99国产一区二区三精品乱码| 99re在线精品| 欧美mv日韩mv亚洲| 国产色一区二区| 日韩精品免费视频人成| 色视频成人在线观看免| 欧美激情资源网| 亚洲婷婷综合色高清在线| 亚洲免费观看高清完整版在线观看熊 | 最近中文字幕一区二区三区| 免费高清在线视频一区·| 91九色最新地址| 国产精品国产三级国产普通话三级| 亚洲欧洲精品成人久久奇米网| 亚洲欧洲美洲综合色网| 精品一区二区三区影院在线午夜| 国产精品香蕉一区二区三区| 7777精品伊人久久久大香线蕉的| 欧美精品久久天天躁| |精品福利一区二区三区| 国产乱码精品一品二品| 欧美成人精精品一区二区频| 日韩精品久久理论片| 欧美另类高清zo欧美| 久久久亚洲高清| 久久se这里有精品| www.亚洲人| 国产精品美女久久久久aⅴ国产馆| 亚洲在线视频网站| 色屁屁一区二区| 欧美成人欧美edvon| 奇米精品一区二区三区四区 | 亚洲成人av电影在线| 91网上在线视频| 亚洲精品乱码久久久久久久久| 麻豆精品一区二区三区| 国产91丝袜在线播放九色| 久久精品夜色噜噜亚洲a∨| 国产精品一区二区在线看| 久久久久国产精品厨房| 午夜电影网亚洲视频| 欧美人狂配大交3d怪物一区| 国产校园另类小说区| 亚洲成精国产精品女| 国产精品99久久久| 亚洲国产精品传媒在线观看| 成人精品免费网站| 国产精品一级黄| 日本一区二区免费在线| 97久久超碰国产精品电影| 日韩精品中文字幕一区二区三区| 久久综合999| 国产成人亚洲综合a∨婷婷| 国产精品天干天干在线综合| 91香蕉视频在线|