明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1286|回复: 9

[提问] 请教如何自动计算面积时自动减去图形中的孔洞部分

[复制链接]
发表于 2022-5-21 21:28:55 | 显示全部楼层 |阅读模式
本帖最后由 seamopan 于 2022-5-21 21:35 编辑

这个程序可以自动计算面积和重量,能否尝试将此程序改为如图中所示:只计算有剖面线部分的面积和重量啊,然后输出面积和重量结果以两行的形式输出到对应图形的上方呀?(如图中紫色的结果),如果能将程序中固定的厚度和密度改为运行程序时提示手动输入那就更好了;在论坛中找了好久没有合适的解决办法;图中红色部分是现在程序直接输出的地方和结果。
(defun c:mj()
  (vl-load-com)
  (setvar "cmdecho" 0)
  (setvar "blipmode" 0)
  (setvar "osmode" 0)
  (command "_undo" "be")
  (if (progn
           (princ "\n请选取圆、封闭多段线:")
                 (setq ssa (ssget '((0 . "LWPOLYLINE,CIRCLE"))))
      )
      (progn
         (setq i 0)
         (repeat (sslength ssa)
             (setq ent (ssname ssa i))
             (setq obj (vlax-ename->vla-object ent))
             (setq dxf (entget ent))
             (setq name (cdr (assoc 0 dxf)))
             (setq area (/ (vlax-curve-getArea obj) 1000000.0))
             (cond ((= name "CIRCLE")
                       (setq pmid (cdr (assoc 10 dxf)))
                   )
                   ((= name "LWPOLYLINE")
                       (If (= (vlax-get obj "Closed") -1)
                           (progn
                                (setq pts (mapcar 'cdr (vl-remove-if '(lambda(x)(/= (car x) 10)) dxf)))
                                (setq pmid (mapcar '/ (apply 'mapcar (cons '+ pts))
                                                      (list (length pts) (length pts))
                                           )
                                )
                           )
                           (setq pmid nil)
                       )
                  )
             )         
             (If (/= pmid nil)
                 (progn
                     (setq weight (* (* area 2) 7.86))                                                               ;;重量计算(厚度2,密度7.86 )
                     (setq context1 (strcat (rtos area 2 2) "㎡," (rtos weight 2 2) "㎏"))          ;;2表示小数形式,保留小数点后2位    ;单位   
                     (entmake (list
                                    '(0 . "TEXT")
                                    '(100 . "AcDbEntity")
                                    '(100 . "AcDbText")
                                     (cons 1 context1)
                                     (cons 10 pmid)
                                     (cons 11 pmid)
                                     (cons 40 15) '(41 . 1.0)
                                     (cons 50 0.0) '(51 . 0.0)
                                    '(71 . 0) '(72 . 1) '(73 . 2)
                               )
                      )
                 )
             )
         
             (setq i (1+ i))
         )
     )   
  )
  (command "_undo" "e")
  (princ)
)

本帖子中包含更多资源

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

x
发表于 2022-5-22 11:49:55 | 显示全部楼层
求各对象的面域,再布尔运算
发表于 2022-5-22 11:54:57 | 显示全部楼层
批量生成面域并按包含关系分别求差集
http://bbs.mjtd.com/forum.php?mo ... amp;fromuid=7328286
(出处: 明经CAD社区)
发表于 2022-5-22 16:16:55 | 显示全部楼层

;; 不具有通用性,慎用!




本帖子中包含更多资源

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

x
 楼主| 发表于 2022-5-22 16:57:25 | 显示全部楼层
本帖最后由 seamopan 于 2022-5-22 17:30 编辑
xyp1964 发表于 2022-5-22 16:16
;; 不具有通用性,慎用!

”错误:no function definition:XYP-INITSET”
运行程序怎么显示错误啊,需要怎么定义函数吗?
发表于 2022-5-22 17:30:38 | 显示全部楼层
填充后直接显示的面积应该就是去掉空洞的面积
发表于 2022-5-23 16:11:02 | 显示全部楼层
如果是高版本的CAD,直接获取填充的面积数值就可以了。低版本可能没有填充面积。

本帖子中包含更多资源

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

x
发表于 2022-5-24 07:31:05 | 显示全部楼层
这个很实用,请高手帮忙完善一下,谢谢,
发表于 2022-5-24 18:08:39 | 显示全部楼层
xyp1964 发表于 2022-5-22 16:16
;; 不具有通用性,慎用!

院长开发一个自动计算窗地比的插件倍
发表于 2022-5-26 21:54:23 | 显示全部楼层

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-9-29 15:20 , Processed in 0.191975 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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