将1楼的功能整合后,或许更好用:

- ;;;================================================
- ;;;功能:定向移动(仿MOVE命令)
- ;;;日期:zml84 于 2007-04-23
- (defun c:tt (/ tmp pt1 pt2 OS_OLD CMD_OLD)
- (if (= yd_fs nil)
- (setq yd_fs '("xyz" 0 0 0))
- )
- (if (setq ss (ssget))
- (progn
- (while (progn (princ "\n★当前模式:")
- (princ yd_fs)
- (initget "C D")
- (= (setq pt1
- (getpoint
- "\n指定基点或 [模式(C)/位移(D)] <位移>:"
- )
- )
- "C"
- )
- )
- (initget "X Y Z XY XZ YZ XYZ")
- (if (setq tmp
- (getkword
- "\n请输入过滤选项 [X Y Z XY XZ YZ XYZ] :"
- )
- )
- (setq yd_fs (cons tmp (cdr yd_fs)))
- )
- )
- (if (or (= pt1 nil) (= pt1 "D"))
- (if (setq pt1 '(0 0 0)
- pt2 (getpoint
- pt1
- (strcat "指定位移 <"
- (vl-princ-to-string (cdr yd_fs))
- ">: "
- )
- )
- )
- ()
- (setq pt2 (cdr yd_fs))
- )
- (if (setq pt2
- (getpoint
- pt1
- "指定第二个点或 <使用第一个点作为位移>:"
- )
- )
- (setq pt2 (mapcar '- pt2 pt1)
- pt1 '(0 0 0)
- )
- (setq pt2 pt1
- pt1 '(0 0 0)
- )
- )
- )
- (setq os_old (getvar "OSMODE")
- cmd_old (getvar "CMDECHO")
- )
- (setvar "OSMODE" 0)
- (setvar "CMDECHO" 0)
- (if (= (car yd_fs) "XYZ")
- (command "._move" ss "" pt1 pt2)
- (command "._move"
- ss
- ""
- pt1
- (strcat "." (car yd_fs))
- pt2
- pt1
- )
- )
- (setvar "OSMODE" os_old)
- (setvar "CMDECHO" cmd_old)
- (setq yd_fs (list (car yd_fs) pt2))
- )
- )
- (princ)
- )
|