⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gui_featuredata.cpp

📁 linux下一款GIS程序源码
💻 CPP
字号:
/*  gui_featuredata.cpp  */#include "gui_featuredata.h"#include "UGKGlobalFunc.h"#include "KitSrc/ugk_string.h"#include "KitSrc/ugk_memopr.h"#include "KitSrc/ugk_errhandle.h"#include "KitSrc/ugk_environment.h"#include "KitSrc/ugkglobal.h"#include "ugkpainter.h"#include <qpoint.h> #include <qpointarray.h> GUI_FeatureData::GUI_FeatureData(){    m_LabelX = m_LabelY = 0;    m_MinX = m_MaxX = m_MinY = m_MaxY =0;        m_LabelText =NULL;    m_FeaGeometry = NULL;    m_ToolDefRef  = NULL;       m_paintWidth = 0;    m_paintHeight = 0;}GUI_FeatureData::~GUI_FeatureData(){    delete m_FeaGeometry;}const char* GUI_FeatureData::getLableText(){    if(m_LabelText)	return m_LabelText;    else	return "";}void GUI_FeatureData::setLabelText(const char *txt){    if(m_LabelText)	UGK_Free(m_LabelText);    m_LabelText = UGKStrdup(txt);}void GUI_FeatureData::setGeometryData(GUI_GeometryData *geoData){    m_FeaGeometry = geoData;}GUI_GeometryData* GUI_FeatureData::getGeometryData(){    return m_FeaGeometry;}void GUI_FeatureData::setLabelPoint(double x, double y){    m_LabelX = x;    m_LabelY = y;}void GUI_FeatureData::getLabelPoint(double &x,double &y){    x = m_LabelX;    y = m_LabelY;}void GUI_FeatureData::setFeaBound(double left,double right,double top, double bottom){    m_MinX = left;    m_MaxX = right;    m_MinY = top;    m_MaxY = bottom;}void GUI_FeatureData::getFeaBound(double &left,double &right,double &top,double &bottom){    left = m_MinX;    right = m_MaxX;    top = m_MinY;    bottom = m_MaxY;}void GUI_FeatureData::setScreenCenter( double sx , double sy ){    m_ScrCenterX = sx;    m_ScrCenterY = sy;}void GUI_FeatureData::setPaintRect(int top, int left,int pw,int ph){    m_paintTop  = top;    m_paintLeft  = left;    m_paintWidth = pw;    m_paintHeight = ph;}void GUI_FeatureData::setDistPerPixel( double inVal ){    m_DistPerPixel = inVal;}void GUI_FeatureData::setFeaType(LayerFeaType type){    m_feaType = type;}void GUI_FeatureData::setPenDefIndex(int idx){    m_PenDefIndex = idx;}void GUI_FeatureData::setBrushDefIndex(int idx){    m_BrushDefIndex = idx;}void GUI_FeatureData::setFontDefIndex(int idx){    m_FontDefIndex = idx;}void GUI_FeatureData::setSymbolDefIndex(int idx){    m_SymbolDefIndex = idx;}/*******************************************************          将地图坐标转换为屏幕坐标*******************************************************/  void GUI_FeatureData::mapCoord2scrCoord(double x, double y,int &sx, int &sy){    //一定要确保绘图区域已经设置    sx = int( m_paintWidth/2 + (x - m_ScrCenterX )/m_DistPerPixel );    sy = int( m_paintHeight/2 - (y-m_ScrCenterY)/m_DistPerPixel );    //printf("Screen PT  x= %d  y= %d \n",sx, sy);    }void GUI_FeatureData::mapCoord2scrCoord( RawPoint *mapPT, int &sx, int &sy){    mapCoord2scrCoord(mapPT->x,mapPT->y,sx,sy);}void  GUI_FeatureData::Draw(QPaintDevice *pd){    //printf("GUI_FeatureData::Draw()\n");    UGKPainter p(pd);    // 绘制图形    TABPenDef   *penDef=NULL;    TABBrushDef  *brushDef=NULL;    TABFontDef   *fontDef=NULL;    TABSymbolDef *symbolDef=NULL;    GUI_GeometryPoint *geoPoint=NULL;    GUI_GeometryLine  *geoLine=NULL;    int geoNum,m,n,scrX,scrY;    QPoint scrPt;    RawPoint *pt=NULL;    RawLine  *ln=NULL;         QColor rgbColor;    int symNum,symSize;    p.save();    switch(m_feaType)    {    case FEA_POINT:		{	    symbolDef = m_ToolDefRef->GetSymbolDefRef(m_SymbolDefIndex );	 	    if(symbolDef==NULL) //----ERR  这里symbolDef等于NULL 	    {		UGKError(ET_Warning,UGKErr_AppDefined,			 "GUI_FeatureData::Draw(),Point Feature no symbol definition!!");		symNum = 66; //默认符号		symSize = 10;		rgbColor = QColor("black");		//return;	    }	    else	    {		symNum = symbolDef->nSymbolNo;		if((symNum<32)||(symNum>67) )		    symNum = 32;		symSize =  symbolDef->nPointSize;		if(symSize<8)		    symSize = 10;		rgbColor = ObtainColor(symbolDef->rgbColor);	    }#ifndef SITSANGAPP	    QFont font("MapInfo Symbol",symSize);#else	    QFont font("MapInfo_Symbol",symSize);#endif	    p.setFont(font);	    p.setPen(rgbColor);	    	    geoPoint = (GUI_GeometryPoint *)(m_FeaGeometry);	    geoNum = geoPoint->getGeoNum();	    for(n=0;n<geoNum;n++)	    {		pt=geoPoint->getPoint(n);		mapCoord2scrCoord(pt, scrX, scrY);		scrPt.setX( scrX );		scrPt.setY( scrY );		QChar ch(symNum+1); //对应到字体里的符号时需要调整一下		QString str;		str += ch;		p.drawText(scrPt.x(),scrPt.y(),str);			    }        }	break;    case FEA_FONTPOINT:	{	    fontDef    = m_ToolDefRef->GetFontDefRef( m_FontDefIndex );	    if( fontDef && EQUAL(fontDef->szFontName,"MapInfo Cartographic") )	    {#ifndef SITSANGAPP		QFont font("MapInfo Cartographic",nFontPointSize);#else		QFont font("MapInfo_Cartographic",nFontPointSize);#endif		p.setFont(font);	    }	    else	    {#ifndef SITSANGAPP		QFont font("MapInfo Symbol",10);#else		QFont font("MapInfo_Symbol",10);#endif		p.setFont(font); 		nFontSymbolNo = 66+1; //默认符号		rgbColor = QColor("black");	    }	    	    rgbColor = ObtainColor(fontColor);	    p.setPen(rgbColor);	    	    geoPoint = (GUI_GeometryPoint *)(m_FeaGeometry);	    geoNum = geoPoint->getGeoNum();	    for(n=0;n<geoNum;n++)	    {		pt=geoPoint->getPoint(n);		mapCoord2scrCoord(pt, scrX, scrY);		scrPt.setX( scrX );		scrPt.setY( scrY );    	    		QChar ch(nFontSymbolNo);		QString str;		str += ch;		p.drawText(scrPt.x(),scrPt.y(),str);	    }        }	break;    case FEA_TEXT:	geoPoint = (GUI_GeometryPoint *)(m_FeaGeometry);	geoNum = geoPoint->getGeoNum();	for(n=0;n<geoNum;n++)	{	    pt=geoPoint->getPoint(n);	    mapCoord2scrCoord(pt, scrX, scrY);	    QString labelStr=ACSII2Unicode(m_LabelText);	    p.drawText(scrX,scrY,labelStr);	}	break;    case FEA_LINE:	int linePattern;	penDef = m_ToolDefRef->GetPenDefRef(m_PenDefIndex);	if(penDef==NULL)	{	    UGKError(ET_Warning,UGKErr_AppDefined,		      "GUI_FeatureData::Draw(),Line Feature no pen definition!!");	    linePattern = 2; //默认线型	    rgbColor = QColor("black");	}	else	{	    linePattern = penDef->nLinePattern;	    rgbColor= ObtainColor(penDef->rgbColor);	}	geoLine = (GUI_GeometryLine *)(m_FeaGeometry);	geoNum = geoLine->getGeoNum();			for(m=0;m<geoNum;m++)	{	    ln = geoLine->getLine(m);	    	    if(ln==NULL)	    {		UGKError(ET_Warning,UGKErr_AppDefined,			 "GUI_FeatureData::Draw(),Pointer is NULL!");		break;	    }	    	    pt = ln->Points;	    if(pt==NULL)	    {		UGKError(ET_Warning,UGKErr_AppDefined,			 "GUI_FeatureData::Draw(),Pointer is NULL!");		break;	    }	    if(ln->numPoint)	    {		QPointArray ptarry(ln->numPoint);		int ptx,pty;		for(n=0;n<ln->numPoint;n++)		{		    mapCoord2scrCoord(pt+n, scrX, scrY);  		    		    ptarry.setPoint(n,scrX,scrY); 		}		QRect paintRect(m_paintLeft,m_paintTop,m_paintWidth,m_paintHeight);		p.drawGISLine(ptarry,linePattern,paintRect,rgbColor);	    }	    	}	break;    case FEA_REGION:	penDef = m_ToolDefRef->GetPenDefRef(m_PenDefIndex);	brushDef = m_ToolDefRef->GetBrushDefRef(m_BrushDefIndex);	//============ 设置 画笔 =============	if(penDef==NULL)	{	    UGKError(ET_Warning,UGKErr_AppDefined,		      "GUI_FeatureData::Draw(), Region Feature no Pen Definition!");	    rgbColor = QColor("black");	}	else	{	    rgbColor= ObtainColor(penDef->rgbColor);	    	}		QPen pen(rgbColor);	p.setPen(pen);	//============ 设置 画刷 =============	if(brushDef==NULL)	{	    UGKError(ET_Warning,UGKErr_AppDefined,		     "GUI_FeatureData::Draw(), Region Feature no Brush Definition!");	    rgbColor= QColor("white");	}	else	{	    rgbColor= ObtainColor(brushDef->rgbFGColor);	}	QBrush brush(rgbColor);	p.setBrush(brush);	//================================		geoLine = (GUI_GeometryLine *)(m_FeaGeometry);	geoNum = geoLine->getGeoNum();		for(m=0;m<geoNum;m++)	{	    ln = geoLine->getLine(m);	    if(ln==NULL)	    {		UGKError(ET_Warning,UGKErr_AppDefined,			 "GUI_FeatureData::Draw(),Pointer is NULL!");		break;	    }	    	    pt = ln->Points;	    if(pt==NULL)	    {		UGKError(ET_Warning,UGKErr_AppDefined,			 "GUI_FeatureData::Draw(),Pointer is NULL!");		break;	    }	    if(ln->numPoint)	    {		QPointArray ptarry(ln->numPoint);		for(n=0;n<ln->numPoint;n++)		{		    mapCoord2scrCoord(pt+n, scrX, scrY);  		    ptarry.setPoint(n,scrX,scrY);		}		p.drawPolygon(ptarry,TRUE);	    }	    	}	break;    }    p.restore();}/*************************************        判断是否面积太小	 太小就不需要要标记*************************************/bool GUI_FeatureData::IsTooSmall(){    if( (m_feaType==FEA_POINT)||(m_feaType==FEA_FONTPOINT) )	return FALSE;    int xWidth, yWidth;    xWidth = (m_MaxX-m_MinX)/m_DistPerPixel;    yWidth = (m_MaxY-m_MinY)/m_DistPerPixel;    if( (xWidth<2) || (yWidth<2) )	return TRUE;    else	return FALSE;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -