|
|

楼主 |
发表于 2012-4-4 09:33:50
|
显示全部楼层
来自: 中国广东珠海
本帖最后由 woaishuijia 于 2012-4-4 11:17 编辑
4 ]6 j* P9 n, {7 y! x! v
% ~* J4 b) ~3 ^9 U首先感谢斑斑大人一大早的悉心解答,你说的第二个思路很好,不用选择集,直接使用块的insertPoint属性获取插入点坐标。我又学到了一招,呵呵。我修改了一下代码,现在可以按照坐标计算后来取得blockB的插入坐标,但是存在一个问题,换算后的坐标实际上和blockA的左上顶点坐标有出入(y方向出入0.72,虽然很小,但是显得不够严谨),因为我是用下面这个坐标换算得出的blockB插入点的:+ j' \3 r+ I, {. W6 k( W0 B( _$ f
- pNew(0) = P(0) - 500
/ d1 x& G: J6 w" S$ G$ c* v, B - pNew(1) = P(1) + 1405.8( [8 U; A: O( v, g
- pNew(2) = P(2)
复制代码
8 f: D. H; J3 `$ V( T' w我知道出现问题的原因可能是精度问题,所以再请问斑斑大人,可不可以让程序实现在插入blockB的时候,系统通过捕捉blockA左上角顶点来实现呢?
- p# I1 O( g: Y: v就是Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)这一句中,pNEW如果能是系统通过顶点捕捉后自动产生的坐标数据,而不要是我通过换算后的坐标。
4 O3 r$ X) W/ T$ W谢谢版主
7 ~% |9 G- C8 P. Q, B* a2 F
3 H( a8 e/ ?$ E$ J1 k" p* n
- e( x# ?3 i" N* z6 q- Private Sub cmdInsert_Click()6 J2 _& E& W5 {
- Dim ptInsert(2) As Double
% f0 T4 Y8 f( ~: W5 A% c2 J - Dim lastBlock As Variant* }- f& q; m k2 g4 z
- ptInsert(0) = 0* l$ m1 |- v+ E; v+ g ~( {
- ptInsert(1) = 0
( e$ h, c3 v/ ?" X( R - ptInsert(2) = 0- \$ s( P( c9 y& W, C) Z8 h% F
. r" f7 H9 ~: Z8 i$ o( y2 x- '----------插入块A 仅仅一个---------------------------------( }. ? U6 v5 [8 v* f
- Dim B As AcadBlockReference '声明一个块参照变量
+ k$ b4 t1 Y+ k7 [' H/ \; j/ U) C# ~ - Dim P As Variant '声明一个变体变量用于接收三维点坐标
9 W+ A$ \1 l6 s( \( F( C - Set B = ThisDrawing.ModelSpace.InsertBlock(ptInsert, blkAName.Text, 1, 1, 1, 0): N( }6 _' S* f0 ~- o2 o3 q$ `
- P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组
6 E( I: i2 \2 Y+ Z7 I: |, k - '----------插入块A 完成---------------------------------
0 ?! ]8 q0 Y @& Z- Q, P( _
' Z) c2 O8 e0 Q4 o$ \: b& C- '----------插入块B---------------------------------0 J+ p9 z, t' d1 V" [% H3 _
- '第一个块,需要单独插入
. z' h C) k& ?) D, p" u - Dim pNew(2) As Double
) G6 f5 ?. \5 z4 Z8 m- }5 E - pNew(0) = P(0) - 500
9 a- m; c( g0 a7 `' J+ ]5 @! O - pNew(1) = P(1) + 1405.8
- D- i9 A6 O3 o8 H) { - pNew(2) = P(2)! ~: Z4 @3 W% w, Y7 p' Z
- Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)
% ~+ { v. G+ t: Q9 I - P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组9 \$ \, X8 r, j: p
- ThisDrawing.Regen acActiveViewport
; u& N8 g! w d - End Sub
复制代码 |
|