明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: cjf160204

衡重式挡土墙,取自论坛

  [复制链接]
 楼主| 发表于 3 天前 | 显示全部楼层
主程序有问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 10:01 | 显示全部楼层
(defun c:dtq ()
  (vl-load-com)
  (setvar "cmdecho" 0)
  (setq os (getvar "osmode"))
  (setvar "osmode" 0)

  ;; 获取用户输入的参数
  (setq h-dtq (getreal "\n输入墙高 (m) <6.0>: ") h-dtq (if h-dtq h-dtq 6.0))
  (setq b-dtq (getreal "\n输入墙顶宽 (m) <0.75>: ") b-dtq (if b-dtq b-dtq 0.75))
  (setq h1-dtq (getreal "\n输入一阶高度 (m) <2.8>: ") h1-dtq (if h1-dtq h1-dtq 2.8))
  (setq platform-width (getreal "\n输入衡重台宽度 (m) <1.0>: ") platform-width (if platform-width platform-width 1.0))
  (setq m2-dtq-top (getreal "\n输入墙背坡度上部 (1:m) <0.35>: ") m2-dtq-top (if m2-dtq-top m2-dtq-top 0.35))
  (setq m2-dtq-bot (getreal "\n输入墙背坡度下部 (1:m) <0.25>: ") m2-dtq-bot (if m2-dtq-bot m2-dtq-bot 0.25))
  (setq n-dtq (getreal "\n输入底边坡度 (n:1) <0.1>: ") n-dtq (if n-dtq n-dtq 0.1))
  (setq bot-dtq (getreal "\n输入墙底宽 (m) <2.91>: ") bot-dtq (if bot-dtq bot-dtq 2.91))
  (setq hj (getreal "\n输入墙趾高 (m) <1.0>: ") hj (if hj hj 1.0))
  (setq face-slope (getreal "\n输入面坡 (1:m) <0.1>: ") face-slope (if face-slope face-slope 0.1))

  ;; 获取插入点
  (setq p1 (getpoint "\n拾取插入点(挡土墙左上角): "))
  (if p1
    (progn
      ;; 计算各点坐标
      (setq p2 (polar p1 0 b-dtq))  ; 墙顶右侧点
      (setq p2-yy h1-dtq)
      (setq p2-xx (* p2-yy m2-dtq-top))
      (setq p21 (list (+ (car p2) p2-xx) (- (cadr p2) p2-yy)))  ; 墙背坡度上部转折点
      (setq p22 (polar p21 0 platform-width))  ; 衡重台右侧点
      (setq p22-yy (- h-dtq h1-dtq))
      (setq p22-xx (* p22-yy m2-dtq-bot))
      (setq p3 (list (- (car p22) p22-xx) (- (cadr p22) p22-yy)))  ; 墙背坡度下部转折点
      (setq p3-xx bot-dtq)
      (setq p3-yy (* p3-xx n-dtq))
      (setq p4 (list (- (car p3) p3-xx) (+ (cadr p3) p3-yy)))  ; 墙底左侧点
      (setq p1-yy (- h-dtq hj p3-yy))
      (setq p1-xx (* p1-yy face-slope))
      (setq p6 (list (- (car p1) p1-xx) (- (cadr p1) p1-yy)))  ; 墙趾左侧点
      (setq p5 (polar p4 (* pi 0.5) hj))  ; 墙趾右侧点

      ;; 绘制挡土墙
      (command "pline" p1 p2 p21 p22 p3 p4 p5 p6 "c")

      ;; 标注坡比
      (setq str1 (strcat "1:" (rtos face-slope 2 2)))
      (setq ang (angle p6 p1))
      (setq pm (polar (mid-2pt p1 p6) (+ ang (* 0.5 pi)) 0.3))  
      (MkText "C" pm 0.25 (xd-rtd ang) str1 0.7)

      (setq str2 (strcat "1:" (rtos m2-dtq-top 2 2)))
      (setq ang (angle p2 p21))
      (setq pm (polar (mid-2pt p2 p21) (+ ang (* 0.5 pi)) 0.3))  
      (MkText "C" pm 0.25 (xd-rtd ang) str2 0.7)

      (setq str3 (strcat "1:" (rtos m2-dtq-bot 2 2)))
      (setq ang (angle p22 p3))
      (setq pm (polar (mid-2pt p22 p3) (+ ang (* 0.5 pi)) 0.3))  
      (MkText "C" pm 0.25 (xd-rtd ang) str3 0.7)

      (setq str4 (strcat (rtos n-dtq 2 2) ":1"))
      (setq ang (angle p4 p3))
      (setq pm (polar (mid-2pt p3 p4) (+ ang (* 0.5 pi)) 0.3))  
      (MkText "C" pm 0.25 (xd-rtd ang) str4 0.7)
    )
  )

  ;; 恢复 OS 模式
  (setvar "osmode" os)
  (princ)
)

;; 辅助函数
(defun Mid-2pt (P1 P2 / X1 X2) (Mapcar '(Lambda (X1 X2) (/ (+ X1 X2) 2)) P1 P2))
(defun xd-rtd (j$) (/ (* j$ 180.0) pi))

;; 轻量级创建文字
(defun MkText (duiqi pt zg ang text zk / p1 p2 y1 y2 wzys)
  (setq wzys (MakeWzys "Tssd_Hz" 30 0.8))  
  (setq duiqi (strcase duiqi nil))
  (cond
    ((= duiqi "M") (setq y1 '(72 . 4)) (setq y2 '(73 . 0))) ; 中中
    ((= duiqi "C") (setq y1 '(72 . 1)) (setq y2 '(73 . 0))) ; 中下
  )
  (setq ang (* pi (/ ang 180.0)))
  (entmakex
    (append
      (list '(0 . "TEXT") (cons 1 text) (cons 10 pt))
      (list (cons 11 pt) (cons 40 zg) (cons 41 zk) '(71 . 0))
      (list y1 y2 (cons 50 ang) (cons 7 wzys))
    )
  )
)

;; 创建文字样式
(defun MakeWzys (Wzys zg zk / lst zt1 zt2 zt)
  (setq lst (list "tssdeng.shx" "hztxt.shx"))
  (if (vl-every 'findfile lst)
    (mapcar 'set '(zt1 zt2) lst)
    (setq zt (tblsearch "style" "Standard")
          zt1 (dxf 3 zt)
          zt2 (dxf 4 zt)
    )
  )
  (if (Not (Tblsearch "Style" Wzys))
    (entmake (list '(0 . "STYLE") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbTextStyleTableRecord") '(70 . 0) (cons 2 wzys) (cons 40 zg) (cons 41 zk) (cons 3 zt1) (cons 4 zt2)))
    (Setvar "textstyle" wzys)
  )
  wzys
)

(princ "\n衡重式挡土墙绘制命令加载完成。输入 dtq 开始绘制。")
(princ)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-23 02:03 , Processed in 0.170431 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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