请教统计长度TJCD和统计图块TJTK这两个lisp在cad2020不能使用
请教大神,请教统计长度TJCD和统计图块TJTK这两个lisp在cad2020不能使用,请大神帮忙看看问题在什么地方,怎么修改?;;--------------------------------------------------------------------
;计算所选择对象的线的总长度
(defun C:TJCD ( / &k1 i l1 l2 n1 ss)
(if (null vlax-dump-object) (vl-load-com) )
(if (setq SS (ssget '((0 . "CIRCLE,ELLIPSE,LINE,*POLYLINE,SPLINE,ARC"))))
(progn (setq i 0 n1 "计算公式:" L1 0)
(while (setq &k1 (ssname ss i))
(setq L2 (vlax-curve-getDistAtParam &k1 (vlax-curve-getEndParam &k1)))
(setq L1 (+ L1 L2) L2 (rtos L2))
(if (= i 0)
(setq n1 (strcat n1 L2))
(setq n1 (strcat n1 "+" L2))
)
(setq i (1+ i))
)
while
(setq i (rtos i 2 0) L1 (rtos L1))
(princ (strcat "\n总共选中:" i "根线"))
(princ (strcat "\n总长度是:" L1))
(princ (strcat "\n" n1))
)
)
(princ)
)
;;;统计图块
(defun C:TJTK (/ ss1 ss2 NamLst BList str1 str2)
(prompt "\n命令为: TJTK ,用法如下: ")
(prompt "\n先选择要统计的块,然后选择要统计的区域,结束后按F2显示出统计数量.")
(graphscr)
(prompt "\n请选择要统计的块:")
(if (setq ss1 (ssget '((0 . "INSERT"))))
(progn
(prompt "\n请选择要统计的区域:")
(if (setq ss2 (ssget '((0 . "INSERT"))))
(progn
(setq NamLst (Name-list ss1))
(setq BList (Name-count ss2 NamLst))
(princ "\n块名")
(princ (setq str1 "..............................."))
(princ "数量")
(princ "\n--------------------------------------")
(foreach n BList
(princ "\n")
(princ (setq str2 (car n)))
(princ (substr str1 (1+ (strlen str2)) (strlen str1)))
(princ "....")
(princ (cdr n))
)
)
(princ "\n所选区域没有要统计的块!")
)
)
(princ "\n你没有选择要统计的块!")
)
(princ)
)
;;;图块名列表函数
(defun Name-list (ss1 / i l EName EList BName NList)
(setq l (sslength ss1))
(setq i 0 NList nil)
(while (< i l)
(setq EName (ssname ss1 i)) ;取得图元名
(setq EList (entget EName)) ;取得图元表
(setq BName (cdr (assoc 2 EList)));取得图块名
(if (not (member BName NList)) ;如果表中没有图块名
(setq NList (cons BName NList)) ;添加到表中
)
(setq i (1+ i)) ;计数器加1
)
NList
)
;;;计数函数
(defun Name-count (ss2 NamLst / blist i l ename elist bname oldcount newcount)
(setq Blist (mapcar '(lambda (x) (cons x 0)) NamLst)) ;计数器归零
(setq i 0 l (sslength ss2))
(while (< i l) ;对选择区域循环
(setq ename (ssname ss2 i)) ;取得图元名
(setq elist (entget ename)) ;取得图元表
(setq bname (cdr (assoc 2 elist))) ;取得图块名
(if (member bname NamLst) ;如果是要统计的块
(setq OldCount (assoc bname Blist) ;取得块数量
NewCount (1+ (cdr OldCount)) ;计数器加1
Blist (subst (cons bname NewCount) OldCount Blist);替代原数量
)
)
(setq i (1+ i))
)
BList
)
(defun C:sum ( / CurObj CurSet FltLst TmpLgt TotLgt)
(if (< (atof (getvar "ACADVER")) 15.0)
(alert " VxJoinLines requires AutoCAD 2000(i) or higher. ")
(progn
(vl-load-com)
(setq FltLst '((0 .
"3DPOLY,ARC,CIRCLE,ELLIPSE,LINE,LWPOLYLINE,POLYLINE,SPLINE")
(-4 . "<NOT")
(-4 . "<OR")
(-4 . "&=") (70 . 16)
(-4 . "&=") (70 . 64)
(-4 . "OR>")
(-4 . "NOT>")
)
CurSet (cond ((ssget "I" FltLst)) ((ssget FltLst)))
TotLgt 0
)
(if CurSet
(progn
(while (setq CurEnt (ssname CurSet 0))
(setq CurObj (vlax-ename->vla-object CurEnt)
TmpLgt (vlax-curve-getDistAtParam CurObj
(vlax-curve-getEndParam CurObj)
)
TotLgt (+ TotLgt TmpLgt)
CurSet (ssdel CurEnt CurSet)
)
)
(alert (strcat "Total length of selected object(s) " (rtos TotLgt) "."))
)
)
)
)
(princ)
)
页:
[1]