📄 gui_layer.cpp
字号:
// gui_layer.cpp#include "gui_layer.h"#include "KitSrc/ugkglobal.h"#include "KitSrc/ugk_string.h"#include "KitSrc/ugk_errhandle.h"#include "KitSrc/ugk_memopr.h"#include "UGKGlobalFunc.h"#include "KitSrc/ugkpoint.h"#include "KitSrc/ugklinestring.h"#include "KitSrc/ugkmultilinestring.h"#include "KitSrc/ugkpolygon.h"#include "KitSrc/ugkmultipolygon.h"#include "KitSrc/tabfile.h"#include "KitSrc/tabmapfile.h"#include "KitSrc/tabpoint.h"#include "KitSrc/tabfontpoint.h"#include "KitSrc/tabtext.h"#include "KitSrc/tabpolyline.h"#include "KitSrc/tabregion.h"#include "ugkpainter.h"#include <qpainter.h> #include <qcolor.h>#include <stdio.h>#include <qmessagebox.h> GUI_Layer::GUI_Layer(){ m_FileName = NULL; b_DataInited = FALSE; m_lyrMinX = m_lyrMaxX = m_lyrMinY = m_lyrMaxY =0; m_Xview = m_Yview =0; m_XCenter = m_YCenter = 0; m_paintWidth = 0; m_paintHeight = 0; m_Zposition = -1; m_numFea = 0; m_AddedFea =0; m_FeaData = NULL; m_ToolDefTable = NULL; b_Visible = FALSE; m_MinVisibleView =0; m_MaxVisibleView =0; b_Label = FALSE; m_MinLabelView =0; m_MaxLabelView =0; }GUI_Layer::~GUI_Layer(){ delete m_ToolDefTable; if(m_FeaData) { for(int i=0;i<m_numFea;i++) delete *(m_FeaData+i); delete m_FeaData; } UGK_Free(m_FileName);}void GUI_Layer::setFileName(const char *fname){ m_FileName = UGKStrdup( fname );}void GUI_Layer::setLayerAttr(LyrAttr *lyrAttr){ if(lyrAttr) { setFileName(lyrAttr->fileName); m_Zposition = lyrAttr->zPos; b_Visible = lyrAttr->visible; b_VisibleAllways = lyrAttr->visibleAllview; m_MinVisibleView = lyrAttr->minView; m_MaxVisibleView = lyrAttr->maxView; b_Label = lyrAttr->label; b_LabelAllways = lyrAttr->labelAllview; m_MinLabelView = lyrAttr->minLabel; m_MaxLabelView = lyrAttr->maxLabel; m_lyrMinX = lyrAttr->left; m_lyrMaxX = lyrAttr->right; m_lyrMinY = lyrAttr->top; m_lyrMaxY = lyrAttr->bottom; }}void GUI_Layer::getLayerAttr(LyrAttr *lyr){ if(lyr==NULL) return; lyr->fileName = UGKStrdup(m_FileName); lyr->zPos = m_Zposition; lyr->visible = b_Visible; lyr->visibleAllview = b_VisibleAllways; lyr->minView = m_MinVisibleView; lyr->maxView = m_MaxVisibleView; lyr->label = b_Label; lyr->labelAllview = b_LabelAllways; lyr->minLabel = m_MinLabelView; lyr->maxLabel = m_MaxLabelView; lyr->left = m_lyrMinX; lyr->right = m_lyrMaxX; lyr->top = m_lyrMinY; lyr->bottom = m_lyrMaxY;}void GUI_Layer::setFeatureNum(int num){ if(num<=0) { UGKError(ET_Failure,UGKErr_IllegalArg, "GUI_Layer::setFeatureNum(),Invalid param num:%d",num); return ; } m_FeaData = (GUI_FeatureData **)UGK_Calloc(num, sizeof(GUI_FeatureData *)); // 错误已经在UGK_Calloc()中报告了 if(m_FeaData) m_numFea = num;}void GUI_Layer::AddFeatureData(GUI_FeatureData *feaData){ if(m_AddedFea>=m_numFea) { UGKError(ET_Failure,UGKErr_OutOfMemory, "GUI_Layer::AddFeatureData(),Memory allocated has been run out!"); return; } *(m_FeaData+m_AddedFea) = feaData; m_AddedFea++; }void GUI_Layer::setLayerCenter(double x, double y){ m_XCenter = x; m_YCenter = y;}void GUI_Layer::setLayerView(double xv, double yv){ m_Xview = xv; m_Yview = yv;}void GUI_Layer:: setPaintRect( int top, int left,int pw,int ph){ m_paintTop = top; m_paintLeft = left; m_paintWidth = pw; m_paintHeight = ph;}void GUI_Layer::setLayerExtent(double maxX,double minX,double maxY,double minY){ m_lyrMinX = minX; m_lyrMaxX = maxX; m_lyrMinY = minY; m_lyrMaxY = maxY;}void GUI_Layer::getLayerExtent(double &maxX,double &minX,double &maxY,double &minY){ maxX = m_lyrMaxX; minX = m_lyrMinX; maxY = m_lyrMaxY; minY = m_lyrMinY;}void GUI_Layer::CopyToolDefTable( TABToolDefTable *srcDef){ if(srcDef==NULL) { UGKError(ET_Failure,UGKErr_IllegalArg, "GUI_Layer::CopyToolDefTable(),Invalid param srcDef!"); return; } if(m_ToolDefTable)//已经拷贝拉 return; m_ToolDefTable = new TABToolDefTable; for(int i=0;i<srcDef->GetNumPen();i++) { m_ToolDefTable->AddPenDefRef( srcDef->GetPenDefRef(i+1) ); } for(int i=0;i<srcDef->GetNumBrushes();i++) { m_ToolDefTable->AddBrushDefRef( srcDef->GetBrushDefRef(i+1) ); } for(int i=0;i<srcDef->GetNumFonts();i++) { m_ToolDefTable->AddFontDefRef( srcDef->GetFontDefRef(i+1) ); } for(int i=0;i<srcDef->GetNumSymbols();i++) { m_ToolDefTable->AddSymbolDefRef (srcDef->GetSymbolDefRef(i+1) ); } /* printf("pendef= %d \nbrushdef= %d \nfontdef= %d \nsymboldef= %d\n", srcDef->GetNumPen(),srcDef->GetNumBrushes(), srcDef->GetNumFonts(),srcDef->GetNumSymbols()); */ //m_ToolDefTable->PrintfInfo(); //拷贝完成!!! }/************************************************************ 从文件读取几何图形数据************************************************************/void GUI_Layer::ReadGeomDataFromFile(UGKGeometry *pGeoData,GUI_FeatureData *pFeaData){ if(pGeoData==NULL) { UGKError(ET_Failure,UGKErr_IllegalArg, "GUI_Layer::ReadGeomDataFromFile(),Invalid param pGeoData"); return; } if(pFeaData==NULL) { UGKError(ET_Failure,UGKErr_IllegalArg, "GUI_Layer::ReadGeomDataFromFile(),Invalid param pFeaData"); return; } UGKEnvelope geoBound; int m,n,numPT; RawPoint *pPoints; UGKPoint *m_UGKPoint=NULL; UGKLineString *m_UGKLineString=NULL; UGKMultiLineString *m_UGKMultiLineString=NULL; UGKPolygon *m_UGKPolygon=NULL; UGKMultiPolygon *m_UGKMultiPolygon=NULL; GUI_GeometryPoint *pGeoPoint=NULL; GUI_GeometryLine *pGeoLine=NULL; pGeoData->getEnvelope(&geoBound); pFeaData->setFeaBound(geoBound.MinX,geoBound.MaxX,geoBound.MinY,geoBound.MaxY); switch( wkbFlatten(pGeoData->getGeometryType()) ) { case wkbPoint: pGeoPoint = new GUI_GeometryPoint; pGeoPoint->setGeoNum(1); m_UGKPoint =(UGKPoint *)pGeoData; //printf("Point x= %f y= %f \n",m_UGKPoint->getX(),m_UGKPoint->getY()); pGeoPoint->addPoint(0,m_UGKPoint->getX(),m_UGKPoint->getY()); pFeaData->setGeometryData(pGeoPoint); break; case wkbLineString: pGeoLine = new GUI_GeometryLine; pGeoLine->setGeoNum(1); m_UGKLineString = (UGKLineString *)pGeoData; numPT = m_UGKLineString->getNumPoints(); pPoints = NULL; pPoints =(RawPoint *)UGK_Calloc(numPT,sizeof(RawPoint)); if(pPoints) { for(n=0;n<numPT;n++) { (pPoints+n)->x = m_UGKLineString->getX(n); (pPoints+n)->y = m_UGKLineString->getY(n); } } else { UGKError(ET_Failure,UGKErr_OutOfMemory, "GUI_Layer::ReadGeomDataFromFile()"); return ; } pGeoLine->addLine(0,pPoints,numPT); pFeaData->setGeometryData(pGeoLine); break; case wkbMultiLineString: pGeoLine = new GUI_GeometryLine; m_UGKMultiLineString = (UGKMultiLineString *)pGeoData; pGeoLine->setGeoNum(m_UGKMultiLineString->getNumGeometries()); for(m=0;m<m_UGKMultiLineString->getNumGeometries();m++) { m_UGKLineString =(UGKLineString *)(m_UGKMultiLineString->getGeometryRef(m)); numPT = m_UGKLineString->getNumPoints(); pPoints = NULL; pPoints =(RawPoint *)UGK_Calloc(numPT,sizeof(RawPoint)); if(pPoints) { for(n=0;n<numPT;n++) { (pPoints+n)->x = m_UGKLineString->getX(n); (pPoints+n)->y = m_UGKLineString->getY(n); } } else { UGKError(ET_Failure,UGKErr_OutOfMemory, "GUI_Layer::ReadGeomDataFromFile()"); return ; } pGeoLine->addLine(m,pPoints,numPT); } pFeaData->setGeometryData(pGeoLine); break; case wkbPolygon: pGeoLine = new GUI_GeometryLine; pGeoLine->setGeoNum(1); m_UGKPolygon = (UGKPolygon *)pGeoData; m_UGKLineString = m_UGKPolygon->getExteriorRing(); numPT = m_UGKLineString->getNumPoints(); pPoints = NULL; pPoints =(RawPoint *)UGK_Calloc(numPT,sizeof(RawPoint)); if(pPoints) { for(n=0;n<numPT;n++) { (pPoints+n)->x = m_UGKLineString->getX(n); (pPoints+n)->y = m_UGKLineString->getY(n); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -