明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1753|回复: 18

[讨论] 两点画矩形并偏移,怎样控制偏移方向?

[复制链接]
发表于 2022-5-15 03:46 | 显示全部楼层 |阅读模式
10明经币
(defun c:11 (/ p1 p2 )
(setq p1 (getpoint "矩形第一点:"))
(setq p2 (getcorner p1 "矩形对角点:"))
(command "rectang" p1 p2)
(vla-offset (vlax-ename->vla-object (entlast)) 30)
(princ))

这个简单,就是确定两点画出一个矩形,然后再偏移30MM,
当左上往右下拖或右下往左上拖,偏移后的矩形在原矩形内;
当左下往右上拖或右上往左下拖,偏移后的矩形在原矩形外;

问题来了,能不能修改代码,不管往哪个方向拖,偏移后的矩形都在原矩形内

最佳答案

查看完整内容

;;绘制双线矩形 ;;主程序开始 (defun c:tt (/ p1 p2) (ngc_s);;备份参数 (setvar "OSMODE" 0) (setq p1 (getpoint "\n指定矩形第一点:")) (setq p2 (getcorner p1 "\n指定矩形对角点:")) (command "rectang" p1 p2) (setq p_mid (MJ:Mid p1 p2)) (command "OFFSET" "30" (entlast) p_mid "") (ngc_e);;恢复参数 ) ;;以下为功能函数 (defun MJ:Mid (P1 P2);;43.1 [功能] 两点中点 (mapcar '(lamb ...
发表于 2022-5-15 03:47 | 显示全部楼层

;;绘制双线矩形
;;主程序开始
(defun c:tt (/ p1 p2)
  (ngc_s);;备份参数
  (setvar "OSMODE" 0)
  (setq p1 (getpoint "\n指定矩形第一点:"))
  (setq p2 (getcorner p1 "\n指定矩形对角点:"))
  (command "rectang" p1 p2)
  (setq p_mid (MJ:Mid p1 p2))
  (command "OFFSET" "30" (entlast) p_mid "")
  (ngc_e);;恢复参数
)
;;以下为功能函数
(defun MJ:Mid (P1 P2);;43.1 [功能] 两点中点
  (mapcar '(lambda (X Y) (* (+ X Y) 0.5)) P1 P2)
)
(defun ngc_s ()
  (defun *MYERR* (MSG);;;错误恢复捕捉
    (setvar "CMDECHO" CMD_OLD)
    (setvar "OSMODE" OS_OLD)
    (setq *ERROR* *OLDERR*)
    (if        (= MSG "完美退出。谢谢使用。")
      (princ (strcat "\\n>>>" MSG))
      (princ "\\n>>>虽然中途退出了,对象捕捉已经被恢复。")
    )
    (princ)
  )
  (setq        *OLDERR* *ERROR*
        *ERROR*         *MYERR*
        OS_OLD         (getvar "OSMODE")
        CMD_OLD         (getvar "CMDECHO")
  )
  (setvar "cmdecho" 0) ;_关闭命令提示
  (command "._undo" "_begin")
  (setq osmode_bak (getvar "osmode")) ;_记录捕捉
  (setq clayer_bak (getvar "clayer")) ;_记录当前图层
)
(defun ngc_e ()
  (setvar "osmode" osmode_bak) ;_还原捕捉
  (setvar "clayer" clayer_bak) ;_还原图层
  (command "._undo" "_end")
  (setvar "cmdecho" 1) ;_打开命令提示
  (princ) ;_关闭程序返回值
)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 2022-5-15 04:50 | 显示全部楼层
本帖最后由 qazxswk 于 2022-5-15 05:08 编辑

我自己找到解决的办法了。打扰大家了。
怎样关闭悬赏贴子呀?
回复

使用道具 举报

发表于 2022-5-15 08:27 | 显示全部楼层
加个顺时针 逆时针判决即可
回复

使用道具 举报

发表于 2022-5-15 11:01 | 显示全部楼层
估计选取点定偏移方向还比你现在的操作效率
回复

使用道具 举报

 楼主| 发表于 2022-5-15 14:16 来自手机 | 显示全部楼层
start4444 发表于 2022-5-15 11:01
估计选取点定偏移方向还比你现在的操作效率

确定两点画矩形后,后面再拾取一点确定偏离方向,感觉不太顺手,能用代码省掉步骤,就用代码。
目前偏移我换为用command,牺牲了一点点速度吧,vla速度还是快一些
回复

使用道具 举报

 楼主| 发表于 2022-5-15 14:18 来自手机 | 显示全部楼层
guosheyang 发表于 2022-5-15 08:27
加个顺时针 逆时针判决即可

我也发现在了这个规律,可没有想到代码怎么写
回复

使用道具 举报

发表于 2022-5-15 16:48 | 显示全部楼层
内偏移
取p1p2中点即可
为啥要算逆时顺时?
回复

使用道具 举报

发表于 2022-5-15 16:49 | 显示全部楼层
(defun c:tt (/ p1 p2 p3)
        (setq p1 (getpoint "\n矩形第一点:"))
        (setq p2 (getcorner p1 "\n矩形对角点:"))
        (command "rectang" p1 p2)
        ;xy坐标同时大或者小时为外偏
        (if (or
                        (and (< (car p1) (car p2)) (< (cadr p1) (cadr p2)))
                        (and (> (car p1) (car p2)) (> (cadr p1) (cadr p2)))
                )
                (vla-offset (vlax-ename->vla-object (entlast)) -30)
                (vla-offset (vlax-ename->vla-object (entlast)) 30)
        )
        (princ)
)

点评

;xy坐标同时大或者小时为外偏这个逻辑正确,后续表达不清  发表于 2022-5-15 17:19
回复

使用道具 举报

发表于 2022-5-15 20:23 | 显示全部楼层
确实不用判断顺时针还是逆时针  这样好像也可以
(defun tt(/ P1 P2)
  (setq p1 (getpoint "\n矩形第一点:"))
  (setq p2 (getcorner p1 "\n矩形对角点:"))
  (command "rectang" "non" p1 "non" p2)
  (if(or(<(angle p1 p2)(* pi 0.5))(<(angle p2 p1)(* pi 0.5)))
     (vla-offset (vlax-ename->vla-object (entlast)) -30)
     (vla-offset (vlax-ename->vla-object (entlast)) 30)
  )
  (princ)
)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 23:53 , Processed in 0.223235 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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