/******************************************************************* Fichier : Region.cpp Date : 14/12/10 Version : 1.000 Description : Classe de gestion des régions |*******************************************************************/ #include "region.h" #include Region::Region() { m_tpoints = NULL; m_nbPoints = 0; } Region::~Region() { if ( m_tpoints ) { delete[] m_tpoints; m_tpoints = NULL; m_nbPoints = 0; } } bool Region::PtInRegion0(int x, int y) { Point vPoint; vPoint.x = x; vPoint.y = y; return PtInRegion(&vPoint); } bool Region::PtInRegion(Point *vPoint) { int i, j, vx, vy; bool c = false; vx = vPoint->x; vy = vPoint->y; for (i = 0, j = m_nbPoints - 1; i < m_nbPoints; j = i++) { if ((m_tpoints[j].y - m_tpoints[i].y) != 0) // Contre les divisions par 0 { if ((((m_tpoints[i].y <= vy) && (vy < m_tpoints[j].y)) || ((m_tpoints[j].y <= vy) && (vy < m_tpoints[i].y))) && (vx < (m_tpoints[j].x - m_tpoints[i].x) * (vy - m_tpoints[i].y) / (m_tpoints[j].y - m_tpoints[i].y) + m_tpoints[i].x)) { c = !c; } } } return c; } Rect Region::GetRgnBox() { int minx, maxx, miny, maxy; int i; Rect vRect; minx = 32768; maxx = 0; miny = 32768; maxy = 0; for (i = 0; i < m_nbPoints; i++) { if (m_tpoints[i].x <= minx) { minx = m_tpoints[i].x; } if (m_tpoints[i].x >= maxx) { maxx = m_tpoints[i].x; } if (m_tpoints[i].y <= miny) { miny = m_tpoints[i].y; } if (m_tpoints[i].y >= maxy) { maxy = m_tpoints[i].y; } } vRect.left = minx; vRect.right = maxx; vRect.top = miny; vRect.bottom = maxy; return vRect; } bool Region::CreatePolygonRgn(Point *tabPoints, int n_points) { int i; /* if ( !tabPoints ) { return false; } */ m_nbPoints = n_points; m_tpoints = new Point[ n_points ]; /* if ( !m_tpoints ) { return false; } */ for (i = 0; i < m_nbPoints; i++) { m_tpoints[i].x = tabPoints[i].x; m_tpoints[i].y = tabPoints[i].y; } return true; } void Region::DeleteObject() { if ( m_tpoints ) { delete[] m_tpoints; m_tpoints = NULL; m_nbPoints = 0; } }