|
楼主 |
发表于 2012-4-4 09:33:50
|
显示全部楼层
本帖最后由 woaishuijia 于 2012-4-4 11:17 编辑
& _! v" ?9 Y) ~/ C, I
6 s' E* x% _ g首先感谢斑斑大人一大早的悉心解答,你说的第二个思路很好,不用选择集,直接使用块的insertPoint属性获取插入点坐标。我又学到了一招,呵呵。我修改了一下代码,现在可以按照坐标计算后来取得blockB的插入坐标,但是存在一个问题,换算后的坐标实际上和blockA的左上顶点坐标有出入(y方向出入0.72,虽然很小,但是显得不够严谨),因为我是用下面这个坐标换算得出的blockB插入点的:
/ _) C* I) W8 ]) _$ c- pNew(0) = P(0) - 500! u9 ^& C) ]: V; ~
- pNew(1) = P(1) + 1405.86 L. k0 N$ O" a1 ?
- pNew(2) = P(2)
复制代码 % g7 N; {+ b4 t( H8 B
我知道出现问题的原因可能是精度问题,所以再请问斑斑大人,可不可以让程序实现在插入blockB的时候,系统通过捕捉blockA左上角顶点来实现呢?
8 w. @! _# v f# @9 ]/ J, q就是Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)这一句中,pNEW如果能是系统通过顶点捕捉后自动产生的坐标数据,而不要是我通过换算后的坐标。
7 X- O. G0 B9 K谢谢版主* b! Y) @, A3 j% D) W
~2 v5 n; b, o( E: w
H# I; m( i$ j
- Private Sub cmdInsert_Click()
4 U0 b; d3 E7 R - Dim ptInsert(2) As Double
7 H, G$ r# X- q! W' `+ r0 W - Dim lastBlock As Variant
4 w4 e1 ^! ~. C* {4 t3 Q5 ~( L - ptInsert(0) = 0
. u1 ^: p3 R, [8 D - ptInsert(1) = 0 x/ @- k/ {2 s5 a
- ptInsert(2) = 0
1 M% y; b1 \7 ~* j1 \; c - 8 w8 F- y+ w5 I; _
- '----------插入块A 仅仅一个---------------------------------/ I! ]5 z1 ~8 b Y& J
- Dim B As AcadBlockReference '声明一个块参照变量& y) E6 R) f& k/ C" G; T3 e ]
- Dim P As Variant '声明一个变体变量用于接收三维点坐标3 P. W: B: v4 z- d
- Set B = ThisDrawing.ModelSpace.InsertBlock(ptInsert, blkAName.Text, 1, 1, 1, 0)
( Z7 p. B4 O( X- [2 Z4 @9 _ - P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组
8 O' Y( f* Q& R$ H) L" h - '----------插入块A 完成---------------------------------
0 N9 m: G5 M7 P2 y8 ` - 9 s, q" u) g' P; J2 U5 K/ _. V
- '----------插入块B---------------------------------* [# Y) i- O$ q9 }, N0 V1 E
- '第一个块,需要单独插入
( b5 c( C9 Q6 `; `* H9 j6 ?5 I0 X' B - Dim pNew(2) As Double2 v* b" O' W3 v" X' g
- pNew(0) = P(0) - 500. p2 w/ G2 p' r( J2 {. v! A' Y
- pNew(1) = P(1) + 1405.8" E2 {8 k# G" M8 |0 f
- pNew(2) = P(2)2 T' T! G& S/ D' j$ z3 z7 i
- Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)/ W) y' D4 @8 E) G Q3 h
- P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组3 s5 w& }% R, A5 I3 U
- ThisDrawing.Regen acActiveViewport
2 M+ R, S6 B5 @5 e( Z - End Sub
复制代码 |
|