|
楼主 |
发表于 2012-4-4 09:33:50
|
显示全部楼层
本帖最后由 woaishuijia 于 2012-4-4 11:17 编辑
# w/ J' e6 A2 Z7 f$ e8 s$ ?# Y0 f7 E
首先感谢斑斑大人一大早的悉心解答,你说的第二个思路很好,不用选择集,直接使用块的insertPoint属性获取插入点坐标。我又学到了一招,呵呵。我修改了一下代码,现在可以按照坐标计算后来取得blockB的插入坐标,但是存在一个问题,换算后的坐标实际上和blockA的左上顶点坐标有出入(y方向出入0.72,虽然很小,但是显得不够严谨),因为我是用下面这个坐标换算得出的blockB插入点的:
2 I3 x- Q7 W$ v7 p9 V5 Z: R- pNew(0) = P(0) - 5000 M; Q- g- }. w; ^$ A% l/ P3 @
- pNew(1) = P(1) + 1405.8
7 I8 [9 O) O) M+ _4 i, [; [* H - pNew(2) = P(2)
复制代码 0 m \- s; g" X; X
我知道出现问题的原因可能是精度问题,所以再请问斑斑大人,可不可以让程序实现在插入blockB的时候,系统通过捕捉blockA左上角顶点来实现呢?
9 Y9 N- u3 ^4 F就是Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)这一句中,pNEW如果能是系统通过顶点捕捉后自动产生的坐标数据,而不要是我通过换算后的坐标。
8 E+ P2 c) Z5 q- s; ^" u7 J6 g, O谢谢版主
5 q* p- R1 j4 g7 E7 L% |, l" E _0 W2 {
2 q! A3 X: p# @5 {7 N) M4 \. I. B
- Private Sub cmdInsert_Click()
% W% X+ i* @* E+ V - Dim ptInsert(2) As Double
1 R4 T8 U5 o3 ~0 C- |; c4 ? - Dim lastBlock As Variant
9 M; C$ H1 q* i6 o* K - ptInsert(0) = 0: F( j. Z% ]( _
- ptInsert(1) = 0
4 o0 E Q9 n% e, @! U - ptInsert(2) = 0$ M9 V$ b7 `4 E/ i
- 7 _$ E4 k! c" y, l6 b' t4 E
- '----------插入块A 仅仅一个---------------------------------
/ B. F/ L2 Z; m# Q& A - Dim B As AcadBlockReference '声明一个块参照变量
( G8 c, o, D9 }/ J3 m0 m8 x - Dim P As Variant '声明一个变体变量用于接收三维点坐标/ F2 M& U. h4 H5 w
- Set B = ThisDrawing.ModelSpace.InsertBlock(ptInsert, blkAName.Text, 1, 1, 1, 0)0 ^- P" k9 `8 ~3 ]
- P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组
}& k3 y! a2 K) C' u- d - '----------插入块A 完成---------------------------------8 `! Z. x, |$ u+ {7 M
* C1 m$ w8 J7 _: M) ?) I- '----------插入块B---------------------------------2 K0 J p4 Q' f K+ R
- '第一个块,需要单独插入
( z3 `: S* c0 a$ q, Z" } - Dim pNew(2) As Double6 @+ z( s. s2 t5 ~
- pNew(0) = P(0) - 500- x/ ~* a! Y' e) o* {! s! a0 L
- pNew(1) = P(1) + 1405.8( k2 U+ w, Y7 W% ?7 r7 X8 R. v
- pNew(2) = P(2)4 [7 A/ w' y; w, x
- Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)8 D, M4 {0 Z! N: o
- P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组
& b- R, v# ?3 @0 z- a - ThisDrawing.Regen acActiveViewport0 A" r3 c- c- T3 U0 r6 r% _
- End Sub
复制代码 |
|