明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 393|回复: 3

[提问] 【 镜 像 】的M2P命令,为何选择图形对象后输入命令时达不到效果?

[复制链接]
发表于 2024-8-29 17:25:59 | 显示全部楼层 |阅读模式
【 镜 像 】的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)
)


"觉得好,就打赏"
还没有人打赏,支持一下
发表于 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)  
  
  ; 清理(可选,因为局部变量在函数结束时会自动清理)  
  ; 但在这里显式地清理变量是没有必要的  
)  
  
回复 支持 1 反对 0

使用道具 举报

发表于 2024-8-29 17:37:40 | 显示全部楼层
镜像需要两点哦  command后面的p3还需要一个点哦。根据你镜像的需求再求这个点 然后再设定 要删除源对象吗?[是(Y)/否(N)] 就好了
 楼主| 发表于 2024-8-29 17:51:16 | 显示全部楼层
command 后面可能还有那种加 pause @ 什么的方法,这样就可以不用输入完整command需要的信息
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-23 00:42 , Processed in 0.188477 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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