[请问]如何判断某个点是否在AcDbRegion之内?
<p>请问AcDbRegion是否有函数可以判断与它在同一个平面上的点是否在它之中?</p><p>谢谢!</p> <p>已经找到了解决的方法。</p><p>找到的主要的方法有两种,一种是通过该点生成一条射线,判断射线与Region的交点个数。实现方法如下,摘自Autodesk Discussion Groups:</p><p>BOOL ptInPoly(AcGePoint2d & pt, AcGePoint2dArray & verts)<br/>{<br/>AcDbPolyline poly(verts.length());<br/>for (int i = 0; i < verts.length(); i++)<br/>es = poly.addVertexAt(i, verts.at(i));<br/>poly.setClosed(Adesk::kTrue);</p><p>AcDbRay ray;<br/>ray.setBasePoint(AcGePoint3d(pt.x, pt.y, 0.0));<br/>ray.setUnitDir(AcGeVector3d(0.0, -1.0, 0.0));</p><p>AcGePoint3dArray points;</p><p>es = poly.intersectWith(&ray, AcDb::kOnBothOperands, points);<br/>if (points.length() % 2)<br/>return TRUE;<br/>else<br/>return FALSE;<br/>}<br/></p><p></p><p>另一种方法是获取Region的各个顶点,利用MFC的CRgn类的PtInRegion方法来判断。获取Region顶点可以通过炸开Region并获取各条线段的方法来实现。</p> <p>如果点在域外,但射线恰好到了顶点处,那岂不是也一个交点?</p> 所以要对原射线作一个微小角度偏移进行验证,如果两次都是奇数个交点,则在域内
页:
[1]