路线平面逐桩信息查询

分类:lisp函数 | 标签: lisp   路线   平面   信息   查询  
2008-12-20 16:11 阅读(?)评论(0)

 


命令: tt2 功能:批量输出逐桩坐标及方位角。
请点取道路设计线: 路线全长: 693.117
请输入起始桩号<10>:
***起点桩号: 10    终点桩号: 703.117
请输入桩号间隔<20>: 50

(50.0 (669.297 556.155 0.0) 1.38466)
(100.0 (679.405 605.119 0.0) 1.34284)
(150.0 (692.887 653.243 0.0) 1.23588)
(200.0 (715.208 697.74 0.0) 0.903583)
(250.0 (758.634 716.496 0.0) -0.166722)
(300.0 (804.608 697.412 0.0) -0.505045)
(350.0 (848.201 672.929 0.0) -0.486229)
(400.0 (894.354 654.021 0.0) -0.240554)
(450.0 (943.758 654.901 0.0) 0.278383)
(500.0 (987.818 677.924 0.0) 0.650514)
(550.0 (1023.74 712.564 0.0) 0.865928)
(600.0 (1053.19 752.92 0.0) 1.00703)
(650.0 (1077.44 796.616 0.0) 1.11905)
(700.0 (1096.89 842.658 0.0) 1.2091)
是否标注中桩位置?[是(Y)/否(N)] <N>: y


命令:
命令: tt2 功能:批量输出逐桩坐标及方位角。
请点取道路设计线: 路线全长: 666.741
请输入起始桩号<30>:
***起点桩号: 30    终点桩号: 696.741
请输入桩号间隔<20>: 100

(100.0 (771.599 555.434 0.0) -0.439844)
(200.0 (865.255 521.107 0.0) -0.221779)
(300.0 (964.573 512.394 0.0) 0.046768)
(400.0 (1062.64 530.345 0.0) 0.315314)
(500.0 (1152.49 573.586 0.0) 0.560087)
(600.0 (1237.21 626.712 0.0) 0.560087)
是否标注中桩位置?[是(Y)/否(N)] <N>: y


以下是lisp代码:


批量输出逐桩坐标及方位角.lsp

最后修改时间:
;|;;
1. 点取线
2. 指定起点位置
3. 输入起点桩号
4. 输入间隔间距,输出等间距桩号信息
5. 循环输入加桩桩号,输出加桩信息。
;;|;

