明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1923|回复: 9

[测绘] jx矩形对齐参考线

[复制链接]
发表于 2025-2-6 17:36:47 | 显示全部楼层 |阅读模式
(defun c:JX (/ W H P1 P2 P3 P4 ANG PT1 PT2 RECT_CENTER OFFSET_X OFFSET_Y)
  (setq PI0 (* 0.5 pi))
  (setq PI1 (* 1.5 pi))
  (setq W (getdist "\n输入矩形长度: "))
  (setq H (getdist "\n输入矩形宽度: "))

  (setq OSM (getvar "osmode"))
  (setvar "osmode" 0)
  (setq E1 (entsel "\n选择参照线: "))
  (while (null E1)
    (setq E1 (entsel "\n选择参照线: ")))
  (setq PT1 (osnap (cadr E1) "mid"))
  (setq PT2 (osnap (cadr E1) "end"))
  (setvar "osmode" OSM)

  (setq ANG (angle PT1 PT2))

  (setq OFFSET_X (/ W 2))
  (setq OFFSET_Y (/ H 2))

  (setq P1 (polar PT1 ANG (- OFFSET_Y (/ H 2))))
  (setq P1 (polar P1 ANG (- OFFSET_X)))
  (setq P2 (polar P1 ANG W))
  (setq P3 (polar P2 (+ ANG PI0) H))
  (setq P4 (polar P1 (+ ANG PI0) H))

  (setq SS (entmake (list
                     '(0 . "LWPOLYLINE")
                     '(100 . "AcDbEntity")
                     '(100 . "AcDbPolyline")
                     '(90 . 4)
                     '(70 . 1)
                     '(43 . 0.0)
                     '(38 . 0.0)
                     '(39 . 0.0)
                     (cons 10 P1)
                     (cons 10 P2)
                     (cons 10 P3)
                     (cons 10 P4))))
  (entnext SS)
  (entupd SS)
  (princ)
)

"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

 楼主| 发表于 2025-2-6 17:40:31 | 显示全部楼层
适合知道桩基坐标,绘制承台、桥台,盖梁等,就是矩形中心和参考线中心不完全重合
回复 支持 反对

使用道具 举报

发表于 前天 18:55 | 显示全部楼层
有学习的意义
回复 支持 反对

使用道具 举报

发表于 前天 23:36 | 显示全部楼层
  1. (defun c:tt ()
  2.   (or w (setq w 1000.))
  3.   (or h (setq h 500.))
  4.   (setq w  (udist 7 "" "矩形长度<输入或鼠标直接量取>" w nil)
  5.         h  (udist 7 "" "矩形宽度<输入或鼠标直接量取>" h nil)
  6.         os (getvar "osmode")
  7.   )
  8.   (setvar "osmode" 0)
  9.   (while (not (setq e1 (entsel "\n选择参照线: "))))
  10.   (setq p1 (osnap (cadr e1) "mid")
  11.         p2 (osnap (cadr e1) "end")
  12.         r  (angle p1 p2)
  13.         p1 (polar p1 r (* w -0.5))
  14.         p2 (polar p1 r w)
  15.         p3 (polar p2 (+ r (* 0.5 pi)) h)
  16.         p4 (polar p1 (+ r (* 0.5 pi)) h)
  17.   )
  18.   (command "pline" p1 p2 p3 p4 "c")
  19.   (setvar "osmode" os)
  20.   (princ)
  21. )
回复 支持 反对

使用道具 举报

发表于 前天 23:39 | 显示全部楼层
  1. (defun c:tt ();矩形中心和参考线中心重合
  2.   (or w (setq w 1000.))
  3.   (or h (setq h 500.))
  4.   (setq w  (udist 7 "" "矩形长度<输入或鼠标直接量取>" w nil)
  5.         h  (udist 7 "" "矩形宽度<输入或鼠标直接量取>" h nil)
  6.         os (getvar "osmode")
  7.   )
  8.   (setvar "osmode" 0)
  9.   (while (not (setq e1 (entsel "\n选择参照线: "))))
  10.   (setq p1 (osnap (cadr e1) "mid")
  11.         p2 (osnap (cadr e1) "end")
  12.         r  (angle p1 p2)
  13.         p1 (polar p1 r (* w -0.5))
  14.         p2 (polar p1 r w)
  15.         p1 (polar p1 (- r (* 0.5 pi)) (* h 0.5))
  16.         p2 (polar p2 (- r (* 0.5 pi)) (* h 0.5))
  17.         p3 (polar p2 (+ r (* 0.5 pi)) h)
  18.         p4 (polar p1 (+ r (* 0.5 pi)) h)
  19.   )
  20.   (command "pline" p1 p2 p3 p4 "c")
  21.   (setvar "osmode" os)
  22.   (princ)
  23. )
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 08:49 | 显示全部楼层
(defun c:jx (/ w h os e1 p1 p2 r p3 p4)
  (or (boundp 'w) (setq w 1000.0))
  (or (boundp 'h) (setq h 500.0))
  (setq w (getdist (strcat "\n矩形长度<" (rtos w) ">: ")))
  (if (not w) (setq w 1000.0))
  (setq h (getdist (strcat "\n矩形宽度<" (rtos h) ">: ")))
  (if (not h) (setq h 500.0))
  (setq os (getvar "osmode"))
  (setvar "osmode" 0)
  (while (not (setq e1 (entsel "\n选择参照线: "))))
  (setq p1 (osnap (cadr e1) "mid")
        p2 (osnap (cadr e1) "end")
        r (angle p1 p2)
  )
  (setq p1 (polar p1 (+ r (* pi 0.5)) (* h 0.5))
        p1 (polar p1 r (* w -0.5))
        p2 (polar p1 (+ r (* pi 0.5)) (* h -1))
        p3 (polar p1 r w)
        p4 (polar p3 (+ r (* pi 0.5)) (* h -1))
  )
  (command "_.pline" "_non" p1 "_non" p3 "_non" p4 "_non" p2 "_close")
  (setvar "osmode" os)
  (princ)
)

点评

绘制承台、桥台,盖梁,还是先选参考线,再输入长宽,比较合理  发表于 昨天 10:33
好像是  发表于 昨天 10:32
non 多余  发表于 昨天 10:21
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 10:35 | 显示全部楼层
(defun c:jx (/ os e1 p1 p2 r w h p3 p4)
  (setq os (getvar "osmode"))
  (setvar "osmode" 512)
  (while (not (setq e1 (entsel "\n选择参照线: "))))
  (setq p1 (osnap (cadr e1) "mid")
        p2 (osnap (cadr e1) "end")
        r (angle p1 p2)
  )
  (setvar "osmode" os)
  (or (boundp 'w) (setq w 12))
  (or (boundp 'h) (setq h 2))
  (setq w (getdist (strcat "\n矩形长度<" (rtos w) ">: ")))
  (if (not w) (setq w 12))
  (setq h (getdist (strcat "\n矩形宽度<" (rtos h) ">: ")))
  (if (not h) (setq h 2))
  (setvar "osmode" 0)
  (setq p1 (polar p1 (+ r (* pi 0.5)) (* h 0.5))
        p1 (polar p1 r (* w -0.5))
        p2 (polar p1 (+ r (* pi 0.5)) (* h -1))
        p3 (polar p1 r w)
        p4 (polar p3 (+ r (* pi 0.5)) (* h -1))
  )
  (command "_.pline" p1 p3 p4 p2 "_close")
  (setvar "osmode" os)
  (princ)
)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-29 11:50 , Processed in 0.199898 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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