tigcat 发表于 2020-11-7 14:03:56

如何修改Lee-mac尺寸重叠检查lsp为手动选择范围检查

本帖最后由 tigcat 于 2020-11-9 14:16 编辑

;|源程序来自http://www.lisp123.com/bzl/2015/0112/315.html
ss2lst子函数由明经大侠“cghdy”补充
|;
(defun c:tt(/ E SS SS1 SS2 N P1 P2 LSTSS1 LSTSS2 SSS)
(defun getdxf(s num)(cdr(assoc num s)))
;;; 选择集转表
(defun SS2LST (ss / lst n ssnamen)
      (setq n -1
                lst '()
      )
      (while (setq ssnamen (ssname ss (setq n (1+ n))))
                (setq lst (cons ssnamen lst))
      )
      (reverse lst)
)
(setq ss(ssget '((0. "dimension"))) n 0 SSS (SSADD))
(repeat (sslength ss)
    (setq e(ssname ss n)
          s(entget e)
          p1(getdxf s 10)
          clz(abs(-(car(getdxf s 13))(car(getdxf s 14))))
          P2(list (- (car p1)clz)(cadr p1)(caddr p1))
          )
    (SETQ SS1(SSGET "C" P1 P1 '((0. "dimension")))
          LSTSS1(SS2LST SS1)
          SS2(SSGET "C" P2P2 '((0. "dimension")))
          LSTSS2(SS2LST SS2)
          )
    (SSDEL E SS1)
    (SSDEL E SS2)
    (IF (AND (EQUAL LSTSS1 LSTSS2)
             (>(LENGTH LSTSS1)0)
             (>(LENGTH LSTSS2)0)
             )
      (repeat(setq m(sslength ss1))
             (SSADD (ssname ss1(setq m(1- m))) SSS)
      )
    )
    (setq n(1+ n))
    )
(SSSETFIRST SSS SSS)
(princ)
)

上面的程序经大侠修改后能用了,跟原网站说的一样,有很多的漏洞。比如只能检查两道尺寸,一道尺寸要全部包住另一个尺寸。现在经大神提醒,大名鼎鼎的Lee-mac有这个程序(见下面附件DimensionOverlapV1-2.lsp),不过他的程序是一运行检查整个图纸,我觉得最好调为手动选择检查范围好,整个图纸的话太慢了。大侠能不能修改成检查某个范围内的图纸。

cghdy 发表于 2020-11-9 14:32:49

tigcat 发表于 2020-11-9 11:42
大侠,我把子函数复制进去运行后没有选中有问题的尺寸,不知道怎么回事。要不改成尺寸线有相交重叠的尺寸变 ...

(defun c:tt(/ E SS SS1 SS2 N P1 P2 LSTSS1 LSTSS2 SSS)
(defun getdxf(s num)(cdr(assoc num s)))
;;; 选择集转表
(defun SS2LST (ss / lst n ssnamen)
      (setq n -1
                lst '()
      )
      (while (setq ssnamen (ssname ss (setq n (1+ n))))
                (setq lst (cons ssnamen lst))
      )
      (reverse lst)
)
(setq ss(ssget '((0. "dimension"))) n 0 SSS (SSADD))
(repeat (sslength ss)
    (setq e(ssname ss n)
          s(entget e)
          p1(getdxf s 10)
          clz(abs(-(car(getdxf s 13))(car(getdxf s 14))))
          P2(list (- (car p1)clz)(cadr p1)(caddr p1))
          )
    (SETQ SS1(SSGET "C" P1 P1 '((0. "dimension")))
          LSTSS1(SS2LST SS1)
          SS2(SSGET "C" P2P2 '((0. "dimension")))
          LSTSS2(SS2LST SS2)
          )
    (SSDEL E SS1)
    (SSDEL E SS2)
    (IF (AND (EQUAL LSTSS1 LSTSS2)
             (>(LENGTH LSTSS1)0)
             (>(LENGTH LSTSS2)0)
             )
      (repeat(setq m(sslength ss1))
             (SSADD (ssname ss1(setq m(1- m))) SSS)
      )
    )
    (setq n(1+ n))
    )
;(SSSETFIRST SSS SSS)
        (COMMAND "CHANGE" SSS "" "PROPERTIES" "C" "1" "")
(princ)
)

cghdy 发表于 2020-11-9 10:51:19

;;; 选择集转表
(defun ss2lst (ss / lst n ssnamen)
        (setq n -1
                lst '()
        )
        (while (setq ssnamen (ssname ss (setq n (1+ n))))
                (setq lst (cons ssnamen lst))
        )
        (reverse lst)
)

tigcat 发表于 2020-11-7 18:42:31

原文链接http://www.lisp123.com/bzl/2015/0112/315.html

tigcat 发表于 2020-11-9 11:42:25

本帖最后由 tigcat 于 2020-11-9 12:05 编辑

cghdy 发表于 2020-11-9 10:51
;;; 选择集转表
(defun ss2lst (ss / lst n ssnamen)
      (setq n -1
大侠,我把子函数复制进去运行后没有选中有问题的尺寸,不知道怎么回事。要不改成尺寸线有相交重叠的尺寸变个颜色可以吗?

tigcat 发表于 2020-11-9 12:17:34

我后来发现了,只有两个尺寸时才起作用,3个尺寸就不好使了

tigcat 发表于 2020-11-9 14:43:34

cghdy 发表于 2020-11-9 14:32
(defun c:tt(/ E SS SS1 SS2 N P1 P2 LSTSS1 LSTSS2 SSS)
(defun getdxf(s num)(cdr(assoc num s)))
...

谢谢大侠。

tigcat 发表于 2020-11-9 14:53:03

希望有大侠帮忙改lee-mac的程序为手动选择范围,上面的那段lisp123网站的代码有很多地方存在bug,不是很好用。

cghdy 发表于 2020-11-9 16:05:23

tigcat 发表于 2020-11-9 14:53
希望有大侠帮忙改lee-mac的程序为手动选择范围,上面的那段lisp123网站的代码有很多地方存在bug,不是很好 ...

http://bbs.mjtd.com/thread-182310-1-1.html

tigcat 发表于 2020-11-9 16:43:50

cghdy 发表于 2020-11-9 16:05
http://bbs.mjtd.com/thread-182310-1-1.html

大神,谢谢,您这把链接也贴出来,算是送佛送到西,帮人帮到底了。
页: [1] 2
查看完整版本: 如何修改Lee-mac尺寸重叠检查lsp为手动选择范围检查