我刚刚发现空白条目也被视为重复条目。这可以避免吗?请参见随附的捕捉。
另外,如何获得每个项目的princ?
例:描述中未发现重复项
或图纸编号等无重复项。。。
我还可以包括图纸编号检查。这很容易。
我当时想的是,如果没有colros的复制品,比如说有5个“12345”,它们都会用相同的颜色“装箱”。你想要吗?
至于“”空白项,它很容易修改。 经过一段时间的试验,我发现这些线条很好用,也很容易去掉。给盒子上色是个好主意,但考虑到复制品的实例非常有限,它可能没有那么有用,也很难将数字可视化。但如果数据量大,重复次数多,则可能非常有用。
目前,我认为只有空行问题才需要解决。
顺便说一句,我已经在我的图纸上捕捉到了一些副本,并保存了我的A。。。 那么好吧,
现在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)
)
pBe,
这个好多了。经过几次试用,我了解到它查找整个文本行,并与另一行进行比较,而不仅仅是数字。对于SAP数字,这是一种完美的方式。然而,对于描述,由于描述是手动编写的,因此用户可能编写了不同的描述或删除了描述。唯一的常数是一个不变的零件号(即12345)。所以,我只是调整了desc.并再次运行它,这次结果改变了。
但是,即使描述混乱,aleast SAP number仍在捕获重复项。所以我有一个或两个地方来捕捉错误,一个就足够关注整条线了。
我感谢你为帮助我度过难关所做的努力。
当做
我正在创建一个小路由,它将删除Duplicateline层上的所有实体。这样我就不必手动擦除它。
那么,在调整代码方面,您还需要帮助吗?或者你可以自己处理?
至于描述标签,只要#符号就很容易修改。 #图纸之间的标志不一致。我还包括了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
很高兴你把它整理好了。
更新帖子以考虑“X XX#1234”
页:
1
[2]