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

📄 gui_layer.cpp

📁 linux下一款GIS程序源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -