版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第6講AutoCAD內(nèi)部命令調(diào)用及用戶交互2、使用AutoCAD內(nèi)部命令主要內(nèi)容3、和用戶交互4、選擇集1、C++類型轉(zhuǎn)換成C#類型1、C#調(diào)用dll時的類型轉(zhuǎn)換C++(Win32)C#char**作為輸入?yún)?shù)轉(zhuǎn)為char[],通過Encoding類對這個string[]進(jìn)行編碼后得到的一個char[]作為輸出參數(shù)轉(zhuǎn)為byte[],通過Encoding類對這個byte[]進(jìn)行解碼,得到字符串C++Dll接口:voidCplusplusToCsharp(inchar**AgentID,outchar**AgentIP);C#中的聲明:[DllImport("Example.dll")]publicstaticexternvoidCplusplusToCsharp(char[]AgentID,byte[]AgentIP);C#中的調(diào)用:Encodingencode=Encoding.Default;byte[]tAgentID;byte[]tAgentIP;string[]AgentIP;tAgentID=newbyte[100];tAgentIP=newbyte[100];CplusplusToCsharp(encode.GetChars(tAgentID),tAgentIP);AgentIP[i]=encode.GetString(tAgentIP,i*Length,Length);1、C#調(diào)用dll時的類型轉(zhuǎn)換HandleIntPtrHwndIntPtrint*refintint&refintvoid*IntPtrunsignedchar*refbyteBOOLboolDWORDint
或
uint(int
更常用一些)枚舉類型Win32:BOOLMessageBeep(UINTuType//
聲音類型);
其中的聲音類型為枚舉類型中的某一值。C#:用戶需要自己定義一個枚舉類型:publicenumBeepType{
SimpleBeep=-1,
IconAsterisk=0x00000040,
IconExclamation=0x00000030,
IconHand=0x00000010,
IconQuestion=0x00000020,
Ok=0x00000000,}C#中導(dǎo)入該函數(shù):[DllImport("user32.dll")]publicstaticexternboolMessageBeep(BeepTypebeepType);C#中調(diào)用該函數(shù):
MessageBeep(BeepType.IconQuestion);1、C#調(diào)用dll時的類型轉(zhuǎn)換結(jié)構(gòu)轉(zhuǎn)換Win32:使用結(jié)構(gòu)指針作為參數(shù)的函數(shù):BOOLGetSystemPowerStatus(LPSYSTEM_POWER_STATUSlpSystemPowerStatus);Win32中該結(jié)構(gòu)體的定義:typedefstruct_SYSTEM_POWER_STATUS{BYTE
ACLineStatus;BYTE
BatteryFlag;BYTE
BatteryLifePercent;BYTE
Reserved1;DWORD
BatteryLifeTime;DWORD
BatteryFullLifeTime;}SYSTEM_POWER_STATUS,*LPSYSTEM_POWER_STATUS;1、C#調(diào)用dll時的類型轉(zhuǎn)換C#:用戶自定義相應(yīng)的結(jié)構(gòu)體:structSystemPowerStatus{
byteACLineStatus;
bytebatteryFlag;
bytebatteryLifePercent;
bytereserved1;
intbatteryLifeTime;
intbatteryFullLifeTime;}C#中導(dǎo)入該函數(shù):[DllImport("kernel32.dll")]publicstaticexternboolGetSystemPowerStatus(
refSystemPowerStatussystemPowerStatus);C#中調(diào)用該函數(shù):SystemPowerStatussps;….sps初始化賦值……GetSystemPowerStatus(refsps);1、C#調(diào)用dll時的類型轉(zhuǎn)換字符串對于字符串的處理分為以下幾種情況:1、字符串常量指針的處理(LPCTSTR),也適應(yīng)于字符串常量的處理,.net中的string類型是不可變的類型2、字符串緩沖區(qū)的處理(char*),即對于變長字符串的處理,.net中StringBuilder可用作緩沖區(qū)1、C#調(diào)用dll時的類型轉(zhuǎn)換--字符串實例Win32:BOOLGetFile(LPCTSTRlpRootPathName);C#:函數(shù)聲明:[DllImport("kernel32.dll",CharSet=CharSet.Auto)]staticexternboolGetFile(
[MarshalAs(UnmanagedType.LPTStr)]
stringrootPathName);函數(shù)調(diào)用:stringpathname;GetFile(pathname);備注:DllImport中的CharSet是為了說明自動地調(diào)用該函數(shù)相關(guān)的Ansi版本或者Unicode版本1、C#調(diào)用dll時的類型轉(zhuǎn)換--字符串實例變長字符串處理:C#:函數(shù)聲明:[DllImport("kernel32.dll",CharSet=CharSet.Auto)]publicstaticexternintGetShortPathName(
[MarshalAs(UnmanagedType.LPTStr)]
stringpath,
[MarshalAs(UnmanagedType.LPTStr)]
StringBuildershortPath,
intshortPathLength);函數(shù)調(diào)用:StringBuildershortPath=newStringBuilder(80);intresult=GetShortPathName(@"d:\test.jpg",shortPath,shortPath.Capacity);strings=shortPath.ToString();1、C#調(diào)用dll時的類型轉(zhuǎn)換struct具有內(nèi)嵌字符數(shù)組的結(jié)構(gòu):Win32:typedefstruct_TIME_ZONE_INFORMATION{
LONG
Bias;
WCHAR
StandardName[32];
SYSTEMTIMEStandardDate;
LONG
StandardBias;
WCHAR
DaylightName[32];
SYSTEMTIMEDaylightDate;
LONG
DaylightBias;}TIME_ZONE_INFORMATION,*PTIME_ZONE_INFORMATION;1、C#調(diào)用dll時的類型轉(zhuǎn)換C#:[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)]structTimeZoneInformation{
publicintbias;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)]
publicstringstandardName;
DateTimestandardDate;
publicintstandardBias;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)]
publicstringdaylightName;
SystemTimedaylightDate;
publicintdaylightBias;}1、C#調(diào)用dll時的類型轉(zhuǎn)換具有回調(diào)的函數(shù)Win32:BOOLEnumDesktops(
HWINSTAhwinsta,
//
窗口實例的句柄ENUMDESKTOPPROClpEnumFunc,//
回調(diào)函數(shù)
LPARAMlParam
//
用于回調(diào)函數(shù)的值);回調(diào)函數(shù)DESKTOPENUMPROC的聲明:BOOLCALLBACKEnumDesktopProc(
LPTSTRlpszDesktop,
//
桌面名稱
LPARAMlParam
//
用戶定義的值);1、C#調(diào)用dll時的類型轉(zhuǎn)換C#:將回調(diào)函數(shù)的聲明轉(zhuǎn)化為委托:delegateboolEnumDesktopProc(
[MarshalAs(UnmanagedType.LPTStr)]
stringdesktopName,
intlParam);該函數(shù)在C#中的聲明:[DllImport("user32.dll",CharSet=CharSet.Auto)]
staticexternboolEnumDesktops(
IntPtrwindowStation,
EnumDesktopProccallback,
intlParam);2、使用AutoCAD內(nèi)部命令主要內(nèi)容3、和用戶交互4、選擇集1、C++類型轉(zhuǎn)換成C#類型2、使用AutoCAD內(nèi)部命令方式一:使用SendStringToExecute方式二:使用P/Invoke使用SendStringToExecuteSendStringToExecute方法將單個字符串發(fā)送到命令行。該字符串必須包含提供給所執(zhí)行命令的參數(shù),并依照該命令的提示順序所要求的次序排列這些參數(shù)使用SendStringToExecute執(zhí)行命令是異步的,直到.NET命令結(jié)束,否則不會被調(diào)用使用P/Invoke方式在ObjectARX編程中,可以使用以下函數(shù)來執(zhí)行AutoCAD內(nèi)部的命令acedCommandacedCmdacedCommand函數(shù)C++acedCommand函數(shù)的定義為:
intacedCommand(intrtype,...unnamed);
acedCommand函數(shù).NET中調(diào)用acedCommand函數(shù)實例:繪制圓效果acedCommand函數(shù)創(chuàng)建將塊生成ICON命令BlockIconacedCmd函數(shù)C++中,acedCmd函數(shù)的定義為:intacedCmd(conststructresbuf*rbp);該函數(shù)的參數(shù)是一個resbuf類型的指針,這里需要的結(jié)果緩沖區(qū)可以由acutBuildList函數(shù)生成。由于acedCommand函數(shù)實質(zhì)上也是為要執(zhí)行的命令構(gòu)造了一個resbuf結(jié)構(gòu),因此acedCmd函數(shù)和acedCommand函數(shù)完全能夠?qū)崿F(xiàn)相同的功能
acedCmd函數(shù)unionads_u_val{
ads_realrreal;ads_realrpoint[3];shortrint;//Mustbedeclaredshort,notint.char*rstring;longrlname[2];longrlong;structads_binaryrbinary;};
structresbuf{
structresbuf*rbnext;//Linkedlistpointershortrestype;unionads_u_valresval;};
acedCmd函數(shù)C#中使用acedCmd函數(shù)創(chuàng)建Zoom實例acedCmd函數(shù)C#中使用acedCmd函數(shù)創(chuàng)建Circle實例2、使用AutoCAD內(nèi)部命令主要內(nèi)容3、和用戶交互4、選擇集1、C++類型轉(zhuǎn)換成C#類型3、和用戶交互AutoCAD中命令提示如在AutoCAD中執(zhí)行PLINE命令時,能夠得到如下的命令提示:命令:_pline指定起點:當(dāng)前線寬為0.0000指定下一個點或[圓弧(A)/半寬(H)/長度(L)/放棄(U)/寬度(W)]:指定下一點或[圓弧(A)/閉合(C)/半寬(H)/長度(L)/放棄(U)/寬度(W)]:其中的提示“指定下一個點或[圓弧(A)/半寬(H)/長度(L)/放棄(U)/寬度(W)]:”就將提示用戶輸入點和關(guān)鍵字結(jié)合在一起。3、和用戶交互C++ObjectARX中提供了多個提示用戶輸入的全局函數(shù),包括acedGetString、acedGetPoint、acedGetInt、acedGetKword和acedGetReal等C#命名空間:Autodesk.AutoCAD.EditorInputGetString、GetPoint、GetInt、GetKword和GetReal等輸入提示并獲取輸入結(jié)果模板輸入提示PromptXXXOptionspOptions=newPromptXXXOptions(“…”)獲得輸入結(jié)果
(1)有指定類型返回結(jié)果PromptXXXResultpResult=ed.GetXXX(pOptions);
(2)沒有指定類型返回結(jié)果(string型)PromptResultpResult=ed.GetXXX(pOptions);
(3)得到具體結(jié)果,如stringDK=pResult.StringResult.Trim();3、和用戶交互輸入提示抽象類:PromptOptions,所有具體提示輸入類都繼承了該類3、和用戶交互--實例讀入字符串3、和用戶交互--實例讀入Double型數(shù)據(jù)3、和用戶交互--實例讀入Point3、和用戶交互--實例拾取實體3、和用戶交互--實例打開dwg文件(usingAutodesk.AutoCAD.Windows;)2、使用AutoCAD內(nèi)部命令主要內(nèi)容3、和用戶交互4、選擇集1、C++類型轉(zhuǎn)換成C#類型4、選擇集1)獲得PickFirst選擇集2)在圖形區(qū)域中選擇對象3)添加或合并多個選擇集4)定義選擇集過濾規(guī)則5)從選擇集中移除對象4.1、獲得PickFirst選擇集PickFirst選擇集是在先選擇對象后啟動命令的時候創(chuàng)建的為了獲得PickFirst選擇集的對象,必須滿足:PICKFIRST系統(tǒng)變量必須設(shè)置為1必須給命令定義UsePickSet命令標(biāo)記,用以通知命令要使用Pickfirst選擇集調(diào)用SelectImplied方法獲得PickFirst選擇集4.2、在圖形區(qū)域中選擇對象允許用戶從圖形中選擇對象的函數(shù):
GetSelection:提示用戶從屏幕中拾取對象SelectAll:在當(dāng)前空間中選擇所有對象,但不包括鎖定或凍結(jié)的SelectCrossingPolygon:選擇與通過指定點定義的多邊形內(nèi)部和相交的對象。多邊形可以是任何形狀但不能與它自己相交或接觸
SelectCrossingWindow:選擇與通過兩個點定義的區(qū)域內(nèi)部和相交的對象SelectFence:選擇與選擇柵格相交的所有對象。柵格選擇與多邊形相交選擇是相似的,不同的是柵格不能封閉,而且柵格可以與自己相交4.2、在圖形區(qū)域中選擇對象SelectLast:選擇當(dāng)前空間中最后創(chuàng)建的對象SelectPrevious:選擇在前一個選擇對象提示時選擇的所有對象SelectWindow:選擇完全包含在通過兩個點定義的矩形內(nèi)部的所有對象SelectWindowPolygon:選擇完全包含在通過點定義的多邊形里面的對象。多邊形可以是任何形狀但不能與它自己相交或接觸SelectAtPoint:選擇經(jīng)過給定點的對象并將它們放到活動選擇集中去SelectByPolygon:選擇柵格內(nèi)部的對象并將它們放到活動選擇集中去4.3、添加或合并多個選擇集用戶可以合并多個選擇集,需要創(chuàng)建一個ObjectIdCollection對象,然后向其中添加多個選擇集的對象的ObjectID4.4、定義選擇集過濾規(guī)則選擇集過濾規(guī)則類型:使用選擇集過濾器定義選擇集規(guī)則在選擇集過濾器中指定多個條件添加復(fù)雜的過濾器列表條件在選擇器過濾器條件中使用通配符過濾擴(kuò)展數(shù)據(jù)4.4.1、使用選擇集過濾器定義選擇集規(guī)則常用過濾器的DXF組碼4.4.1、使用選
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧現(xiàn)代服務(wù)職業(yè)技術(shù)學(xué)院《人體解剖學(xué)局解》2023-2024學(xué)年第一學(xué)期期末試卷
- 蘭州大學(xué)《定向運動與素質(zhì)拓展》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西工業(yè)貿(mào)易職業(yè)技術(shù)學(xué)院《學(xué)術(shù)寫作與文獻(xiàn)檢索》2023-2024學(xué)年第一學(xué)期期末試卷
- 吉林醫(yī)藥學(xué)院《市政工程識圖》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南水利水電職業(yè)技術(shù)學(xué)院《金融風(fēng)險管理(實驗)》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶藝術(shù)工程職業(yè)學(xué)院《計算機(jī)輔助產(chǎn)品設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶化工職業(yè)學(xué)院《大學(xué)生創(chuàng)新創(chuàng)業(yè)意識》2023-2024學(xué)年第一學(xué)期期末試卷
- 中央美術(shù)學(xué)院《古典園林建筑構(gòu)造》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江農(nóng)林大學(xué)《工程圖學(xué)綜合訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州商貿(mào)旅游職業(yè)學(xué)院《建筑工程計量與計價B》2023-2024學(xué)年第一學(xué)期期末試卷
- 福建省廈門市2023-2024學(xué)年高二上學(xué)期期末考試語文試題(解析版)
- 課文背書統(tǒng)計表
- 三年級語文下冊教案-14 蜜蜂3-部編版
- 蘇教版小學(xué)數(shù)學(xué)四年級下冊全冊教案
- DB51T2939-2022 彩燈(自貢)制作工藝通用規(guī)范
- 押金收據(jù)條(通用版)
- 藥理治療中樞神經(jīng)系統(tǒng)退行性疾病藥.pptx
- 強(qiáng)三基反三違除隱患促安全百日專項行動實施方案
- 新人教版七年級數(shù)學(xué)上冊全冊專項訓(xùn)練大全
- 標(biāo)準(zhǔn)預(yù)防--ppt課件
- 壓力管道氬電聯(lián)焊作業(yè)指導(dǎo)書
評論
0/150
提交評論