fangmin723 发表于 2024-6-21 11:16:07

获取XY平面内任意个顶点构成的封闭多边形面积

本帖最后由 fangmin723 于 2024-6-21 11:31 编辑

CAD官方自带了(vla-get-Area obj) (command AREA)来获取面积,
但vla-get-Area需现有个对象才行,
command呢,需要考虑捕捉的问题

出自明经 AutoLISP 编程②群 @必强 大佬
(and
(setq en (entsel))
(vl-cmdf "area" "o"(car en ) """" "" )
(alert (rtos(getvar 'area)))
)

上述代码也需要对象
如果想要获取如下如所示的部分面积,按照上述两种方法,
要么需要对象,要么需要考虑捕捉的问题


所以,写了按照顶点表获取面积的函数,如下:

;;说明:获取封闭多边形面积
;;参数:ptlst:按参数排序点的表
;;返回:多边形的面积
(defun polygonarea(ptlst / area pt1 pt2 pts)
    (if(> (length ptlst) 2)
      (progn
      (setq pt1 (car ptlst) pts pt1 ptlst (cdr ptlst) area 0)
      (while (setq pt2 (car ptlst))
          (setq area (+ area (- (* (car pt1) (cadr pt2)) (* (cadr pt1) (car pt2)))))
          (setq pt1 pt2 ptlst (cdr ptlst))
      )
      (setq area (* 0.5 (+ area (- (* (car pt1) (cadr pts)) (* (cadr pt1) (car pts))))))
      (abs area)
      )
      0
    )
)
(defun c:GetPolygonArea(/ ent polygonarea)
(if (setq ent (car (entsel)))
    (princ
      (rtos
      (polygonarea
          (mapcar
            'cdr
            (vl-remove-if-not '(lambda(x) (= 10 (car x)))
            (entget ent)
            )
          )
      ) 2 2
      )
    )
)
(prin1)
)



fangmin723 发表于 2024-6-21 14:45:46

注意,有z值的,或不闭合的可能数据不符

hubeiwdlue 发表于 2024-6-23 14:17:09

用纯数学方法写得函数,就是让人敬佩。
页: [1]
查看完整版本: 获取XY平面内任意个顶点构成的封闭多边形面积