标注坡度.LSP

分类:lisp函数 | 标签: lisp   标注   坡度  
2009-09-22 19:23 阅读(?)评论(0)

标注坡度.LSP


;;;=================================================================*
;;;      通用函数                                                   *
;;;功能:标注坡度                                                   *
;;;参数:pt0 -----第一点                                            *
;;;      pt1 -----第二点                                            *
;;;      ty  -----标注形式。1为比值形式;2为百分比形式。            *
;;;返回:如果参数正确绘制完毕返回T;否则返回nil。                   *
(defun zl-pd-draw (pt0	  pt1	 ty	/      ANG    DIST   DIST_TEXT
		   NUM	  PT	 SIZE_TEXT     STR    TMP    XX
		   YY
		  )
    (setq size_text 2.5 ;_字高
	  dist_text 0.5 ;_文字离线距离
    )
    (if	(< (car pt0) (car pt1))
	()
	(setq tmp pt0
	      pt0 pt1
	      pt1 tmp
	)
    )
    ;;计算文字标注位置
    (setq dist (distance pt0 pt1)
	  ang  (angle pt0 pt1)
    )
    (setq pt (polar pt0 ang (* 0.5 dist))
	  pt (polar pt (+ ang (* 0.5 pi)) dist_text)
    )
    ;;计算标注内容
    (setq xx (- (car pt1) (car pt0))
	  yy (- (cadr pt1) (cadr pt0))
    )
    (cond ((= ty 1)
	   (if (equal yy 0.0 1e-10)
	       (setq str "1:9999")
	       (setq num (/ xx 1.0 yy)
		     str (rtos (abs num) 2 2)
		     str (strcat "1:" str)
	       )
	   )
	  )
	  ((= ty 2)
	   (if (equal xx 0.0 1e-10)
	       (setq str "9999%")
	       (setq num (/ yy 1.0 xx)
		     str (rtos (* 100 num) 2 2)
		     str (strcat str "%")
	       )
	   )
	  )
	  (t (setq str nil))
    )
    ;;写文字
    (if	str
	(PROGN (COMMAND	"_.TEXT"
			"j"
			"bc"
			"non"
			pt
			size_text
			(* (/ ang pi) 180)
			str
	       )
	       T
	)
	nil
    )
)

;;;=================================================================*
;;;功能:点取两点,标注坡度                                         *
;;;日期:zml84 于 2009-09-22                                        *
(defun c:pd0 (/ pt0 pt1)
    (princ "功能:点取两点,标注坡度。")
    (if	(and (setq pt0 (getpoint "\n点取第一点: "))
	     (setq pt1 (getpoint pt0 "\n点取第二点: "))
	)
	(zl-pd-draw pt0 pt1 2)
    )
    (princ)
)


;;;=================================================================*
;;;功能:选取line,标注坡度(比值形式)                             *
;;;日期:zml84 于 2009-09-22                                        *
(defun c:pd1 (/	     ANG    DIST   DIST_TEXT	 ENT	I      NUM
	      PT     PT10   PT11   SIZE_TEXT	 SS	STR    TMP
	      XX     YY
	     )
    (princ "\n功能:标注坡度(比值形式)")
    (setq i 0)
    (princ "\n选取直线对象... ")
    (if	(setq ss (ssget '((0 . "line"))))
	(repeat	(sslength ss)
	    (setq ent  (entget (ssname ss i))
		  pt10 (cdr (assoc 10 ent))
		  pt11 (cdr (assoc 11 ent))
		  pt10 (trans pt10 0 1) ;_转换为用户坐标系下
		  pt11 (trans pt11 0 1)
	    )
	    (zl-pd-draw pt10 pt11 1)
	    (setq i (1+ i))
	)
    )
    (princ)
)

;;;功能:指定坡度、坡长,绘制之。
(defun c:pd2 (/ PT0 PT1 TMP)
    ;;设置全局变量
    (or	i_old
	(setq i_old 0.0)
    )
    (or	l_old
	(setq l_old 100.0)
    )
    ;;
    (princ "\n1.请输入坡度值(%)<")
    (princ i_old)
    (if	(setq tmp (getreal ">: "))
	(setq i_old tmp)
    )
    ;;
    (princ "\n2.请输入坡长值<")
    (princ l_old)
    (if	(setq tmp (getdist ">: "))
	(setq l_old tmp)
    )
    ;;绘制
    (setq pt0 (getvar "VIEWCTR")
	  pt1 (list (+ (car pt0) l_old)
		    (+ (cadr pt0) (* i_old 0.01 l_old))
	      )
    )
    (command "_.line" "non" pt0 "non" pt1 "")
    ;;移动
    (command "_.move" (entlast) "" "non" pt0)
    (princ)
)
   阅读(?)评论(0)
 
表  情:
加载中...
 

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