全靠我自己。。。有点。属性
(defun c:awz ( / sUndo enx atent atent_list)(setq sUndo (vlax-invoke (vla-get-ActiveDocument (vlax-get-acad-object)) 'StartUndoMark))
(setvar 'errno 0)
(while (/= 52 (getvar 'errno))
(setvar 'errno 0)
(setq atent (car (nentsel "\nSelect multiline attribute to change Defined Width to 0: ")))
(cond
( (= 7 (getvar 'errno))
(prompt "\nNothing Selected.")
)
( (null atent)
(prompt "\nExit.")
)
( (/= "ATTRIB" (cdr (assoc 0 (setq enx (entget atent)))))
(prompt "\nSelected object is not an Attribute.")
)
( (= 4 (logand 4 (cdr (assoc 70 (tblsearch "layer" (cdr (assoc 8 enx)))))))
(prompt "\nSelected Attribute is on a locked layer.")
)
(if atent (setq atent_list (entget atent))
(setq atent_list (subst (cons 41 0) (assoc 42 atent_list) atent_list ))
(entmod atent_list)
))
(if sUndo (vlax-invoke (vla-get-ActiveDocument (vlax-get-acad-object)) 'EndUndoMark))
)(princ)
)(vl-load-com)(princ)
通过研究Lee Mac和Grrr等专业人士过去的代码,我能够自己创建这个lisp。
在工作中,我们有一个程序,可以插入具有多行属性的块,其中包含信息集,每个值都是它自己的文本行。
不幸的是,有时,我的意思是,大多数时候,如果信息中有空格,它会“换行”并创建新行。
双击属性,然后“…”是非常烦人的然后更改有时超过100个属性的宽度。
出于挫折,这一代码诞生了。
我欢迎大家尽可能多地批评这段代码,我喜欢学习别人是如何写的。我补充的不需要,我需要的不需要,还有更简单的方法。什么都不要隐瞒!
如果我没有赞扬那些启发我的代码的创作者,我道歉。你们应该得到所有的赞扬。 确实存在一些问题。。。
我能给你的最好建议是:在缩进代码时要更加小心。这将帮助您更好地理解程序结构。有了适当的缩进,您可能会注意到cond语句中奇怪的if语句。
注意,在整个程序中,sUndo为零,因此永远不会调用EndUndoMark。
(defun c:awz ( / doc enx atent)
(vla-startundomark (setq doc (vla-get-activedocument (vlax-get-acad-object))))
(setvar 'errno 0)
(while (/= 52 (getvar 'errno))
(setvar 'errno 0)
(setq atent (car (nentsel "\nSelect multiline attribute to change Defined Width to 0: ")))
(cond
( (= 7 (getvar 'errno))
(prompt "\nNothing Selected.")
)
( (null atent)
(prompt "\nExit.")
)
( (/= "ATTRIB" (cdr (assoc 0 (setq enx (entget atent)))))
(prompt "\nSelected object is not an Attribute.")
)
( (= 4 (logand 4 (cdr (assoc 70 (tblsearch "layer" (cdr (assoc 8 enx)))))))
(prompt "\nSelected Attribute is on a locked layer.")
)
( T
(entmod (append enx '((41 . 0.0))))
)
)
)
(vla-endundomark doc)
(princ)
)
(vl-load-com)
(princ) ... 您是否尝试重新定义块?这显然会更有效率。
它看起来比我的版本更干净。也更容易理解。
与在blockeditor中将属性设置为宽度0?然后运行BATTMAN进行同步?这应该行得通,但每一项新工作都必须这样做。这是一个公司计划,我不会搞砸它。 我在上一篇文章中编辑了代码。Gc 41在实体列表中出现两次,我的代码会错误地更改第一次出现的内容。我最初的想法是使用反向。但是,如果两个gc 41项具有相同的值,则仍然存在问题。使用append代替subst解决了这两个问题。
(subst '(41 . 0.0) '(41 . 1.0) '((41 . 1.0) (41 . 1.0))) => ((41 . 0.0) (41 . 0.0)) 谢谢你的夸奖!
但我不认为自己是专业人士,也不认为自己是程序员。我目前的技能对编写代码非常感兴趣。。并向更熟练的用户学习(李·麦克和塔瓦在其中发挥了重要作用)。
我非常感谢他们的帮助,所以我尝试将我实践作品中的任何“版权”翻译成他们/他们的昵称。
作为证明,Roy_043提到了我在之前帖子中发布的示例中的一个错误:
我知道,在这些论坛上,有一些Lisp程序的巨人在游,在沼泽深处,我只是听从塔瓦的建议,尽可能多地参与线程。
这是我的目标。成为一名精通编写代码的人,这里的每个人都很有帮助。
可以因此,为了了解您目前正在处理的问题,请分析以下(entsel)示例:
[颜色=#8b4513];提供了4个示例来显示提示用户使用(entsel)(defun C:test();>>示例#1-简单示例#2版本1-中等示例#2版本2-中等示例#3-平均值
谢谢我一直很感谢反馈,我更感谢这些例子!期待分析!
页:
[1]