明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 278|回复: 9

求一个画中心矩形的代码

[复制链接]
发表于 前天 00:54 | 显示全部楼层 |阅读模式
本人对代码小白,求一个画中心矩形的代码,不胜感激
回复

使用道具 举报

发表于 前天 08:18 | 显示全部楼层
(defun c:NM (/ center h pt1 pt2 pt3 pt4 w)
        (setq w (getreal "\n请输入矩形的宽度: "))
        (if (not w)
                (progn
                        (princ "\n未输入宽度,命令取消。")
                        (exit)
                )
        )
        (setq h (getreal "\n请输入矩形的高度: "))
        (if (not h)
                (progn
                        (princ "\n未输入高度,命令取消。")
                        (exit)
                )
        )
        (setq center (cadr(grread 3)) )
        (setq pt1 (list (- (car center) (/ w 2)) (+ (cadr center) (/ h 2))))
        (setq pt2 (list (+ (car center) (/ w 2)) (+ (cadr center) (/ h 2))))
        (setq pt3 (list (+ (car center) (/ w 2)) (- (cadr center) (/ h 2))))
        (setq pt4 (list (- (car center) (/ w 2)) (- (cadr center) (/ h 2))))
        (command "_.pline" pt1 pt2 pt3 pt4 pt1 "")
        (command "_.move" (entlast) "" center pause)
        (princ)
)
回复 支持 反对

使用道具 举报

发表于 前天 08:19 | 显示全部楼层
(defun c:tt ( / cen w h p1 p2 p3 p4)        
  ; 获取宽度和高度
  (setq w (getdist "\n输入矩形宽度: "))
  (setq h (getdist "\n输入矩形高度: "))
  
        ; 获取中心点
  (setq cen (getpoint "\n指定矩形中心点: "))
       
  ; 计算四个角点坐标
  (setq p1 (list (- (car cen) (/ w 2)) (+ (cadr cen) (/ h 2)))) ; 左上角
  (setq p2 (list (+ (car cen) (/ w 2)) (+ (cadr cen) (/ h 2)))) ; 右上角
  (setq p3 (list (+ (car cen) (/ w 2)) (- (cadr cen) (/ h 2)))) ; 右下角
  (setq p4 (list (- (car cen) (/ w 2)) (- (cadr cen) (/ h 2)))) ; 左下角
  (setvar "OSMODE" 0);关闭捕捉
  ; 绘制闭合多段线
  (command "_.pline" p1 p2 p3 p4 "_c")
        (setvar"osmode"15359);恢复捕捉
  (princ)
)
回复 支持 反对

使用道具 举报

发表于 前天 09:12 | 显示全部楼层
本帖最后由 尘缘一生 于 2025-2-19 09:14 编辑

