作用是,边长长度自动注记代码如下(defunmkptlst(pen1/bhbjptlstpenpelptipt1pt2);;取出"polyline"或lwpolyline的点位,以表的结构返回(if(=(cdr(assoc0(entgetpen1)))"POLYLINE")(pr...
作用是,边长长度自动注记
代码如下
(defun mkptlst (pen1 / bhbj ptlst pen pel pt i pt1 pt2)
;;取出"polyline" 或 lwpolyline的点位,以表的结构返回
(if( = ( cdr (assoc 0 (entget pen1))) "POLYLINE")
(progn (setq ptlst '())
(setq pen (entnext pen1))
(while (/ = "SEQEND" ( cdr (assoc 0 (entget pen))))
(setq pel (entget pen))
(setq pt ( cdr (assoc 10 pel)))
(setq ptlst (append ptlst (list pt)))
(setq pen (entnext pen))
)
(setq bhbj ( cdr (assoc 70 (entget pen1))))
(if( = (logand bhbj 1) 1)
(setq ptlst (mkptlst stm))
(setq n (length ptlst))
(setq j 0)
(while ( < j ( - n 1))
(setq pt1 (nth j ptlst))
(setq pt2 (nth ( + j 1) ptlst))
(setq di (distance pt1 pt2))
(setq ptm (c:cal "plt(pt1,pt2,0.5)"))
(setq ang (angle pt1 pt2))
(setq di (rtos di 2 2))
(setq entlist (list (cons 1 di)))
(setq txtlen ( car ( cadr (textbox entlist)))
(if ( and ( < ang ( * 3 (/ pi 2))) ( > ang (/ pi 2)))
(setq ang (angle pt2 pt1))
)
(setq ang1 ( + ang ( / pi 2)))
(setq pti ( polar ptm ang ( * -0.5 txtlen)))
(setq pti ( polar pti angl dv))
(setq pt3 ( polar pti ang dv))
(command "text" pti "" pt3 di)
(setq j ( + j 1))
)
(setq i ( + i 1))
)
)
)
(sttvar "osmode" os)
) (setq ptlst (cons pt ptlst))
)
)
)
(if ( = ( cdr (asspr 0 (setq pen1 (entget pen1)))) "LWPOLYLINE")
(progn (setq bhbj (cdr(assoc 70 pen1)))
(steq ptlst '())
(setq pen (cdr(assoc 90 pen1)))
(setq pen1 (member'(100 . "AcDbPolyline") pen1))
(setq i 6)
;;数据读取序号初值
(repeat pen
(setq pt (cdr(nth i pen1)))
(setq ptlst (append ptlst (list pt)))
(steq i ( + 4 i))
)
(if ( = (logand bhbj 1) 1)
(steq ptlst (cons pt ptlst))
)
)
)
(if ( = ( cdr (assoc 0 pen1)) "LINE")
(progn (steq pt1 (cdr (assoc 10 pen1)))
(setq pt2 (cdr (assoc 11 pen1)))
(setq ptlst (list pt1 pt2))
)
)
ptlst
)
(defun c:zjcd(/ ANG ANG1 DI DV ENTLIST I J
LEN N PT1 PT2 PT3 PTI PTLST PTM SS1
STM TXTLEN os
)
(if (null cal)
(arxload "geomcal")
)
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(setq ss1 (ssget'((-4 . "
(0 . "POLYLINE")
(0 . "LWPOLYLINE")
(0 . "LINE")
(-4 . "OR>")
)
)
)
(if ss1
(progn (initget 4 "")
(setq
dv (getreal
(strcat "\n 输入字高: ")
)
)
(if dv
(setvar "textsize" dv)
)
(initget 4 "")
(setq dv (getreal (strcat "\n 输入离线距离: <0.2>")))
(if (not dv)
(setq dv 0.2)
)
(setq i 0)
(setq len (sslength ss1))
(while ( < i len)
(setq stm (ssname ss1 i))
运行有错误。。。。
[检查文字 zjcd.lsp 正在加载...]
.
; 错误: 参数太多: (IF (= ( ... ) 1) (SETQ PTLST ( ... )) (SETQ N ( ... )) ... )
; 错误: 输入中含有多余的闭括号
; 检查完成.
求大神帮忙解决,谢谢
大哥,这个是所有程序的样子,您有空看看,麻烦了。。。谢谢哥
http://wenku.baidu.com/view/bdf4cbeb551810a6f52486f9.html
展开