[测绘制图,画围墙时需要用双线,两条线的线型不同。要求是一路画过去,可以自由选择下一步是用直线还是圆弧。用mline的话就无法画圆弧了,我打算象下边这样用平行线来解决,但总觉得不满意:
* X& ? q- a1 ?7 Z3 v) J, z# \$ J! P' \- F& j$ g! i" l1 e
(DEFUN C:test()
5 b2 q5 S! j, g* p. K5 z8 q! s3 p& F" A! W0 h* b' M
;指定第一条线的层和线型:
( f, `% o( @. |# ^- m3 y- L(setvar "clayer" "wall")(setvar "celtype" "wq2012")
. e! J- P; {3 L$ |) A; G7 u
7 _ |% q/ s$ y;输入宽度:$ C( m/ Z- H% b [. O6 g
(setq th (getreal "输入墙厚度:(默认为0.5):"))' }; i# B2 W9 G3 f
, N- d+ n. z, _/ `* Z" r& H, e;先画一条边线:
$ J0 n; E, m) t( y: s(command "pline" )
* O! q1 c9 z* U% A4 @9 P
6 M* f7 f: \" ?6 K) e;判断是否还处于pline中:4 |- P E' ~8 a* v) k' S
(while (= (getvar "CMDACTIVE") 1) (command pause))
7 j) }8 C( a% F
- [' Z6 S7 t* d9 Z. y;作平行线,如果前边th没有输入则默认为0.5:
$ J- n w9 Y8 e1 Z# n(setq a (vlax-ename->vla-object (entlast)))9 ~2 n3 N- Y/ l$ \ x h2 B
(if (= nil th) (vla-offset a -0.5) (vla-offset a (- th)))
/ g0 {' D( x0 T% f( I6 X5 W3 L6 j
; E6 X& j$ \3 X0 f9 f;选择刚做好的平行线,然后更改线型:
4 n! }' w& {! X; i% Q' N2 c8 X, h7 o4 O0 ?& u
(setq b (entlast))
% o& L5 a& H: R, ^3 m# I(command "chprop" b "" "lt" "continuous" "")+ d6 Q9 q7 W: p* s% n1 V
; F9 [, X5 y) X% z1 @
)8 p& e% E5 V2 R$ K. Z
2 Q6 y9 o' s, o3 D: B
现在问题还有两个:第一是,我希望第一条线,就是用pline做的那条线是打散的,不知道做好了平行线之后,该如何回头去选择这条线;第二个问题是我如何封闭这两条平行线的头和尾呢?是否要调用lastpoint和lastangle这两个参数,但不知道如何去弄。小弟刚开始学lisp,纯属菜鸟,请大家帮帮忙。3 I5 x) G+ X V0 c a. I0 c- ~
! `" Z v) s1 i1 u5 A- m5 i[ 本帖最后由 mandala 于 2010-12-12 13:04 编辑 ] |