尽量少用COMMAND,下面是SLdesign V3.0 三领设计的代码...
  1. ;;entmake 多义线,带宽度,开关闭合-----(一级)------
  2. ;lst 点表 , plwid 线宽=num,dxf70 是否闭合= t 闭合,
  3. (defun makelwpolyline (lst plwid dxf70 / pt)
  4.   (entmake
  5.     (append
  6.       (list
  7.         (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline")
  8.         (cons 90 (length lst))
  9.         (if dxf70
  10.           (cons 70 1)
  11.           (cons 70 0)
  12.         )
  13.         (if plwid
  14.           (cons 43 plwid)
  15.           (cons 43 0)
  16.         )
  17.       )
  18.       (mapcar '(lambda (pt) (cons 10 pt)) lst)
  19.     )
  20.   )
  21. )
  22. ;点表生成多段线--------(一级)-------
  23. ;线宽=nil,线宽为0  ;是否闭合=nil,不闭合 ;图层=nil,为当前图层 ;颜色=nil,为当前图层颜色  ;线型比例=nil,为1
  24. ;(slch:lwpolyline 点表 是否闭合 线宽 图层 颜色 线型比例)
  25. ;(slch:lwpolyline (list (1 2) (2 3)) t 2 "中心线" 6 5)
  26. (defun slch:lwpolyline (lst dxf70 plwid lay lwplcol lwplbili / pt)
  27.   (entmake
  28.     (append
  29.       (list
  30.         (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline")
  31.         (cons 90 (length lst)) ;点表
  32.         (if dxf70
  33.           (cons 70 1)          ;闭合与不闭合
  34.           (cons 70 0)
  35.         )
  36.         (if plwid
  37.           (cons 43 plwid)      ;线宽
  38.           (cons 43 0)
  39.         )
  40.         (if lay
  41.           (cons 8 lay)         ;图层
  42.           (cons 8 (getvar "CLAYER"))
  43.         )
  44.         (if lay
  45.           (cons 6 (vla-get-linetype (vla-item *LAYS* lay)))
  46.           (cons 6 "CONTINUOUS")
  47.         )
  48.         (if lwplcol
  49.           (cons 62 lwplcol)    ;颜色
  50.           (cons 62 256)
  51.         )
  52.         (if lwplbili
  53.           (cons 48 lwplbili)   ;线型比例
  54.           (cons 48 (* 0.01 (getvar "DIMLFAC")))
  55.         )
  56.       )
  57.       (mapcar '(lambda (pt) (cons 10 pt)) lst)
  58.     )
  59.   )
  60. )
  61. ;;画0矩形框-----------
  62. (defun c:kua00 (/ p1 p2)
  63.   (setq p1 (getpoint (slmsg "\n 第一角点:" "\n 材à翴:" "\n First corner:")) p2 (getcorner p1 (slmsg "\n 第二角点:" "\n 材à翴:" "\n Second corner:")))
  64.   (makelwpolyline (list p1 (list (car p1) (cadr p2)) p2 (list (car p2) (cadr p1))) 0 t)
  65.   (princ)
  66. )
  67. ;;画0.45框---------
  68. (defun c:gjk (/ p1 p2)
  69.   (setq p1 (getpoint (slmsg "\n 第一角点:" "\n 材à翴:" "\n First corner:")) p2 (getcorner p1 (slmsg "\n 第二角点:" "\n 材à翴:" "\n Other corner:")))
  70.   (slch:lwpolyline (list p1 (list (car p1) (cadr p2)) p2 (list (car p2) (cadr p1))) t (* SLBL 0.45) (slmsg "钢筋" "葵惮" "steelbar") 1 nil)
  71. )


回复 支持 反对

使用道具 举报

发表于 前天 09:22 | 显示全部楼层
尘缘一生 发表于 2025-2-19 09:12
尽量少用COMMAND,下面是SLdesign V3.0 三领设计的代码...

这么长啊,函数还不齐
回复 支持 反对

使用道具 举报

发表于 前天 09:46 | 显示全部楼层
lailaifa 发表于 2025-2-19 09:22
这么长啊,函数还不齐

  • ;;画0矩形框-----------
  • (defun c:kua00 (/ p1 p2)
  •   (setq p1 (getpoint "\n 第一角点:") p2 (getcorner p1"\n 第二角点:"))
  •   (makelwpolyline (list p1 (list (car p1) (cadr p2)) p2 (list (car p2) (cadr p1))) 0 t)
  •   (princ)
  • )
  • ;;画0.45框---------
  • (defun c:gjk (/ p1 p2)
  •   (setq p1 (getpoint ) p2 (getcorner p1 "\n 第二角点:"))
  •   (slch:lwpolyline (list p1 (list (car p1) (cadr p2)) p2 (list (car p2) (cadr p1))) t (* SLBL 0.45) "钢筋" 1 nil)
  • )

函数并非独为此,属于内裤部分。
SLBL 是三领设计的比例常量,"钢筋" 是图层
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 10:36 | 显示全部楼层
lailaifa 发表于 2025-2-19 08:19
(defun c:tt ( / cen w h p1 p2 p3 p4)        
  ; 获取宽度和高度
  (setq w (getdist "\n输入矩形宽度: "))
...

非常感谢谢大师的代码,明经有你更精彩
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 10:38 | 显示全部楼层
xj6019 发表于 2025-2-19 08:18
(defun c:NM (/ center h pt1 pt2 pt3 pt4 w)
        (setq w (getreal "\n请输入矩形的宽度: "))
        (if (not w) ...

非常感谢谢大师的代码,明经有你更精彩
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 10:40 | 显示全部楼层
尘缘一生 发表于 2025-2-19 09:46
  • ;;画0矩形框-----------
  • (defun c:kua00 (/ p1 p2)
  •   (setq p1 (getpoint "\n 第一角点:")  ...

  • 非常感谢谢大师的代码,明经有你更精彩
    回复 支持 反对

    使用道具 举报

    发表于 昨天 15:27 来自手机 | 显示全部楼层
    感谢分享,收藏备用
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-2-21 03:37 , Processed in 0.277864 second(s), 23 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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