已经找到了解决的方法。 找到的主要的方法有两种,一种是通过该点生成一条射线,判断射线与Region的交点个数。实现方法如下,摘自Autodesk Discussion Groups: BOOL ptInPoly(AcGePoint2d & pt, AcGePoint2dArray & verts) { AcDbPolyline poly(verts.length()); for (int i = 0; i < verts.length(); i++) es = poly.addVertexAt(i, verts.at(i)); poly.setClosed(Adesk::kTrue); AcDbRay ray; ray.setBasePoint(AcGePoint3d(pt.x, pt.y, 0.0)); ray.setUnitDir(AcGeVector3d(0.0, -1.0, 0.0)); AcGePoint3dArray points; es = poly.intersectWith(&ray, AcDb::kOnBothOperands, points); if (points.length() % 2) return TRUE; else return FALSE; }
另一种方法是获取Region的各个顶点,利用MFC的CRgn类的PtInRegion方法来判断。获取Region顶点可以通过炸开Region并获取各条线段的方法来实现。 |