You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AutoLISP实现按线型分类统计多段线、直线数量并汇总输出

AutoLISP 线型统计功能改造

需求说明

  • 现有AutoLISP代码运行后,会在AutoCAD命令行逐条打印选中的每一条多段线、直线的线型信息
  • 需调整代码逻辑,对相同线型的多段线、直线做数量求和汇总,最终按如下格式输出结果:

X线型:5个
Y线型:2个
Z线型:8个

原有代码

(defun c:TEST (/ ss i obj)
  (setvar "cmdecho" 0)
  (if
    (setq ss (ssget  '((0 . "*POLYLINE,LINE"))))
    (repeat (setq i (sslength ss))
    (setq obj (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
    (prompt (strcat "\nLe type de ligne est\n" (vla-get-Linetype  obj)))
      )
    )
  (setvar "cmdecho" 1)
  (princ)
)

改造后可实现汇总统计的代码

(defun c:TEST (/ ss i obj lt-stat cur-lt cnt)
  (setvar "cmdecho" 0)
  (if (setq ss (ssget '((0 . "*POLYLINE,LINE"))))
    (progn
      (setq i (sslength ss))
      ;; 遍历所有选中对象统计线型数量
      (repeat i
        (setq obj (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
        (setq cur-lt (vla-get-Linetype obj))
        (if (setq cnt (assoc cur-lt lt-stat))
          (setq lt-stat (subst (cons cur-lt (1+ (cdr cnt))) cnt lt-stat))
          (setq lt-stat (cons (cons cur-lt 1) lt-stat))
        )
      )
      ;; 按指定格式输出结果
      (prompt "\n线型统计结果:")
      (foreach item lt-stat
        (prompt (strcat "\n" (car item) "线型:" (itoa (cdr item)) "个"))
      )
    )
  )
  (setvar "cmdecho" 1)
  (princ)
)

改造逻辑说明

  • 新增关联列表lt-stat存储线型与对应数量的映射关系,替代原有逐条打印的逻辑
  • 遍历选中对象时,判断当前对象线型是否已在统计列表中:已存在则对应计数+1,不存在则新增记录、初始计数为1
  • 所有对象遍历完成后,统一遍历统计列表,按要求格式输出结果,保留原代码关闭/恢复命令行回显的设置,运行时无多余干扰输出

内容的提问来源于stack exchange,提问作者Ozsvart Donat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:57:18