leex 发表于 2008-12-7 13:08

动态块问题,求一具体画法

对一个40X40的正方形进行缩放,要求缩放点在正方形的中心,缩放为无尺寸限制的自由缩放。并且缩放后标注边长,将所得尺寸以表格形式显示,每次缩放后表格内显示的尺寸会自动更新为最新正方形尺寸。

truezx 发表于 2008-12-7 22:44

你这个动态块前半部分要实现不是很难,DIMASSOC=2,画一个正方形,标注,然后将正方形和标注一起做成块,加一个“线性参数”,就是正方形的边长,然后加入一个“缩放动作”,完成动态块,然后你可以任意拖动改变正方形边长,标注也跟者变。

后半部分要将尺寸以表格的形式显示就不知道你什么意思了,是否改变一次边长,就记录一次?

leex 发表于 2008-12-8 14:09

意思是在图的旁边加个表格,里面是我标注的尺寸,在缩放图后尺寸不是改变了吗?那表格里的尺寸也自动更新了.

馋猫咪 发表于 2008-12-8 20:25

truezx版主是做动态块的高手,肯请做一个教程来让大家学习,leex要求表里数据随着动态块变。:P :victory:

truezx 发表于 2008-12-8 23:20

回复 #4 馋猫咪 的帖子

完全不会做表格的数据随动态块变......

woaishuijia 发表于 2008-12-9 15:59

赞同二楼的方法。在动态块中添加线性标注并与正方形关联,使其文字与图元同步变化。关掉标注的尺寸线和尺寸界线,可以看起来更像是独立的文字。也可以用外框将文字包裹起来,成为一个“伪”表格。
如果要求将CAD表格对象的数据与动态块内图元的尺寸关联并实时更新,用CAD常规方法办不到,只能通过二次开发编程实现。
附件中是一个2004格式DWG文件,其中含有VBA程序。打开文件时,CAD可能会警告文件含有“宏”,不要怕,不是病毒,请选择“启用宏”(否则看不到效果)。模型空间有一个动态块(一个可以通过拉伸夹点缩放的正方形)和一个CAD表格,拉伸动态块夹点时,表格内的数据会与正方形的边长同步变化。
本例程仅供参考。

truezx 发表于 2008-12-9 17:35

回复 #6 woaishuijia 的帖子

十分感谢您的解答

有个问题,我下载了你的附件后,将你的动态块在块编辑器里打开,就移动了一下位置,然后保存退出,动态块仍然可以缩放,但是表格的数据却不再随着变化了..........

woaishuijia 发表于 2008-12-10 12:51

回复 #7 truezx 的帖子

下面是附件中的代码
Private Sub AcadDocument_ObjectModified(ByVal Object As Object) '在thisdrawing对象的代码模块声明一个事件过程,当文档被修改时执行其中的代码
    Dim S As AcadSelectionSet, T As Object, P As AcadLWPolyline
    If Object.Handle = "2D67C" Then '当被修改的对象为指定的动态块中的正方形时执行下面的代码。"2D67C"是本文档中该正方形的句柄
      Set S = ThisDrawing.SelectionSets.Add("SS") '新建选择集并选择屏幕上所有对象
      S.Select acSelectionSetAll
      For Each T In S '遍历选择集
            If T.Handle = "2D4EC" Then '找到指定的CAD表格时执行下面的代码。"2D4EC"是本文档中该表格的句柄
                Set P = Object
                T.SetText 1, 0, P.Coordinates(1) * 2 '在表格第二行(索引值1)第一列(索引值0)写入正方形边长。正方形边长为左上角Y坐标值乘以2
                Exit For '退出遍历循环
            End If
      Next
      S.Delete '删除用过的选择集
    End If
End Sub
这个程序是简陋的,只有基本的功能,用于提示用VBA解决楼主问题的可行的途径。
程序中动态块与表格的关联关系是固定的,仅限于指定的文档中现存的对象。如果是编制一个实用程序,则代码中应该有设置关联关系的内容。另外,为了追求代码简单,程序中使用了文档层事件,这是一种低效率的做法,会明显影响到CAD的响应速度。
楼上在编辑动态块后表格不再响应,是因为对图形界面现有动态块参照的更新,实质上是CAD用新参照代替了旧的参照。也就是说,在更新块参照后,原先的、包含句柄为"2D67C"的正方形的动态块参照已被CAD删除了,而由CAD插入的新参照在图形界面缩放时,这个简陋的程序并不知道这个参照是用来代替原先的参照的,所以代码的核心部分并未被执行。

truezx 发表于 2008-12-10 15:08

回复 #8 woaishuijia 的帖子

十分感谢!!!

wlsdg 发表于 2009-4-10 20:35

学习中!不会做,看来要抓紧了!
页: [1]
查看完整版本: 动态块问题,求一具体画法