转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
使用VBA访问块和块引用数据         ★★★★

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:780 更新时间:2009/4/23 15:43:20
 
 
使用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 

目录

  • 绪论 
  • 创建应用程序界面 
  • 创建一个块 
    • 将图元添加到块中 
    • 在模型空间中插入块
  • 访问块和块引用对象 
    • 访问块对象 
    • 访问块引用
  • 修改块中的对象
绪论 

可以使用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


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台