fengyu6913 发表于 2024-8-29 17:25:59

【 镜 像 】的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)
)


xiao1984 发表于 2024-8-29 18:26:18

(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)

; 清理(可选,因为局部变量在函数结束时会自动清理)
; 但在这里显式地清理变量是没有必要的
)

嘒彼小星 发表于 2024-8-29 17:37:40

镜像需要两点哦command后面的p3还需要一个点哦。根据你镜像的需求再求这个点 然后再设定 要删除源对象吗?[是(Y)/否(N)] 就好了

fengyu6913 发表于 2024-8-29 17:51:16

command 后面可能还有那种加 pause @ 什么的方法,这样就可以不用输入完整command需要的信息
页: [1]
查看完整版本: 【 镜 像 】的M2P命令,为何选择图形对象后输入命令时达不到效果?