明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 201|回复: 8

[源码] 面积求和

[复制链接]
发表于 13 小时前 | 显示全部楼层 |阅读模式
;;计算各种表面、面域的面积和。设计 何勇
;;注意:绘图单位以毫米计。
(defun C:calmj(/ ss e ent)
  (setq ss (ssget))
  (setq are1 0)
  (while ss
    (setq
      e (ssname ss 0)
      ent (entget e)
      ss (if (> (sslength ss) 1)
             (ssdel e ss)
          nil
         )
    )
    (cond ((or (=  (cdr (assoc 0 ent))  "LWPOLYLINE")
                           (=  (cdr (assoc 0 ent))  "POLYLINE")
                           (=  (cdr (assoc 0 ent))  "REGION")
                           (=  (cdr (assoc 0 ent))  "LOFTEDSURFACE")
                           (=  (cdr (assoc 0 ent))  "SURFACE")
                           (=  (cdr (assoc 0 ent))  "REVOLVEDSURFACE")
                           (=  (cdr (assoc 0 ent))  "EXTRUDEDSURFACE")
                           (=  (cdr (assoc 0 ent))  "PLANESURFACE")
                           (=  (cdr (assoc 0 ent))  "SWEPTSURFACE")
                   )
                 (command "AREA" "e" e)
                   (setq
                         are1 (+ are1 (getvar "AREA"))
                   )
              )
        );;end cond
  );;end while
  (princ (strcat "\n总面积为:" (rtos are1) "mm2"))
  (princ (strcat "\n总面积为:" (rtos (/ are1 1000000.0)) "m2"))
  (prin1)
)

回复

使用道具 举报

发表于 8 小时前 | 显示全部楼层
似乎alisp只能用(command "AREA" "e" e)求面积,autocad2000之后有了com,用vla-get-area就可以求得面积
回复 支持 反对

使用道具 举报

发表于 7 小时前 | 显示全部楼层
谢谢分享谢谢分享谢谢分享
回复 支持 反对

使用道具 举报

发表于 7 小时前 | 显示全部楼层
(member (cdr (assoc 0 ent))'("LWPOLYLINE" "POLYLINE""REGION""LOFTEDSURFACE""SURFACE""REVOLVEDSURFACE""EXTRUDEDSURFACE""PLANESURFACE""SWEPTSURFACE"))
回复 支持 反对

使用道具 举报

发表于 6 小时前 | 显示全部楼层
;;    |                 实体面积                 |
;;    =============================================
;;说明:实体面积
;;参数:entcar (entsel))
;;返回fx-area (car (entsel)))面积
(defun fx-area(ent / obj-vla obj-area)
        (if (and ent (= 'ENAME (type ent)))
                (progn
                        (setq obj-vla (vlax-ename->vla-object ent))
                        (setq obj-area (vla-get-Area obj-vla))
                )
        )
)       
;;    =============================================
;;    |              选择集实体面积               |
;;    =============================================
;;说明:图形面积 m2
;;参数:ss:选择集或图元 (选择集则为面积和)
;;返回fx-txmj (ssget))  (fx-txmj (car (entsel)))
(defun fx-txmj(ss / EN N ssa TOT_AREA)
        (if (and ss (= 'PICKSET (type ss)))
                (setq ss ss)
                (if (and ss (= 'ENAME (type ss)))
                        (progn
                                (setq
                                        ssa nil
                                        ssa (ssadd)
                                        ssa (ssadd ss ssa)
                                        ss ssa
                                )
                        )
                )               
        )
        (if (and ss (= 'PICKSET (type ss)))
                (progn
                        (setq n -1)
                        (setq tot_area 0)      
                        (repeat (sslength ss)
                                (setq en (vla-get-Area (vlax-ename->vla-object (ssname ss (setq n (1+ n))))))
                                (setq tot_area (+ tot_area en))
                        )
                        (setq tot_area (/ tot_area 1000000))
                )
        )
        tot_area
)
回复 支持 反对

使用道具 举报

发表于 6 小时前 | 显示全部楼层
  1. (defun c:tt ()
  2.   (if (setq ss (ssget '((0 . "arc,circle,spline,*po*,region,*surface"))))
  3.     (progn
  4.       (setq i -1
  5.             a 0
  6.       )
  7.       (while (setq e (ssname ss (setq i (1+ i))))
  8.         (command "AREA" "o" e)
  9.         (setq a (+ a (getvar 'AREA)))
  10.       )
  11.       (princ (strcat "\n总面积为: " (rtos a) " 平方毫米"))
  12.       (princ (strcat "\n总面积为: " (rtos (* a 1e-6)) " 平方米"))
  13.     )
  14.   )
  15.   (princ)
  16. )
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层
好代码,学习了,谢谢
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层
自贡黄明儒 发表于 2025-1-22 07:57
似乎alisp只能用(command "AREA" "e" e)求面积,autocad2000之后有了com,用vla-get-area就可以求得面积

https://www.cnblogs.com/JJBox/p/14300098.html#_lab2_4_4
鞋带公式,直接算,嘻嘻
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层
夏生生 发表于 2025-1-22 09:02
(member (cdr (assoc 0 ent))'("LWPOLYLINE" "OLYLINE""REGION""LOFTEDSURFACE""SURFACE""REVOLVEDSURFACE ...

前辈你好    这样看起来在ssget的时候就能过滤
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-22 16:05 , Processed in 0.189751 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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