[测绘制图,画围墙时需要用双线,两条线的线型不同。要求是一路画过去,可以自由选择下一步是用直线还是圆弧。用mline的话就无法画圆弧了,我打算象下边这样用平行线来解决,但总觉得不满意:! N' b ^" F& h- w% B
4 u' Q5 d) d5 e. k* D% `# J1 j
(DEFUN C:test() 8 [/ S4 ^) b" k& \
+ w' i9 x. l1 q6 h4 q" o* q
;指定第一条线的层和线型:, M/ ~7 u( D, p& G
(setvar "clayer" "wall")(setvar "celtype" "wq2012")
/ t. `* z: W& V" v
5 ^' q4 d& N x. A* c# J;输入宽度:+ v, M/ k* D. m* V% j! j7 z
(setq th (getreal "输入墙厚度:(默认为0.5):"))$ v, k' r6 L) p
2 {4 t" m# W9 _4 E& G2 d
;先画一条边线:
W& G6 ~$ W1 [1 q5 t. m(command "pline" ); n& k3 D0 R% v! P0 c
* m/ C3 {% M- B) N$ |+ S
;判断是否还处于pline中:
8 Y2 S+ n3 O, c- |, w(while (= (getvar "CMDACTIVE") 1) (command pause))( K p' M' I9 ^& o3 {
6 x3 L- U" A9 I0 H$ }1 X! U3 @- U J;作平行线,如果前边th没有输入则默认为0.5:9 p ^6 w1 S5 }* i- J
(setq a (vlax-ename->vla-object (entlast)))2 z2 D' r8 R* g* D$ S+ H+ P
(if (= nil th) (vla-offset a -0.5) (vla-offset a (- th)))
. C% \! [* E, x; p! e# \! j$ Z# _8 F5 M9 Q( a! f4 G& C
;选择刚做好的平行线,然后更改线型:! J+ {( V' l2 Y# C2 @& M! H
4 N4 t( p! s/ _4 ^, d1 V
(setq b (entlast)) E+ u8 k' H% _! v! e
(command "chprop" b "" "lt" "continuous" "")+ T- e# Z0 | J( i
! j* S G M( B' S, Q* Q/ v( A
)6 H4 v! O: w1 x$ l0 i V a
) W; g) c" k7 B$ l& T
现在问题还有两个:第一是,我希望第一条线,就是用pline做的那条线是打散的,不知道做好了平行线之后,该如何回头去选择这条线;第二个问题是我如何封闭这两条平行线的头和尾呢?是否要调用lastpoint和lastangle这两个参数,但不知道如何去弄。小弟刚开始学lisp,纯属菜鸟,请大家帮帮忙。
) c% n8 Q0 R% H% d$ J$ l- s3 @6 Q, H
[ 本帖最后由 mandala 于 2010-12-12 13:04 编辑 ] |