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

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

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

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

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


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

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

然后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二次開發感興趣可以參閱這本書。我在網上下載到了這本書的電子版,上面沒有出版社信息,只標注了“三峽大學”,不知道是不是內部資料。如有侵權請與博客作者聯系。


久久国产色av_国产人妻777人伦精品hd_欧美 国产 日本_好吊色欧美一区二区三区
国产精品中文字幕久久久| 国产精品夜夜夜爽张柏芝| 黄色av网址在线播放| 99爱视频在线| 国产精品第二页| 欧美午夜欧美| 久久国产日韩欧美| 亚洲综合色av| 国产欧美一区二区三区久久 | 久久国产色av| 欧美激情国产日韩| 日韩中文字幕在线视频| 日日骚一区二区网站| 91精品久久久久久久久久另类 | 五月天亚洲综合情| 成人在线小视频| 中国丰满熟妇xxxx性| 国产在线精品一区二区中文| 国产精品美女主播在线观看纯欲| 欧美亚洲另类激情另类| 日韩中文字幕久久| 欧美国产亚洲一区| 国产精品久久久久久久久久久久久久| 国内精品久久久久伊人av| 国产精品免费看一区二区三区| 欧美日韩国产不卡在线看| 国产精品三区www17con| 欧美在线不卡区| 久久久www成人免费精品张筱雨| 欧美最猛黑人xxxx黑人猛叫黄| 久久久免费av| 欧美无砖专区免费| 国产精品久在线观看| 国产一区亚洲二区三区| 国产aⅴ精品一区二区三区黄 | 一本大道熟女人妻中文字幕在线 | 国产精品免费一区二区三区| 黄色一级视频在线播放| 国产精品观看在线亚洲人成网| 国内精久久久久久久久久人| 国产精品国产精品| 国产日产欧美一区二区| 一区二区三区电影| 久久伊人资源站| 欧美日韩一区二区三区免费| 国产精品欧美风情| 成人短视频在线观看免费| 日日碰狠狠丁香久燥| 国产成人精品视频在线| 美女被啪啪一区二区| 九九热这里只有精品免费看| 91精品视频播放| 青青视频免费在线观看| 国产精品国产三级国产专区51| 99中文字幕| 欧美尤物一区| 欧美情侣性视频| 久久综合伊人77777麻豆| 欧美在线一区二区三区四| 国产精品成人播放| 99视频在线免费观看| 色播五月综合| 国产精品老牛影院在线观看| 福利精品视频| 欧美亚洲一二三区| 欧美巨猛xxxx猛交黑人97人| 69**夜色精品国产69乱| 欧美精品久久久久久久免费| 在线免费观看一区二区三区| 久久av免费一区| 国产视频九色蝌蚪| 日韩av日韩在线观看| 超在线视频97| 久久超碰亚洲| 成人免费观看a| 欧美日韩精品不卡| 亚洲www永久成人夜色| 国产精品露出视频| 国产成人av网址| 成人在线小视频| 欧美亚洲成人网| 亚洲丰满在线| 国产精品第3页| 久久精品国产一区二区三区日韩| 国产欧亚日韩视频| 欧美日韩另类丝袜其他| 亚洲一区二区三区乱码| 国产精品免费久久久久久| 久久一区二区精品| 国产精品专区一| 欧美二区在线看| 日本中文字幕成人| 在线天堂一区av电影| 国产精品视频永久免费播放| 国产大片精品免费永久看nba| 国模精品娜娜一二三区| 日本高清视频精品| 亚洲熟女乱色一区二区三区| 国产精品久久久久久久天堂 | 国产伦精品一区二区三毛| 欧美日韩电影一区二区三区| 亚洲欧美日韩精品久久久| 久久香蕉国产线看观看av| 久久国内精品一国内精品| 久久亚洲a v| 福利视频久久| 国产一级不卡视频| 欧美日韩大片一区二区三区| 日本欧美精品久久久| 亚洲在线一区二区| 欧美激情一级精品国产| 国产精品久久久久久久小唯西川 | 国产精品大片wwwwww| 国产成人久久精品| 久久福利电影| 国产国语刺激对白av不卡| 97精品伊人久久久大香线蕉| 国产一区二区不卡视频| 黄色国产一级视频| 欧美日韩国产综合视频在线| 青青在线免费观看| 欧美影院久久久| 人妻熟女一二三区夜夜爱| 日本高清不卡三区| 日本人妻伦在线中文字幕| 欧美一级片久久久久久久| 婷婷精品国产一区二区三区日韩| 亚洲精品第一区二区三区| 亚洲一区二区三区精品在线观看| 一区二区三区四区久久| 欧美xxxx14xxxxx性爽| 久久99精品视频一区97| 精品免费国产| 久久国产精品久久久久久| 久久99久国产精品黄毛片入口| 欧美激情视频三区| 精品久久久久久无码国产| 美女精品视频一区| 一区二区视频国产| 亚洲色成人www永久在线观看 | 国产精品福利小视频| 久久成人免费视频| 欧美激情亚洲一区| 在线一区亚洲| 少妇熟女一区二区| 日本精品免费视频| 欧美一级大片视频| 国产资源在线免费观看| 国产精品自拍片| 久久久亚洲国产| 国产成人精品免费久久久久 | 国产v综合ⅴ日韩v欧美大片| 国产成人精品一区二区| 不卡av电影在线观看| 中文字幕一区二区三区精彩视频 | 久久久亚洲精品视频| 色av中文字幕一区| 国产精品美女视频网站| 欧美精品videos| 色噜噜狠狠一区二区三区 | 97精品国产91久久久久久| 国产精品97在线| 精品国产一区二区三区在线观看| 国产精品久久久久久久久久三级| 综合色婷婷一区二区亚洲欧美国产 | 欧美一区二视频在线免费观看| 国模私拍一区二区三区| 国产欧美日韩高清| 久久久天堂国产精品女人| 俺去了亚洲欧美日韩| 国产精品久久久av| 午夜一区二区三视频在线观看| 欧洲午夜精品久久久| 国产欧美韩国高清| 久久精品国产一区二区三区不卡 | 久久久久久久久久久网站| 久久九九有精品国产23| 在线视频福利一区| 欧美在线精品免播放器视频| 国产麻豆乱码精品一区二区三区| 久久九九国产视频| 久热精品在线视频| 日韩福利二区| 粉嫩av一区二区三区天美传媒| 色噜噜亚洲精品中文字幕| 精品国产成人av在线免| 日本精品视频在线| 国产女女做受ⅹxx高潮| 久久久久天天天天| 久久久久久com| 秋霞在线一区二区| 成人av播放| 国产精品久久久久久中文字| 欧美一区二区三区……| 国产欧美综合一区| 久久久国产精品x99av| 熟妇人妻va精品中文字幕| 国产无套内射久久久国产| 日韩一区二区久久久| 亚洲综合中文字幕在线|