
- ;|
- 命令:tlx
-
- 说明:通过拾取中线自动生成铁路线, 中线可以是*polylinee、line或arc
-
- 程序中使用线型作虚线, 所以对经过拟合的pline支持不好,请注意!
-
- 以下所用H3线型可根据ltscale调整数值,将其加入到acad.lin中
- *H3,___ ___ ___ ___ ___ ___ ___ ___
- A,5,-4
- |;
- (setq #tl_wid 2.0) ;默认路宽
- (defun c:tlx (/ ss s1 e tf wid sp lp0 lp1 ang)
- (xdrx_begin '("cmdecho" "0"))
- (setq tf T
- olddist (getvar "offsetdist")
- oldos (getvar "osmode")
- )
- (while (and tf
- (setq ss (xdrx_entsel
- "\n选路中心线<退出>: "
- '((0 . "LINE,ARC,*POLYLINE") (8 . "TL"))
- )
- )
- )
- (if ss
- (progn
- (setq wid
- (getreal (strcat "\n铁路线宽度:<" (rtos #tl_wid 2 1) ">: ")
- )
- )
- (if (null (tblsearch "ltype" "h3")) ;判断是否加载线型
- (command ".linetype" "l" "h3" "acad" "")
- )
- (if (or (= wid "")
- (= wid nil)
- )
- (setq wid #tl_wid)
- (setq #tl_wid wid)
- )
- (mapcar 'setvar '("offsetdist" "osmode") (list wid 0))
- (setq e (car ss))
- (setq sp (car (xdrx_getsamplept e)) ;线起点
- ang (last
- (xdrx_getperpline
- e
- (list (car sp) (cadr sp) '0.0)
- )
- ) ;法线角度
- lp0 (polar sp ang wid)
- lp1 (polar sp (+ ang pi) wid)
- s1 (ssadd)
- s1 (ssadd e s1)
- )
- (command ".offset" "" e lp0 "")
- (setq s1 (ssadd (entlast) s1))
- (command ".offset" "" e lp1 "")
- (setq s1 (ssadd (entlast) s1))
- (command ".change" e "" "p" "lt" "h3" "")
- (if (wcmatch (xdrx_getentdxf 0) "*POLYLINE")
- (command ".pedit" e "w" (* 2 wid) "")
- (progn
- (command ".pedit" e "y" "w" (* 2 wid) "")
- (setq s1 (ssadd (entlast) s1))
- )
- )
- (xdrx_block_make s1 sp T) ;作匿名块
- )
- (setq tf nil)
- )
- )
- (mapcar 'setvar
- '("offsetdist" "osmode")
- (list olddist oldos)
- )
- (xdrx_end)
- (princ)
- )
|