|
|

楼主 |
发表于 2012-4-4 09:33:50
|
显示全部楼层
来自: 中国广东珠海
本帖最后由 woaishuijia 于 2012-4-4 11:17 编辑 # O) b6 [; V( X. V
2 H/ d- x: e( B) E l3 g首先感谢斑斑大人一大早的悉心解答,你说的第二个思路很好,不用选择集,直接使用块的insertPoint属性获取插入点坐标。我又学到了一招,呵呵。我修改了一下代码,现在可以按照坐标计算后来取得blockB的插入坐标,但是存在一个问题,换算后的坐标实际上和blockA的左上顶点坐标有出入(y方向出入0.72,虽然很小,但是显得不够严谨),因为我是用下面这个坐标换算得出的blockB插入点的:
* \7 [) h5 M, s- pNew(0) = P(0) - 5001 M4 s, \% E$ d4 h' Q% c
- pNew(1) = P(1) + 1405.8
8 v, i4 ], F) U5 { - pNew(2) = P(2)
复制代码
2 m5 Z/ @$ u9 y& }- G! R, u+ `我知道出现问题的原因可能是精度问题,所以再请问斑斑大人,可不可以让程序实现在插入blockB的时候,系统通过捕捉blockA左上角顶点来实现呢?
$ }; [+ L! w' z" z1 Q' x3 i就是Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)这一句中,pNEW如果能是系统通过顶点捕捉后自动产生的坐标数据,而不要是我通过换算后的坐标。7 A) Y8 V7 X R5 L) ? O
谢谢版主( _$ n$ j/ I5 s! Z4 c9 Q4 x3 l3 w7 u
4 h) v* O$ K. b* L
, I- ~, m) `0 \% J; P
- Private Sub cmdInsert_Click()
X+ J) E8 n/ k) p% U; M% u" X0 \ - Dim ptInsert(2) As Double7 S- W5 h" F, C8 L3 j
- Dim lastBlock As Variant
# d! v$ {% e# b* j - ptInsert(0) = 0
8 C2 L- f+ s7 p5 g - ptInsert(1) = 0, A! O# P4 R9 J3 {* x
- ptInsert(2) = 0
* b9 u; Y' L z$ D7 y: b1 [ - ! E: r3 G0 T3 B7 w$ A/ T; p
- '----------插入块A 仅仅一个---------------------------------) J" e: R% r# I
- Dim B As AcadBlockReference '声明一个块参照变量6 I9 X7 j* [0 i+ z
- Dim P As Variant '声明一个变体变量用于接收三维点坐标+ A: \7 `! c W4 \ m$ s
- Set B = ThisDrawing.ModelSpace.InsertBlock(ptInsert, blkAName.Text, 1, 1, 1, 0)
' ]5 l7 r+ q( `# e' s- P4 Z/ E - P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组
7 H% f+ c* m5 m: s+ ]8 c. \! x - '----------插入块A 完成---------------------------------
! j& {5 S' m; [
0 Y/ m6 ^5 ^! N# X2 ` |' Y- '----------插入块B---------------------------------
4 M: J% x# z1 q* t3 r5 | - '第一个块,需要单独插入+ t' c- G9 t+ K- E
- Dim pNew(2) As Double; f* w6 A6 @8 S8 h7 k$ }
- pNew(0) = P(0) - 500& q) z: S g: G/ C7 ]7 R
- pNew(1) = P(1) + 1405.8
" H& x# y; ?2 _. k8 N+ y# e$ r - pNew(2) = P(2)
$ l7 Q7 R$ ?3 I- Q - Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)3 g( _% p) I# `: W5 z7 j
- P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组0 J- d% T8 H, L3 V4 t0 X; R$ {2 m
- ThisDrawing.Regen acActiveViewport+ W" N8 v2 A# i
- End Sub
复制代码 |
|