aaacjh 发表于 2012-12-22 11:46:13

真的不可思议!求教。

以下是 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)
)

BDYCAD 发表于 2012-12-25 14:31:56

(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");;这句相呼映。

zyhandw 发表于 2012-12-25 15:23:40

高手解答的真好,顶!
页: [1]
查看完整版本: 真的不可思议!求教。