明经CAD社区

 找回密码
 注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 163|回复: 6

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

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


(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 | 显示全部楼层
厉害了,这个解决方案。

本帖子中包含更多资源

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

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

很不错的,就是这样的效果,改了哪里?
发表于 2021-9-16 10:24 | 显示全部楼层
(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 | 显示全部楼层
(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)
      )
    )
  )
)
发表于 2021-9-16 14:39 | 显示全部楼层
回复收藏学习!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2021-9-18 01:03 , Processed in 0.501232 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

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