展开全部
(defun C:ZXD ( / #os1 dis &k1 @p1 @p2 &kw)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq #os1 (getvar "osmode"))
(setvar "osmode" 0)
(setq dis (getdist "\n请输入在Z轴线移动的距离正负值"))
(if (/= dis nil) (setq &k1 (entsel "\n请选择要移动的参考图层")))
(if (/= &k1 nil)
(progn
(setq @p1 (list 0 0 0)
@p2 (list 0 0 dis)
&k1 (car &k1)
&k1 (entget &k1)
&k1 (cdr (assoc 8 &k1))
)
(princ "\n请选择要移动的范围")
(setq &kw (ssget "X" (list (cons 8 &k1))))
;;如果要自32313133353236313431303231363533e4b893e5b19e31333335323430己选择范围这句话修改为(setq &kw (ssget (list (cons 8 &k1))))
(command "MOVE" &kw "" @p1 "" "MOVE" "p" "" @p2 "")
(princ "\n移动")
(princ &k1)
(princ "图层完成")
)
)
(setvar "osmode" #os1)
(princ)
);;复制到记事本以(ZXD.lsp)命名加载到AutoCAD就可以使用
;;如果要坐标归零的话,要把块除外才可以,或炸开块。
;;;;;;Z坐标归零;;
(defun c:z0 ( / &kw)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(princ "\n请等待,正在归零")
(command "ucs" "")
(setq &kw (ssget "x" (list (cons 0 "INSERT"))));;选择所有的块
(if (/= &kw nil)
(command "MOVE" "all" "r" &kw "" '(0 0 1e99) "" "move" "p" "" '(0 0 -1e99) "")
);;如果有块的话,选择除了块以外的对象z坐标归零
(if (= &kw nil)
(command "MOVE" "all" "" '(0 0 1e99) "" "move" "p" "" '(0 0 -1e99) "")
);;如果没有块,那么坐标归零
(princ "\nOK已经归零")
(setvar "cmdecho" 1)
(princ)
)