|
|
|
|
|
/************************************************************************
|
|
|
|
|
|
* Author : ww
|
|
|
|
|
|
* Version : 1.0
|
|
|
|
|
|
* Date : 23 April 2015
|
|
|
|
|
|
* Description: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>clipper.h<EFBFBD>е<EFBFBD><EFBFBD>࣬<EFBFBD>ṩ<EFBFBD>ⲿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
//#include "clipper.h"
|
|
|
|
|
|
class Polygons;
|
|
|
|
|
|
|
|
|
|
|
|
namespace NClipperLib
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|
|
|
|
|
enum EClipType
|
|
|
|
|
|
{
|
|
|
|
|
|
ectIntersection,
|
|
|
|
|
|
ectUnion,
|
|
|
|
|
|
ectDifference,
|
|
|
|
|
|
ectXor
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//enum EPolyType { eptSubject, eptClip };
|
|
|
|
|
|
|
|
|
|
|
|
struct ClipperPoint
|
|
|
|
|
|
{
|
|
|
|
|
|
double x;
|
|
|
|
|
|
double y;
|
|
|
|
|
|
ClipperPoint(){ }
|
|
|
|
|
|
ClipperPoint(double x0,double y0){ x = x0; y = y0;}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
typedef std::vector<ClipperPoint> ClipperPolygon;
|
|
|
|
|
|
typedef std::vector<ClipperPolygon> ClipperPolygons;
|
|
|
|
|
|
|
|
|
|
|
|
class AFX_EXT_CLASS CClipperHandler
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CClipperHandler(void);
|
|
|
|
|
|
CClipperHandler(unsigned int n_Prec);
|
|
|
|
|
|
~CClipperHandler(void);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD>ν<EFBFBD><CEBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뵽solution<6F><6E>,eTypeΪ<65><CEAA><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>ཻ<EFBFBD><E0BDBB><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(exclusive or)*/
|
|
|
|
|
|
bool Execute(ClipperPolygons& pPolySubject, ClipperPolygons& pPolyClip, ClipperPolygons& pPolySolution, EClipType eType);
|
|
|
|
|
|
/** @brief <20><><EFBFBD>þ<EFBFBD><C3BE>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ */
|
|
|
|
|
|
void SetPrecison(unsigned int nPrec);
|
|
|
|
|
|
/** @brief <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
int GetPrecison(void) {return m_nPrec; }
|
|
|
|
|
|
|
|
|
|
|
|
/** @<40><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD><CEBC><EFBFBD>С<EFBFBD><D0A1><EFBFBD>꣬ʧ<EAA3AC>ܷ<EFBFBD><DCB7><EFBFBD>false*/
|
|
|
|
|
|
bool GetMinimumValue(ClipperPolygons& sourcePolygons, double& xmin, double& ymin );
|
|
|
|
|
|
/** @<40><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>꣬ʧ<EAA3AC>ܷ<EFBFBD><DCB7><EFBFBD>false*/
|
|
|
|
|
|
bool GetMaximumValue(ClipperPolygons& sourcePolygons, double& xmax, double& ymax );
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
/** @brief <20><>ClipperPolygongs<67><73><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ƫ<EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD>;<EFBFBD><CDBE><EFBFBD> */
|
|
|
|
|
|
bool ClipPolysToPolygons(ClipperPolygons* pSourcePolygons, Polygons* pDestPolygons);
|
|
|
|
|
|
bool PolygonToClipPolys(Polygons* pSourcePolygons, ClipperPolygons* pDestPolygons);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief <20>ڲ<EFBFBD>ִ<EFBFBD><D6B4>*/
|
|
|
|
|
|
//bool Execute()
|
|
|
|
|
|
|
|
|
|
|
|
/** @breif <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD>ȡ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
bool GetOperationParas();
|
|
|
|
|
|
|
|
|
|
|
|
ClipperPolygons* m_pSubject;
|
|
|
|
|
|
ClipperPolygons* m_pClip;
|
|
|
|
|
|
|
|
|
|
|
|
unsigned int m_nPrec; //<2F><><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ʾ<EFBFBD><CABE>ȷ<EFBFBD><C8B7>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> ȱʡΪ8
|
|
|
|
|
|
double m_dXOffset;//x<><78><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
|
|
|
|
|
double m_dYOffset;//y<><79><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
|
|
|
|
|
//int m_nXInitOffset; //X<><58>ʼƫ<CABC><C6AB><EFBFBD><EFBFBD>
|
|
|
|
|
|
//long64 m_nXScaleOffset; //X<>Ŵ<EFBFBD><C5B4><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
|
|
|
|
|
//int m_nYInitOffset; //Y<><59>ʼƫ<CABC><C6AB><EFBFBD><EFBFBD>
|
|
|
|
|
|
//long64 m_nYScaleOffset; //Y<>Ŵ<EFBFBD><C5B4><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
//double m_dScale ; // <20>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//double m_dXOffset; // Xƫ<58><C6AB><EFBFBD><EFBFBD>
|
|
|
|
|
|
//double m_dYOffset; // yƫ<79><C6AB><EFBFBD><EFBFBD>
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
} //namespace
|
|
|
|
|
|
|