明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1314|回复: 9

[讨论] 关于长宽矩形问题

[复制链接]
发表于 2021-9-14 17:00:54 | 显示全部楼层 |阅读模式
论谈上找的画矩形的代码,觉得很好用,唯一不足的就是,能不能把起点和终点直接改为插入点,以矩形的中心为基准点。
哪位大侠给改一下代码,先谢谢啦。


(defun c:FF (/ d h p1 p2 p3 p1x p1y)
        (setq d (getdist"\n矩形长度:")  h (getdist"\n矩形高度:"))
        (while
                (setq        p1 (getpoint"\n选起点:") p2 (getcorner p1"\n选终点:")
                        p1x (car p1)
                        p1y (cadr p1)
                        ang (angle P1 P2))
                (cond
                        ((and (>= ang (* 0 pi)) (< ang (* 0.5 pi))) (setq p3 (list (+ p1x d) (+ p1y h))))
                        ((and (>= ang (* 0.5 pi)) (< ang (* 1 pi))) (setq p3 (list (- p1x d) (+ p1y h))))
                        ((and (>= ang (* 1 pi)) (< ang (* 1.5 pi))) (setq p3 (list (- p1x d) (- p1y h))))
                        ((and (>= ang (* 1.5 pi)) (< ang (* 2 pi))) (setq p3 (list (+ p1x d) (- p1y h))))
                )
                p3 (command "RECTANG" "non" p1 "non" p3))
        (princ)
)

发表于 2021-9-14 21:48:56 | 显示全部楼层
厉害了,这个解决方案。

本帖子中包含更多资源

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

x
 楼主| 发表于 2021-9-16 09:21:36 | 显示全部楼层
kkq0305 发表于 2021-9-14 21:48
厉害了,这个解决方案。

很不错的,就是这样的效果,改了哪里?
发表于 2021-9-16 10:24:54 | 显示全部楼层
(defun c:tt5 (/ d h key p1 p1x p1y p2 p3)
        (setq d (getdist"\n矩形长度:")  h (getdist"\n矩形高度:"))
        (while
                (setq p1 (getpoint"\n选取矩形中心点:"))
                (setq p1x (car p1) p1y (cadr p1) p2 (list (- p1x (* 0.5 d)) (+ p1y (* 0.5 h))) p3 (list (+ p1x (* 0.5 d)) (- p1y (* 0.5 h))))
                (command "RECTANG" "non" p2 "non" p3)
                (setq key (getstring  "是否旋转?[是(Y)/否(空格)]:"))
                (if (= key "y") (command "ROTATE" "l" "" "non" p1 90))
        )
        (princ)
)

点评

非常完美,感谢感谢。  发表于 2021-9-16 11:29
发表于 2021-9-16 13:25:31 | 显示全部楼层
(defun c:tt ()
  (setq        d (getdist "\n矩形长度:")
        h (getdist "\n矩形高度:")
  )
  (while (setq pt (getpoint "\n输入矩形中心:"))
    (setq loop t)
    (while loop
      (setq code (grread t 8))
      (cond ((= (car code) 5)
             (redraw)
             (makt pt (cadr code) d h nil)
            )
            ((= (car code) 3)
             (redraw)
             (makt pt (cadr code) d h nil)
             (setq loop nil)
            )
      )
    )
    (redraw)
    (makt pt (cadr code) d h t)
  )
  (princ)
)
(defun makt (pt1 pt2 d h key)
  (if (or (< (* 0.25 pi) (angle pt1 pt2) (* 0.75 pi))
          (< (* 1.25 pi) (angle pt1 pt2) (* 1.75 pi))
      )
    (setq d0 h
          h0 d
    )
    (setq d0 d
          h0 h
    )
  )
  (if key
    (entmake
      (list
        '(0 . "LWPOLYLINE")
        '(100 . "AcDbEntity")
        '(100 . "AcDbPolyline")
        '(90 . 4)
        '(70 . 1)
        '(62 . 3)
        (cons 10
              (mapcar '+ (list (- (* 0.5 d0)) (- (* 0.5 h0))) pt1)
        )
        (cons 10
              (mapcar '+ (list (+ (* 0.5 d0)) (- (* 0.5 h0))) pt1)
        )
        (cons 10
              (mapcar '+ (list (+ (* 0.5 d0)) (+ (* 0.5 h0))) pt1)
        )
        (cons 10
              (mapcar '+ (list (- (* 0.5 d0)) (+ (* 0.5 h0))) pt1)
        )
      )
    )
    (grvecs
      (list 1
            pt1
            pt2
            1
            (mapcar '+ (list (- (* 0.5 d0)) (- (* 0.5 h0))) pt1)
            (mapcar '+ (list (+ (* 0.5 d0)) (- (* 0.5 h0))) pt1)
            1
            (mapcar '+ (list (+ (* 0.5 d0)) (- (* 0.5 h0))) pt1)
            (mapcar '+ (list (+ (* 0.5 d0)) (+ (* 0.5 h0))) pt1)
            1
            (mapcar '+ (list (+ (* 0.5 d0)) (+ (* 0.5 h0))) pt1)
            (mapcar '+ (list (- (* 0.5 d0)) (+ (* 0.5 h0))) pt1)
            1
            (mapcar '+ (list (- (* 0.5 d0)) (+ (* 0.5 h0))) pt1)
            (mapcar '+ (list (- (* 0.5 d0)) (- (* 0.5 h0))) pt1)
      )
    )
  )
)

评分

参与人数 1明经币 +1 收起 理由
tigcat + 1 很给力!

查看全部评分

发表于 2021-9-16 14:39:16 | 显示全部楼层
回复收藏学习!
发表于 2021-9-18 21:35:09 | 显示全部楼层
画矩形,还是默认的好,(command "RECTANG" pause "d")
发表于 2025-2-4 09:19:13 | 显示全部楼层
收藏,学习。留痕
回复 支持 反对

使用道具 举报

发表于 2025-2-4 10:06:41 | 显示全部楼层
  1. (defun c:ff ()
  2.   "画矩形"
  3.   (defun udist (bit kwd msg def bpt / inp)
  4.   (if def(setq msg(strcat"\n"msg"<"(rtos def)">: ")bit(* 2(fix(/ bit 2))))
  5.     (setq msg(strcat"\n"msg": "))
  6.   )
  7.   (initget bit kwd)
  8.   (setq inp(if bpt(getdist msg bpt)(getdist msg)))
  9.   (if inp inp def)
  10. )
  11.   (or d(setq d 1000.))
  12.   (or h(setq h 1000.))
  13.   (setq d (Udist 7 "" "矩形长度<输入或鼠标直接量取>" d nil))
  14.   (setq h (Udist 7 "" "矩形高度<输入或鼠标直接量取>" h nil))
  15.   (while (setq p0 (getpoint "\n矩形中心为<退出>: "))
  16.     (setq a  (list (* d 0.5) (* h 0.5))
  17.           p1 (mapcar '(lambda (x y) (- x y)) p0 a)
  18.           p2 (mapcar '(lambda (x y) (+ x y)) p0 a)
  19.     )
  20.     (command "rectang" "non" p1 "non" p2)
  21.   )
  22.   (princ)
  23. )
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-23 05:06 , Processed in 0.192004 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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