|

楼主 |
发表于 2012-4-4 09:33:50
|
显示全部楼层
来自: 中国广东珠海
本帖最后由 woaishuijia 于 2012-4-4 11:17 编辑 & w% [( A9 x/ y2 x+ G' O
2 Q( o' o* i' e5 K4 O3 F: L2 X, _* Z首先感谢斑斑大人一大早的悉心解答,你说的第二个思路很好,不用选择集,直接使用块的insertPoint属性获取插入点坐标。我又学到了一招,呵呵。我修改了一下代码,现在可以按照坐标计算后来取得blockB的插入坐标,但是存在一个问题,换算后的坐标实际上和blockA的左上顶点坐标有出入(y方向出入0.72,虽然很小,但是显得不够严谨),因为我是用下面这个坐标换算得出的blockB插入点的:2 q9 Y4 b3 O: Z+ _& U" d ]
- pNew(0) = P(0) - 500
# S/ `" s8 ^2 W3 D7 f$ F( j; L0 q0 k- A - pNew(1) = P(1) + 1405.8
! v% v& b! t$ b1 }) N9 b - pNew(2) = P(2)
复制代码 : @' x2 T& {+ q6 r; ]( U
我知道出现问题的原因可能是精度问题,所以再请问斑斑大人,可不可以让程序实现在插入blockB的时候,系统通过捕捉blockA左上角顶点来实现呢?
, J% L! T9 x) T! e7 n* H6 y就是Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)这一句中,pNEW如果能是系统通过顶点捕捉后自动产生的坐标数据,而不要是我通过换算后的坐标。& K6 H9 E ?! {4 r/ ]
谢谢版主
" L* w% e' i2 d/ ^% ~% O- ^8 s* W) Q# x8 f/ M) C" }
, O; b1 p; B* j. ]# \, C
- Private Sub cmdInsert_Click() F9 J6 c& [% h
- Dim ptInsert(2) As Double( P# F) K1 l" M5 G5 F0 o* ?* O4 c0 N5 v
- Dim lastBlock As Variant
3 w- I- u" A4 r- G, o' N - ptInsert(0) = 09 S0 F1 v2 D7 Z" \- w
- ptInsert(1) = 0& `5 C, z: B/ d" M8 O s
- ptInsert(2) = 05 |2 o# ?% _% {' t: R
- h% G6 W: |8 x8 b- Y5 B
- '----------插入块A 仅仅一个---------------------------------
7 r- [+ ?; t& q - Dim B As AcadBlockReference '声明一个块参照变量9 Z; R% v8 i: q' |9 t! X
- Dim P As Variant '声明一个变体变量用于接收三维点坐标
2 A# s4 v8 {& z7 g. G( n" f8 b# U - Set B = ThisDrawing.ModelSpace.InsertBlock(ptInsert, blkAName.Text, 1, 1, 1, 0)
0 V5 V, n) e& \ - P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组3 K% Z2 _/ G/ U# g3 p. D' U5 g% m
- '----------插入块A 完成---------------------------------+ s! j; T; j. V& {8 e7 k5 [
- ( ?& H$ I' D+ y: D
- '----------插入块B---------------------------------4 C5 L7 }% u; Q3 s! p, i+ |
- '第一个块,需要单独插入+ c+ j, e6 a; K* C
- Dim pNew(2) As Double; S/ X& T3 P0 R0 M0 w' Q
- pNew(0) = P(0) - 500
( E+ `1 f) D# a8 F$ ?: B - pNew(1) = P(1) + 1405.8) e9 Q# q$ y2 K
- pNew(2) = P(2)
* H- V1 K' I. [ - Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)7 c% D6 O$ q r, b, ]
- P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组
- z9 a5 P) f& t. Q, C - ThisDrawing.Regen acActiveViewport" q) P) y. f- ]0 e
- End Sub
复制代码 |
|