调试帮助
(defun C:rpb ()(defun dxf (code ent) (cdr (assoc code (entget ent))))
(setvar 'Attreq 1)
(setvar 'Attdia 1)
(prompt "Select old blocks: ")
(setq blv (ssget "_:L" '((0 . "INSERT"))))
(setq bln (car (entsel "\nSelect new block: ")))
;(setq bln (getstring "\nEnter new block name: "))
(setq atr (dxf 1 bln))
(repeat (setq i (sslength blv))
(setq e (ssname blv (setq i (1- i))))
(command
"_.-insert"
bln
(cdr (assoc 10 (entget e)))
"" "" ""
atr
)
(command "_.erase" e "")
)
)
尝试将具有1个属性的某些块替换为具有1个属性的单个块。。。很多错误。。帮助 首先,你从一个defun自身的“dxf”中调用它,这是一个混乱的开始,defun用于需要来回跳转到它们的地方,而不仅仅是lisp的自上而下运行。将SETVAR放在defun外的起始位置。最好描述一下你想做什么。 我试图用一个具有1个属性的块替换10个具有1个属性的块。。。但是为了保持这10个块的相同属性。。。因此,10个旧块是*block1type,1 attrib,新的块是*block2type,i attrib。 与应用程序结合时需要考虑的因素(即本机命令插入)
插入点=10(也考虑UCS)
比例=41-43(取决于块的比例特性)
旋转=50
层=8(当前到目标层)
属性0
收件人0
Osmode模式
最好创建一个通用例程,按标记/顺序/标记数量进行匹配
HTH公司
从“rpb”的函数定义中定义函数“dxf”没有错,事实上,我一直这样做是为了定位子函数,以确保其范围保持在主函数的范围内。
考虑这个例子:
(defun c:test ( / _sub str )
(defun _sub ( msg )
(alert (strcat "This is my message to you\n\n" msg))
)
(setq str (getstring t "\nEnter a Message: "))
(_sub str)
(princ)
)
函数“u sub”将在函数“c:test”求值时定义,然后在函数“c:test”完成时停止定义。这有很多好处:从安全角度来看,因为在“c:test”函数之外无法访问该函数;我可以肯定,符号“u-sub”使用的是我给它的定义,因为符号“u-sub”位于“c:test”函数定义中。
诚然,OP没有将其函数/变量本地化。
页:
[1]