00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef GDAL_ALG_PRIV_H_INCLUDED
00033 #define GDAL_ALG_PRIV_H_INCLUDED
00034
00035 #include "gdal_alg.h"
00036
00037 CPL_C_START
00038
00040 typedef enum { GBV_UserBurnValue = 0, GBV_Z = 1, GBV_M = 2
00044 } GDALBurnValueSrc;
00045
00046 typedef enum {
00047 GRMA_Replace = 0,
00048 GRMA_Add = 1,
00049 } GDALRasterMergeAlg;
00050
00051 typedef struct {
00052 unsigned char * pabyChunkBuf;
00053 int nXSize;
00054 int nYSize;
00055 int nBands;
00056 GDALDataType eType;
00057 double *padfBurnValue;
00058 GDALBurnValueSrc eBurnValueSource;
00059 GDALRasterMergeAlg eMergeAlg;
00060 } GDALRasterizeInfo;
00061
00062
00063
00064
00065
00066 typedef void (*llScanlineFunc)( void *, int, int, int, double );
00067 typedef void (*llPointFunc)( void *, int, int, double );
00068
00069 void GDALdllImagePoint( int nRasterXSize, int nRasterYSize,
00070 int nPartCount, int *panPartSize,
00071 double *padfX, double *padfY, double *padfVariant,
00072 llPointFunc pfnPointFunc, void *pCBData );
00073
00074 void GDALdllImageLine( int nRasterXSize, int nRasterYSize,
00075 int nPartCount, int *panPartSize,
00076 double *padfX, double *padfY, double *padfVariant,
00077 llPointFunc pfnPointFunc, void *pCBData );
00078
00079 void GDALdllImageLineAllTouched(int nRasterXSize, int nRasterYSize,
00080 int nPartCount, int *panPartSize,
00081 double *padfX, double *padfY,
00082 double *padfVariant,
00083 llPointFunc pfnPointFunc, void *pCBData );
00084
00085 void GDALdllImageFilledPolygon(int nRasterXSize, int nRasterYSize,
00086 int nPartCount, int *panPartSize,
00087 double *padfX, double *padfY,
00088 double *padfVariant,
00089 llScanlineFunc pfnScanlineFunc, void *pCBData );
00090
00091 CPL_C_END
00092
00093
00094
00095
00096
00097 class GDALRasterPolygonEnumerator
00098
00099 {
00100 private:
00101 void MergePolygon( int nSrcId, int nDstId );
00102 int NewPolygon( GInt32 nValue );
00103
00104 public:
00105
00106 GInt32 *panPolyIdMap;
00107 GInt32 *panPolyValue;
00108
00109 int nNextPolygonId;
00110 int nPolyAlloc;
00111
00112 int nConnectedness;
00113
00114 public:
00115 GDALRasterPolygonEnumerator( int nConnectedness=4 );
00116 ~GDALRasterPolygonEnumerator();
00117
00118 void ProcessLine( GInt32 *panLastLineVal, GInt32 *panThisLineVal,
00119 GInt32 *panLastLineId, GInt32 *panThisLineId,
00120 int nXSize );
00121
00122 void CompleteMerges();
00123
00124 void Clear();
00125 };
00126
00127 #ifdef OGR_ENABLED
00128
00129
00130
00131
00132
00133 class GDALRasterFPolygonEnumerator
00134
00135 {
00136 private:
00137 void MergePolygon( int nSrcId, int nDstId );
00138 int NewPolygon( float fValue );
00139
00140 public:
00141
00142 GInt32 *panPolyIdMap;
00143 float *pafPolyValue;
00144
00145 int nNextPolygonId;
00146 int nPolyAlloc;
00147
00148 int nConnectedness;
00149
00150 public:
00151 GDALRasterFPolygonEnumerator( int nConnectedness=4 );
00152 ~GDALRasterFPolygonEnumerator();
00153
00154 void ProcessLine( float *pafLastLineVal, float *pafThisLineVal,
00155 GInt32 *panLastLineId, GInt32 *panThisLineId,
00156 int nXSize );
00157
00158 void CompleteMerges();
00159
00160 void Clear();
00161 };
00162 #endif
00163
00164 typedef void* (*GDALTransformDeserializeFunc)( CPLXMLNode *psTree );
00165
00166 void* GDALRegisterTransformDeserializer(const char* pszTransformName,
00167 GDALTransformerFunc pfnTransformerFunc,
00168 GDALTransformDeserializeFunc pfnDeserializeFunc);
00169 void GDALUnregisterTransformDeserializer(void* pData);
00170
00171 void GDALCleanupTransformDeserializerMutex();
00172
00173
00174
00175 void* GDALCloneTPSTransformer( void *pTransformArg );
00176 void* GDALCloneGenImgProjTransformer( void *pTransformArg );
00177 void* GDALCloneApproxTransformer( void *pTransformArg );
00178
00179
00180 void* GDALCreateTPSTransformerInt( int nGCPCount, const GDAL_GCP *pasGCPList,
00181 int bReversed, char** papszOptions );
00182
00183 void CPL_DLL * GDALCloneTransformer( void *pTranformerArg );
00184
00185
00186
00187
00188
00195 #define MAX_ULPS 10
00196
00197 GBool GDALFloatEquals(float A, float B);
00198
00199 #endif