|
|

楼主 |
发表于 2012-4-4 09:33:50
|
显示全部楼层
来自: 中国广东珠海
本帖最后由 woaishuijia 于 2012-4-4 11:17 编辑 7 V$ Z0 h, Q: q' ^& m h
6 ^2 X9 x8 y+ X4 Q4 t( {4 P首先感谢斑斑大人一大早的悉心解答,你说的第二个思路很好,不用选择集,直接使用块的insertPoint属性获取插入点坐标。我又学到了一招,呵呵。我修改了一下代码,现在可以按照坐标计算后来取得blockB的插入坐标,但是存在一个问题,换算后的坐标实际上和blockA的左上顶点坐标有出入(y方向出入0.72,虽然很小,但是显得不够严谨),因为我是用下面这个坐标换算得出的blockB插入点的:/ m( R6 _- e( M' Q+ y, _ n- |
- pNew(0) = P(0) - 500
& }' _4 }- y4 A - pNew(1) = P(1) + 1405.8% I9 H6 r2 A: J$ Y
- pNew(2) = P(2)
复制代码
, P+ E' K0 S, @0 C' n# R8 i我知道出现问题的原因可能是精度问题,所以再请问斑斑大人,可不可以让程序实现在插入blockB的时候,系统通过捕捉blockA左上角顶点来实现呢?7 W$ g# s: Z4 c0 x
就是Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)这一句中,pNEW如果能是系统通过顶点捕捉后自动产生的坐标数据,而不要是我通过换算后的坐标。
6 K4 G* J7 S# q0 \谢谢版主0 C7 u( ~5 F4 E# r, X# I2 i
, }2 j8 A$ B3 l, P# z p
4 K* N$ C7 m) _2 e- Private Sub cmdInsert_Click()
' ?: v7 p$ R4 V - Dim ptInsert(2) As Double3 y5 D; y* F2 m$ d, q
- Dim lastBlock As Variant
' N0 u1 s" d& a. } - ptInsert(0) = 06 }' D9 n1 `6 F3 E; y: e5 R
- ptInsert(1) = 0
& N, H. g* X- l7 O# E8 l - ptInsert(2) = 01 z1 w# [, K n% y+ A8 w
9 {" F7 r ?6 F( ~! D0 r8 F. D) }5 r- '----------插入块A 仅仅一个---------------------------------
* |1 H& ^- f) Q - Dim B As AcadBlockReference '声明一个块参照变量1 }7 a# `; K4 F' w6 u6 T. C
- Dim P As Variant '声明一个变体变量用于接收三维点坐标
4 d9 F2 ?# s: l+ y4 P+ s& k - Set B = ThisDrawing.ModelSpace.InsertBlock(ptInsert, blkAName.Text, 1, 1, 1, 0). a a7 Y9 k+ O% W
- P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组
1 h; d: ]4 K. \) R0 P - '----------插入块A 完成---------------------------------( P* J7 Y4 f/ z% i
, J# {* h3 ], ~- '----------插入块B---------------------------------& i; A7 A+ ]4 I. j( i( D
- '第一个块,需要单独插入
* o3 O+ O" N: z* Q - Dim pNew(2) As Double( R4 ]4 B' ^( y
- pNew(0) = P(0) - 500
. J. [1 P9 r8 z! |5 c - pNew(1) = P(1) + 1405.8
7 f* k$ @! }) J5 d - pNew(2) = P(2)/ y, g; F& f9 x
- Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)
' b( i' [' W0 X R) U4 x( Q - P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组
7 P! M7 K) ^5 `( o) p& `) t - ThisDrawing.Regen acActiveViewport+ o! ?8 F: ]9 P! ]
- End Sub
复制代码 |
|