|
|

楼主 |
发表于 2012-4-4 09:33:50
|
显示全部楼层
来自: 中国广东珠海
本帖最后由 woaishuijia 于 2012-4-4 11:17 编辑 " i' C; C. R) p
$ K+ K2 h& l: l首先感谢斑斑大人一大早的悉心解答,你说的第二个思路很好,不用选择集,直接使用块的insertPoint属性获取插入点坐标。我又学到了一招,呵呵。我修改了一下代码,现在可以按照坐标计算后来取得blockB的插入坐标,但是存在一个问题,换算后的坐标实际上和blockA的左上顶点坐标有出入(y方向出入0.72,虽然很小,但是显得不够严谨),因为我是用下面这个坐标换算得出的blockB插入点的:
, e' x: U* H+ v$ z9 l% k- pNew(0) = P(0) - 500/ b/ U0 j9 ^5 E8 ^! {
- pNew(1) = P(1) + 1405.8, ^; V; t4 k$ k' Z
- pNew(2) = P(2)
复制代码 L* T m$ W9 U& h4 D
我知道出现问题的原因可能是精度问题,所以再请问斑斑大人,可不可以让程序实现在插入blockB的时候,系统通过捕捉blockA左上角顶点来实现呢?
7 f @ W* r3 n. |就是Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)这一句中,pNEW如果能是系统通过顶点捕捉后自动产生的坐标数据,而不要是我通过换算后的坐标。3 K6 O* x2 P# ~7 u; ?3 H* Z
谢谢版主
- p! c+ x, Q d0 A- a$ O' z9 V6 y& o) d9 e
0 U# M, k% S8 O0 f3 j) h; P- Private Sub cmdInsert_Click()
' Q! M! Z! B8 h1 s# U0 t9 @ - Dim ptInsert(2) As Double
" s" X3 ~) T4 o; { - Dim lastBlock As Variant, m3 R! Z( K+ ^
- ptInsert(0) = 0
8 F$ o$ c$ l& b7 X6 [/ z - ptInsert(1) = 0
1 {. ^: \5 j% B/ n+ K; S j - ptInsert(2) = 06 _) N3 O) r+ B! m) g5 a
- . K. O/ |: k$ I* L
- '----------插入块A 仅仅一个---------------------------------0 B' M5 s* Y& Q! p4 U
- Dim B As AcadBlockReference '声明一个块参照变量! r6 E$ V% B1 S ?. o
- Dim P As Variant '声明一个变体变量用于接收三维点坐标" l+ o3 O& ~* F( f$ D$ j% ~# P1 o8 V: F
- Set B = ThisDrawing.ModelSpace.InsertBlock(ptInsert, blkAName.Text, 1, 1, 1, 0); G9 V. U2 Q* X, |; d, P
- P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组1 }% [ k0 d9 q( Y8 n
- '----------插入块A 完成---------------------------------
. J8 P0 N/ ]" p, F+ U' | a - 8 `8 m" I* X! F
- '----------插入块B---------------------------------
& F% g" J d( p9 v" ~, @ - '第一个块,需要单独插入5 a; G; T% s1 S/ c
- Dim pNew(2) As Double
0 E! }! \, X" ?4 X3 E3 C - pNew(0) = P(0) - 500
# T8 ]6 I# v9 H - pNew(1) = P(1) + 1405.80 W/ J. Y& u4 e9 [
- pNew(2) = P(2)$ i2 A* k4 S* v2 |1 {
- Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)
1 h: [1 A. [: f6 a; s, s - P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组
3 a# Z5 R0 H( b/ i* y" h, C - ThisDrawing.Regen acActiveViewport7 j( |9 `& {+ _4 Z$ ]8 {
- End Sub
复制代码 |
|