[测绘制图,画围墙时需要用双线,两条线的线型不同。要求是一路画过去,可以自由选择下一步是用直线还是圆弧。用mline的话就无法画圆弧了,我打算象下边这样用平行线来解决,但总觉得不满意:; i$ z/ b& x1 Q/ V& h7 n
' w9 ] P3 L4 Y/ G/ h) E8 q(DEFUN C:test() $ A: h b# K* D; T6 w
6 _. ~; ?- q6 I! y6 m
;指定第一条线的层和线型:
) T% q C( |; k# U(setvar "clayer" "wall")(setvar "celtype" "wq2012")1 R8 }2 c, X( Q% ?9 m& \+ y
/ y8 |( x0 e T; v- V;输入宽度:
2 X! |9 _) C+ \+ I, J" q# D(setq th (getreal "输入墙厚度:(默认为0.5):"))
: {% X. r2 `6 X4 z! S+ z% u1 L _7 g1 \8 W* Q8 s/ Q. T+ N
;先画一条边线:! r3 I; V) P$ P" @" g) }. n T
(command "pline" )
G @) c# ]/ H* z% T2 Z0 h% ?& t, y3 C) z/ ~- `! f2 g/ l
;判断是否还处于pline中:- j! Q3 o/ H# i# F" K2 F
(while (= (getvar "CMDACTIVE") 1) (command pause))
1 G3 T9 |# e- l8 W* o- ]2 u
* J! ]) W" E( c8 T: j/ ];作平行线,如果前边th没有输入则默认为0.5:0 t( h0 H, J9 M1 B/ L f* E2 E
(setq a (vlax-ename->vla-object (entlast)))5 [. x7 _7 L. q% m- j
(if (= nil th) (vla-offset a -0.5) (vla-offset a (- th)))
4 Q# d8 O3 p4 y( \) \$ Q1 l+ U7 Q3 B7 e# v9 u
;选择刚做好的平行线,然后更改线型:
, ^6 e6 @3 u3 j
! F' y- K0 G9 ?(setq b (entlast))0 i' w2 R9 R( t$ x( Q9 B
(command "chprop" b "" "lt" "continuous" "")
$ E- w, ^) ^5 V# O7 x: s+ Y" Q1 @/ l2 a! F @
)6 r9 ^, ~' x. f1 F) S
/ ] _& x9 a1 e6 T) Q I
现在问题还有两个:第一是,我希望第一条线,就是用pline做的那条线是打散的,不知道做好了平行线之后,该如何回头去选择这条线;第二个问题是我如何封闭这两条平行线的头和尾呢?是否要调用lastpoint和lastangle这两个参数,但不知道如何去弄。小弟刚开始学lisp,纯属菜鸟,请大家帮帮忙。7 k8 H- }; B1 U* p' V) o
9 T& c P$ U. s* s- S6 g
[ 本帖最后由 mandala 于 2010-12-12 13:04 编辑 ] |