国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

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仍是值得探究的開發工具。->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 云南省| 惠州市| 皋兰县| 玉门市| 尼木县| 齐河县| 化州市| 南平市| 封开县| 浏阳市| 珠海市| 临朐县| 新晃| 怀宁县| 澄城县| 都昌县| 麻江县| 疏附县| 黔南| 千阳县| 陵川县| 农安县| 吉木乃县| 北辰区| 得荣县| 霍城县| 互助| 鹤壁市| 拜泉县| 呈贡县| 太谷县| 乌兰察布市| 漾濞| 徐州市| 波密县| 马山县| 肥乡县| 台湾省| 巴马| 宜兰市| 凉城县|