请原谅我的无知,但当我加载此例程时,我会得到以下结果:
命令:(加载“../”)CB:REPLACEATTRIBUTEVALUE
如何初始化主函数?我键入test11,但它无法识别。
此外,在那里的某个地方是否需要vl load com?请原谅我的无知,我仍处于初级阶段。 当有疑问时,把Vl加载com放在一个自动加载的lisp中,这样它总是在启动时完成。 伙计们,大部分是好消息!Commandobill,你的代码很好用!
然而,我忘了提到,我有3个标题栏,不是两个(对不起)。设置块后,它将保留在第一个图形中找到的标题栏。因此,如果第一个图形具有“drawing\u Sheet\u 22x34”,则当我将其作为批处理(脚本模式)运行时,它将仅使用该标题栏更新图形。但是,如果我将lisp拖放到单个图形中,它会修复所有图形,而不管标题栏如何。
我在if语句的末尾添加了(ssdel ent blockSS),对拖放没有影响,但阻止了lisp在多批处理中工作。
一定有一个可变的问题。如何重置变量,以便在下一个图形上以blocks开始,并找到图形中的哪个标题栏? 就主要功能而言,仍然不是我最好的工作,但完成了工作。
(vl-load-com)
(defun c:test11 ( / blockSS blockList attName attNumber)
(if
(setq blockSS (ssget "X" (list (cons 0 "INSERT") (cons -4 "<xor") (cons 2 "Drawing_Sheet_22x34") (cons 2 "Drawing_Sheet_22x34-H") (cons -4 "xor>"))))
(progn
(setq blockList (mapcar 'cadr (ssnamex blockSS)))
(setq attName (vla-get-tagstring (car (cb:matchAtts "REV" "REV" (vlax-ename->vla-object(car blockList))))))
(setq attNumber (substr attName (strlen attName) 1))
(mapcar '(lambda (x)
(cb:replaceAttributeValue (strcat "DATE" attNumber) "29-JUN-15" (vlax-ename->vla-object x))
(cb:replaceAttributeValue (strcat "DESC" attNumber) "BASELINE UPDATE - 101/111 RENOVATIONS" (vlax-ename->vla-object x)))
blockList)
))
(princ)
)
(defun cb:matchAtts (baseAttName attPrefix Blk / )
(setq baseAtt (car (vl-remove-if-not '(lambda (x) (= baseAttName (vla-get-tagstring x))) (cb:variantToList (vla-getattributes Blk)))))
(vl-remove-if-not '(lambda (x)
(and
(wcmatch (vla-get-tagstring x) (strcat attPrefix "*"))
(not (eq (vla-get-tagstring x) baseAttName))
(eq (vla-get-textstring x) (vla-get-textstring baseAtt))
))
(cb:variantToList (vla-getattributes Blk)))
)
(defun cb:variantToList (theVariant / )
(if (= 'variant (type theVariant))
(vlax-safearray->list (vlax-variant-value theVariant))
nil
)
)
;;;;;Replace Attribute Value;;;;;;;;;
;;;;;By: CommandoBill;;;;;;;;;;;;;;;;;
;;;;;01/24/15;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;Send a block to this function with an attribute you want to replace with a new value
;;;;attName = the name of the attribute which value you want to replace
;;;;attNewVal = the new value you want in the attribute
;;;;Blk = the vla-object verision of the block which the attribute is in
(defun cb:replaceAttributeValue (attName attNewVal Blk / )
(mapcar '(lambda (x) (if (= attName (vla-get-tagstring x))
(vla-put-textstring x attNewVal))) (cb:variantToList (vla-getattributes Blk)))
(princ)
)
我刚刚发布的内容应该适用于您绘图中的所有标题栏。 再次感谢Commandobill。这帮我学到了很多,也解决了我最初的要求!
如果它真的达到了这么高的速度,并且速度框达到了最大值,那么最后一个速度总是最后一个吗?如果不匹配呢?它是否会“冲击”转速*值?
13
12
11
10
9
如果答案是否定的,那你怎么办?
是否使用多个布局选项卡?
Tblocks在模型空间上吗?
每个图形是否有一个以上的Tblock?
人们必须考虑达·鲍尔兹的所有条件,因此才有问题。
pBe公司 每个标题栏有不同数量的修订。例如,水平标题栏有4个修订的空间,因此有REV1、REV2、REV3和REV4。假设REV为1。REV1为0,REV2为1。因此,REV2和REV具有匹配的值。REV3和REV4还没有值。此外,我已经有了一个例程,一旦修订区域被填满,就会将修订向下移动。我不需要删除任何修订信息。我要做的就是找到正确的DATE*和DESC*属性并更改它们的值。
每个图形只有一个布局(布局1),所有标题栏都在图纸空间中。
你的意思是REV和REV*标记的匹配值正确吗?我的问题的重点是,如果没有对手怎么办?我相信只要有匹配项,就很容易找到正确的日期和描述。我只是提出这个问题,以防这种情况发生。
无论如何,我看到Commandobills的代码对你有用,现在没有必要混淆这个问题。
干杯
pBe公司 啊,说得好。在这种情况下,总会有一场比赛。基本上,我要做的是返回并将最新版本的所有日期和描述更改为相同的日期和描述。否则,我必须手动返回并重复更改它们。因为它们都是一样的,所以脚本节省了几个小时。此外,由于它们都是一样的,现在我可以很容易地进入并在excel中更新数据库。谢谢你的意见。
页:
1
[2]