请教如何自动计算面积时自动减去图形中的孔洞部分
本帖最后由 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)
)
求各对象的面域,再布尔运算 批量生成面域并按包含关系分别求差集
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=181353&fromuid=7328286
(出处: 明经CAD社区)
;; 不具有通用性,慎用!
本帖最后由 seamopan 于 2022-5-22 17:30 编辑
xyp1964 发表于 2022-5-22 16:16
;; 不具有通用性,慎用!
”错误:no function definition:XYP-INITSET”
运行程序怎么显示错误啊,需要怎么定义函数吗? 填充后直接显示的面积应该就是去掉空洞的面积
如果是高版本的CAD,直接获取填充的面积数值就可以了。低版本可能没有填充面积。 这个很实用,请高手帮忙完善一下,谢谢, xyp1964 发表于 2022-5-22 16:16
;; 不具有通用性,慎用!
院长开发一个自动计算窗地比的插件倍
页:
[1]
2