明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 472|回复: 2

[函数] 两个lisp自定义函数在cad2020版本中不能使用

[复制链接]
发表于 2020-9-27 11:28 | 显示全部楼层 |阅读模式
请教大神,请教统计长度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)
)
发表于 2020-9-27 12:07 | 显示全部楼层
cad2020测试通过 使用正常
 楼主| 发表于 2020-9-27 13:57 | 显示全部楼层
vectra 发表于 2020-9-27 12:07
cad2020测试通过 使用正常

TJCD这个自定义函数,只能统计单条线,不能连续多选统计,请帮我看看问题在什么地方
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-3 17:33 , Processed in 0.296699 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表