|

楼主 |
发表于 2012-4-4 09:33:50
|
显示全部楼层
来自: 中国广东珠海
本帖最后由 woaishuijia 于 2012-4-4 11:17 编辑
+ T7 a8 k. S7 w1 @. L, X% f
* X. K. |+ R0 a9 B7 v9 M5 c首先感谢斑斑大人一大早的悉心解答,你说的第二个思路很好,不用选择集,直接使用块的insertPoint属性获取插入点坐标。我又学到了一招,呵呵。我修改了一下代码,现在可以按照坐标计算后来取得blockB的插入坐标,但是存在一个问题,换算后的坐标实际上和blockA的左上顶点坐标有出入(y方向出入0.72,虽然很小,但是显得不够严谨),因为我是用下面这个坐标换算得出的blockB插入点的:
0 {1 d' {' Y; n+ e; ?7 z% h- U- pNew(0) = P(0) - 500& N/ s3 ~: S# w: T+ X/ \" {
- pNew(1) = P(1) + 1405.8
: |( Y5 \( @' D5 r% n1 _0 C - pNew(2) = P(2)
复制代码
' W! l& t" w4 ]8 I7 J( q @我知道出现问题的原因可能是精度问题,所以再请问斑斑大人,可不可以让程序实现在插入blockB的时候,系统通过捕捉blockA左上角顶点来实现呢?1 m: ^: b8 A2 B5 m! e% W: Z; ^! f' ]
就是Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)这一句中,pNEW如果能是系统通过顶点捕捉后自动产生的坐标数据,而不要是我通过换算后的坐标。' j$ s3 U$ O1 X9 p
谢谢版主8 q3 [" _) o/ b" b
8 ?! }. i" i! w# l4 y
" D; `2 D/ S9 [5 A5 I5 i6 M1 I- Private Sub cmdInsert_Click()7 Y8 _3 Y( O- P
- Dim ptInsert(2) As Double
+ W y g3 E) A: Y; x0 R1 b - Dim lastBlock As Variant
; o) f/ h9 ]7 ]- A4 F, m, E( l - ptInsert(0) = 0
# w# B! Y: M4 J4 ~* O - ptInsert(1) = 0
3 E! k, p7 X. B% _ d - ptInsert(2) = 0
7 e. E, H& c4 k' x$ _7 |
& ]& ^9 U" j- p- v- r4 J- '----------插入块A 仅仅一个---------------------------------& X3 t) i) \; T* k, h. w
- Dim B As AcadBlockReference '声明一个块参照变量
; T- E, }# _/ [+ I" N g% c5 u - Dim P As Variant '声明一个变体变量用于接收三维点坐标* H! r0 F/ a' V% l
- Set B = ThisDrawing.ModelSpace.InsertBlock(ptInsert, blkAName.Text, 1, 1, 1, 0)
1 W% H$ y+ T1 l- H' [ - P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组/ C, B/ q- }7 }! E
- '----------插入块A 完成---------------------------------# m4 ` d9 O" B; R: c
- 8 [) v/ h( ]& L% x
- '----------插入块B---------------------------------" e8 o5 n* X9 ^& m- [
- '第一个块,需要单独插入
3 _6 I- g, [$ q) n( g6 J7 n - Dim pNew(2) As Double1 [% T1 d4 j S% | @
- pNew(0) = P(0) - 500: b" Q: s* L) w5 c, z0 i% B* m7 Z
- pNew(1) = P(1) + 1405.82 O, J2 N# g! H7 g$ A* A' W
- pNew(2) = P(2)9 s& J6 k) ]& i2 |5 d# M
- Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)$ p: A, Q8 W n. j. F
- P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组: a; H7 K, |9 G9 N y
- ThisDrawing.Regen acActiveViewport
! ] s: y+ @; J$ Z* [ - End Sub
复制代码 |
|