明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1771|回复: 3

[提问] 附件这个快速选择上次选择集的程序有时选不了,请高手们看看,能改的帮忙改一下!

[复制链接]
发表于 2014-3-10 09:10:31 | 显示全部楼层 |阅读模式
;;;建立选择集----获取最后生成的图元选择集……程序一
;;;支持COPY中途取消
;;;

;; LUCAS(龍龍仔)的 j.vlx 支持的命令集
;;("3DARRAY" "ARRAY" "-ARRAY" "BLOCK"
;; "-BLOCK" "BOUNDARY" "-BOUNDARY" "BREAK"
;; "COPY" "DTEXT" "EXPLODE" "INSERT"
;; "-INSERT" "LEADER" "LINE" "MIRROR"
;; "MIRROR3D" "OFFSET" "QDIM" "QLEADER"
;; "SKETCH" "SOLPROF" "TEXT" "-TEXT")

(DEFUN *just_ss* ()
  (VL-LOAD-COM)
  (SETQ        *cmd_lst (LIST (LIST "3DARRAY")
                       (LIST "_3DARRAY")
                       (LIST "ARRAY")
                       (LIST "-ARRAY")
                       (LIST "_ARRAY")
                       (LIST "COPY")
                       (LIST "_COPY")
                       (LIST "EXPLODE")
                       (LIST "_EXPLODE")
                       (LIST "LINE")
                       (LIST "_LINE")
                       (LIST "OFFSET")
                       (LIST "_OFFSET")
                       (LIST "MIRROR")
                       (LIST "_MIRROR")
                       (LIST "MIRROR3D")
                       (LIST "_MIRROR3D")
                       (LIST "PASTECLIP")
                       (LIST "_PASTECLIP")
                       (LIST "PASTEBLOCK")
                       (LIST "_PASTEBLOCK")
                       (LIST "PASTEORIG")
                       (LIST "_PASTEORIG")
                       (LIST "PASTESPEC")
                       (LIST "_PASTESPEC")
                 ) ;_ 监视的相关命令
  )
  (SETQ *cmdlst (MAPCAR 'STRCASE (MAPCAR 'CAR *cmd_lst)))
  (MAPCAR '(LAMBDA (x) (VLR-COMMAND-REACTOR nil x)) ;_ 命令监视反应器
          (LIST        '((:VLR-COMMANDWILLSTART . cmd_start)) ;_ 命令开始时调用……
                '((:VLR-COMMANDENDED . cmd_end)) ;_ 命令结束时调用……
                '((:VLR-COMMANDCANCELLED . cmd_cancel)) ;_ 命令取消时调用……
          )
  )
  (PRINC)
)

;;;
(DEFUN cmd_start (calling-reactor startinfo /) ;_ 命令开始时调用……
  (FOREACH n *cmd_lst
    (IF        (= (STRCASE (CAR startinfo)) (STRCASE (CAR n))) ;_命令反应器返回信息如果与设置的命令相同
      (ea:setmark)
    )
  )
)

;;;
(DEFUN cmd_end (calling-reactor endinfo / cmd) ;_ 命令结束时调用……
  (SETQ cmd (CAR endinfo))
  (IF (MEMBER cmd *cmdlst)
    (ea:getss)
  )
)

;;;
(DEFUN cmd_cancel (calling-reactor cancelinfo / cmd) ;_ 命令取消时调用……
  (SETQ cmd (CAR cancelinfo))
  ;;(PRINC (= (STRCASE cmd) (STRCASE "copy")))
  (IF (AND (MEMBER cmd *cmdlst)
           (OR (= (STRCASE cmd) (STRCASE "COPY")) (= (STRCASE cmd) (STRCASE "_COPY")))
      )
    (ea:getss)
  )
)

;;用于模型空间的设置标记及获取标记后实体
;;适用 CAD2000+ 以上版本
;;==============================================
;;程序思路:利用 entlast 实体的 ObjectID 作标记
;;          获取选择集时,由空间最后一个实体
;;          一个个往前找, 当实体的 ID 大于标
;;          记的 ID 时为新生成实体
;;==============================================

;;;设置标记
(DEFUN ea:setmark ()
  (IF (ENTLAST)
    (PROGN
      (IF $yb_last_entity_mark
        (SETQ $yb_last_entity_mark nil)
      )
      (SETQ $yb_last_entity_mark
             (VLA-GET-OBJECTID
               (VLAX-ENAME->VLA-OBJECT (ENTLAST))
             )
      )
    )
  )
  (PRINC)
)

;;;获取标记后生成的实体
(DEFUN ea:getss        (/ obj modelspace number) ;_ *get_xz_ss* 全局变量
  (SETQ        modelspace (VLA-GET-MODELSPACE (VLA-GET-ACTIVEDOCUMENT (VLAX-GET-ACAD-OBJECT)))
        number           (VLA-GET-COUNT modelspace) ;_当前空间实体总数量
  )
  (SETQ *get_xz_ss* (SSADD))
  (IF $yb_last_entity_mark
    (PROGN
      (WHILE (>        (VLA-GET-OBJECTID
                  (SETQ
                    obj        (VLA-ITEM modelspace (1- number))
                  ) ;_倒着数一个个来
                )
                $yb_last_entity_mark
             )
        (SSADD (VLAX-VLA-OBJECT->ENAME obj) *get_xz_ss*)
        (SETQ number (1- number))
      )
    )
  )
  ;;(SETQ $yb_last_entity_mark nil)
  (IF (AND *get_xz_ss* (> (SSLENGTH *get_xz_ss*) 0))
    (PROGN
      *get_xz_ss*
      ;;(CDR (SSSETFIRST nil *get_xz_ss*)) ;_夹点显示
      ;;(PRINC (STRCAT "\n共有" (ITOA (SSLENGTH *get_xz_ss*)) "个物体被选择。"))
    )
    *get_xz_ss*
  )
  (PRINC)
)

(*just_ss*) ;_ 运行*just_ss*

(DEFUN c:jj () ;_ 该命令可以透明调用
  (IF *get_xz_ss*
    (PROGN
      (IF (= 0 (GETVAR "cmdactive")) ;_ 系统变量判断
        (CDR (SSSETFIRST nil *get_xz_ss*)) ;_夹点显示
      ) ;_ 结束if
    ) ;_ 结束progn
    (PRINC "\n没有实体被选中。")
  ) ;_ 结束if
  *get_xz_ss*
)
(PRINC)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2014-3-10 14:10:49 | 显示全部楼层
自已顶一下。
 楼主| 发表于 2014-3-17 11:33:03 | 显示全部楼层
自已顶一下。
发表于 2014-8-5 21:29:15 | 显示全部楼层
选择上次cad本身就有吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-24 23:16 , Processed in 0.176650 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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