shailujp 发表于 2022-7-5 23:53:57

我将尝试自己从lisp中包括图纸编号检查。感谢你的帮助。

shailujp 发表于 2022-7-5 23:56:47

矩形没有给出任何关于哪个是重复的概念,其中一个和数字变得难以可视化。其中as线的端点非常清楚。我保留了线路的概念。

shailujp 发表于 2022-7-5 23:59:40

你好,pBe,
 
我刚刚发现空白条目也被视为重复条目。这可以避免吗?请参见随附的捕捉。
 
另外,如何获得每个项目的princ?
例:描述中未发现重复项
或图纸编号等无重复项。。。
 
我还可以包括图纸编号检查。这很容易。

pBe 发表于 2022-7-6 00:02:36

 
我当时想的是,如果没有colros的复制品,比如说有5个“12345”,它们都会用相同的颜色“装箱”。你想要吗?
 
至于“”空白项,它很容易修改。

shailujp 发表于 2022-7-6 00:07:43

经过一段时间的试验,我发现这些线条很好用,也很容易去掉。给盒子上色是个好主意,但考虑到复制品的实例非常有限,它可能没有那么有用,也很难将数字可视化。但如果数据量大,重复次数多,则可能非常有用。
 
目前,我认为只有空行问题才需要解决。
 
顺便说一句,我已经在我的图纸上捕捉到了一些副本,并保存了我的A。。。

pBe 发表于 2022-7-6 00:11:11

那么好吧,
 
现在FWIW
 
(defun c:LTD (/ LWPoly _dupl ssD data);LineToDuplicate
(defun _ftf (pt m)
        (polar pt (if m (* pi 0.25) (* pi 1.25))(* 0.05 (sqrt 2))))

(defun LWPoly        (lst clr)
   (foreach att lst
   (vla-getboundingbox att 'mn 'mx)
   (setq p1 (_ftf (vlax-safearray->list mn) nil)
         p3 (_ftf (vlax-safearray->list mx) t)
         p2 (list (car p1)(cadr p3) 0.0)
    p4 (list (car p3)(cadr p1) 0.0))
(entmakex
   (append (list (cons 0 "LWPOLYLINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbPolyline")
          (cons 8 "DuplicateLine")
          (cons 62 clr)
          (cons 70 1)
          (cons 90 (length (setq lst (list p1 p2 p3 p4 p1))))
                                   )
      (mapcar (function (lambda (p) (cons 10 p))) lst)
                           )
                   )       
)
)
(Defun _numb (str)
(vl-list->string
   (vl-remove-if-not
   '(lambda (n)
(< 47 n 58)
      )
   (vl-string->list str)
   )
)
)
(defun _dupl (itm/ a b c d e f)
(while (setq a (Car itm))
(setq b       (cdr itm) id (car a))
(while (setq d (assoc id b))
(setq        e (cons d e)
        b (vl-remove d b)))
(if e
(setq f (cons (cons a e) f)))
(setq itm b e nil)
)
f)
(if (setq data nil ssD (ssget "_X" (list
                             '(0 . "INSERT")
                              '(2 . "BOM_LINE*")
                             '(66 . 1)
                             (cons 410 (getvar 'ctab)))))
   (progn
           (repeat (setq i (sslength ssd))
(setq data (cons
        (mapcar        (function (lambda (l)
                          (list (vla-get-tagstring l)
                                  (_numb (vla-get-textstring l))
                                  l
                          )
                          )
                )
                (vlax-invoke
                  (vlax-ename->vla-object
                  (ssname ssd (setq i (1- i)))
                  )
                  'GetAttributes
                )
        ) data))
)
   (setq data (apply 'append data))
   (foreach itm '("DESCRIPTION" "SAPNUMBER")
        (set (setq df (Read itm))
             (vl-remove-if-not '(lambda (l)
                                  (and (eq (car l) itm)
                                     (/= (cadr l) ""))) data))
)
   (setq col 0)
   (foreach itm
(setq des (_dupl (mapcar 'cdr DESCRIPTION)))
(print (caar itm))
(setq col (1+ col))
(LWPoly (mapcar 'cadr itm) col)
)
   (foreach itm (setq sap (_dupl (mapcar 'cdr SAPNUMBER)))
(print (caar itm))
(setq col (1+ col))
(LWPoly (mapcar 'cadr itm) col)
   )
   )
   
)
   (princ (cond
   ((null ssd) "\nNo valid selection")
   ((and (null des)
          (null sap)) "\nNo Duplicates Found")))
(princ)
)

shailujp 发表于 2022-7-6 00:14:06

pBe,
 
这个好多了。经过几次试用,我了解到它查找整个文本行,并与另一行进行比较,而不仅仅是数字。对于SAP数字,这是一种完美的方式。然而,对于描述,由于描述是手动编写的,因此用户可能编写了不同的描述或删除了描述。唯一的常数是一个不变的零件号(即12345)。所以,我只是调整了desc.并再次运行它,这次结果改变了。
 
但是,即使描述混乱,aleast SAP number仍在捕获重复项。所以我有一个或两个地方来捕捉错误,一个就足够关注整条线了。
 
我感谢你为帮助我度过难关所做的努力。
 
当做
 
我正在创建一个小路由,它将删除Duplicateline层上的所有实体。这样我就不必手动擦除它。

pBe 发表于 2022-7-6 00:17:12

那么,在调整代码方面,您还需要帮助吗?或者你可以自己处理?
 
至于描述标签,只要#符号就很容易修改。

shailujp 发表于 2022-7-6 00:20:08

#图纸之间的标志不一致。我还包括了Drawing_数字标签。所以我现在有3个级别的检查,应该足以捕捉错误。
 
我已经做了这个代码来删除实体和清除重复线层。
 
 

(defun c:DUPL (/ erdup)
               (if
    (tblsearch "LAYER" "DuplicateLine")   
   (if (setq erdup (ssget "_x" '((8 . "DuplicateLine"))))
      (progn
            (command "erase" erdup "")
               (Command "-Purge" "la" "DuplicateLine" "n")
   );end progn
         ); end if2
   (princ "\nLayer not found")
               ); end if1
); end defun

pBe 发表于 2022-7-6 00:24:35

 
很高兴你把它整理好了。
 
更新帖子以考虑“X XX#1234”
页: 1 [2]
查看完整版本: 重复数字文本查找器