[测绘制图,画围墙时需要用双线,两条线的线型不同。要求是一路画过去,可以自由选择下一步是用直线还是圆弧。用mline的话就无法画圆弧了,我打算象下边这样用平行线来解决,但总觉得不满意:# g8 |3 A. \* D- d
4 q0 f' t: |' c1 i
(DEFUN C:test() / l9 v: f4 o6 C0 y7 I1 O
0 s7 {1 M' k$ L, n;指定第一条线的层和线型:
4 z, C, j: E; V4 k l5 Z(setvar "clayer" "wall")(setvar "celtype" "wq2012")
/ m! ? |% b+ D/ o
1 z% {2 {. t" z c; ]+ C' j8 ?# W;输入宽度:
6 X B# ~) J/ f6 E [2 R, D& L(setq th (getreal "输入墙厚度:(默认为0.5):"))
3 @% X; \$ v0 u% m% p# q
F% f) x8 N: x1 f/ u+ l;先画一条边线:
& k9 w' l7 I, X" h) v' `(command "pline" )
4 H4 A% L0 Q0 `. S! G+ ^. |/ `* E
3 o8 c2 K6 P6 }7 @' D5 M% L;判断是否还处于pline中:
3 f- A2 K$ n9 t/ V0 [(while (= (getvar "CMDACTIVE") 1) (command pause)), }4 U& \8 y1 U% v5 q5 Q( d6 V# M$ n
1 X1 Q( B2 R; |;作平行线,如果前边th没有输入则默认为0.5:( C8 |# J+ C! F; r
(setq a (vlax-ename->vla-object (entlast))); D# D% W: P) p$ O4 H: t* T: ~
(if (= nil th) (vla-offset a -0.5) (vla-offset a (- th)))
! ^( u& w6 V: M2 u( g) C, t( W* k" E* [0 `3 d
;选择刚做好的平行线,然后更改线型:$ _' ?7 t" o5 P
; H* g' i, Q1 f. F( _5 i(setq b (entlast)). g% ^1 n W3 n& F4 F7 k
(command "chprop" b "" "lt" "continuous" "")
1 A' F) Z2 q) w0 _# F8 G- i2 Q; t H/ @: n6 t
)6 N c& b5 n2 b
6 ]8 q6 h, r, {- M" W! E
现在问题还有两个:第一是,我希望第一条线,就是用pline做的那条线是打散的,不知道做好了平行线之后,该如何回头去选择这条线;第二个问题是我如何封闭这两条平行线的头和尾呢?是否要调用lastpoint和lastangle这两个参数,但不知道如何去弄。小弟刚开始学lisp,纯属菜鸟,请大家帮帮忙。
8 ~) r- w3 ^/ F- H
^# D7 {, ]3 ?! D[ 本帖最后由 mandala 于 2010-12-12 13:04 编辑 ] |