明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3496|回复: 13

重复算承台土方体积

[复制链接]
发表于 2014-8-21 14:58:25 | 显示全部楼层 |阅读模式
各位,在各位,在算承台土方体积时,需要将承台混凝土四周OFFSET指定距离,如:540毫米,论坛里有一个批量外扩程序,但是无法处理密集承台外扩时侵占相邻承台面积,导致重复算量。哪个高手能解决吗?
时,需要将承台混凝土四周OFFSET指定距离,如:540毫米,论坛里有一个批量外扩程序,但是无法处理密集承台外扩时侵占相邻承台面积,导致重复算量,听说广联达可以解决这个问题。删除批量OFFSET后相交部分并重新构成多段线,再计算面积。哪个高手能解决吗?



发表于 2022-9-22 09:21:15 | 显示全部楼层
Atsai 发表于 2014-9-5 16:43
我不是高手,效果演示如下图。
利用G版的代码改的,只为了要达到功能。

hi,您好
请教您一下,为什麽我的计算结果没办法读取z值呢?
z值是用text字体打在旁边读取吗?
发表于 2022-7-8 23:44:28 | 显示全部楼层
有一个很粗暴的方法,直接建立三维模型,然后合并实体。
发表于 2022-11-26 16:20:10 | 显示全部楼层
好东西,顶一个
 楼主| 发表于 2014-8-21 15:35:44 | 显示全部楼层
本帖最后由 树櫴希德 于 2014-8-22 08:48 编辑

这个问题是不是很难啊。发起挑战啊。哪位大神有办法?

本帖子中包含更多资源

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

x
 楼主| 发表于 2014-8-21 15:40:51 | 显示全部楼层
本帖最后由 树櫴希德 于 2014-8-22 08:49 编辑

我想应该可以用Gu_xl  大神的LISP改进,大侠们改进下吧

;;批量偏移 By Gu_xl 2013.04.01


