分享
 
 
 

使用VBA访问块和块引用数据

王朝vb·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

BODY { BACKGROUND-COLOR: #ffffff; COLOR: #000000 } TD { FONT-FAMILY:

Arial,Helvetica,sans-serif; FONT-SIZE: 11pt; LINE-HEIGHT: 14pt; COLOR: #000000} .normal { FONT-FAMILY:

Arial,Helvetica,sans-serif; FONT-SIZE: 11pt; LINE-HEIGHT: 14pt; COLOR: #000000}

.p1 { font-size: 10pt; line-height:13pt; font-family: 宋体;}

.p2 { font-size: 9pt; line-height:13pt; font-family: 宋体;}

.p3 { font-size: 12pt; line-height:16pt; font-family: 宋体;}

.p4 { font-size: 14pt; line-height:18pt; font-family: 宋体;}

.title

{ FONT-WEIGHT: bold } .subTitle { } .author { } .tocHeader { FONT-WEIGHT:

bold } .toc { } .tocDisabled { COLOR: #999999 } .summary { } .body

{ BACKGROUND-COLOR: #ffffff; COLOR: #000000; FONT-FAMILY: Arial,Helvetica,sans-serif;

FONT-SIZE: 10pt } .header { FONT-WEIGHT: bold; FONT-SIZE: 16pt} .subHeader { FONT-STYLE:

italic; ; FONT-SIZE: 14pt } .intro { FONT-SIZE: 12pt } .caption { FONT-SIZE: 8pt } .quote

{ FONT-STYLE: italic; FONT-WEIGHT: bold } .footer { COLOR: #666666;

FONT-SIZE: 9pt } .fileDescr { COLOR: #aaaaaa; FONT-SIZE: 8pt } .bold

{ FONT-WEIGHT: bold }

使用VBA访问块和块引用数据

摘要: 本文叙述如何使用VBA(Visual Basic for Applications)访问块和块引用数据。

产品

版本

操作系统

AutoCAD (R)

2000

Windows 95, Windows 98, Windows NT 4.0

相关文档:

关键词:

VBA BLOCK MODEL SPACE PAPER SPACE ACCESS REFERENCE DATA

文档编号:

TD105102.DOC

使用范围:

API, Customization

修订时间:

September 30, 1999

目录

[/url][url=http://www.adskchina.com/support/chs/techdoc/autocad/autocad2000/cd/td105102.htm#P75_1311]绪论

[/url][url=http://www.adskchina.com/support/chs/techdoc/autocad/autocad2000/cd/td105102.htm#P84_2013]创建应用程序界面

[/url][url=http://www.adskchina.com/support/chs/techdoc/autocad/autocad2000/cd/td105102.htm#P137_3246]创建一个块

将图元添加到块中

在模型空间中插入块

[/url][url=http://www.adskchina.com/support/chs/techdoc/autocad/autocad2000/cd/td105102.htm#P174_4418]访问块和块引用对象

访问块对象

访问块引用

[/url][url=http://www.adskchina.com/support/chs/techdoc/autocad/autocad2000/cd/td105102.htm#P242_7428]修改块中的对象 绪论

可以使用VBA来管理块和块引用。

一个块是关联在一起的一个对象集,将其作为单独的对象定义的过程称为块定义。当在图中插入一个块,就产生了一个块引用。即块引用引用了块定义。了解块定义和块引用的区别是非常重要的,因为这将帮助你明白在VBA中如何操纵这些对象。

我们通过注释一个演示该过程的小程序来解释如何区别和操纵块定义和块引用。以下章节使用被注释的代码实例来演示如何使用VBA访问块(块定义)和块引用数据。

创建应用程序界面

假设你已经使用下列控件定义了一个VBA的主窗口。

名为lstBlockObject的列表框

名为lstBlockReference的列表框

名为cmdCreateBlock的命令按钮

名为cmdLister的命令按钮

名为cmdChangeColor的命令按钮 创建一个模块并添加下列声明。

'块集合

Public blkColl As AcadBlocks

'块对象

Public BlkObj As AcadBlock

'块引用对象

Public BlkRefrence As AcadBlockReference

'模型空间集合

Public mspace As AcadModelSpace

'图纸空间集合

Public pspace As AcadPaperSpace

Public count As Integer

Public I As Integer

Public elem As Object

Public subelem As Object

'块插入点

Public blkInsPnt (0 To 2) As Double

Public circleObj As AcadCircle

'圆心点

Public center(0 To 2) As Double

'圆半径

Public radius As Double

Public lineObj as AcadLine

'线段起点

Public startPnt (0 To 2) As Double

'线段终点

Public endPnt (0 To 2) As Double

在窗口的初始化事件中添加下列声明。

'返回模型空间集合

Set mspace = ThisDrawing.ModelSpace

'返回图纸空间集合

Set pspace = ThisDrawing.PaperSpace

'返回块集合

Set blkColl = ThisDrawing.Blocks

创建一个块

要创建一个块引用,首先必须创建一个块定义(块),且要使用“Add”方式。创建块之后,可以使用“InsertBlock”方式在图中插入块的一个样本。在这个例子中,我们在模型空间中创建一个块,它由一个圆和一条线段组成。

在cmdCreateBlock按钮的单击事件程序中加入下列代码。

blkInsPnt(0) = 0#: blkInsPnt(1) = 0#: blkInsPnt(2) = 0#

'将块添加到块集合中

Set BlkObj = blkColl.Add(blkInsPnt, "NewBlock")

将图元添加到块中

本节提供将图元添加到块中的代码范例。

添加圆

center(0) = 0#: center(1) = 0#: center(2) = 0#

radius = 1

'将圆添加到块中

Set circleObj = BlkObj.AddCircle(center, radius)

添加线段

startPnt(0) = 1#: startPnt(1) = 1#: startPnt(2) = 0#

endPnt(0) = 5#: endPnt(1) = 5#: endPnt(2) = 0#

'将线段添加到块中

Set lineObj = BlkObj.AddLine(startPnt, endPnt)

在模型空间中插入块

下列代码示例如何在模型空间中插入块。

Set BlkRefrence = mspace.InsertBlock(blkInsPnt, "NewBlock", 1#, 1#, 1#, 0)

'放大块

ZoomExtents

访问块和块引用对象

VBA通过ThisDrawing对象提供了到当前AutoCAD进程中激活图形的链接。通过使用ThisDrawing可以立即访问当前文档及其所有的方法、属性以及文档中其他所有对象。

要访问块,查找ThisDrawing对象;要访问块引用,查找模型空间集合或图纸空间集合。

访问块对象

现在需要扫描块集合,返回块名并将它们放入lstBlockObject列表框中。这里有两种扫描块集合的方法。

可以使用索引来扫描块集合。一旦知道了块集合中包含了多少项,就可以使用For.Next条件循环。要实现上述功能,在cmdLister命令按钮的单击事件程序中添加下述代码。

'返回在块集合中块的数量

count = blkColl.count

'清空列表框

lstBlockObject.Clear

'创建块列表

For I = 0 To count - 1

lstBlockObject.AddItem blkColl.Item(I).Name

Next

lstBlockObject.ListIndex = 0

注意:一个有N个项的集合,索引从0到N-1。

然而,一个更好的方法是使用For Each.In.Next条件循环。例如,下列语句对集合中的每一个对象或阵列中的每一个元素重复执行一个语句块。每次循环执行时VBA自动设置一个变量。因此可以用下面的例子重写上面的代码。

'清空列表框

lstBlockObject.Clear

'创建块列表

For Each elem in ThisDrawing.Blocks

lstBlockObject.AddItem elem.Name

Next

lstBlockObject.ListIndex = 0

通过使用这种代码,可以

减少操作步骤。

增强代码的可读性。

减少自定义变量。

减少错误检查的工作量(例如,条件语句的范围控制)。

使编程风格更简洁。 访问块引用

要返回相似的图元,就要完成相似的操作;但不是搜索块集合,而是搜索AutoCAD激活文档的模型空间或图纸空间集合。要实现上述功能,在cmdLister的单击事件程序中添加下列代码。

'清空列表框

lstBlockReference.Clear

'创建块列表

'扫描模型空间集合

For Each elem In mspace

'筛选出块引用

If elem.EntityName = "AcDbBlockReference" Then

lstBlockReference.AddItem elem.Name

End If

Next

lstBlockReference.ListIndex = 0

这时,每次单击Create block按钮,在lstBlockObject列表框中只有一个名为NEWBLOCK的块。而一个名为NEWBLOCK的块引用被添加到lstBlockReference列表框中。因为创建一个新的块引用,所以增加了一个新的块引用。

注意:即使块引用与现有的块引用同名,但句柄不同。对于AutoCAD来说,它们是不同的对象。

修改块中的对象

不用分解块也可以在块中修改对象。要实现此功能,必须进入块对象,返回要修改的对象并改变它的属性。下列代码示例将线段的颜色属性改为绿色。

在cmdChangeColor按钮的单击事件程序中添加下列代码:

扫描块集合

For Each elem In blkColl'搜寻要修改的块

If elem.Name = "NewBlock" Then

'扫描块图元

For Each subelem In elem

'寻找线段

If subelem.EntityName = "AcDbLine" Then

'分配一个新的颜色r

subelem.Color = acRed

End If

Next

End If

Next

'刷新图形

ThisDrawing.Regen True<?PRE

这些代码改变了名称为NEWBLOCK的所有块引用中的线段的颜色属性。发生的真实情况是,这些代码改变了块对象中线段的颜色属性,同时也更新了块引用,因为它们引用的是块对象。

声明:在Autodesk产品支持技术文档中列出的要点、技巧、范例和建议,只是Autodesk对用户的建议,由用户自己承担使用风险。Autodesk对文档的修改无须征求用户同意。对于用户由于使用Autodesk产品技术支持文档而产生的不良后果,Autodesk将不负责任。

C) 版权所有 2001 Autodesk, Inc. 保留所有权利 未经许可不得复制.

Autodesk 版权和注册商标信息 | 个人信息条例 | 联络 Autodesk

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有