明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 932|回复: 8

[提问] 求LISP程序:复核总尺寸与分项尺寸总和是否一致

  [复制链接]
发表于 2023-11-10 17:42:30 | 显示全部楼层 |阅读模式
50明经币
本帖最后由 fengyu6913 于 2023-11-10 17:45 编辑


附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

(defun c:tt (/ DIM1 DIM2 SUM1 SUM2) (defun tt-get-dxf (i ssn) (cond ((= (type ssn) 'ename) (cdr (assoc i (entget ssn)))) ((= (type ssn) 'list) (cdr (assoc i ssn))) ) ) (defun ss->LST (ss / i l) (if ss (repeat (setq i (sslength ss)) (setq l (cons (ssname ss (setq i (1- i))) l)) ) ) ) (princ "\n请选择总尺寸:") (setq dim1 ...
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-11-10 17:42:31 | 显示全部楼层
本帖最后由 Dani1988 于 2023-11-10 22:13 编辑

(defun c:tt (/ DIM1 DIM2 SUM1 SUM2)
  (defun tt-get-dxf (i ssn)
    (cond ((= (type ssn) 'ename) (cdr (assoc i (entget ssn))))
          ((= (type ssn) 'list) (cdr (assoc i ssn)))
    )
  )
  (defun ss->LST (ss / i l)
    (if        ss
      (repeat (setq i (sslength ss))
        (setq l (cons (ssname ss (setq i (1- i))) l))
      )
    )
  )
  (princ "\n请选择总尺寸:")
  (setq dim1 (car (ss->LST (ssget ":e:s" '((0 . "dim*"))))))
  (princ "\n请选择分尺寸:")
  (setq dim2 (ssget
'((0 . "dim*"))))
  (setq        sum1 (if (/= (tt-get-dxf 1 dim1) "")
               (read (tt-get-dxf 1 dim1))
               (tt-get-dxf 42 dim1)
             )
  )
  (setq        sum2 (apply '+
                    (mapcar '(lambda (x)
                               (if (/= (tt-get-dxf 1 x) "")
                                 (read (tt-get-dxf 1 x))
                                 (tt-get-dxf 42 x)
                               )
                             )
                            (ss->LST dim2)
                    )
             )
  )
  (if (equal sum1 sum2 0.1)
    (alert "相等!")
    (alert (strcat "不相等! SUM=" (VL-PRINC-TO-STRING sum2)))
  )
)

评分

参与人数 1明经币 +1 金钱 +20 收起 理由
fengyu6913 + 1 + 20 很给力!

查看全部评分

回复

使用道具 举报

发表于 2023-11-11 11:11:26 | 显示全部楼层
本帖最后由 xyp1964 于 2023-11-11 11:12 编辑

  1. (defun c:tt ()
  2.   (defun xyp-dxf(code e)(cdr(assoc code(entget e))))
  3.   (defun xyp-Ss2List(ss)(vl-remove-if-not'(lambda(x)(equal(type x)'ENAME))(mapcar'cadr(ssnamex ss))))
  4.   (princ "\n请选择尺寸标注组<退出>: ")
  5.   (if (setq ss (ssget '((0 . "DIM*"))))
  6.     (progn
  7.       (setq lst (xyp-Ss2List ss)
  8.             lst (mapcar '(lambda (x) (if (/= (setq a (xyp-DXF 1 x)) "")(distof a)(xyp-DXF 42 x)))lst)
  9.             lst (vl-sort lst '>)
  10.             l1 (car lst)
  11.             l2(apply '+ (cdr lst))
  12.       )
  13.       (princ "\n总尺寸 = ")(princ l1)
  14.       (princ "\n分项尺寸总和 = ")(princ l2)
  15.       (if (equal l1 l2 1e-3)
  16.         (princ "\n总尺寸与分项尺寸总和一致")
  17.         (princ "\n总尺寸与分项尺寸总和不一致")
  18.       )
  19.     )
  20.   )
  21.   (princ)
  22. )

评分

参与人数 1明经币 +1 收起 理由
fengyu6913 + 1 很给力!

查看全部评分

回复

使用道具 举报

发表于 2023-11-11 19:13:23 | 显示全部楼层

帮你整合下上面俩个大佬的,,币给他们,命令:TT

本帖最后由 yaojing38 于 2023-11-11 19:14 编辑

  1. (defun c:tt (/ l1 l2 lst ss)
  2.   (princ "\n请选择尺寸:")
  3.   (setq ss (ssget'((0 . "DIM*"))))
  4.    (setq lst (ss2LST ss)
  5.             lst (mapcar '(lambda (x) (if (/= (setq a (dxf 1 x)) "")(distof a)(dxf 42 x)))lst)
  6.             lst (vl-sort lst '>)
  7.             l1 (car lst)
  8.             l2(apply '+ (cdr lst))
  9.       )
  10.   
  11.     (princ "\n总尺寸 = ")(princ l1)
  12.     (princ "\n分项尺寸总和 = ")(princ l2)
  13.       (if (equal l1 l2 1e-3)
  14.         (princ "\n总尺寸与分项尺寸总和一致")
  15.         (princ "\n总尺寸与分项尺寸总和不一致")
  16.       )
  17.         (princ)
  18. )
  19.   (defun dxf (i ssn)
  20.     (cond ((= (type ssn) 'ename) (cdr (assoc i (entget ssn))))
  21.           ((= (type ssn) 'list) (cdr (assoc i ssn)))
  22.     )
  23.   )
  24.   (defun ss2lst (ss / i l)
  25.     (if        ss
  26.       (repeat (setq i (sslength ss))
  27.         (setq l (cons (ssname ss (setq i (1- i))) l))
  28.       )
  29.     )
  30.   )
回复

使用道具 举报

发表于 2023-11-11 20:00:44 | 显示全部楼层
好热闹,好热闹
回复

使用道具 举报

 楼主| 发表于 2023-11-12 18:25:16 | 显示全部楼层
本帖最后由 fengyu6913 于 2023-11-13 10:11 编辑

感谢三位大神
币就先到先得哈,没找到给另外两们大神送币的途径
回复

使用道具 举报

发表于 2023-11-12 19:15:33 | 显示全部楼层
回复

使用道具 举报

发表于 2023-11-13 11:48:45 | 显示全部楼层
本帖最后由 panliang9 于 2023-11-13 11:49 编辑

如果每个分尺寸都进行了圆整,举例来说,每个分尺寸都圆整了0.1,有九个分尺寸,这样的话,总尺寸的名义值和分尺寸的总和值就都差了  1

这怎么整。

9(实际9.1)+9(实际9.1)+9(实际9.1)+9(实际9.1)+9(实际9.1)+9(实际9.1)+9(实际9.1)+9(实际9.1)+9(实际9.1)=82(81.9)

分尺寸名义值合=81
总尺寸名义值=82

因为我的图中出现过这种情况。
回复

使用道具 举报

发表于 2023-11-13 12:48:04 | 显示全部楼层
panliang9 发表于 2023-11-13 11:48
如果每个分尺寸都进行了圆整,举例来说,每个分尺寸都圆整了0.1,有九个分尺寸,这样的话,总尺寸的名义值 ...

(equal sum1 sum2 1.1)
判断一致的精度调整为1.1或更大,根据你的实际情况来改
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 10:25 , Processed in 0.198565 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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