|
发表于 2008-10-28 11:23:17
|
显示全部楼层
来自: 中国辽宁营口
楼主的意思是否可以这样理解:模仿CAD的“BLOCK”命令用现有实体创建块?
; f5 ?. t6 V+ R1 f, ]+ p在VBA中可以这样做:2 m8 \# H2 q1 u- [0 f
一、用对话框要求用户输入要创建的块对象的属性(包括块名称、基点等等)、原有实体的处理方法(包括保留、删除、转换为块等)' ~9 i: }3 l2 e- P1 H
二、在用户按下“确定”按钮时判断当前空间是否有选择集,如果有则使用现有选择集;如没有则新建一个选择集并要求用户选择对象# d# v! U" I3 I& J# m( @3 Q
三、如果选择集为空则删除选择集后退出;如选择集不为空则继续向下进行: }, [0 P2 |6 \' f
四、遍历选择集,把其中的实体对象赋值给一个对象类型动态数组7 [4 c' c0 b, h& N# ?% Z+ u
五、删除选择集. b( Z( ]! x! c* a: U6 G2 g" G
六、按用户的设置创建块对象并修改其属性 [$ J" D. }- P: K% y' B
七、用“Document”对象的“CopyObjects”方法,把动态数组中的实体对象集复制到块对象中
- H3 I6 `0 s7 ^, I, t' X八、按用户设置删除原有实体或删除原有实体后在原位置插入块参照或什么也不做(保留)
, l6 T5 J& T/ p' |% v' F
) e& l* b' t( u& ]5 p下面的代码是一个最简单的例子- Dim Objs() As AcadEntity, B As AcadBlock, P(2) As Double, SS As AcadSelectionSet, I As Integer
+ ?0 ?0 F' U% P/ E1 L - With ThisDrawing
4 n0 s# h: j4 w5 V2 I - Set SS = .SelectionSets.Add("SS" ) '新建选择集
# c9 z/ }+ s2 V, n0 ] - SS.SelectOnScreen '由用户在屏幕上选择对象8 L- T0 H2 U" f0 o
- If SS.Count > 0 Then '如果选择集不为空
+ t1 l. p! G" ?2 |" H1 A9 w - ReDim Objs(SS.Count - 1) '按选择集中元素数量重定义动态数组元素个数' l9 C2 B5 g" e5 a" f3 A, C
- For I = 0 To SS.Count - 1 '把选择集中的实体赋值给数组
/ [) t. Y6 E% P- W! A) g - Set Objs(I) = SS.Item(I), ^0 \+ Y9 Q' L* W
- Next8 M( W5 `2 C4 P1 m+ \ u8 Z
- Set B = .Blocks.Add(P, "A" ) '创建块
$ N9 m1 ]7 H1 W - .CopyObjects Objs, B '把实体复制到块中
# j- \, l8 _ L# O( o8 `" g. K - End If
; l. T% e) Y6 t; H% ^7 B - SS.Delete '删除选择集
+ M: k* \# X, ^5 O6 P/ ? - End With
, J# @( a& c- F3 e! }) V- y
复制代码 " P9 |) S0 {- {
[ 本帖最后由 woaishuijia 于 2008-10-28 11:24 编辑 ] |
|