|

楼主 |
发表于 2012-4-4 09:33:50
|
显示全部楼层
来自: 中国广东珠海
本帖最后由 woaishuijia 于 2012-4-4 11:17 编辑
2 N; p7 I/ l5 O" x5 y8 ]; F5 \# f' Q3 P) I
首先感谢斑斑大人一大早的悉心解答,你说的第二个思路很好,不用选择集,直接使用块的insertPoint属性获取插入点坐标。我又学到了一招,呵呵。我修改了一下代码,现在可以按照坐标计算后来取得blockB的插入坐标,但是存在一个问题,换算后的坐标实际上和blockA的左上顶点坐标有出入(y方向出入0.72,虽然很小,但是显得不够严谨),因为我是用下面这个坐标换算得出的blockB插入点的: @, h0 Z1 x# O9 \/ A
- pNew(0) = P(0) - 500) h2 B b# v! o/ D2 z6 v
- pNew(1) = P(1) + 1405.8
. @% K) a M! x* I- i* X; } - pNew(2) = P(2)
复制代码
" K9 G" o. h& t我知道出现问题的原因可能是精度问题,所以再请问斑斑大人,可不可以让程序实现在插入blockB的时候,系统通过捕捉blockA左上角顶点来实现呢?
: n3 k1 f4 T* W1 T$ H) M7 d; m) ]就是Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)这一句中,pNEW如果能是系统通过顶点捕捉后自动产生的坐标数据,而不要是我通过换算后的坐标。
0 d; l2 p/ ~1 o5 N谢谢版主$ }* x) ]9 \, P8 N
7 ^; ]8 p( t& r3 [; i! c
4 L3 K* J( Z0 y0 U- Private Sub cmdInsert_Click()
% H; w3 g8 p, \& I T/ B - Dim ptInsert(2) As Double7 f1 P8 ^- o1 I: g
- Dim lastBlock As Variant+ M, I: `3 J4 x. e
- ptInsert(0) = 0
3 J2 f5 z4 R8 J8 Y$ R! |/ M0 r. L - ptInsert(1) = 08 o5 i. V. ]. y( m
- ptInsert(2) = 0
: S# A; v! F# p
7 q1 _: `, ]5 v3 I- '----------插入块A 仅仅一个---------------------------------" m. o' V z( w/ R* l% ^2 W! b
- Dim B As AcadBlockReference '声明一个块参照变量4 m- T. j2 _2 N. R/ y. A' F" ^: L
- Dim P As Variant '声明一个变体变量用于接收三维点坐标
$ A8 N6 T& T9 R9 K$ I9 Q2 \ - Set B = ThisDrawing.ModelSpace.InsertBlock(ptInsert, blkAName.Text, 1, 1, 1, 0)) f) Q1 x9 r' |% `& a. l, I! E
- P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组+ w7 m9 l+ K! s5 c! x) p
- '----------插入块A 完成---------------------------------; H# {9 {5 Z. l% \
% B- I8 D1 I$ I s- '----------插入块B---------------------------------
7 L$ I7 i% u7 y. a' \0 M1 M& E1 C - '第一个块,需要单独插入
6 J& h8 b# V4 p, I! X8 F - Dim pNew(2) As Double: c& `/ c: c5 D0 U( g; Q) A1 a! q* E
- pNew(0) = P(0) - 500
! s& M* k0 A( a" `" Q1 w0 d1 t - pNew(1) = P(1) + 1405.8
. v( y) D6 Q+ d& M2 | - pNew(2) = P(2)
6 E# D: E+ O" q7 J/ @( b2 Y - Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)
( M; O# B* _! w - P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组! f) M; J+ S9 f0 e
- ThisDrawing.Regen acActiveViewport
+ `- L9 j, v1 X - End Sub
复制代码 |
|