你當(dāng)前的位置>>主頁>>AutoCAD知識>>專題教程
 

Autocad VBA初級教程(第十三課 塊操作)

    定義塊方法:

Set blocksobj=ThisDrawing.Blocks.Add(基點(diǎn), 塊名)
把選擇集加入塊中的方法:
ThisDrawing.CopyObjects(選擇集,塊)
插入塊方法:
ThisDrawing.ModelSpace.InsertBlock(插入點(diǎn),塊名, X軸比例,Y軸比例,Z軸比例, 旋轉(zhuǎn)角度)
畫塊屬性方法:
ThisDrawing.ModelSpace.AddAttribute(文字高度,模式,提示字符, 插入點(diǎn), 顯示字符,默認(rèn)值)
一共有五種模式,在輸入時會有提示,其中最常用的是“acAttributeModeNormal”普通模式


下面的例題是利用屬性塊畫足球場的陣型圖。
程序畫出一個球員塊,然后把塊寫到用戶指定位置,球員號碼由程序自動遞增,把球員姓名改為用戶輸入值。畫足球場請參閱上一課內(nèi)容。

 


編程思路:
1.定義一個空塊
2.在塊中畫一段弧(球服衣領(lǐng))
3.畫多段線,鏡像畫出球衣
4.畫塊屬性,由于塊屬性默認(rèn)的對齊方式是左對齊,而球員號碼應(yīng)該居中,所以必須把塊的對齊屬性改為居中。但是當(dāng)這個屬性更改時塊屬性對齊點(diǎn)會自動歸零,所以不得不再次更改對齊點(diǎn)屬性
5.把多段線和屬性復(fù)制到塊中
6.提示用戶點(diǎn)選球員位置和姓名
7.插入塊,修改球衣號碼屬性、球員姓名屬性

以下是源碼,附有詳細(xì)的注釋,如果有疑問,建議用變量跟蹤法研究一下。
Sub team()
Dim playerlay As AcadLayer '定義球員圖層
Dim playerblock As AcadBlock '定義塊變量
Dim arcc(0 To 2) As Double '圓弧圓心
Dim linep1(0 To 2) As Double '線條端點(diǎn)1
Dim linep2(0 To 2) As Double '線條端點(diǎn)2
Dim pline(0 To 20) As Double '定義隊(duì)服右側(cè)多段線7個頂點(diǎn)
Dim basep(0 To 2) As Double '塊基點(diǎn)
Dim playernumberpoint(0 To 2) As Double '塊屬性插入點(diǎn)
Dim mytxt As AcadTextStyle '定義mytxt變量為文本樣式
Dim blockRef As AcadBlockReference '定義塊屬性變量
Dim Attr3 As Variant '插入塊屬性變量

Set playerblock = ThisDrawing.Blocks.Add(basep, "球員") '定義一個"球員"的塊

arcc(0) = 0
arcc(1) = 430
Call playerblock.AddArc(arcc, 50, ThisDrawing.Utility.AngleToReal(180, 0), 0) '畫弧并加入塊中

pline(0) = 0
pline(1) = 20

pline(3) = 100
pline(4) = 20

pline(6) = 100
pline(7) = 250

pline(9) = 125
pline(10) = 207

pline(12) = 212
pline(13) = 257


pline(15) = 112
pline(16) = 430


pline(18) = 50
pline(19) = 430

Set line1 = ThisDrawing.ModelSpace.AddPolyline(pline) '畫隊(duì)服右側(cè)多段線

linep2(1) = 1 '鏡像軸第二點(diǎn)位于Y軸上任一點(diǎn)
Set line2 = line1.Mirror(linep1, linep2) '鏡像獲得另一半多段線

Dim p(0 To 2) As Double '定義坐標(biāo)變量
Set mytxt = ThisDrawing.TextStyles.Add("mytxt") '添加mytxt樣式
mytxt.fontFile = "c:\windows\fonts\simfang.ttf" '設(shè)置字體文件為仿宋體
ThisDrawing.ActiveTextStyle = mytxt '將當(dāng)前文字樣式設(shè)置為mytxt

playernumberpoint(0) = 0 '塊屬性位置
playernumberpoint(1) = 200
Set attr1 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "號碼", playernumberpoint, "X", 0) '畫塊屬性
attr1.Alignment = 7 '居中
attr1.TextAlignmentPoint = playernumberpoint '重定義對齊點(diǎn)
Set attr2 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "姓名", playernumberpoint, "???", 0) '畫塊屬性
attr2.Alignment = 7 '居中


Dim objCollection(0 To 3) As Object '創(chuàng)建選擇集
Set objCollection(0) = line1 '線條1加入選擇集
Set objCollection(1) = line2 '線條2加入選擇集
Set objCollection(2) = attr1 '屬性1加入選擇集
Set objCollection(3) = attr2 '屬性2加入選擇集

Call ThisDrawing.CopyObjects(objCollection, playerblock) '把選擇集加入塊中

For Each element In objCollection '在選擇集中進(jìn)行循環(huán)
  element.Delete '刪除線條和屬性(此操作并不影響已創(chuàng)建的塊)
Next


Set playerlay = ThisDrawing.Layers.Add("球員") '新建圖層
playerlay.color = 2 '為黃色
ThisDrawing.ActiveLayer = playerlay '將當(dāng)前圖層設(shè)置為球員圖層

Dim p1 As Variant '塊插入點(diǎn)位置

For i = 1 To 11 '插入塊
  pstring = CStr(i) & "號球員位置:"
  p1 = ThisDrawing.Utility.GetPoint(, pstring) '點(diǎn)選球員位置坐標(biāo)
  nstring = ThisDrawing.Utility.GetString(30, "球員姓名:")
  Set blockRef = ThisDrawing.ModelSpace.InsertBlock(p1, "球員", 1, 1, 1, 0) '插入塊
  Attr3 = blockRef.GetAttributes '獲取塊屬性
  Attr3(0).TextString = CStr(i) '賦值球員號碼
  Attr3(1).TextString = nstring '賦值球員姓名
Next

End Sub

本課思考題:
1、在本課例程的最后一段增加出錯陷阱代碼,當(dāng)用戶輸入非正常數(shù)值時退出程序
2、畫一個簡易路燈塊,用屬性塊做為路燈編號,由用戶點(diǎn)選路燈位置,程序畫路燈時自動為路燈編號.

本教程共13頁    第  [1]  [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]  [12]  13  頁
民眾工作室.制作      版權(quán)所有