[测绘制图,画围墙时需要用双线,两条线的线型不同。要求是一路画过去,可以自由选择下一步是用直线还是圆弧。用mline的话就无法画圆弧了,我打算象下边这样用平行线来解决,但总觉得不满意:4 ~7 K0 _* l3 J% Z8 R% W% @
9 Q( F& u5 ~4 v h: p% _6 t& a
(DEFUN C:test() . n& ]* M1 Z1 _
; V0 }) L5 ?1 K0 w7 N3 D( C
;指定第一条线的层和线型:7 V! R! W3 D- n O
(setvar "clayer" "wall")(setvar "celtype" "wq2012")
# H, }% G* u) @$ o# w- ~1 P% u" i, o- L4 O% B' J/ w
;输入宽度:# A3 t3 d, \, D1 Q1 }
(setq th (getreal "输入墙厚度:(默认为0.5):"))
/ g; f9 ]6 C2 p; S) Z& w4 T, N& B5 L# J7 s, i
;先画一条边线:: \: w+ b: M' |% H4 l8 \, f
(command "pline" )
, F0 W# }3 l6 `. N+ ?3 D+ |: b5 {% @1 p- z- I
;判断是否还处于pline中:
$ f0 O# ?$ `1 b; L(while (= (getvar "CMDACTIVE") 1) (command pause))' Y6 T+ x- F& p/ V) \
: U4 f! X0 I# _9 }( x/ U! Z;作平行线,如果前边th没有输入则默认为0.5:
6 t6 _ ?# R* J$ B8 X3 b: Z(setq a (vlax-ename->vla-object (entlast))); k G1 j6 s& V: {" H% ~
(if (= nil th) (vla-offset a -0.5) (vla-offset a (- th)))
" n9 |/ b, B/ ?1 |2 P$ ^: g- u0 s- `1 |. B7 Z j, l
;选择刚做好的平行线,然后更改线型:+ C* |: T6 w' s9 @2 Z9 N
+ j3 v6 c* [2 W5 Z$ ](setq b (entlast))/ i# k6 v) Z0 w) k- P* X) E/ i
(command "chprop" b "" "lt" "continuous" "")
. e* I3 l% C+ H$ v: A1 Q
- E8 ^+ t; Y& r# V)6 {6 H% |9 K# M' ^' ~' L+ t6 _0 f
: G) v* u7 Q* n+ }/ h1 H
现在问题还有两个:第一是,我希望第一条线,就是用pline做的那条线是打散的,不知道做好了平行线之后,该如何回头去选择这条线;第二个问题是我如何封闭这两条平行线的头和尾呢?是否要调用lastpoint和lastangle这两个参数,但不知道如何去弄。小弟刚开始学lisp,纯属菜鸟,请大家帮帮忙。) Z3 S' k% g: H8 U1 o
8 z; v8 g) y8 O/ q- E
[ 本帖最后由 mandala 于 2010-12-12 13:04 编辑 ] |