【 镜 像 】的M2P命令,为何选择图形对象后输入命令时达不到效果?
【 镜 像 】的M2P命令,为何选择图形对象后输入命令时达不到效果?(defun C:yy (/ss)
(setq orgOsm (getvar "osmode"))
(setvar "osmode" 255)
(if (= (setq ss (cadr (ssgetfirst))) nil)
(progn
(princ "\n请指定框选范围:")
(setq ss (ssget)) ;选择标注对象
)
)
(setq p1 (getpoint "\n中点的第 1 点:"))
(setq p2 (getpoint " 中点的第 2 点:"))
(setvar "osmode" 0)
(setq p3 (mapcar '(lambda (x y) (* (+ x y) 0.5)) p1 p2))
(setvar "osmode" 255)
(command "_mirror" ss "" p3 )
(setvar "osmode" orgOsm)
(princ)
)
(defun C:yy (/ ss p1 p2 p3 orgOsm)
; 保存原始对象捕捉模式
(setq orgOsm (getvar "osmode"))
(setvar "osmode" 255) ; 关闭所有对象捕捉模式
; 提示用户选择对象
(princ "\n请选择要镜像的对象:")
(setq ss (ssget))
(if (null ss)
(progn
(princ "\n未选择任何对象,操作取消。")
(setvar "osmode" orgOsm)
(exit)
)
)
; 获取中点的两个端点
(setq p1 (getpoint "\n指定中点的第一个点:"))
(if (null p1)
(progn
(princ "\n未指定第一个点,操作取消。")
(setvar "osmode" orgOsm)
(exit)
)
)
(setq p2 (getpoint "\n指定中点的第二个点:"))
(if (null p2)
(progn
(princ "\n未指定第二个点,操作取消。")
(setvar "osmode" orgOsm)
(exit)
)
)
; 计算中点坐标
(setq p3 (polar p1 (angle p1 p2) (/ (distance p1 p2) 2.0)))
; 或者使用 mapcar,但 polar 函数更直观且适合这种情况
; (setq p3 (mapcar '(lambda (x y) (/ (+ x y) 2.0)) p1 p2))
; 注意:上面的 mapcar 方法在这里不适用,因为它只是简单地将坐标值相加然后除以2,
; 并不考虑两点之间的实际距离和角度。
; 镜像对象
(if (/= (command "_mirror" ss "" p3) :ok)
(progn
(princ "\n镜像操作失败。")
)
(princ "\n镜像操作成功。")
)
; 恢复原始对象捕捉模式
(setvar "osmode" orgOsm)
; 清理(可选,因为局部变量在函数结束时会自动清理)
; 但在这里显式地清理变量是没有必要的
)
镜像需要两点哦command后面的p3还需要一个点哦。根据你镜像的需求再求这个点 然后再设定 要删除源对象吗?[是(Y)/否(N)] 就好了 command 后面可能还有那种加 pause @ 什么的方法,这样就可以不用输入完整command需要的信息
页:
[1]