|
|

楼主 |
发表于 2012-4-4 09:33:50
|
显示全部楼层
来自: 中国广东珠海
本帖最后由 woaishuijia 于 2012-4-4 11:17 编辑
c. [1 f: ^+ Y( K0 A
. M# H- [- _9 e7 ?2 A& t' @* n首先感谢斑斑大人一大早的悉心解答,你说的第二个思路很好,不用选择集,直接使用块的insertPoint属性获取插入点坐标。我又学到了一招,呵呵。我修改了一下代码,现在可以按照坐标计算后来取得blockB的插入坐标,但是存在一个问题,换算后的坐标实际上和blockA的左上顶点坐标有出入(y方向出入0.72,虽然很小,但是显得不够严谨),因为我是用下面这个坐标换算得出的blockB插入点的:
0 D) D% e/ n5 U+ G, G- pNew(0) = P(0) - 500
% B7 U d5 [$ L, p: @- V8 G - pNew(1) = P(1) + 1405.86 w2 [4 s& X8 R4 l2 R
- pNew(2) = P(2)
复制代码 : s3 z/ u" C, u* u/ @
我知道出现问题的原因可能是精度问题,所以再请问斑斑大人,可不可以让程序实现在插入blockB的时候,系统通过捕捉blockA左上角顶点来实现呢?
4 X1 w! M' `+ g0 M+ c, q1 D+ X就是Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)这一句中,pNEW如果能是系统通过顶点捕捉后自动产生的坐标数据,而不要是我通过换算后的坐标。
* A1 p# I# X V5 f谢谢版主! U+ D7 f. _! X$ M% c
" t) J; [5 E2 z: R8 p+ z# T9 F& l( |
! z) F1 O7 Z+ O6 t0 n& o- e- Private Sub cmdInsert_Click()
$ z% K) x! ]0 y( o2 j. n2 j: X7 L - Dim ptInsert(2) As Double
2 z' I6 \; [8 b$ ] - Dim lastBlock As Variant
! f, ]9 w" l( u5 G+ s - ptInsert(0) = 0# S# a3 O5 K3 W
- ptInsert(1) = 0
; p5 c9 B& S3 ^- Z9 a - ptInsert(2) = 0) X4 z# k" O' Z/ H7 G
- - ^2 V' h- ^6 ?; W" {
- '----------插入块A 仅仅一个---------------------------------
8 z, f* e2 \* ^ - Dim B As AcadBlockReference '声明一个块参照变量8 |, u3 @3 D( |9 @
- Dim P As Variant '声明一个变体变量用于接收三维点坐标
$ q, |! l* s2 X# k4 u/ S" ~ a - Set B = ThisDrawing.ModelSpace.InsertBlock(ptInsert, blkAName.Text, 1, 1, 1, 0)2 A5 Q: e; N# d. w
- P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组
k; R& V% F) I3 ~) _ - '----------插入块A 完成---------------------------------; E7 A1 Z6 P+ y, f8 q
( p0 `# k6 t6 B; V7 X u/ W) }- '----------插入块B---------------------------------
z+ r# {6 A9 S% E! v5 ? - '第一个块,需要单独插入
0 q" _- _+ h, ^1 ^ L3 z/ q - Dim pNew(2) As Double/ T) Q! o* l: l7 N, ^2 w/ X* Z# ?
- pNew(0) = P(0) - 500
6 d. I; G0 d# W1 g7 H - pNew(1) = P(1) + 1405.84 I* K: {( U2 r v8 e3 p1 \) t# P9 L
- pNew(2) = P(2)+ {; Q. o7 P7 ^, B1 c
- Set B = ThisDrawing.ModelSpace.InsertBlock(pNew, blkBName.Text, 1, 1, 1, 0)
& `& f: P& }! |" f0 X5 H% c* n8 O - P = B.InsertionPoint '提取上一步插入的块参照的插入点坐标,返回值是三元素双精度数组
7 ?# t; ^8 j( N - ThisDrawing.Regen acActiveViewport# O( N( m7 k, j1 Q! r. B/ [
- End Sub
复制代码 |
|