You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
3.2 KiB
94 lines
3.2 KiB
/******************************Module*Header*******************************\
|
|
*
|
|
* Copyright (c) 1999 Microsoft Corporation
|
|
*
|
|
* Module Name:
|
|
*
|
|
* Region to Path Conversion Class
|
|
*
|
|
* Abstract:
|
|
*
|
|
* Converts an arbitrary GpRegion to GpPath equivalent. It first
|
|
* analyzes the GpRegion for simple conversion cases which it handles.
|
|
* If the region is complex, then it invokes Kirk Olynyk's region to
|
|
* path conversion routine.
|
|
*
|
|
* Notes:
|
|
*
|
|
*
|
|
* Created:
|
|
*
|
|
* 10/29/1999 ericvan
|
|
*
|
|
\**************************************************************************/
|
|
|
|
/*********************************Class************************************\
|
|
* class RTP_EPATHOBJ : publci EPATHOBJ *
|
|
* *
|
|
* Adds diagonalization. *
|
|
* *
|
|
* Public Interface: *
|
|
* *
|
|
* History: *
|
|
* Wed 15-Sep-1993 10:06:05 by Kirk Olynyk [kirko] *
|
|
* Wrote it. *
|
|
\**************************************************************************/
|
|
|
|
/**************************************************************************\
|
|
* class RTP_PATHMEMOBJ : public PATHMEMOBJ *
|
|
* *
|
|
* This class is for converting regions to paths *
|
|
* *
|
|
\**************************************************************************/
|
|
|
|
const FLONG LastPointFlag = 1;
|
|
const UINT MAX_ENUMERATERECTS = 20;
|
|
|
|
class RegionToPath
|
|
{
|
|
private:
|
|
BOOL bMoreToEnum;
|
|
|
|
const DpRegion *region;
|
|
DynByteArray *types;
|
|
DynByteArray inTypes; // accumulated types
|
|
DynPointArray *points;
|
|
DynPointArray inPoints; // accumulated points
|
|
|
|
GpPoint* curPoint;
|
|
BYTE* curType;
|
|
|
|
GpPoint* firstPoint; // first point in current subpath
|
|
GpPoint* lastPoint;
|
|
BOOL endSubpath;
|
|
|
|
INT outPts; // number of points in output buffer
|
|
GpPoint writePts[2]; // output buffer
|
|
GpPoint AB; // aptfx[1] - aptfx[0]
|
|
|
|
INT curIndex; // start of circular buffer (current corner)
|
|
INT lastCount; //
|
|
|
|
INT numPts;
|
|
FLONG flags[3];
|
|
GpPoint pts[3];
|
|
|
|
FLONG afl[3]; // array of flags for the vertices
|
|
UINT aptfx[3]; // array of vertex positions
|
|
|
|
public:
|
|
|
|
RegionToPath() {}
|
|
~RegionToPath() {}
|
|
|
|
BOOL ConvertRegionToPath(const DpRegion* region,
|
|
DynPointArray& newPoints,
|
|
DynByteArray& newTypes);
|
|
|
|
private:
|
|
|
|
BOOL DiagonalizePath();
|
|
BOOL FetchNextPoint();
|
|
BOOL WritePoint();
|
|
|
|
};
|