明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1998|回复: 2

真的不可思议!求教。

[复制链接]
发表于 2012-12-22 11:46 | 显示全部楼层 |阅读模式
以下是 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)
)

发表于 2012-12-25 14:31 | 显示全部楼层
(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");;这句相呼映。
发表于 2012-12-25 15:23 | 显示全部楼层
高手解答的真好,顶!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-26 14:30 , Processed in 0.970419 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表