|
|

楼主 |
发表于 2012-4-4 09:33:50
|
显示全部楼层
来自: 中国广东珠海
本帖最后由 woaishuijia 于 2012-4-4 11:17 编辑 / S+ I8 ?" S5 S
1 Z/ Z$ v- S7 o/ X' ~+ {; ]# ~; }
首先感谢斑斑大人一大早的悉心解答,你说的第二个思路很好,不用选择集,直接使用块的insertPoint属性获取插入点坐标。我又学到了一招,呵呵。我修改了一下代码,现在可以按照坐标计算后来取得blockB的插入坐标,但是存在一个问题,换算后的坐标实际上和blockA的左上顶点坐标有出入(y方向出入0.72,虽然很小,但是显得不够严谨),因为我是用下面这个坐标换算得出的blockB插入点的:
9 g6 V, X. u: ^/ B- O; A; @- pNew(0) = P(0) - 500
5 l1 X3 m; J7 I. D& E' |# n0 J( S - pNew(1) = P(1) + 1405.8
2 e9 q# g/ m- \# Z0 U0 w, j8 q - pNew(2) = P(2)
复制代码
7 j" i: p" m( X5 f6 T" L* {6 c我知道出现问题的原因可能是精度问题,所以再请问斑斑大人,可不可以让程序实现在插入blockB的时候,系统通过捕捉blockA左上角顶点来实现呢?" V" `0 l" c) r
就是Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)这一句中,pNEW如果能是系统通过顶点捕捉后自动产生的坐标数据,而不要是我通过换算后的坐标。
+ N6 q! a* r6 I3 W. \谢谢版主
, X! j, T1 O7 Y/ k7 M( O0 D/ Q6 z7 {( V+ |
+ K8 u$ r* B& ^. p6 y- W
- Private Sub cmdInsert_Click()
( |, E) L2 {2 a A: @3 v - Dim ptInsert(2) As Double
c, ^/ ]! r; X5 E; O - Dim lastBlock As Variant
% H4 Z$ k0 e# o" g! X2 K4 w - ptInsert(0) = 0
& `- s3 f" U F$ i2 A - ptInsert(1) = 0- N3 g9 Q G, g, Q! n& Y; U9 Z( w
- ptInsert(2) = 0
9 Z8 o1 u, i* B% E# g
* t k: B; q: q+ u! l7 ^' T d- '----------插入块A 仅仅一个---------------------------------
6 C/ r. D7 f! r) _4 A8 y' }8 ~ - Dim B As AcadBlockReference '声明一个块参照变量2 v# n# P% R! C
- Dim P As Variant '声明一个变体变量用于接收三维点坐标1 q% [6 v0 p A6 b7 Y5 C2 c
- Set B = ThisDrawing.ModelSpace.InsertBlock(ptInsert, blkAName.Text, 1, 1, 1, 0) y5 o8 G$ N% B
- P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组
$ F6 n0 P3 u: n( C - '----------插入块A 完成---------------------------------# F" q$ J# I, S3 T& A$ `& } V
8 p. W0 @6 Q6 y% n. h- b- '----------插入块B---------------------------------
# r& x9 ^1 h+ T+ y. _( s - '第一个块,需要单独插入
( P1 X M" Z& ^- ~ U8 F% U - Dim pNew(2) As Double) ?, G+ z+ o! I0 R" u# t7 F. a
- pNew(0) = P(0) - 500
: h0 _8 g0 H3 R$ A - pNew(1) = P(1) + 1405.88 b6 S' H, [& G8 T5 C t* j
- pNew(2) = P(2)
5 M% v% n @8 M% W9 g/ l) ?, [4 y - Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)
6 I( T7 A6 ]* x1 y1 q# k" X8 r0 p( h6 b - P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组. Z4 R8 U) \5 V. t6 g; q$ P
- ThisDrawing.Regen acActiveViewport" O) S0 x# m1 p2 A4 [3 s4 I8 L
- End Sub
复制代码 |
|