真的不可思议!求教。
以下是 ZML84前辈留下的一段代码,再下就其中带问号?的地方有诸多不解,还望前辈指点,不胜感激!;;;==========================================
;;;功能:可以框选的修剪
;;;日期:ZML84 于 2007-08-20
;;;==========================================
(defun C:uu (/ S1 S2 PT1 PT2 CMDECHO_OLD OSMODE_OLD I XX)
(princ "\n★★可以框选的修剪★★")
(setq CMDECHO_OLD (getvar "CMDECHO")
OSMODE_OLD(getvar "OSMODE")
)
(setvar "CMDECHO" 0)
(setvar "OSMODE" 0)
(princ "\n选择修剪边界:")
(if (setq S1 (ssget))
()
(setq S1 (ssget "all"));;若没有选取边界,就将全部对象作为边界
)
(while (setq PT1(getpoint"\n选择要修剪的对象:"))
(if (and (setq PT2
(getcorner PT1
" >>>第二角点: "
)
)
(setq S2 (ssget "c" PT1 PT2))
)
(progn
(command "_.undo" "be");;开始
(command "_.trim" S1 "");;command 01
(setq I 0)
(repeat (sslength S2)
(command
(list (ssname S2 I) PT1)
);;该表(图元名 坐标)有何作用?
(setq I (1+ I))
)
(command "");;空command不知与command 01有何种链接关系?
(command "_.undo" "e");;结束与开始有何作用?
)
(princ "\n★未选择到对象。")
)
) ;_结束 while
(setvar "OSMODE" OSMODE_OLD)
(setvar "CMDECHO" CMDECHO_OLD)
(princ)
)
(command "_.undo" "be");;命令还原点开始,意思是下面程序可能使用TRIM修剪命令处理了很多对象,当处理完后,用户用UNDO还原上一步时,下面程序所处理的很多步就当一一步回退到这里,所以要在这里做个回退点。
(command "_.trim" S1 "");;command 01 这里是开始执行修剪命令,执行时,程序选到的选集S1 当作修前边界对象,
(setq I 0)
(repeat (sslength S2)
(command
(list (ssname S2 I) PT1)
);;该表(图元名 坐标)有何作用?为了让LISP程序正确知道修剪的对象与修剪点LISP程序需样这样(图元名 点)的方式进行正确的点到修剪位。就和(entsel)涵数一样的返回值一个意思。
(setq I (1+ I))
)
(command "");;空command不知与command 01有何种链接关系?;因为修剪命令修前完对象后,不会自动退出该命令,所以要加一下“”代表输入 一次空格或回车键的意思,让修剪命令结束。程序LISP或其他语言都必需遵守的规定,调用CAD系统的命令一定要每个步骤写完才能让命令顺利完成所需要的要求。
(command "_.undo" "e");;结束与开始有何作用?这句与前面的(command "_.undo" "be");;这句相呼映。
高手解答的真好,顶!
页:
[1]