亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

AutoCADR14與VB

2019-11-18 17:50:22
字體:
來源:轉載
供稿:網友
前言在AutoCADR14發展工具中,VBA算是最讓程式發展人員注目,全新的發展介面加上與MicrosoftOffice使用相同發展語言,對於我們這些發展人員,可真是一大震撼,不過在高興之余卻聽說目前這版
AutoCADR14只支援VBA而不支援VirtualBasic,需要到R14下一版才支援,實在令人失望。

  如果您也曾因聽說R14不支援VirtualBasic而放棄VirtualBasic,那您可錯過一個快速且容易的發展語言,筆者在一次與同事閑聊的偶然機會中意外發現,VirtualBasic可以當做AutoCADR14的發展工具,筆者雖為C 的忠誠擁護者,見到VirtualBasic也不禁為它喝采,廢話不多說,現在就為您說明如何使用VirtualBasic控制AutoCADR14。

啟始設定

  在開始說明前請讀者先拿出你們的R14光碟,并執行光碟中vbainst/setup.exe程式,安裝程式除了安裝VBA發展工具外,最重要的是安裝了AutoCAD的Object說明書。

  當您安裝完說明書後請執行VirtualBasic,并開始一個空白專案。如圖1,在VirutualBasic中選取「專案→設定引用項目→AutoCADR14ObjectLibrary」。在引用項目加入了ACADObjectLibrary後,就可以在VB用「檢視→瀏覽物件」來查看可使用的AutoCAD物件,若熟悉VirtualBasic應該了解,當物件可以瀏覽時,也就代表Virtual
Basic可以使用此物件,至此我們已完成了所需的設定。

建立R14物件

  您可依下面步驟建立R14物件。

  1.因為ACAD物件在大部分副程式中都會使用到,因此把ACADobject設為全域變數。

DimacadAppAsObject'建立全域的ACADobject

  2.可以選擇在LoadForm或任何其他副程式中建立R14物件,下面范例是在LoadForm時建立R14物件,但請特別注意,必須將Visible屬性設為TURE,否則將會發覺硬碟拼命轉,但螢幕上卻沒任何變化。

