[测绘制图,画围墙时需要用双线,两条线的线型不同。要求是一路画过去,可以自由选择下一步是用直线还是圆弧。用mline的话就无法画圆弧了,我打算象下边这样用平行线来解决,但总觉得不满意:
3 c3 x5 A- J+ G/ X! y$ n% @
$ C9 C. ]2 l& W- D, N1 u3 A% `0 J(DEFUN C:test()
3 z: |$ ~3 K0 [9 t$ Y+ u; v, v; f( }) \+ @! B
;指定第一条线的层和线型:' K! Y# A2 t6 N! N7 v% b
(setvar "clayer" "wall")(setvar "celtype" "wq2012")
3 \/ K/ M6 {6 N# _
+ K, D, y5 ^! D* O1 u;输入宽度:, a$ ^" }( V& z$ Y5 o3 N
(setq th (getreal "输入墙厚度:(默认为0.5):"))
3 Y: @2 v# k* G8 N. z( F, I6 `8 }% v3 M+ q! l
;先画一条边线:
: \, H& V# X* g1 R(command "pline" )5 w9 h* ~! |- _, e4 k& h$ P/ k
$ `5 ~* Z, g9 z( ~
;判断是否还处于pline中:
8 h9 @0 Z6 _. n( j. `8 \ S4 f, ](while (= (getvar "CMDACTIVE") 1) (command pause))
8 T/ y! T! z7 F( m; I; g, ^! E) G- u/ N7 `% u1 m
;作平行线,如果前边th没有输入则默认为0.5:
: P2 c* h* T Q/ o% U% l! p(setq a (vlax-ename->vla-object (entlast)))$ Y% D( I; b& s- w" k. V+ A, I
(if (= nil th) (vla-offset a -0.5) (vla-offset a (- th))) 4 C5 X- U, b; x
z0 R7 k4 s/ b4 |) ^2 ?! m;选择刚做好的平行线,然后更改线型:
7 r6 c! J3 l2 h. W+ C0 {, t; ^. ]3 ^' c
(setq b (entlast))" U ^4 a8 p5 N9 K. N3 T
(command "chprop" b "" "lt" "continuous" "")
; P3 }: y2 r$ B5 G3 f; k# Q$ [; X+ Q7 E
)+ Y8 {: s! e$ A
! n* h& i, [8 D9 x5 Y8 y$ G( i
现在问题还有两个:第一是,我希望第一条线,就是用pline做的那条线是打散的,不知道做好了平行线之后,该如何回头去选择这条线;第二个问题是我如何封闭这两条平行线的头和尾呢?是否要调用lastpoint和lastangle这两个参数,但不知道如何去弄。小弟刚开始学lisp,纯属菜鸟,请大家帮帮忙。
; q5 }0 v: n: X4 E
/ o/ @) T$ Z* k" m. j2 ][ 本帖最后由 mandala 于 2010-12-12 13:04 编辑 ] |