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

📄 gui_manager.cpp

📁 linux下一款GIS程序源码
💻 CPP
字号:
// gui_manager.cpp#include "gui_manager.h"#include "KitSrc/ugk_memopr.h"#include "KitSrc/ugkglobal.h"GUI_Manager::GUI_Manager(){    m_NumLayer = 0;    m_AllocLayer = 0;    m_Layers  = NULL;    m_BoundLeft = 0;    m_BoundRight = 0;    m_BoundTop = 0;    m_BoundBottom = 0;    m_XCenter = m_YCenter = 0;    m_Xview = m_Yview = 0;}GUI_Manager::~GUI_Manager(){    if(m_Layers)    {	for(int i=0;i<m_NumLayer;i++)	{	    GUI_Layer *lyr=*(m_Layers+i);	    delete lyr;	}	delete m_Layers;    }}void GUI_Manager::setCenter(double cx, double cy){    m_XCenter = cx;    m_YCenter = cy;}void GUI_Manager::getCenter(double &cx, double &cy){    cx = m_XCenter;    cy = m_YCenter;}void GUI_Manager::setView(double vx, double vy){    if(vx>(m_BoundRight-m_BoundLeft))    {	vx = m_BoundRight-m_BoundLeft;    }    if(vy>(m_BoundBottom-m_BoundTop))     {   	vy = m_BoundBottom-m_BoundTop;    }    if(vx<0.05)	vx = 0.05;    if(vy<0.05)	vy = 0.05;    m_Xview = vx;    m_Yview = vy;}void GUI_Manager::getView(double &vx,double &vy){    vx = m_Xview;    vy = m_Yview;}void GUI_Manager::UpdateBound(double minX,double maxX,double minY,double maxY){    if(m_NumLayer==1) //第一个    {	m_BoundLeft = minX;	m_BoundRight = maxX;	m_BoundTop = minY;	m_BoundBottom = maxY;	    }    else    {	if(minX<m_BoundLeft)	    m_BoundLeft = minX;	if(maxX>m_BoundRight)	    m_BoundRight = maxX;	if(minY<m_BoundTop)	    m_BoundTop = minY;	if(maxY>m_BoundBottom)	    m_BoundBottom = maxY;    }        m_XCenter = (m_BoundLeft+m_BoundRight)/2;    m_YCenter = (m_BoundTop+m_BoundBottom)/2;    m_Xview =  m_BoundRight-m_BoundLeft+5;    m_Yview =  m_BoundBottom-m_BoundTop+5;    //printf("Xview = %f  Yview = %f \n",m_Xview,m_Yview);}void GUI_Manager::ComputerDistperPixel(){    //printf("paintWidth = %d paintHeight =  %d\n",m_paintWidth,m_paintHeight);    //printf("m_Xview = %f  m_Yview =  %f \n",m_Xview, m_Yview);    double xPerPixel = m_Xview/(m_paintWidth);  //边沿需要留一点空间    double yPerPixel = m_Yview/(m_paintHeight);    m_DistperPixel =(xPerPixel>yPerPixel)?xPerPixel:yPerPixel;     m_Xview = m_DistperPixel *(m_paintWidth);    m_Yview = m_DistperPixel*(m_paintHeight);    //printf("Xview= %f  Yview= %f\n",m_Xview,m_Yview);}GUI_Layer* GUI_Manager::GetLayerRef(int idx){    if( (idx<0) || (idx>=m_NumLayer) )	return NULL;    return *(m_Layers+idx);}void GUI_Manager::AddLayer(GUI_Layer *lyrAdd){    //printf("GUI_Manager::AddLayer()\n");    if(lyrAdd==NULL)	return;        if(m_AllocLayer==m_NumLayer)    {	m_AllocLayer += 5;	m_Layers = (GUI_Layer **)UGK_Realloc(m_Layers,m_AllocLayer*sizeof(GUI_Layer *) );	    }        *(m_Layers+m_NumLayer) = lyrAdd;      m_NumLayer++;        double left,right,top,bottom;    lyrAdd->getLayerExtent(right,left,bottom,top);    UpdateBound(left,right,top,bottom);    }void GUI_Manager::RemoveLayer(int idx){    if((idx<0)||(idx>=m_NumLayer))    {	return;    }    GUI_Layer *lyr=*(m_Layers+idx);    int zPos = lyr->getZposition();    for(int i=idx;i<m_NumLayer-1;i++)    {	*(m_Layers+i) = *(m_Layers+i+1);	    }    *(m_Layers+m_NumLayer-1) = NULL;    m_NumLayer--;    delete lyr;    lyr = NULL;    for(int j=0;j<m_NumLayer;j++)    {	lyr = *(m_Layers+j);	int pos =lyr->getZposition();	if( pos>zPos)	    lyr->setZposition(pos-1);	        }}GUI_Layer* GUI_Manager::GetLayerRef(const char *lyrName){    if(lyrName==NULL)	return NULL;    GUI_Layer *lyr=NULL;    for(int i=0;i<m_NumLayer;i++)    {	lyr = GetLayerRef(i);	assert(lyr!=NULL);	if( EQUAL(lyrName,lyr->getFileName()) )	    return lyr;    }       return NULL;}GUI_Layer* GUI_Manager::GetLayerRefByZpos(int zPos){    GUI_Layer *lyr=NULL;    for(int i=0;i<m_NumLayer;i++)    {	lyr = GetLayerRef(i);	assert(lyr!=NULL);	if(lyr->getZposition()==zPos)	    return lyr;    }    return NULL;}void GUI_Manager::setPaintRect(int top,int left, int pw,int ph){    m_paintTop = top;    m_paintLeft = left;    m_paintWidth = pw;    m_paintHeight = ph;    }void GUI_Manager::InitAllLayers(){    GUI_Layer *oneLyr=NULL;    for(int i=0;i<m_NumLayer;i++)    {	oneLyr =GetLayerRef(i);	if(!oneLyr->IsDataInited())	    oneLyr->InitDataFromFile();	    }}void GUI_Manager::Draw(QPaintDevice *pd){    printf("GUI_Manager::Draw()\n");    ComputerDistperPixel();    GUI_Layer *oneLyr=NULL;    for(int i=m_NumLayer-1;i>=0;i--)    {	oneLyr = GetLayerRefByZpos(i);	oneLyr->setLayerCenter(m_XCenter,m_YCenter);	oneLyr->setLayerView(m_Xview,m_Yview);	oneLyr->setDistperPixel(m_DistperPixel);	oneLyr->setPaintRect(m_paintTop,m_paintLeft,m_paintWidth,m_paintHeight);	oneLyr->Draw(pd);    }}/*         调试用              */void GUI_Manager::PrintInfo(){    printf("Layer Manager :\n");    GUI_Layer *lyr=NULL;    for(int i=0;i<m_NumLayer;i++)    {	lyr = GetLayerRef(i);	printf("The Zposition  %d\n",lyr->getZposition());	printf("The %d Layer:%s\n",i,lyr->getFileName());	    }}

⌨️ 快捷键说明

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