st788796 发表于 2013-11-14 06:15
加载相应版本的 xdrxapi 和开源通用lisp函数库,置顶帖子有链接
哥好哇,还是那个连续标注的程序能不能再稍微修改一下哇?就是在标注的前面单独显示几个字“长度是”,字高是固定的,还要区别于标注。并且所有的字体都是黑体的。还望哥在代码后面给标注出来哇!
代码去下 - (princ "\n程序:连续标注 命令:bz ")
- (defun c:bz ()
- (COMMAND "UCS" "")
- (setvar "cmdecho" 1)
- (SETVAR "OSMODE" 0)
- (setq AcadObject (vlax-get-acad-object)
- AcadDocument (vla-get-ActiveDocument Acadobject)
- mSpace (vla-get-ModelSpace Acaddocument)
- ) ; 选取需要测量的样条曲线、圆弧、直线、椭圆
- (setq en (ssget (list '(0 . "spline,arc,line,ellipse,LWPOLYLINE"))))
- (setq i 0) ; 获取系统参数textsize
- (setq shh (getvar "textsize"))
- (setq str_hh (strcat "\n文字高度 <" (rtos shh 2) ">: "))
- (setq hh (getdist str_hh))
- (while hh
- (setvar "textsize" hh)
- (setq hh nil)
- ) ; 输入标注文字高度
- ; 循环开始
- (repeat (sslength en)
- (setq ss (ssname en i))
- (setq endata (entget ss))
- (command "lengthen" ss "")
- (setq dd (getvar "perimeter"))
- (princ (strcat "\n长度=" (rtos dd 2))) ; 寻找代表图层的字符串
- (setq aa (assoc 0 endata)) ; 获取图层名称
- (setq aa1 (cdr aa)) ; 判断线条种类
- (cond
- ((= aa1 "SPLINE") ; 如果是spline
- (progn
- (setq arcObj (VLAX-ENAME->VLA-OBJECT ss))
- (setq startPnt1 (vla-get-ControlPoints arcObj))
- (setq p1 (vlax-safearray->list (vlax-variant-value startPnt1)))
- (setq x1 (car p1))
- (setq y1 (cadr p1))
- (setq z1 (caddr p1))
- (setq pp1 (list x1 y1 z1))
- (repeat (- (/ (length p1) 3) 1) ; 循环,寻找最后一个控制点
- (setq p1 (cdddr p1))
- (setq x2 (car p1))
- (setq y2 (cadr p1))
- (setq z2 (caddr p1))
- )
- (setq pp2 (list x2 y2 z2))
- )
- )
- ((= aa1 "LWPOLYLINE") ; 如果是LWPOLYLINE
- (progn
- (setq arcObj (VLAX-ENAME->VLA-OBJECT ss))
- (setq startPnt1 (vla-get-Coordinates arcObj))
- (setq p1 (vlax-safearray->list (vlax-variant-value startPnt1)))
- (setq x1 (car p1))
- (setq y1 (cadr p1))
- (setq z1 (caddr p1))
- (setq pp1 (list x1 y1 z1))
- (repeat (- (/ (length p1) 3) 1) ; 循环,寻找最后一个控制点
- (setq p1 (cdddr p1))
- (setq x2 (car p1))
- (setq y2 (cadr p1))
- (setq z2 (caddr p1))
- )
- (setq pp2 (list x2 y2 z2))
- )
- )
- (t ; 如果是其他种类线条
- (progn
- (setq arcObj (VLAX-ENAME->VLA-OBJECT ss))
- (setq startPnt1 (vla-get-StartPoint arcObj)) ; 获取起点
- (setq endPnt1 (vla-get-EndPoint arcObj)) ; 获取终点
- (setq pp1 (vlax-safearray->list (vlax-variant-value startPnt1)))
- (setq pp2 (vlax-safearray->list (vlax-variant-value endPnt1)))
- )
- )
- )
- (setq x1 (car pp1))
- (setq y1 (cadr pp1))
- (setq z1 (caddr pp1))
- (setq x2 (car pp2))
- (setq y2 (cadr pp2))
- (setq z2 (caddr pp2))
- (setq x (/ (+ x1 x2) 2))
- (setq y (/ (+ y1 y2) 2))
- (setq z (/ (+ z1 z2) 2))
- (setq pt (list x y z)) ; 取得线段两端的中点
- (setq ang (angle pp1 pp2)) ; 获取角度
- (if (> (* (/ ang pi) 180) 180)
- (setq ang (+ ang pi))
- )
- (command "text" "j" "bc" pt "" (* (/ ang pi) 180) (strcat "" (rtos dd 2 0)) "")
- (setq i (1+ i))
- )
- (prin1)
- )
|