众所周知"cmdnames"变量常用于检测当前是否透明指令状态的,在非透明指令状态时,应返回""。
但无意中发现,在lsp中,执行完align命令后(操作对象必须是图块才回出现以下的特殊情况),再执行explode,则会出现在非透明指令状态时,"cmdnames"变量返回"ALIGN",不再是""了。
有兴趣的朋友可以试试。
(defun c:test () (setq en (car (entsel "\n请选择图块:"))) (setq p1 (getpoint "\n原第一点:") p2 (getpoint p1 "\n新第一点:") p3 (getpoint "\n原第二点:") p4 (getpoint p3 "\n新第二点:") ) (command "align" en "" p1 p2 p3 p4 "" "y") (command "explode" en) )
(getvar "cmdnames")
把explode改为以下写法,也是解决不了的。只是把炸开这一步除去,手动执行,才能解决。
;(vla-explode obj) ;(vlax-invoke-method obj 'explode) ;(vlax-invoke obj 'Explode)
左思右想,要同时实现align又explode,同时不影响"cmdnames"该怎么办呢?
我自己起初的思路有二,
1、改写"cmdnames"的返回值
2、用其它方法去代取(command "explode" en)
可惜这两个方法都行不通,请问如何解决? |