发布了一个帖子向坛友请教,整理如下
1原帖
http://topic.csdn.net/u/20110711/13/01cb1ff3-162c-4e5a-8220-4be89964f1b7.html
2方法
方法①
可以先将你的不规则图形转换为区域(Region),然后可以用函数PtInRegion来判断。
CreatePolygonRgn()
PtInRegion()
方法②
开一个内存CDC,把你的不规则区域用一种颜色填充,其它的用另一种颜色填充。然后判断这点是什么颜色,就可以确定是在区域内或外了。
多个区域同理。
先将区域填充颜色在判断颜色来判断是否在区域内部,
gr.FillPolygon(blueBrush, points, Drawing.Drawing2D.FillMode.Winding)
方法③
射线法
bool CBView::isPtInRegion(CBPoint testPt, CBPath* pPath)
{
double dPtx = testPt.x;
double dPty = testPt.y;
CBObList* pSegList = pPath->getSegmentList();
CBPoint endPt = pPath->getEndPt();
int iNum = pPath->getSegmentCount();
bool bOddNodes = false;
for (POSITION pos = pSegList->GetHeadPosition(); pos != NULL;)
{
CBSegment* pCurrSeg = (CBSegment* )pSegList->GetNext(pos);
CBSplineTo seg;
CBPoint currPt = pCurrSeg->getEndPt();
if ((currPt.y < dPty && endPt.y >= dPty)
|| (endPt.y < dPty && currPt.y >= dPty)
&& (currPt.x <= dPtx || endPt.x <= dPtx))
{
if (currPt.x + (dPty - currPt.y) / (endPt.y - currPt.y) * (endPt.x - currPt.x) <dPtx)
{
bOddNodes = !bOddNodes;
}
}
endPt = currPt;
}
return bOddNodes;
}