(defun c:py (/ CLOCKWISEP OFFSET KD SS N EN kd0)
  (defun CLOCKWISEP (en / lw minp MaxP lst)
    (setq lw (vlax-ename->vla-object en))
    (vla-GetBoundingBox lw 'MinP 'MaxP)
    (setq
      minp (vlax-safearray->list minp)
      MaxP (vlax-safearray->list MaxP)
      lst  (mapcar
             (function
               (lambda (x)
                 (vlax-curve-getParamAtPoint
                   lw
                   (vlax-curve-getClosestPointTo lw x)
                   )
                 )
               )
             (list minp
                   (list (car minp) (cadr MaxP))
                   MaxP
                   (list (car MaxP) (cadr minp))
                   )
             )
      )
    (if (or
          (<= (car lst) (cadr lst) (caddr lst) (cadddr lst))
          (<= (cadr lst) (caddr lst) (cadddr lst) (car lst))
          (<= (caddr lst) (cadddr lst) (car lst) (cadr lst))
          (<= (cadddr lst) (car lst) (cadr lst) (caddr lst))
          )
      t
      )
    )
  (initget 7 "W N S  ")
  (setq kd0 (getkword "\n[向外偏移W/向内偏移N/双向偏移S]<W>"))
  (if (= "" kd0)
    (setq kd0 "W")
    )
  (initget 6)
  (setq offset (getreal "\n[输入偏移距离]<0.5>"))
  (if (null offset)
    (setq offset 0.5)
    )
  (initget 7 "Y N  ")
  (setq kd (getkword "\n[删除源对象<Y>/不删除源对象<N>]<N>:"))
  (if (= kd "")
    (setq kd "N")
    )
  (while (setq ss (ssget '((0 . "*polyline,arc,circle"))))
    (repeat (setq n (sslength ss))
      (setq en (ssname ss (setq n (1- n))))
      (cond
        ((or (= "ARC" (cdr (assoc 0 (entget en))))
             (= "CIRCLE" (cdr (assoc 0 (entget en))))
             )
         (cond ((= kd0 "W")
                (vla-offset (vlax-ename->vla-object en) offset)
                )
               ((= kd0 "N")
                (vla-offset (vlax-ename->vla-object en) (- offset))
                )
               (t
                (vla-offset (vlax-ename->vla-object en) offset)
                (vla-offset (vlax-ename->vla-object en) (- offset))
                )
               )
         )
        (t
         (cond ((= kd0 "W")
                (if (CLOCKWISEP en)
                  (vla-offset (vlax-ename->vla-object en) (- offset))
                  (vla-offset (vlax-ename->vla-object en) offset)
                  )
                )
               ((= kd0 "N")
                (if (CLOCKWISEP en)
                  (vla-offset (vlax-ename->vla-object en) offset)
                  (vla-offset (vlax-ename->vla-object en) (- offset))
                  )
                )
               (t
                (vla-offset (vlax-ename->vla-object en) offset)
                (vla-offset (vlax-ename->vla-object en) (- offset))
                )
               )

         )
        )
      (if (= kd "Y")
        (entdel en)
        )
      )
    )
  (princ)
  )

发表于 2014-8-22 12:31:06 | 显示全部楼层
这个用缩放命令写是不是更简单呢
发表于 2014-9-1 22:14:53 | 显示全部楼层
1.先求Offset后的矩型与承台矩型间的面域,分成A3:3m、A2:2m及A1:1m。
2. 3m之体积=A3*3m。(A3:面域面积,3m之深度可记于多义线Z值)
    2m之体积=(A2与A3面域差集面积)*2m。
    1m之体积=(A1与A2、A3差集面积)*1m。
    …依此类推
3.将V3+V2+V1就可以得到体积。
 楼主| 发表于 2014-9-3 22:20:44 | 显示全部楼层
高手有办法吗
发表于 2014-9-5 16:43:13 | 显示全部楼层
本帖最后由 Atsai 于 2014-9-5 16:45 编辑
树櫴希德 发表于 2014-9-3 22:20
高手有办法吗

我不是高手,效果演示如下图。
利用G版的代码改的,只为了要达到功能。


  1. (defun c:tt ()
  2.   (vl-load-com)
  3.   (setq os (getvar "osmode"))
  4.   (setvar "osmode" 0)
  5.   (setvar "cmdecho" 0)
  6.   (defun CLOCKWISEP (en / lw minp MaxP lst)
  7.     (setq lw (vlax-ename->vla-object en))
  8.     (vla-GetBoundingBox lw 'MinP 'MaxP)
  9.     (setq
  10.       minp (vlax-safearray->list minp)
  11.       MaxP (vlax-safearray->list MaxP)
  12.       lst  (mapcar
  13.              (function
  14.                (lambda (x)
  15.                  (vlax-curve-getParamAtPoint
  16.                    lw
  17.                    (vlax-curve-getClosestPointTo lw x)
  18.                  )
  19.                )
  20.              )
  21.              (list minp
  22.                    (list (car minp) (cadr MaxP))
  23.                    MaxP
  24.                    (list (car MaxP) (cadr minp))
  25.              )
  26.            )
  27.     )
  28.     (if        (or
  29.           (<= (car lst) (cadr lst) (caddr lst) (cadddr lst))
  30.           (<= (cadr lst) (caddr lst) (cadddr lst) (car lst))
  31.           (<= (caddr lst) (cadddr lst) (car lst) (cadr lst))
  32.           (<= (cadddr lst) (car lst) (cadr lst) (caddr lst))
  33.         )
  34.       t
  35.     )
  36.   )


  37.   (setq th (getreal "\n请输入字高<1.0>"))
  38.   (if (null th)
  39.     (setq th 1.0)
  40.   )

  41.   (initget 6)
  42.   (setq offset (getreal "\n输入偏移距离<2.0>"))
  43.   (if (null offset)
  44.     (setq offset 2.0)
  45.   )


  46.   (setq a-lst nil)
  47.   (setq f-lst nil)
  48.   (setq ss (ssget '((0 . "*polyline,arc,circle"))))

  49.   (setq i 0)
  50.   (setq l (sslength ss))
  51.   (repeat l
  52.     ;;repeat 1
  53.     (setq o-lst nil)
  54.     (repeat (setq n (sslength ss))
  55.       ;;repeat 2
  56.       (setq en (ssname ss (setq n (1- n))))
  57.       (cond
  58.         ((or (= "ARC" (cdr (assoc 0 (entget en))))
  59.              (= "CIRCLE" (cdr (assoc 0 (entget en))))
  60.          )
  61.          (vla-offset (vlax-ename->vla-object en) offset)
  62.         )
  63.         (t
  64.          (if (CLOCKWISEP en)
  65.            (vla-offset (vlax-ename->vla-object en) (- offset))
  66.            (vla-offset (vlax-ename->vla-object en) offset)
  67.          )
  68.         )
  69.       )
  70.       ;;end cond

  71.       (vla-put-Elevation (vlax-ename->vla-object (entlast)) 0.0)
  72.       (command "region" (entlast) "")

  73.       (setq o-lst
  74.              (append
  75.                o-lst
  76.                (list
  77.                  (list (entlast)
  78.                        (+ (vla-get-Elevation (vlax-ename->vla-object en))
  79.                           (* n 0.000001)
  80.                        )
  81.                  )
  82.                )
  83.              )
  84.       )
  85.     )
  86.     ;;end repeat 2

  87.     (setq
  88.       o-lst
  89.        (vl-sort        o-lst
  90.                 (function (lambda (p1 p2) (> (cadr p1) (cadr p2))))
  91.        )
  92.     )

  93.     (setq ss-c nil
  94.           ss-c (ssadd)
  95.     )

  96.     (foreach y o-lst
  97.       (if (>= (cadr y) (cadr (nth i o-lst)))
  98.         (setq ss-c (ssadd (car y) ss-c))
  99.       )
  100.     )

  101.     (command "subtract" (car (nth i o-lst)) "" ss-c "")

  102.     (setq a-lst
  103.            (append
  104.              a-lst
  105.              (list
  106.                (list
  107.                  (vla-get-area (vlax-ename->vla-object (car (nth i o-lst))))
  108.                  (atof (rtos (cadr (nth i o-lst)) 2 2))
  109.                )
  110.              )
  111.            )
  112.     )
  113.     (setq f-lst (append f-lst (list (entget (car (nth i o-lst))))))

  114.     (setq ss-p (ssget "x" '((0 . "region"))))
  115.     (command "erase" ss-p "")

  116.     (setq i (1+ i))
  117.   )
  118.   ;;end repeat 1

  119.   (setq i 0)
  120.   (foreach x f-lst
  121.     (entmake x)
  122.     (setq en (entlast))
  123.     (setq ptc (vlax-safearray->list
  124.                 (vlax-variant-value
  125.                   (vla-get-centroid
  126.                     (vlax-ename->vla-object en)
  127.                   )
  128.                 )
  129.               )

  130.     )
  131.     (command "text" "j" "mc" ptc th "0" (1+ i))
  132.     (command "circle" ptc th)
  133.     (setq i (1+ i))
  134.   )


  135.   (setq pt (getpoint "\n选择文字插入点:"))
  136.   (setq vol 0.0)
  137.   (setq i 0)
  138.   (foreach x a-lst
  139.     (setq vol (+ vol (* (car x) (cadr x))))
  140.     (command "text"
  141.              "j"
  142.              "bl"
  143.              (polar pt (* 1.5 pi) (* i (* 1.5 th)))
  144.              th
  145.              "0"
  146.              (strcat "\nNo"
  147.                      (rtos (1+ i) 2 0)
  148.                      ":"
  149.                      (rtos (car x) 2 2)
  150.                      "*"
  151.                      (rtos (cadr x) 2 2)
  152.                      "="
  153.                      (rtos (* (car x) (cadr x)) 2 2)
  154.                      "(m3)"
  155.              )
  156.     )
  157.     (setq i (1+ i))
  158.   )

  159.   (command "text"
  160.            "j"
  161.            "bl"
  162.            (polar pt (* 1.5 pi) (* i (* 1.5 th)))
  163.            th
  164.            "0"
  165.            (strcat "\nTotal volume=" (rtos vol 2 2) "(m3)")
  166.   )

  167.   (setvar "osmode" os)
  168.   (princ)
  169. )

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 金钱 +5 收起 理由
树櫴希德 + 1 + 5 赞一个!

查看全部评分

 楼主| 发表于 2014-9-5 21:49:14 | 显示全部楼层
上面这个程序就是好啊,解决了承台方量计算这个大问题,以前我一直用手算的,感谢Atsai大侠无私帮助
 楼主| 发表于 2014-9-6 08:31:39 | 显示全部楼层
大家不要光看不回复啊,为Atsai大侠多赞几下啊
发表于 2014-9-7 19:23:12 | 显示全部楼层
放坡后上下底断面不一样~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-19 15:35 , Processed in 0.205886 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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