|

楼主 |
发表于 2012-4-4 09:33:50
|
显示全部楼层
来自: 中国广东珠海
本帖最后由 woaishuijia 于 2012-4-4 11:17 编辑
( g4 I$ y8 }" ?! s2 a3 f
2 |- |; D. A* U. w# L首先感谢斑斑大人一大早的悉心解答,你说的第二个思路很好,不用选择集,直接使用块的insertPoint属性获取插入点坐标。我又学到了一招,呵呵。我修改了一下代码,现在可以按照坐标计算后来取得blockB的插入坐标,但是存在一个问题,换算后的坐标实际上和blockA的左上顶点坐标有出入(y方向出入0.72,虽然很小,但是显得不够严谨),因为我是用下面这个坐标换算得出的blockB插入点的:: F3 P2 C5 z) w8 G
- pNew(0) = P(0) - 5002 V; L% S; G) d: s' W
- pNew(1) = P(1) + 1405.8! F8 y4 J* `/ H8 R. y
- pNew(2) = P(2)
复制代码 % x# N% M% p1 W6 u1 H* v
我知道出现问题的原因可能是精度问题,所以再请问斑斑大人,可不可以让程序实现在插入blockB的时候,系统通过捕捉blockA左上角顶点来实现呢?, D5 V! h6 s' W6 P
就是Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)这一句中,pNEW如果能是系统通过顶点捕捉后自动产生的坐标数据,而不要是我通过换算后的坐标。
. u, x0 V/ k! V2 @* |& f) |谢谢版主
: X# E! \! M' B. _% c( }9 G
! P& V/ J# y) _7 b) y! W. |1 R) E4 { h- a( ~5 @( C3 P- F5 a
- Private Sub cmdInsert_Click(). n! w0 J4 C2 s1 A
- Dim ptInsert(2) As Double. W/ W, w o3 ^# G' w4 J% \
- Dim lastBlock As Variant; P8 S5 W8 F2 e9 a
- ptInsert(0) = 0& j$ B( K5 ~; H$ R5 G" o( Q" {
- ptInsert(1) = 0
/ ^# j3 ~# ~$ ^ x U( A - ptInsert(2) = 0
, k4 M" V9 N* k1 [: ` - 2 L; [& o% N1 V i9 _& E
- '----------插入块A 仅仅一个---------------------------------* \2 `4 T9 v0 u1 c* A, ?
- Dim B As AcadBlockReference '声明一个块参照变量( J6 F# [$ X6 X! F9 @5 U6 y6 O
- Dim P As Variant '声明一个变体变量用于接收三维点坐标
4 f. H* {8 @3 ]2 y7 v6 c$ o2 z - Set B = ThisDrawing.ModelSpace.InsertBlock(ptInsert, blkAName.Text, 1, 1, 1, 0)
, ^! }0 y6 d3 O: I& T) ^ - P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组
0 `! n! A a+ F: \ U( ^ - '----------插入块A 完成---------------------------------
u5 {# V" |! V, n5 H6 p0 g
+ x# [ a& g( f0 D; K. _5 W- '----------插入块B---------------------------------, Y& l: {! V# A8 l6 S
- '第一个块,需要单独插入5 i$ O. p# f) i8 y9 j
- Dim pNew(2) As Double
- m' n1 g! @8 c0 R0 u* m1 }$ M - pNew(0) = P(0) - 500
2 p, s' C: c% f- y - pNew(1) = P(1) + 1405.8
& f k2 w( A2 t& | - pNew(2) = P(2)
3 ^$ I* s9 ^" X+ \ - Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)8 w: y' O v6 u9 }( X. W* x) |
- P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组
" D0 \. [5 ?# h' s& l/ B& k; j% Q - ThisDrawing.Regen acActiveViewport
* ^. R0 x y5 ]: U1 W- P/ V - End Sub
复制代码 |
|