请对此进行评论
我已经获得了执行简单操作的一系列命令的原始代码;它们在Acad 14中运行良好,但不会在2010年执行。有什么可识别的问题吗?i、 e列出的“MC27”应该将文本改为MC27,但实际上没有。(defun c:27 () ;ECN MC27 REV BENDS ADD DECIMALS (6/9/08)
(setvar "cmdecho" 0)
(setq obj (entsel "\nPick Location :"))
(setq a "MC27" )
(setq j (strcat a))
(command "change" obj "" "" "" "" "" "" j))
我还有一个PDF附件,显示了DCL所需的选项
它是263 kb,我无法通过Cad tutor附加它。有兴趣看一看的人请发邮件给我mcclain@aaon.com
谢谢你的回复 有几件事,
[列表]
[*]不需要:
[/列表]
您只处理一个字符串,因此不需要连接它。
[列表]
[*]您没有本地化变量,这不是良好的编程实践,函数定义应该类似于:
[/列表]
(defun c:27 (/ obj a)
[列表]
[*]我建议您使用更具描述性的变量名,“obj”可以,但不要使用单个字母。这样代码就会更容易阅读。
[/列表]
[列表]
[*]您需要使用:
[/列表]
(car (entsel "\nPick Text: "))
由于entsel返回一个包含两个元素的列表,第一个是实体名称,第二个是拾取点。
[列表]
[*]我不会使用change命令来更改文本,而是查看entmod。
[/列表]
[列表]
[*]重要提示:您尚未重置系统变量CMDECHO。虽然这在CMDECHO中可能不太明显,但这是一种非常糟糕的做法,可能会导致不期望的结果,尤其是在使用其他sys变量时。
[/列表]
[列表]
[*]我会使用一个条件语句,比如IF函数,以允许漏选或没有用户输入。
[/列表]
[列表]
[*]在程序结束时使用(princ)以干净地退出程序,即抑制最后一个函数返回。
希望这有帮助,
李 谢谢李的提示。如果你想把这段代码加载进去,输入一个文本字符串(任何内容),然后把27输入到命令行,看看为什么它不会把文本改成MC27。
(defun c:27 (/ obj a) ;ECN MC27 REV BENDS ADD DECIMALS (6/9/08)
(setvar "if" 0)
(car (entsel "\nPick Location: "))
(setq a ("MC27")
(setq j (strcat a)
(command "entmod" obj "" "" "" "" "" "" j))
(princ) 它有什么作用?它在我的电脑上不起作用。 您好,谢谢您的关注。
我的目标是获取任意随机文本字符串,然后输入27作为then命令;它会提示用户选择一个点,然后将文本更改为MC27 伙计,很好的努力,但我相信李的观点更像这样
(defun c:27 (/ ss)
(setvar "cmdecho" 0)
(While (not ss) ;Entsel lets you only have one shot at selecting and item, So while lets you have as many attemps
(setq ss (entget (car (entsel "\nSelect text :")))))
(if (= (cdr (assoc 8 ss)) "text") ;Useing a If statement to make sure the item is text.
(entmod ;Entmod is a way of altering entites,
(subst (cons 1 "MC27") (assoc 1 ss) ss)) ;I used Subst, to substatue the text already there,
(Princ "You did not select text")
)
(setvar "cmdecho" 1) ; Turn cmdecho back on.
(princ)
)
花
[列表=1]
[*]如果与nil一起提供,Entget将返回一个错误,因此您的while将无法工作。
[*]“0”是实体类型的DXF代码,而不是8
[/列表] 相反,我是这样想的:
(defun c:27 (/ ent)
(if (and (setq ent (car (entsel "\nPick Text: ")))
(wcmatch (cdr (assoc 0 (entget ent))) "*TEXT"))
(entmod
(subst
(cons 1 "MC27") (assoc 1 (entget ent))
(entget ent)))
(princ "\n** Object is not Text **"))
(princ))
啊,我不知道,我通常会这样做,而寻找文字,但并没有造成我的古怪工作
如果你看文本和多行文字,它们都把dxf 8称为文本,所以我用它代替了wcmatch DXF 8为层:眨眼:
页:
[1]
2