AutoCAD 中的面域可以通过 MassProp 命令查询形心位置及惯性矩。但对于多段线绘制的几何图形,其属性中只有面积及周长,没有形心位置。本文旨在通过代码来解决这个问题。
暂时未找到一般性的算法,于是先从定义出发:将不规则图形分割为多个矩形来处理。例如三个矩形的面积及形心坐标分别为:A1 (X1, Y1) 、A2 (X2, Y2)、A3 (X3, Y3);则不规则图形 A = A1 + A2 + A3 的形心坐标就是:
Xc = (A1*X1 + A2*X2 + A3*X3) / (A1 + A2 + A3)
Yc = (A1*Y1 + A2*Y2 + A3*Y3) / (A1 + A2 + A3)
下面是 AutoCAD VBA 的代码实现过程。首先是 ThisDrawing 模块的内容:
Option Explicit
Public Sub PolyCenter()
Dim SeleObjts As AcadSelectionSet
Call CreateSelectionSet(SeleObjts, "SeleObjts")
SeleObjts.SelectOnScreen
Dim Objt As Object
Dim nPoly As Integer
Dim Polys() As AcadLWPolyline
For Each Objt In SeleObjts
If TypeOf Objt Is AcadLWPolyline Then
nPoly = nPoly