PRivateSubForm_Load()
OnErrorResumeNext
`如果目前系統中已有執行R14則取得已執行R14物件
SetacadApp=GetObject(,“AutoCAD.application")
IfErrThen
Err.Clear
`如果目前系統尚未有執行R14則建立R14物件(
SetacadApp=CreateObject(“AutoCAD.Application")
EndIf
acadApp.Visible=True`請務必將物件Visible屬性設為true
EndSub

  3.您已經可以試著去執行這個程式,建議您,若系統已執行R14,請先結束R14程式,否則無法看到執行結果,因為程式取得物件還未對物件做任何處理,您會發現當執行這個程式則程式會啟動R14,從執行的過程您是否體會到VirtualBasic的方便,連程式都不必Complier,甚至不必先存檔就可以執行。

  在R14中畫(10,10)至(100,100)的方框

  當建立acadApp物件後,就可以使用物件所提供的method,下面范例就是利用AddLinemethod來畫出一個四方形,讀者可能會對
acadApp.ActiveDocument.ModelSpace.AddLine這行指令的語法感到困惑,
其實若查看ACAD的Objectmodel(如圖3)就可以很清楚了解,addLine是ModelSpaceEntitiesCollectionObject物件的methos,而ModelSpaceEntitiesCollectionObject的父物件是DocumentObject,DocumentObject的父物件是ApplicationObject,因此要由acadApp物件來建立Line物件當然必須透過DocumentObject與ModelSpaceObject;另外值得注意的是,畫完line後記得執行acadApp.Updatemethod才能讓方框即時顯示在螢幕上。

PrivateSubDrawBox_Click()
Dimp1(0To2)AsDouble
Dimp2(0To2)AsDouble
Dimp3(0To2)AsDouble
Dimp4(0To2)AsDouble
DimlineObjAsObject
`設定點座標
p1(0)=10#
p1(1)=10#
p1(2)=0#
p2(0)=100#
p2(1)=10#
p2(2)=0#
p3(0)=100#
p3(1)=100#
p3(2)=0#
p4(0)=10#
p4(1)=100#
p4(2)=0#
`劃第一點到第二點
SetlineObj=acadApp.ActiveDocument.ModelSpace.AddLine(p1,p2)
`劃第二點到第三點
SetlineObj=acadApp.ActiveDocument.ModelSpace.AddLine(p2,p3)
`劃第三點到第四點
SetlineObj=acadApp.ActiveDocument.ModelSpace.AddLine(p3,p4)
`劃第四點到第一點
SetlineObj=acadApp.ActiveDocument.ModelSpace.AddLine(p4,p1)
acadApp.Update
EndSub

  讀取圖檔中modelspace的所有text及mtext文字

  請讀者先看下面范例程式,您是否嚇一跳,這絕對是真的,下面這段程式碼真的可以讀取圖檔中modelspace的所有text及mtext文字,acadobject將您目前開啟的圖檔中所有繪圖物件都放在ActiveDocument中,而ActiveDocument中所有Modelspace中的物件都放ModelSpace中,因此我們由ActiveDocument.ModelSpace物件的
itemmethod中取出物件,并依物件的EntityType屬性來判斷是否為文字,及可取出圖檔中所有文字了。

PrivateSubQueryString_Click()
DimiAsInteger
DimretObjAsObject
WithacadApp.ActiveDocument.ModelSpace
Fori=0To.Count-1Step1
SetretObj=.Item(i)
IfretObj.EntityType=acTextOrretObj.EntityType=acMtextThen
StringList.AddItemretObj.TextString,0
EndIf
Nexti
EndWith
StringList.Refresh
EndSub

  將圖檔中所有Line的資料寫入資料庫

  想將CAD資料寫入Database嗎?在VirtualBasic中當然沒問題,請先依圖4所示在VirutualBasic中選取「專案→設定引用項目→MicrosoftDAO3.5ObjectLibrary」,以便在VirtualBasic中使用DAO,下面范例將建立test.mdb資料庫并將圖檔中所有Line的資料寫入Database中,有關資料庫的建立方式您可參考VirtualBasicOnlineBook的說明,圖5為利用access開起啟test.mdb所顯示的程式執行結果


PrivateSubWLineDB_Click()
DimMyDBAsDatabase,MyWsAsWorkspace
DimLineTdAsTableDef
DimLineFlds(7)AsField
DimfilePathAsString
DimrstLineAsRecordset
DimiAsInteger
DimretObjAsObject
DimretPtAsVariant

filePath=App.Path “/test.mdb"
`Createworkspaces
SetMyWs=DBEngine.Workspaces(0)
`CreateDatabase
SetMyDB=MyWs.CreateDatabase(filePath,dbLangGeneral,dbVersion30)
`CreateTable
SetLineTd=MyDB.CreateTableDef(“Lines")

`設定欄位資料
SetLineFlds(0)=LineTd.CreateField(“LINE_ID",dbLong)`使其成為計數資料欄。
LineFlds(0).Attributes=dbAutoIncrField
SetLineFlds(1)=LineTd.CreateField(“LINE_P1X",dbDouble)
SetLineFlds(2)=LineTd.CreateField(“LINE_P1Y",dbDouble)
SetLineFlds(3)=LineTd.CreateField(“LINE_P1Z",dbDouble)
SetLineFlds(4)=LineTd.CreateField(“LINE_P2X",dbDouble)
SetLineFlds(5)=LineTd.CreateField(“LINE_P2Y",dbDouble)
SetLineFlds(6)=LineTd.CreateField(“LINE_P2Z",dbDouble)

`將欄位加入Table
LineTd.Fields.AppendLineFlds(0)
LineTd.Fields.AppendLineFlds(1)
LineTd.Fields.AppendLineFlds(2)
LineTd.Fields.AppendLineFlds(3)
LineTd.Fields.AppendLineFlds(4)
LineTd.Fields.AppendLineFlds(5)
LineTd.Fields.AppendLineFlds(6)
MyDB.TableDefs.AppendLineTd

SetrstLine=MyDB.OpenRecordset(“Lines")
WithacadApp.ActiveDocument.ModelSpace
Fori=0To.Count-1Step1
SetretObj=.Item(i)
IfretObj.EntityType=acLineThen
rstLine.AddNew
retPt=retObj.startPoint
rstLine!LINE_P1X=retPt(0)
rstLine!LINE_P1Y=retPt(1)
rstLine!LINE_P1Z=retPt(2)
retPt=retObj.startPoint
rstLine!LINE_P2X=retPt(0)
rstLine!LINE_P2Y=retPt(1)
rstLine!LINE_P2Z=retPt(2)
rstLine.Update
EndIf
Nexti
EndWith

rstLine.Close
MyDB.Close

EndSub

  將圖檔中所有Line的資料寫入Excel活頁簿

VirtualBasic可以控制AutoCAD,當然也可控制Excel或其他Office程式,讀者請先依圖6所示在VirutualBasic中選取「專案→設定引用項目→MicrosoftExcel5.0ObjectLibrary,在VB中啟動Excel的過程與啟動AutoCAD物件的方式相同,下面范例將圖檔中Line的資料寫入Excel活頁簿中,當然也可以利用Excel來處理運算與分析的功能,以往需要借由ADS或ARX的計算能力才能完成的工作,都可藉由此方式完成
。

PrivateSubExport2Excel_Click()
DimexcelAppAsObject
DimcellPosAsString
DimiAsInteger
OnErrorResumeNext
SetexcelApp=GetObject(,“Excel.Application")
IfErrThen
Err.Clear
`如果目前系統尚未有執行Excel則建立Excel物件(
SetexcelApp=CreateObject(“excel.Application")
EndIf
excelApp.Visible=True`請務必將物件Visible屬性設為true
excelApp.Workbooks.Add
WithacadApp.ActiveDocument.ModelSpace
Fori=0To.Count-1Step1
SetretObj=.Item(i)
IfretObj.EntityType=acLineThen
rstLine.AddNew
retPt=retObj.startPoint
cellPos=“A" Trim(str(i 1))
excelApp.Range(cellPos).Select
excelApp.ActiveCell.FormulaR1C1=retPt(0)
cellPos=“B" Trim(str(i 1))
excelApp.Range(cellPos).Select
excelApp.ActiveCell.FormulaR1C1=retPt(1)
cellPos=“C" Trim(str(i 1))
excelApp.Range(cellPos).Select
excelApp.ActiveCell.FormulaR1C1=retPt(2)
retPt=retObj.endPoint
cellPos=“D" Trim(str(i 1))
excelApp.Range(cellPos).Select
excelApp.ActiveCell.FormulaR1C1=retPt(0)
cellPos=“E" Trim(str(i 1))
excelApp.Range(cellPos).Select
excelApp.ActiveCell.FormulaR1C1=retPt(1)
cellPos=“F" Trim(str(i 1))
excelApp.Range(cellPos).Select
excelApp.ActiveCell.FormulaR1C1=retPt(2)
EndIf
Nexti
EndWith
EndSub

  在VirtualBasic中使用OCX

  讀者或許會疑惑,為什麼會有這個主題?雖然VirtualBasic功能強大,但程式開發者應該都了解,新的開發工具最好能使用舊的程式碼,否則以往所寫的運算式或演算法都需改寫的話,就更麻煩且不切實際,利用OCX可將舊c或c 程式改寫并提供給VirtualBasic使用。

  在使用OCX之前必須先將OCX注冊,此范例注冊方式為Regsvr32printer.ocx,并請依圖7所示在VirutualBasic中選取「專案→設定使用元件」,并點取「printerActiveXControlmodual」,printer
ocx程式請參考程式列表1(編注:此程式因過於龐大,請至CADesigner的Homepage上參看),范例中的OCX中只包含一個QueryPrinter()的Method,目地為讀取系統中Printer清單,下面范例將OCX所取得資料顯示在EditBox中。

PrivateSubListPrinter_Click()
PrinterListText.Text=PrnOcx.QueryPrinter
PrinterListText.Refresh
EndSub
程式所有使用的元件清單
元件型態元件名稱
ButtonDrawBox
ButtonWLineDB
ButtonExport2Excel
ButtonListPrinter
ButtonQueryString
ListBoxStringList
EditBoxPrinterListText
OCXPrnOcx

後記

  看過上面的說明您是否也心動於VirtualBasic強大功能,事實上如果好好利用VirtualBasic可以簡易作出以前不易作出的功能,不過如果您非常在乎執行速度,您還是必須使用ARX來開發較為適當,另外Autodesk并未宣布AutoCADR14支援VirtualBasic,因此若您選擇VirtualBasic來開發程式也許會面臨未知的問題,雖然如此但VirtualBasic仍是值得探究的開發工具。->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美三级在线| 日韩亚洲欧美成人| 欧美大全免费观看电视剧大泉洋| 性欧美暴力猛交69hd| 亚洲xxx自由成熟| 亚洲精品国产综合久久| 亚洲视频在线视频| 国产精品一区二区三区毛片淫片| 日韩国产高清视频在线| 亚洲欧洲在线看| 亚洲字幕在线观看| 97色在线观看免费视频| 欧美日韩国内自拍| 日韩免费观看网站| 国产丝袜精品第一页| 国产亚洲一区二区精品| 亚洲开心激情网| 国产精品无码专区在线观看| 国产a级全部精品| 亚洲免费视频网站| 久久精品国产视频| 日韩中文字幕不卡视频| 一区二区欧美亚洲| 欧美三级欧美成人高清www| 色无极影院亚洲| 成人精品久久一区二区三区| 91爱视频在线| 在线观看日韩视频| 91亚洲国产成人精品性色| 日韩欧美成人免费视频| 国产专区欧美专区| 国产综合视频在线观看| 91精品久久久久久久久不口人| 国产午夜精品一区理论片飘花| 亚洲自拍欧美色图| 成人午夜激情免费视频| 深夜成人在线观看| 亚洲精品一区中文| 午夜精品一区二区三区av| 国产精品第一区| 欧美精品www在线观看| 亚洲欧洲午夜一线一品| 青青草国产精品一区二区| 日韩精品在线播放| 成人欧美一区二区三区黑人孕妇| 欧美巨大黑人极品精男| 欧美做受高潮电影o| 亚洲一区免费网站| 国产午夜精品美女视频明星a级| 欧美亚洲国产精品| 成人亚洲激情网| 综合网中文字幕| 精品欧美国产一区二区三区| 国产精品99蜜臀久久不卡二区| 久久精品国产成人| 国外成人免费在线播放| 午夜免费久久久久| 精品综合久久久久久97| 亚洲精品视频在线观看视频| 欧美极度另类性三渗透| 欧美成人剧情片在线观看| 欧美性jizz18性欧美| 亚洲精品黄网在线观看| 国产精品草莓在线免费观看| 免费不卡欧美自拍视频| 成人黄色生活片| 午夜精品久久久久久久99热| 不卡av在线播放| 北条麻妃在线一区二区| 久久躁狠狠躁夜夜爽| 亚洲专区在线视频| 热99精品只有里视频精品| 九色精品美女在线| 亚洲成人1234| 全球成人中文在线| 亚洲人成亚洲人成在线观看| 欧洲成人午夜免费大片| 国产97人人超碰caoprom| zzijzzij亚洲日本成熟少妇| 欧美巨猛xxxx猛交黑人97人| 九九九热精品免费视频观看网站| 成人中心免费视频| 97精品一区二区视频在线观看| 亚洲欧洲偷拍精品| 久久久99免费视频| 亚洲高清在线观看| 欧美大片免费观看| 国产精品入口尤物| 色先锋资源久久综合5566| 亚洲成人亚洲激情| 欧美激情视频免费观看| 亚洲欧美日韩网| 国产精品入口免费视频一| 亚洲综合精品伊人久久| 亚洲视频在线观看免费| 亚洲在线一区二区| 欧美一区二区三区艳史| 成人精品久久一区二区三区| 欧美黑人狂野猛交老妇| 深夜精品寂寞黄网站在线观看| 播播国产欧美激情| 亚洲第一网站免费视频| 国产精品久久久久福利| 亚洲第一区中文99精品| 亚洲精品综合精品自拍| 国产精品男人的天堂| 国产在线视频欧美| xxxx欧美18另类的高清| 在线视频欧美日韩精品| 国产一区二区三区在线视频| 国产精品一区二区三区成人| 日韩视频免费中文字幕| 亚洲最大成人免费视频| 亚洲3p在线观看| 国产精品久久久久久久av大片| 欧美国产日产韩国视频| 国产精品劲爆视频| 午夜精品蜜臀一区二区三区免费| 欧美乱大交做爰xxxⅹ性3| 中文字幕亚洲欧美日韩高清| 久久精品免费播放| 亚洲成人aaa| 亚洲欧美日韩中文在线| 美女国内精品自产拍在线播放| 91久久嫩草影院一区二区| 青青久久av北条麻妃黑人| 国产精品一区二区在线| 精品国产精品三级精品av网址| 中文字幕免费精品一区| 美女久久久久久久久久久| 午夜欧美不卡精品aaaaa| 影音先锋日韩有码| 欧美视频免费在线观看| 久久久免费精品| 亚洲激情视频在线播放| 国产在线精品成人一区二区三区| 热久久这里只有| 精品美女永久免费视频| 国外日韩电影在线观看| 亚洲美女av在线播放| 国产一区二区三区四区福利| 91色精品视频在线| 国内精品模特av私拍在线观看| 国外成人免费在线播放| 国产91精品黑色丝袜高跟鞋| 日韩美女视频免费看| 欧美日韩国产精品一区二区不卡中文| 亚洲精品美女久久久| 亚洲男人天天操| 久久精品视频网站| 国产精品久久91| 国产精品第七影院| 日本精品视频网站| 69av在线视频| 在线免费观看羞羞视频一区二区| 亚洲三级黄色在线观看| 欧美裸体xxxx| 久久人人爽人人爽人人片av高清| 亚洲黄色www网站| 午夜精品福利在线观看| 日韩电影免费观看在线| 一本色道久久综合狠狠躁篇的优点| 亚洲综合成人婷婷小说| 欧美精品亚州精品|