CAD设计论坛

 找回密码
 立即注册
论坛新手常用操作帮助系统等待验证的用户请看获取社区币方法的说明新注册会员必读(必修)
查看: 1934|回复: 9

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

[复制链接]
发表于 2008-12-7 13:08 | 显示全部楼层 |阅读模式
对一个40X40的正方形进行缩放,要求缩放点在正方形的中心,缩放为无尺寸限制的自由缩放。并且缩放后标注边长,将所得尺寸以表格形式显示,每次缩放后表格内显示的尺寸会自动更新为最新正方形尺寸。
发表于 2008-12-7 22:44 | 显示全部楼层
你这个动态块前半部分要实现不是很难,DIMASSOC=2,画一个正方形,标注,然后将正方形和标注一起做成块,加一个“线性参数”,就是正方形的边长,然后加入一个“缩放动作”,完成动态块,然后你可以任意拖动改变正方形边长,标注也跟者变。
( }8 l  ]) S9 i+ S. ]6 m1 s
) a2 k% V3 e/ D; l, g后半部分要将尺寸以表格的形式显示就不知道你什么意思了,是否改变一次边长,就记录一次?
 楼主| 发表于 2008-12-8 14:09 | 显示全部楼层
意思是在图的旁边加个表格,里面是我标注的尺寸,在缩放图后尺寸不是改变了吗?那表格里的尺寸也自动更新了.
发表于 2008-12-8 20:25 | 显示全部楼层
truezx版主是做动态块的高手,肯请做一个教程来让大家学习,leex要求表里数据随着动态块变。
发表于 2008-12-8 23:20 | 显示全部楼层

回复 #4 馋猫咪 的帖子

完全不会做表格的数据随动态块变......
发表于 2008-12-9 15:59 | 显示全部楼层
赞同二楼的方法。在动态块中添加线性标注并与正方形关联,使其文字与图元同步变化。关掉标注的尺寸线和尺寸界线,可以看起来更像是独立的文字。也可以用外框将文字包裹起来,成为一个“伪”表格。
0 M9 {( F4 i# S  I8 }' Q如果要求将CAD表格对象的数据与动态块内图元的尺寸关联并实时更新,用CAD常规方法办不到,只能通过二次开发编程实现。$ w# _& b' ]* M& A  y! @4 G7 O
附件中是一个2004格式DWG文件,其中含有VBA程序。打开文件时,CAD可能会警告文件含有“宏”,不要怕,不是病毒,请选择“启用宏”(否则看不到效果)。模型空间有一个动态块(一个可以通过拉伸夹点缩放的正方形)和一个CAD表格,拉伸动态块夹点时,表格内的数据会与正方形的边长同步变化。
3 F3 t9 S/ L" ], _0 t2 r本例程仅供参考。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发表于 2008-12-9 17:35 | 显示全部楼层

回复 #6 woaishuijia 的帖子

十分感谢您的解答. X9 m5 _/ L7 a+ j
$ Z7 g% U2 Z2 F, x; n* ^
有个问题,我下载了你的附件后,将你的动态块在块编辑器里打开,就移动了一下位置,然后保存退出,动态块仍然可以缩放,但是表格的数据却不再随着变化了..........
发表于 2008-12-10 12:51 | 显示全部楼层

回复 #7 truezx 的帖子

下面是附件中的代码
" v5 d' E$ f1 s& E6 R6 d& [# T
  1. Private Sub AcadDocument_ObjectModified(ByVal Object As Object) '在thisdrawing对象的代码模块声明一个事件过程,当文档被修改时执行其中的代码$ U3 X  o: W2 L7 f  ?0 M; Y& |, \
  2.     Dim S As AcadSelectionSet, T As Object, P As AcadLWPolyline: z0 e0 z8 e# M& N. [5 O& r
  3.     If Object.Handle = "2D67C" Then '当被修改的对象为指定的动态块中的正方形时执行下面的代码。"2D67C"是本文档中该正方形的句柄+ J% O0 e% l5 i$ t1 P7 k; k3 g0 v
  4.         Set S = ThisDrawing.SelectionSets.Add("SS") '新建选择集并选择屏幕上所有对象
    2 b. d  ]7 G3 {6 b1 G/ D
  5.         S.Select acSelectionSetAll
    / ]8 `" B. i3 Y7 w$ b6 d
  6.         For Each T In S '遍历选择集7 f9 ~* H8 E0 w1 i5 L
  7.             If T.Handle = "2D4EC" Then '找到指定的CAD表格时执行下面的代码。"2D4EC"是本文档中该表格的句柄
    ) ?" Y1 K0 j: `5 p7 G% I+ T
  8.                 Set P = Object( Q  P. ^2 p9 r& x  Q5 N* o
  9.                 T.SetText 1, 0, P.Coordinates(1) * 2 '在表格第二行(索引值1)第一列(索引值0)写入正方形边长。正方形边长为左上角Y坐标值乘以2
    , z* M# |- I8 R. u7 a
  10.                 Exit For '退出遍历循环# X9 w4 V5 o8 m  L
  11.             End If
    : K! F. U% N7 N. i7 N: T( v8 N
  12.         Next( c9 V: ]* f) L- I" t. W+ W. k4 e
  13.         S.Delete '删除用过的选择集$ w4 _, S9 S2 @+ _
  14.     End If
      }4 g) d, Z' N3 \/ \% n& t
  15. End Sub
复制代码
2 H( D: d7 g8 d- w0 r8 ?
这个程序是简陋的,只有基本的功能,用于提示用VBA解决楼主问题的可行的途径。1 g7 g& ~% @4 _
程序中动态块与表格的关联关系是固定的,仅限于指定的文档中现存的对象。如果是编制一个实用程序,则代码中应该有设置关联关系的内容。另外,为了追求代码简单,程序中使用了文档层事件,这是一种低效率的做法,会明显影响到CAD的响应速度。
8 J$ N4 ^5 _2 {/ k楼上在编辑动态块后表格不再响应,是因为对图形界面现有动态块参照的更新,实质上是CAD用新参照代替了旧的参照。也就是说,在更新块参照后,原先的、包含句柄为"2D67C"的正方形的动态块参照已被CAD删除了,而由CAD插入的新参照在图形界面缩放时,这个简陋的程序并不知道这个参照是用来代替原先的参照的,所以代码的核心部分并未被执行。
发表于 2008-12-10 15:08 | 显示全部楼层

回复 #8 woaishuijia 的帖子

十分感谢!!!
发表于 2009-4-10 20:35 | 显示全部楼层
学习中!不会做,看来要抓紧了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于|免责|隐私|版权|广告|联系|手机版|CAD设计论坛

GMT+8, 2024-11-27 18:00

CAD设计论坛,为工程师增加动力。

© 2005-2024 askcad.com. All rights reserved.

快速回复 返回顶部 返回列表