SELFCAD 发表于 2022-7-6 08:23:59

调试帮助

(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个属性的单个块。。。很多错误。。帮助

BIGAL 发表于 2022-7-6 08:40:12

首先,你从一个defun自身的“dxf”中调用它,这是一个混乱的开始,defun用于需要来回跳转到它们的地方,而不仅仅是lisp的自上而下运行。将SETVAR放在defun外的起始位置。最好描述一下你想做什么。

SELFCAD 发表于 2022-7-6 08:57:35

我试图用一个具有1个属性的块替换10个具有1个属性的块。。。但是为了保持这10个块的相同属性。。。因此,10个旧块是*block1type,1 attrib,新的块是*block2type,i attrib。

pBe 发表于 2022-7-6 09:20:18

与应用程序结合时需要考虑的因素(即本机命令插入)
插入点=10(也考虑UCS)
比例=41-43(取决于块的比例特性)
旋转=50
层=8(当前到目标层)
属性0
收件人0
Osmode模式
 
最好创建一个通用例程,按标记/顺序/标记数量进行匹配
 
HTH公司

Lee Mac 发表于 2022-7-6 09:32:52

 
从“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]
查看完整版本: 调试帮助