(vl-load-com)
(defun C:TT (/ SS EN ENT OBJ LEN TMP ZHN ZHI LST N)
    (princ "批量输出逐桩坐标及方位角")
    (if	(and (setq SS (entsel "\n请点取道路平面设计线: "))
	     (setq EN (car SS))
	     (setq ENT (entget EN))
	     (wcmatch (cdr (assoc 0 ENT)) "LINE,ARC,LWPOLYLINE,SPLINE")
	)
	(progn
	    ;;全局变量初始化
	    (if	*ZH0*
		()
		(setq *ZH0* 0.0)
	    )
	    (if	*ZH_JG*
		()
		(setq *ZH_JG* 20.0)
	    )
	    ;;路线全长
	    (setq OBJ (vlax-ename->vla-object EN))
	    (setq LEN (vlax-curve-getdistatpoint
			  OBJ
			  (vlax-curve-getendpoint OBJ)
		      )
	    )
	    (princ (strcat "***路线全长: " (rtos LEN 2 3)))
	    ;;3.起始桩号
	    (princ (strcat "\n请输入起始桩号<" (rtos *ZH0* 2 3) ">: "))
	    (if	(setq TMP (getreal))
		(setq *ZH0* TMP)
	    )
	    (setq ZHN (+ *ZH0* LEN))
	    (princ (strcat "***起点桩号: "
			   (rtos *ZH0* 2 3)
			   "    终点桩号: "
			   (rtos ZHN 2 3)
		   )
	    )
	    ;;4.桩号间隔
	    (princ (strcat "\n请输入桩号间隔<" (rtos *ZH_JG* 2 3) ">: ")
	    )
	    (if	(and (setq TMP (getreal))
		     (> TMP 0.0)
		)
		(setq *ZH_JG* TMP)
	    )
	    ;;计算各个桩号处的坐标 和 方位角
	    (setq ZHI (* (1+ (fix (/ (- *ZH0* 1e-4)
				     *ZH_JG*
				  )
			     )
			 )
			 *ZH_JG*
		      )
		  LST '()
	    )
	    (while (<= ZHI ZHN)
		(if (setq TMP (ZL-LX-PM-GETPTANG EN (- ZHI *ZH0*)))
		    (setq TMP (cons ZHI TMP)
			  LST (cons TMP LST)
		    )
		)
		(setq ZHI (+ ZHI *ZH_JG*))
	    )
	    (setq LST (reverse LST))
	    ;;标记中桩桩位
	    (ZL-LX-PM-DRAWZZ LST)
;;;	    ;;在文本窗口打印显示
;;;	    (princ "\n桩号\t坐标\t\t方位角")
;;;	    (foreach N LST
;;;		(princ "\n")
;;;		(princ N)
;;;	    )
	    ;;5.询问是否加桩
	    ;;(setq LST '())
	    (while (setq ZHI (getreal "\n请输入加桩桩号: "))
		(if (and (<= *ZH0* ZHI ZHN)
			 (setq TMP (ZL-LX-PM-GETPTANG EN (- ZHI *ZH0*)))
			 (setq TMP (cons ZHI TMP))
		    )
		       (progn
			   (ZL-LX-PM-DRAWZZ (list TMP)) ;_标记位置
			   (princ "\n")
			   (princ TMP)
			   (command "-pan" "non" (nth 1 tmp) "non" (getvar "VIEWCTR"));_移动当前视口
			   (setq LST (cons TMP LST))
		       )
		)
	    ) ;_结束 while
	    ;;
	    ;;在文本窗口打印显示 全部信息
	    (princ "\n桩号\t坐标\t\t方位角")
	    (foreach N LST
		(princ "\n")
		(princ N)
	    )
	)
    )
    (princ)
)
;;;================================================*
;;;      公路路线计算通用函数                      *
;;;功能:计算指定里程处的坐标 和 方位角            *
;;;参数:EN -----表示道路平面设计线的图元名称      *
;;;      LC -----里程                              *
;;;返回:点的坐标 和 该点处路线前进方向方位角      *
(vl-load-com)
(defun ZL-LX-PM-GETPTANG (EN LC / OBJ PT LST ANG)
    ;;将图元名转换为 VLA对象
    (setq OBJ (vlax-ename->vla-object EN))
    ;;距起点距离为LC的点的坐标
    (setq PT (vlax-curve-getpointatdist OBJ LC))
    ;;pt点的切线方向矢量
    (setq LST (vlax-curve-getfirstderiv
		  OBJ
		  (vlax-curve-getparamatpoint
		      OBJ
		      PT
		  )
	      )
    )
    ;;计算切线方位角
    (setq ANG (atan (/ (cadr LST) (car LST))))
    ;;(setq ang (+ ang pi ))
    ;;返回
    (list PT ANG)
)
;;;================================================*
;;;      公路路线计算通用函数                      *
;;;功能:路线 平面 绘制 中桩                       *
;;;参数:LST ----- 存放中桩信息的表                *
;;;                '((桩号  坐标  方位角)          *
;;;                  (桩号  坐标  方位角)          *
;;;                  ...                           *
;;;                 )                              *
;;;返回:点的坐标 和 该点处路线前进方向方位角      *
(defun ZL-LX-PM-DRAWZZ (LST / N ZH PT ANG PT1)
    ;;
    (setq LINE_LEN 10.0			;线的长度
	  LINE_COLOR
	     6				;线的颜色
	  CIRCLE_R 3.0			;圆的半径
	  CIRCLE_COLOR
	     6				;圆的颜色
	  TEXT_SIZE 2.5			;文字高度
	  TEXT_COLOR
	     6				;文字颜色
    )
    ;;
    (foreach N LST
	(setq ZH  (nth 0 N)
	      PT  (nth 1 N)
	      ANG (nth 2 N)
	)
	(setq PT1 (polar PT (+ ANG (* 0.5 pi)) LINE_LEN))
	;;绘制直线
	(entmake (list '(0 . "LINE")
		       (cons 10 PT)
		       (cons 11 PT1)
		       (cons 62 LINE_COLOR)
		 )
	)
	;;绘制圆
	(entmake (list '(0 . "CIRCLE")
		       (cons 10 PT)
		       (cons 40 CIRCLE_R)
		       (cons 62 CIRCLE_COLOR)
		 )
	)
	;;绘制文字
	(entmake (list '(0 . "TEXT")
		       (cons 10 PT1)
		       (cons 62 TEXT_COLOR)
		       (cons 40 TEXT_SIZE)
		       (cons 1 (rtos ZH 2 3))
		       (cons 50 ANG)
		       '(71 . 0)
		       '(72 . 1)
		       (cons 11 PT1)
		       '(73 . 1)
		 )
	)
    )
)
;;;================================================*
(princ)
  最后修改于 2009-05-04 17:49    阅读(?)评论(0)
 
表  情:
加载中...
 

请各位遵纪守法并注意语言文明