lxspine 发表于 2007-4-13 09:52:00

[请问]如何判断某个点是否在AcDbRegion之内?

<p>请问AcDbRegion是否有函数可以判断与它在同一个平面上的点是否在它之中?</p><p>谢谢!</p>

lxspine 发表于 2007-4-18 09:31:00

<p>已经找到了解决的方法。</p><p>找到的主要的方法有两种,一种是通过该点生成一条射线,判断射线与Region的交点个数。实现方法如下,摘自Autodesk Discussion Groups:</p><p>BOOL ptInPoly(AcGePoint2d &amp; pt, AcGePoint2dArray &amp; verts)<br/>{<br/>AcDbPolyline poly(verts.length());<br/>for (int i = 0; i &lt; 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(&amp;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>

gzs 发表于 2007-4-20 22:19:00

<p>如果点在域外,但射线恰好到了顶点处,那岂不是也一个交点?</p>

fpiw 发表于 2007-4-23 12:55:00

所以要对原射线作一个微小角度偏移进行验证,如果两次都是奇数个交点,则在域内
页: [1]
查看完整版本: [请问]如何判断某个点是否在AcDbRegion之内?