找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 815|回复: 1

[分享]:拷贝、移动所选实体到另一个空间的程序

[复制链接]
发表于 2005-8-9 20:30:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
[php]
;;;
(defun sp2sp_error (msg)
  (if (not (member msg '("Function cancelled" "console break")))
    (princ (strcat "\nError " msg))
  )
  (command ".undo" "end")
  (var_restore)
  (princ)
)
;;;
;;;
(defun var_set (var_list)
  (foreach pair        var_list
    (setq
      sysvars (cons (cons (strcase (car pair)) (getvar (car pair)))
                    sysvars
              )
    )
    (if        (cdr pair)
      (setvar (car pair) (cadr pair))
    )
  )
)
;;;
;;;
(defun var_restore ()
  (foreach pair sysvars (setvar (car pair) (cdr pair)))
  (setq *error* old_error)
  (princ)
)
;;;
;;;
(defun dtr (d) (/ (* d pi) 180.0))
(defun rtd (r) (/ (* r 180.0) pi))
;;;
;;;
(defun sp2sp (val / ed en msctr nm old_error psctr rt ss ssv sysvars sz
              trig vd)
  (princ "\nSpace to Space")
  (if (= (getvar "tilemode") 1)
    (alert "\nCommand not allowed.\nTILEMODE must be set to 0.")
    (if (= (length (vports)) 1)
      (alert "\nThere are no active Model space viewports.")
      (progn
        (command ".undo" "group")
        (var_set '(("cmdecho" 0) ("expert" 2) ("osmode" 0)))
        (setq old_error        *error*
              *error*        sp2sp_error
              trig        nil
        )
        (graphscr)
        (if (or (= val 1) (= val 2))
          (command "mspace")
          (command "pspace")
        )
        (if (or (= val 1) (= val 3))
          (princ "Select objects to copy: \n ")
          (princ "Select objects to move: \n ")
        )
        (setq
          ss (ssget '((-4 . "<NOT") (0 . "VIEWPORT") (-4 . "NOT>")))
        )
        (if (or (= val 3) (= val 4))
          (progn (command "mspace")
                 (if (= val 3)
                   (getpoint "\n \n \nPick viewport to copy to: ")
                   (getpoint "\n \n \nPick viewport to move to: ")
                 )
          )
        )
        (setq msctr (getvar "viewctr"))
        (command "pspace")
        (setq SSV (ssget "x" (list (cons 0 "VIEWPORT"))))
        (if (/= SS nil)
          (progn
            (while (= trig nil)
              (setq EN (ssname SSV 0))
              (setq ED (entget EN '("ACAD")))
              (setq NM (cadr (assoc '-3 ED)))
              (if (or (= val 1) (= val 2))
                (progn (setq RT (rtos (rtd (cdr (nth 6 NM))) 2 6))
                       (setq
                         SZ (rtos (/ (cdr (assoc '41 ED)) (cdr (nth 7 NM)))
                                  2
                                  6
                            )
                       )
                )
                (progn
                  (setq RT (rtos (- 360 (rtd (cdr (nth 6 NM)))) 2 6))
                  (setq
                    SZ (rtos (/ (cdr (nth 7 NM)) (cdr (assoc '41 ED)))
                             2
                             6
                       )
                  )
                )
              )
              (if (= (cdr (assoc '68 ED)) 2)
                (setq trig 1)
              )
              (ssdel EN SSV)
            )
            (setq VD (cdr (nth 5 NM)))
            (setq psctr (cdr (assoc '10 ED)))
            (if        (and (= (car VD) 0.0)
                     (= (cadr VD) 0.0)
                     (= (caddr VD) 1.0)
                )
              (progn
                (if (or (= val 1) (= val 2))
                  (command "mspace")
                )
                (cond ((= val 1)
                       (command "block" "sp2sp" msctr ss "" "oops")
                      )
                      ((= val 2) (command "block" "sp2sp" msctr ss ""))
                      ((= val 3)
                       (command "block" "sp2sp" psctr ss "" "oops")
                      )
                      ((= val 4) (command "block" "sp2sp" psctr ss ""))
                )
                (if (or (= val 1) (= val 2))
                  (command "pspace")
                  (command "mspace")
                )
                (if (or (= val 1) (= val 2))
                  (command "insert" "*sp2sp" psctr SZ RT)
                  (command "insert" "*sp2sp" msctr SZ RT)
                )
              )
              (if (or (= val 1) (= val 2))
                (alert
                  "Selected entities must be in \na viewport that is set to\nthe world coordinate system!"
                )
                (alert
                  "Selected viewport must set to\nthe world coordinate system!"
                )
              )
            )
          )
        )
        (command ".undo" "end")
        (var_restore)
      )
    )
  )
  (princ)
)
;;;
;;;
(defun c:c2p () (sp2sp 1))
(defun c:m2p () (sp2sp 2))
(defun c:c2m () (sp2sp 3))
(defun c:m2m () (sp2sp 4))
[/php]

命令 c2p  拷贝所选实体到图纸空间
命令 m2p  移动所选实体到图纸空间
命令 c2m 拷贝所选实体到模型空间
命令 m2m 移动所选实体到模型空间

虽然用autocad的复制或带基点复制以及粘贴也可以实现,但这个程序使用起来更方便。

举个简单例子:
图框是在图纸空间的, 图框中有一个viewport。 现在你想把这个图框移动(或复制)到模型空间, 只要输入m2m(或c2m)选取该图框, 然后按提示点选那个viewport就行了。
反之也一样(不过tilemode必须为0)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2013-10-20 11:33:11 | 显示全部楼层
不错这个功能不错!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 11:46 , Processed in 0.160061 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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