递归的BUG很多……
(defun choose_insert ()
(princ "\n***必须选择属性块!***")
(if (setq a (entsel))
(progn (setq b (vlax-ename->vla-object (car a)))
(if (= (vla-Get-ObjectName b) "AcDbBlockReference")
(if (= (vla-Get-HasAttributes b) :VLAX-TRUE)
(princ "ok")
(choose_insert)
)
(choose_insert)
)
)
(choose_insert)
)
b
)
递归没搞过,不清楚状况! (defun choose_insert (/ blk)
(terpri)
(while (not
(and (setq blk (car (entsel "\r***必须选择属性块!***")))
(equal (cdr (assoc 66 (entget blk))) 1)
)
)
)
blk
) 要理解代码,否则,不要玩递归,递归在很多语言里面是被诟病的一种写法 本帖最后由 dcl1214 于 2024-11-12 22:07 编辑
(defun choose_insert (/ e ents go obj pick)
(setq go t)
(setq ents nil)
(setq i 1)
(while (and go (<= i 2))
(setq pick (vl-catch-all-apply 'entsel (list "必须选择属性块")))
(if (vl-catch-all-error-p pick)
(progn (setq go nil)
(setq pick nil)
(alert "按下了键盘esc,程序退出了")
)
)
(and (setq e (car pick))
(setq obj (vlax-ename->vla-object e))
)
(if (and obj
(= (vla-Get-ObjectName obj) "AcDbBlockReference")
(= (vla-Get-HasAttributes obj) :VLAX-TRUE)
)
(progn (setq ents (cons e ents)) (setq go nil))
)
(setq i (1+ i))
(if (> i 2)
(alert "给了您2次机会了,还是没选中,赶快将鼠标扔了")
)
(print)
)
ents
)
明明有最简单的写法,非要搞最垃圾的写法 dcl1214 发表于 2024-11-12 21:54
要理解代码,否则,不要玩递归,递归在很多语言里面是被诟病的一种写法
以后不玩了,哈哈 gaics 发表于 2024-11-13 08:34
以后不玩了,哈哈
递归里尽量不要出现等价转换,要原汁原味… 谢谢分享谢谢分享谢谢分享谢谢分享 dcl1214 发表于 2024-11-12 22:04
明明有最简单的写法,非要搞最垃圾的写法
杜总威武:lol,加上一句:这手也是帕金森,赶紧吃药吧:lol gaics 发表于 2024-11-12 13:12
未选中属性快则继续选。
(defun tt(/ e)
(while(not(setq e(ssget":E:S"'((0 . "insert")(66 . 1))))))
e)
页:
1
[2]