www.pudn.com > Poly.rar > datasdef.h


#include  
using namespace std; 
#ifndef DATASDEF_H_ 
#define DATASDEF_H_ 
   struct IMAGESTR { 
	   int x; 
   }; 
typedef struct   
{ 
	short         pixelBytes; 
	double        original_x,original_y; 
	float         orthoimgscale; 
	double        kapa; 
	float         pixelsizeX,pixelsizeY; 
	unsigned char gridFlag; 
	float         gridIntervalX,gridIntervalY; 
	long          smallImgPtr,polygonPtr; 
}  WmgImgHeader; 
 
typedef struct tagSptImgHeader 
{ 
   	double  resolution;		//pixel size(mm) 
	char    camera[260];	//filename of camera calibration data 
	short   type;			//type of image ( 0=aerial 2=close range 10=spot ) 
	int     cameraReverse;	//camera reverse ( 1=Yes 0=No ) 
}  SptImgHeader; 
#define WM_CHANGEVIEW WM_USER+12005 
#define WM_GETBORDER  WM_USER+12008 
#define WM_STARTPROG  WM_USER+12000 
#define WM_STEPPROG   WM_USER+12010 
#define WM_ENDPROG    WM_USER+12020 
#define WM_CHOOSEGCP WM_USER+12050 
 
#define WM_MYMSG      WM_USER+120 
 
struct Coe { 
	Coe() 
	{ 
		for(int i=0;i<8;i++) 
		{ 
			a[i]  = 0; 
		} 
	} 
	int    num;  //系数个数	  
	int    blk;  //所属的块编号   0------- 
	double a[8]; //八个系数a0,a1,a2,a3 
}; 
struct PRO_START 
{ 
	char    *str; 
	int	 range; 
	int  move; 
}; 
struct BLK_NUM 
{ 
	long code; 
	int  blknum; 
}; 
enum{ 
	NONE_IMAGE, 
	NO_HEADER_IMAGE,    // 影象数据格式 
	ORTHO_IMAGE,    // 正射影象格式 
};    
 
// 用于匹配点的枚举类型 
enum{ 
	KNOW_VZ=1, 
	KNOW_OR, 
	KNOW_BOTH, 
	KNOW_ABOUT, 
}; 
 
//匹配点类型说明 
enum POINTSTYLE{ 
    UNKNOWN_POINT=-1,   //未知类型 
	GCP_POINT=0,   //控制点 
	MATCH_POINT  =1,   //同名点 
    FEATRUE_POINT  =2,   //特征线点  OR 多边形边界点    
	BORDER_MATCH_POINT =3,   //边界区域同名点 
	BORDER_POINT  =4,   //边界点 
	BOX_POINT     =5, 
}; 
//线类型说明 
enum LINESTYLE{ 
    UNKNOWN_LINE =-1,    //未知类型 
    CHINE_LINE   =0,     //山脊线 
    VALLEY_LINE  =1,     //山谷线 
	POLY_BORDER_LINE    =2,     //多边形边界线 
	POLY_LINE    =3,     //多边形           
}; 
// 匹配点的定义结构 
struct MatchPoint{	 
	MatchPoint() 
	{ 
		left_x = -1; 
		left_y = -1;	 
		right_x= -1; 
		right_y= -1; 
		sprintf(ss,"100000"); 
		pStyle = UNKNOWN_POINT;	 
		code   = 0; 
		flag   = 0; 
	} 
	float       left_x; 
	float       left_y; 
	float       right_x; 
	float       right_y; 
	char        ss[6];    //点号 
	long        code;     // 点序列号 
	POINTSTYLE  pStyle;   //点类型 0为控制点,1为同名点  ,2为特征线点,3为图象边界区域点,4为边界点 
    int         flag ;    //1为左已知右未知,2为右已知左未知,3为都已知 , 
	 
}; 
//控制地面点定义结构 
struct GCP{ 
	char    ss[3]; 
	int     code; 
	double  b;  //大地纬度  单位:度  或者 表示y方向坐标 
	double  l;  //大地经度  单位:度  或者 表示x方向坐标 
	double  h;  //大地高程  单位:米 
}; 
 
#define MATCHSIZE sizeof(MatchPoint) 
typedef vector listMatchPoint;   
 
