| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- /*******************************************************************
- Fichier : Region.cpp
- Date : 14/12/10
- Version : 1.000
- Description : Classe de gestion des régions
- |*******************************************************************/
- #include "region.h"
- #include <cstdlib>
- 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;
- }
- }
|