|
|

楼主 |
发表于 2012-4-4 09:33:50
|
显示全部楼层
来自: 中国广东珠海
本帖最后由 woaishuijia 于 2012-4-4 11:17 编辑 , v( D: M; B! x+ q
2 D, G: k+ _; t4 C
首先感谢斑斑大人一大早的悉心解答,你说的第二个思路很好,不用选择集,直接使用块的insertPoint属性获取插入点坐标。我又学到了一招,呵呵。我修改了一下代码,现在可以按照坐标计算后来取得blockB的插入坐标,但是存在一个问题,换算后的坐标实际上和blockA的左上顶点坐标有出入(y方向出入0.72,虽然很小,但是显得不够严谨),因为我是用下面这个坐标换算得出的blockB插入点的:
& s3 m+ c+ _4 m# U: S2 U- pNew(0) = P(0) - 500
/ f$ t9 l2 n- z% W - pNew(1) = P(1) + 1405.8
0 y* U$ ^: y1 B+ Q8 I" m7 P$ X, C/ v - pNew(2) = P(2)
复制代码 4 N6 M' n% L8 x4 O
我知道出现问题的原因可能是精度问题,所以再请问斑斑大人,可不可以让程序实现在插入blockB的时候,系统通过捕捉blockA左上角顶点来实现呢?
, ^# m5 l3 T* N就是Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)这一句中,pNEW如果能是系统通过顶点捕捉后自动产生的坐标数据,而不要是我通过换算后的坐标。* Z6 K8 d+ h V( O- _8 ^+ i
谢谢版主1 e& Y/ W2 \8 O7 X2 n9 Q! C2 T
6 U4 B0 C$ I: q& {( m) y" U
0 [/ Y' _. X% W/ Q) n( M- Private Sub cmdInsert_Click()
; m/ ~, j3 p! q- L& P3 }9 M - Dim ptInsert(2) As Double+ ?5 [. p% }9 y2 n& g, n
- Dim lastBlock As Variant1 u: ?# V6 q% A1 [
- ptInsert(0) = 0
4 F' Z) F/ I7 J5 L" d2 b# O% n& E - ptInsert(1) = 0
7 L: ^& H9 Q& o6 m* g9 u3 e# \& I - ptInsert(2) = 0' d- I* F2 j* C: c, E' O/ v" E
Y6 @3 K; G$ h% ]; \- w. f: W/ H- '----------插入块A 仅仅一个---------------------------------
/ f3 r! g/ p. r3 ?: I' ^# v/ b! r - Dim B As AcadBlockReference '声明一个块参照变量) @" T* f1 ]( Q2 [1 a1 {
- Dim P As Variant '声明一个变体变量用于接收三维点坐标# t' `+ e1 O' f% A
- Set B = ThisDrawing.ModelSpace.InsertBlock(ptInsert, blkAName.Text, 1, 1, 1, 0) Y( R+ A/ y# J* L# |0 L1 P
- P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组" L1 m, Z( a1 I% ]' A' K
- '----------插入块A 完成---------------------------------
. S4 @8 b9 @- O' v2 b6 U. W' e z0 e. X - 3 j/ s! H) B+ L5 B/ z
- '----------插入块B---------------------------------
8 J5 o; \ t) }6 X, q+ b- G - '第一个块,需要单独插入
& m _9 a( h3 x) j, F - Dim pNew(2) As Double- @+ H4 X# Z' s' s. e, b) X* k
- pNew(0) = P(0) - 500
4 N4 N d- j# I9 l% z9 m- n% g - pNew(1) = P(1) + 1405.8: H4 S" q5 A( a; {6 [. I5 I
- pNew(2) = P(2)+ S( ?/ i! `9 ]6 `- f
- Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)
' a- W/ Y7 Z. u, ]% C- d - P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组
/ G3 U; w# j8 A0 ~) H" J - ThisDrawing.Regen acActiveViewport' [# X& {# B1 K; K, j- c
- End Sub
复制代码 |
|