📄 gui_featuredata.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 + -