LISP例程请求
我目前正在努力使用AutoCAD electrical,尝试使用自动导线编号来完成我希望它完成的任务。我现在已经放弃了,决定用Lisp程序的语言做我想做的事(现在)。有人能帮我凑点东西给我老板看看吗?我只需要用一些现有属性的串联来填充我的两个新属性。易于理解的
属性F-Term01=Tag1&“-”&Term01
属性F-Term02=Tag1&“-”&Term02
现在,一个简单的“选择块”就可以了,但当我开始做更多的学习时,这种可能性会增加。
非常感谢,但如果有人能帮我做这件事,我就不喝啤酒了。 戴夫,
我相信这可以很快完成,当我一分钟后-但我不确定我是否理解你的符号在那里。。。
我说得对吗
属性标签=F-Term01
值需要为:-Term01
对的 对不起,我今天晚上试图关机时正在打字
不急,我明天才能看,但是。。。
我需要将名为“TAG1”的属性值和一个破折号以及名为“TERM01”的属性值放入名为“F-TERM01”的属性中
(defun c:TEst (/ o)
(if (setq o (car (entsel "\nSelect block: ")))
(if (eq (vla-get-objectname (setq o (vlax-ename->vla-object o)))
"AcDbBlockReference"
)
(if (eq (vla-get-hasattributes o) :vlax-true)
(foreach a (vlax-invoke o 'GetAttributes)
((lambda (s)
;;; (vla-put-textstring a (strcat s "=" (substr s 3)))
(cond
((eq (strcase s) "TAG1") (vla-put-textstring a "-"))
((eq (strcase s) "TERM01")
(vla-put-textstring a "F-Term01")
)
)
)
(vla-get-tagstring a)
)
)
(princ "\nBlock has no attributes!")
)
(princ "\nObject must be a block!")
)
)
(princ)
) 谢谢艾伦。我想知道你们俩谁会是第一个。
我明天上班时会试试看。
哦,顺便问一下,你发现最初的请求是2个属性了吗。F-Term01和F-Term02。我相信我能想出如何添加它,但你介意帮我添加吗,pplleeaassee。 没问题。我有几分钟空闲时间等待午餐的到来。 试一试Dave:
(defun c:Dave ( / ent atts tag1 )
(vl-load-com)
;; Lee Mac~18.05.10
(if
(setq ent
(SelectifFoo
(lambda ( x )
(and
(eq "INSERT" (cdr (assoc 0 (entget x))))
(= 1 (cdr (assoc 66 (entget x))))
)
)
"\nSelect Block to Update: "
)
)
(progn
(setq atts
(mapcar
(function
(lambda ( attrib )
(cons
(strcase
(vla-get-TagString attrib)
)
attrib
)
)
)
(vlax-invoke
(vlax-ename->vla-object ent) 'GetAttributes
)
)
)
(if (and (setq tag1 (cdr (assoc "TAG1" atts)))
(setq tag1 (vla-get-TextString tag1)))
(mapcar
(function
(lambda ( stag dtag )
(if (and (setq x (cdr (assoc stag atts)))
(setq y (cdr (assoc dtag atts))))
(vla-put-TextString y
(strcat tag1 "-" (vla-get-TextString x))
)
)
)
)
'("TERM01" "TERM02")
'("F-TERM01" "F-TERM02")
)
)
)
)
(princ)
)
(defun SelectifFoo ( foo str / sel ent )
(while
(progn
(setq sel (entsel str))
(cond
(
(vl-consp sel)
(if (not (foo (setq ent (car sel))))
(princ "\n** Invalid Object Selected **")
)
)
)
)
)
ent
)
谢谢各位,
我试了李的第一次,一旦我记得改变我的区块(忘记保存昨晚),它做了我需要的。
Alan,你的用破折号替换了Tag1,用字符串F-Term01替换了属性Term01,但保持了属性F-Term01不变(空)。但这可能是我的描述。李以前为我写过一些套路,所以以前也听过我的喃喃自语
不过有几个问题。
如果TermXX有值,是否可以将例程更改为仅填充F-TermXX?因此,如果TermXX有值,则两个F-Term属性都会填充,如果只有一个项有值,则只填充一个,如果没有给定TermXX值,则两者都不会填充。AcadE的性质确保Tag1始终具有价值。
最后。。。。。。
我们将该值提取到文本文件中,用于打印热缩线标记。将层“套圈”上的所有文本或名为“F-*”的所有属性提取到文本文件中是否容易(不要求这样做)?按层还是按标记名,哪个更容易? 我很高兴它对你有用Dave
至于你的另一个请求-按层将更容易,因为在使用ssget过滤器时,没有针对属性的直接过滤方法,因此必须依次查看每个块-不是说无法完成,而是按层提取文本更容易。
我会在演讲结束后一分钟修改代码 谢谢李。
如果我去VB,ByLayer也适合我。未来的净路线
我已经向我的老板展示了我的提议,他对这种方法很满意。这几天不需要强迫AcadE屈服。我现在可以在下周末去度假了,我有一个明确的想法:眨眼。
好好讲一讲。
页:
[1]
2