[测绘制图,画围墙时需要用双线,两条线的线型不同。要求是一路画过去,可以自由选择下一步是用直线还是圆弧。用mline的话就无法画圆弧了,我打算象下边这样用平行线来解决,但总觉得不满意:
8 M) P' L s5 b9 l3 i' l: h' @7 | k: k
(DEFUN C:test() 4 V' i+ _! J" x. h; c0 h' x+ S- b
; K* `3 `+ N& Q8 o;指定第一条线的层和线型:
7 R7 i5 q6 ^3 U. u(setvar "clayer" "wall")(setvar "celtype" "wq2012")
% F" n" Z$ a' k( t+ v) ]' e; w( A& Y5 N( G* z u; `
;输入宽度:
6 `3 Z- s+ w4 }* T3 W, @" e9 d3 `(setq th (getreal "输入墙厚度:(默认为0.5):"))% H3 t& G9 t$ ^4 {9 c
/ h: x1 q$ T. X- a9 o8 e;先画一条边线:
1 {( o+ T- R. S; y! H& @# ](command "pline" )
8 Q- n0 c& G1 j2 i6 J. c; d( F+ }2 F0 Z& ~; J
;判断是否还处于pline中:$ K" `5 P, h, s2 e2 Z$ X3 d; g
(while (= (getvar "CMDACTIVE") 1) (command pause))/ e4 P: x9 Z! d$ g$ m
( ?2 k" \8 s2 k. K5 S8 W8 D& A
;作平行线,如果前边th没有输入则默认为0.5:2 S) y. g" M' i8 g6 \5 R c
(setq a (vlax-ename->vla-object (entlast)))4 y5 E q, F6 O8 Z( M3 _5 u Q
(if (= nil th) (vla-offset a -0.5) (vla-offset a (- th))) % p( y I- ~) [+ Z; b' [
0 v( n. x* E7 O
;选择刚做好的平行线,然后更改线型:
* B6 I, w4 Z$ T* V9 t# p& U5 A& n
) R' ^5 ?/ r4 U/ j(setq b (entlast))
; l4 [" O9 Z+ X6 l9 C" G(command "chprop" b "" "lt" "continuous" "")( m8 K/ A% G% _+ ~4 C, x) }+ B% j- D, l
1 I% b% X' E2 j) w2 H; H4 V. t6 q
( L2 o; B. R1 M2 }现在问题还有两个:第一是,我希望第一条线,就是用pline做的那条线是打散的,不知道做好了平行线之后,该如何回头去选择这条线;第二个问题是我如何封闭这两条平行线的头和尾呢?是否要调用lastpoint和lastangle这两个参数,但不知道如何去弄。小弟刚开始学lisp,纯属菜鸟,请大家帮帮忙。& d" i# Y1 d" a D8 q
3 v" Z' g" y* W. u
[ 本帖最后由 mandala 于 2010-12-12 13:04 编辑 ] |