//特征线 
struct MatchLine 
{ 
	MatchLine() 
	{ 
		mplist.clear(); 
		code = 0; 
	} 
	listMatchPoint mplist;    //保存同名点 
	int            code;    //特征线类型 0-山脊线;1-山谷线 2-边界线 
};   
//矩形框 
struct MatchRect 
{ 
	CRect  rectleft;          //左影象矩形框 
	CRect  rectRight;         //右影象矩形框 
};  
typedef vector  listMatchLine; 
//人工块 
struct MatchBlock 
{ 
   MatchBlock() 
   { 
	   mplist.clear(); 
	   IsBordIn = 0; 
	   for(int i=0;i<8;i++) 
	   { 
		   coe.a[i] = 0; 
	   } 
	   idNum = 0; 
	   pbyte = 255; 
   } 
   listMatchPoint mplist;    //同名点(包含边界线上的点) 
   MatchLine      mLine;     //边界线 
   bool           IsBordIn;  //是否包含图象边界  1:是;0:不是 
   Coe            coe;       //纠正系数 
   int            idNum;        //块的编号  :在读文件的时候会给块分配一个编号   
   BYTE           pbyte; 
}; 
//多边形系数计算点 
struct BlockCalPoint 
{ 
	listMatchPoint mplist;   //待计算的点数 
	int            blockNum; //所属的块号  
}; 
//一条水平线与多边形边界相交 
struct LineInPoly 
{ 
	int x1;       //左边界交点 
	int x2;       //右边界交点 
	int blockNum; //多边形块号  
}; 
//保存扫描线的区间 
struct InterZone 
{ 
	vector bptlist; 
	int                row; 
}; 
typedef vector listBCPoint; 
typedef vector listMatchBlock; 
 
//状态 
enum{ 
	mode_choose_none,        // 不选点 
	mode_zoom_out,           //图像放大 
	mode_zoom_in,            //图像缩小 
	mode_choose_control,     // 选控制点 
	mode_choose_point,       // 选择待匹配的点 
	mode_match_area,         //匹配块顶点 
	mode_choose_test,        // 实验匹配点  
	mode_choose_chine_pline, //画山脊线  
	mode_choose_valley_pline,//画山谷线 
	mode_select_object,      //选取对象  
	mode_choose_rect,        //画矩形,定义作业区  
	mode_choose_block,       //画块 
	mode_correct_point,      //修改点 
	mode_check_point_pos,    //检查点位置 
    mode_find_block_pos,     //检查块位置 
	mode_add_cal_point,      //加待计算点 
	mode_affine_ori,         //仿射变换 
};  
 
 
enum POINTMARK{              //点在图象上标志性显示 
	RECT_POINT,              //点周围用小方框        
	ACCOSS_POINT,            //十字丝表示点 
	RECT_ACCROSS_POINT,      //描述同名点 
	ACCROSS_RECT_POINT, 
	CIRCLE_ACCROSS_POINT, 
	CIRCLE_POINT, 
}; 
enum MYMSG{ 
    CHOOSE_POINT,   //选点 
	CHOOSE_CAL_POINT, 
	START_PROG, 
	STEP_PROG, 
	END_PROG, 
	SAVE_TEMP_POINT, 
}; 
enum SCREENPOS{ 
	LEFTTOP    =1, 
	TOP        =2, 
	RIGHTTOP   =3, 
	LEFT       =4, 
	SCREEN     =-1, 
	RIGHT      =5, 
	LEFTBOTTOM =6, 
	BOTTOM     =7, 
	RIGHTBOTTOM=8, 
}; 
struct rpcParameter{ 
	double line_off; 
	double samp_off; 
	double lat_off; 
	double long_off; 
	double heig_off; 
	double line_scale; 
	double samp_scale; 
	double lat_scale; 
	double long_scale; 
	double heig_scale; 
	double line_num_coeff[20]; 
	double line_den_coeff[20]; 
	double sanp_num_coeff[20]; 
	double samp_den_coeff[20]; 
}; 
 
//分块曲线 
struct Curve { 
	int     num; 
	double  a[4];  //三次曲线系数 
	double  b[5];  //四次曲线系数 
}; 
 
enum PROTY{ 
	pingdi_shanpo,//分块曲线属性 
	shanpo_shandi, 
	shandi_left, 
    shandi_right 
}; 
struct Epp { 
	int    xl;//左下角坐标 
	double yl; 
	int    xr; 
	double yr; 
	int    width; 
	int    height; 
}; 
 
enum 
{  
 
   BL_TO_XY,   //大地坐标转化到平面坐标 
   XY_TO_BL,   //平面坐标转化到大地坐标 
   BLH_TO_XYZ, //大地坐标转化到空间直角坐标 
   XYZ_TO_BLH, //空间直角坐标转化到大地坐标 
   XY_TO_XYZ,  //仿射变换将像点坐标转化为空间直角坐标 
   XYZ_TO_XY,  //空间直角坐标转化为像点坐标 
   NO_TRANS,   //没有转化的状态 
}; 
 
//读入影象类型 
enum  FTYPE 
{ 
	VZ_IMAGE, 
	BMP_IMAGE, 
}; 
 
typedef vector listCoe; 
typedef vector listCurve; 
typedef vector listString; 
typedef vector listMatchLine; 
//typedef vector listMatchPoint; 
 
 
 
#endif