向ITEM\u编号t添加前缀
你好任务1:我需要帮助为名为ITEM\u NUMBER的属性标记添加前缀,但不想增加。下面是Lee Mac的一段代码,前缀+增量,我试图操作它,但没有成功。谁能帮我一下吗?
此外,前缀将在不同图形之间更改。所以,如果它要求前缀,那就太好了。
任务#2最终目标是,一旦我将前缀添加到项目编号,我将复制并修改它,以将前缀添加到巴林标记(这是一个气球)。这样,我将为ITEM_编号和BALIN标记使用相同的前缀+编号。
任务#3
一旦这是做了,一切安排在绘图上,我想一个实用程序重新编号的项目编号删除前缀和重新递增它。在这样做的同时,它应该同时在两个地方发生变化(因为前缀+数字在两个地方都是精确的)。这里需要技巧的是,多个气球可以引用相同的数字,因为该部分可以在多个地方使用。
不确定这听起来是否可行?但如果真的这样做了,那将为我节省大量时间,因为我的一些图纸有大约50多个项目和气球需要安排。
(defun c:incatt ( / tag pre ss1 ) (vl-load-com)
(setq tag "ADDRESS" pre "ADDRESS: ")
(if (setq *num* (cond ( (getint (strcat "\nSpecify Starting Number" (if *num* (strcat " <" (itoa *num*) "> : ") ": ")))) ( *num* )))
(while (setq ss1 (ssget "_+.:E:S:L" '((0 . "INSERT") (66 . 1))))
(if
(vl-some
(function
(lambda ( x )
(if (eq tag (vla-get-tagstring x))
(not (vla-put-textstring x (strcat pre (itoa *num*))))
)
)
)
(vlax-invoke (vlax-ename->vla-object (ssname ss1 0)) 'getattributes)
)
(setq *num* (1+ *num*))
(princ (strcat tag " Attribute not found."))
)
)
)
(princ)
)
我不确定我是否理解任务2和3的工作原理?“BALIN”是与“ITEM\u NUMBER”在同一块中的属性标记吗?我认为可能需要更多的解释。
任务1本身并没有任务那么难。
(defun c:incatt2 ( / tag pre ss1 ) (vl-load-com)
(setq tag "ITEM_NUMBER")
(if (/= (setq pre (getstring T (strcat "\nEnter Prefix for Attribute \"" tag "\": "))) "")
(while (setq ss1 (ssget "_+.:E:S:L" '((0 . "INSERT") (66 . 1))))
(if
(null
(vl-some
(function
(lambda ( x )
(if (eq tag (vla-get-tagstring x))
(not (vla-put-textstring x (strcat pre (vla-get-textstring x))))
)
)
)
(vlax-invoke (vlax-ename->vla-object (ssname ss1 0)) 'getattributes)
)
)
(princ (strcat "Attribute " tag " not found."))
)
)
)
(princ)
) 嗨,克林特。
任务2是我将复制任务1路由的内容,只需将标记名从ITEM_NUMBER更改为BALIN。物料编号实际上是物料清单(BOM)的一部分,BALIN是对应于物料编号的气球。我的工作需要从其他图纸复制部分BOM表(一次可能是2或3个图纸),然后根据标准重新构造目标图纸BOM表(即首先是所有螺钉,然后是所有垫圈等)。因此,通常我会从其他图纸复制部分BOM表,并添加前缀,如“A”,并从其他图纸复制带有前缀“A”的气球。类似地,“B”和“C”等。。。。在将新项目插入到图形中后,我将重新构造bom表,将类似项目分组在一起。一旦我完成了所有事情,我将使用Lee的Lisp例程增加BOM的项目编号。此时,在执行增量时,我正在寻找新例程是否也可以自动触发气球更改(基于属性匹配)。实际上,这也将帮助我减少检查时间,因为Lisp可以减少错误气球编号的错误。
这个解释有用吗? 如果没有其他人帮忙,我明天可能会看一看。我不得不说,我听到的听起来像是它适合田地。如果使用链接到引出序号中巴林值的字段替换ITEM_NUMBER属性,则只需更新引出序号中的属性值,BOM表就会自动更新 我认为在这种情况下,如果可能的话,包含气球和BOM表示例的示例图纸也会有所帮助?也许我之前建议的是背对背?如果BOM表中有多个引出序号和一个条目,则字段将转到另一个方向。。。 遗憾的是,由于一些技术问题,我不能与fields一起去。现在,如果通过lisp很难,也不值得付出努力,我可以只解决任务1,然后手动完成其余的部分。 嗨,Shailujp
您正在寻找任务3的一个相当具体的结果,根据可用的信息,我确实觉得不值得付出努力。
我所做的是编写一个非常通用的例程,允许您添加前缀、后缀或在特定属性的值内搜索和替换。
如果我理解您的意图,那么您就是在通过添加前缀来区分来自不同图形的数据。这个函数允许你这么做;你可以在开始、结束或两者都做。
然后,在目标图形中对所有信息进行整理和排序后,您希望将参照更改为另一个代码,仍然是唯一的代码,但反映了新的整理顺序?搜索和替换将允许您这样做。
这是一个通用的解决方案,只有在我正确理解问题的情况下,它才会有帮助。希望如此。
(defun c:modatt ( / _Replacetext pref repl srch sscnt ss1 suff tag )
(vl-load-com)
(defun _Replacetext ( string pat newstr / found patlen replen strtsrch )
(setq patlen (strlen pat)
replen (strlen newstr)
strtsrch 0
)
(while (setq found (vl-string-search pat string strtsrch))
(setq string (strcat (substr string 1 found) newstr (substr string (+ found patlen 1)))
strtsrch (+ found replen)
)
)
string
)
(cond
((= (setq tag (getstring "\nEnter the Tag name of the Attribute to change: ")) "")
(princ "\nNeed a tag name to proceed... exiting...")
)
((progn
(setq pref (getstring T (strcat "\nEnter Prefix to add to Attribute \"" tag "\" (or ENTER for none): "))
suff (getstring T (strcat "\nEnter Suffix to add to Attribute \"" tag "\" (or ENTER for none): "))
srch (getstring T (strcat "\nEnter String to Search for in Attribute \"" tag "\" (or ENTER for none): "))
)
(vl-every
(function
(lambda ( x )
(= x "")
)
)
(list pref suff srch)
)
)
(princ "\nNothing to do... exiting...")
)
(T
(and (/= srch "")
(setq repl (getstring T (strcat "\nEnter String to Replace " srch " with in Attribute \"" tag "\" (or ENTER to remove it): ")))
)
(if (setq ss1 (ssget "_:L" '((0 . "INSERT") (66 . 1))))
(repeat (setq sscnt (sslength ss1))
(vl-some
(function
(lambda ( x )
(if (eq tag (vla-get-tagstring x))
(not
(vla-put-textstring x
((lambda ( str )
(strcat pref
(if (= srch "") str (_Replacetext str srch repl))
suff
)
)
(vla-get-textstring x)
)
)
)
)
)
)
(vlax-invoke (vlax-ename->vla-object (ssname ss1 (setq sscnt (1- sscnt)))) 'getattributes)
)
)
(princ "\nNothing selected."))
)
)
(princ)
) 嗨,克林特,
我认为您的第一个程序(incatt2)非常适合添加前缀,这解决了我的需求,因为我只针对ITEM\u编号。一旦添加了前缀,当我按照所需的顺序进行排列时,我将使用incatt函数,该函数将只对物料清单上的所有标签重新编号。这就是我打算使用它的方式。气球无论如何都是手工制作的,因为它们在图纸上随处可见,不可能按顺序选择。
当我使用incatt2时,我认为如果它允许我选择多个(预选择或post但多个),而不是单个选择,那会更好,因为我有多个标记作为前缀。
我的巴林标签遇到了另一个问题。我刚刚发现有两种类型的气球,标签名要么是巴林,要么是X(必须是新旧混合在一起的东西)。我想知道是否可以将所有标记(ITEM_NUMBER、BALIN或X)添加到incatt2 lisp中,然后我只需键入所需的前缀并继续选择这些块中的任何一个。我认为这听起来很符合逻辑,因为我必须同时为项目编号和气球添加相同的前缀。你同意吗?
MODATT程序也是一个很好的通用工具,可以更新任何给定的attirbute。这里唯一的缺点是我必须知道标记名,而不是从该属性的选择中自动找到。这听起来可能吗?这样,我只需选择标签(它会自动从选择中知道标签名称),然后要求我添加/删除前缀/后缀?
现在,我只会坚持incatt2来完成我的工作。
谢谢你的帮助。 嗨,Shailujp,
这相当于编写incatt2来处理插入的选择集,而不是单独拾取和处理它们。为了解决一系列可能的属性标记名称的问题,它将对照标记列表(可以编辑)检查所有属性。如果标记名在列表中,它将向其属性值添加前缀。
(defun c:prefatts ( / pref sscnt ss1 tags )
(vl-load-com)
(setq tags (mapcar
'strcase
'("ITEM_NUMBER" "BALIN" "X") ;<==== Put attribute TAG names here inside the list
)
)
(cond
((= (setq pref (getstring T "\nEnter Prefix to add to the selected attributes: ")) "")
(princ "\nNothing to do... exiting...")
)
((progn
(if (null (cadr (ssgetfirst)))
(princ "\nSelect Blocks to Modify: ")
)
(setq ss1 (ssget '((0 . "INSERT") (66 . 1))))
)
(repeat (setq sscnt (sslength ss1))
(foreach x (vlax-invoke (vlax-ename->vla-object (ssname ss1 (setq sscnt (1- sscnt)))) 'getattributes)
(if (member (strcase (vla-get-tagstring x)) tags)
(vla-put-textstring x (strcat pref (vla-get-textstring x)))
)
)
)
)
(T
(princ "\nUnsuitable selection... Exiting...")
)
)
(princ)
)
当我试图修改它以增加字母时,它给了我stringp 66错误。有人能帮我吗?
我需要这个来将字母从A增加到Z,当这个过程结束时,下一个数字应该是AA,AB,AC等等。这听起来可能吗?
修改代码:
(defun c:INCATT ( / tag pre ss1 ) (vl-load-com)
(setq tag "ITEM_NUMBER" pre "")
(if (setq *num* (cond ( (getint (strcat "\nSpecify Starting Number"(if *num* (strcat " <" (itoa *num*) "> : ") ": ")))) ( *num* )))
(while (setq ss1 (ssget "_+.:E:S:L" '((0 . "INSERT") (66 . 1))))
(if
(vl-some
(function
(lambda ( x )
(if (eq tag (vla-get-tagstring x))
(not (vla-put-textstring x (strcat pre (itoa *num*))))
)
)
)
(vlax-invoke (vlax-ename->vla-object (ssname ss1 0)) 'getattributes)
)
(setq *num* (1+ *num*))
(princ (strcat tag " Attribute not found."))
)
)
)
(princ)
)
提前感谢!! 有人能帮我吗?
页:
[1]
2