QBaseObj.cpp
资源名称:QGIS.rar [点击查看]
上传用户:oybseng
上传日期:2015-04-27
资源大小:7831k
文件大小:17k
源码类别:
GDI/图象编程
开发平台:
Visual C++
- // QBaseObj.cpp: implementation of the CQBaseObj class.
- //
- //////////////////////////////////////////////////////////////////////
- #include "..stdafx.h"
- #include "..includeResource.h"
- #include "..includeQBaseObj.h"
- #include "math.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[]=__FILE__;
- #endif
- static long glObjIndex = 0; // 图元的索引
- static long glLayerIndex = 0; // 图层的索引
- static long glMapIndex = 0; // 图扶的索引
- static long glProjectIndex = 0; // 工程的索引
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:CQBaseObj
- ///返回类型:构造函数
- ///入口参数:无
- ///出口参数:无
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- CQBaseObj::CQBaseObj()
- {
- long nObjIndex = SetObjIndex();
- m_szObjName.Format("图元对象%d",nObjIndex);
- m_lObjID = 0;
- m_lObjID = SetObjIDByRand();
- //现在还没有建立图层和图幅对象 暂时先放着
- m_lLayerID = 0;
- m_lMapID = 0;
- m_crPenColor = RGB(0,0,255); //blue
- m_crBrushColor = RGB(0,0,255);//blue
- m_fLineWidth = 0.0;
- m_nLineType = PS_SOLID;
- m_nObjType = QGIS_OBJ_UNKNOWN;
- m_bDeleted = FALSE;
- m_bHided = FALSE;
- m_bSelected = FALSE;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- CQBaseObj::CQBaseObj(const CQBaseObj & tmObj)
- {
- m_lObjID = tmObj.GetObjID();
- m_lLayerID = tmObj.GetObjLayerID();
- m_lMapID = tmObj.GetObjMapID();
- m_crPenColor = tmObj.GetObjPenColor();
- m_crBrushColor = tmObj.GetObjBrushColor();
- m_fLineWidth = tmObj.GetObjLineWidth();
- m_bDeleted = tmObj.GetObjDeleted();
- m_bHided = tmObj.GetObjHided();
- m_bSelected = tmObj.GetObjSeleted();
- m_szObjName = tmObj.GetObjName();
- m_nObjType = tmObj.GetObjType();
- m_nLineType = tmObj.GetObjLineType();
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:~CQBaseObj
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- CQBaseObj::~CQBaseObj()
- {
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:Copy
- ///返回类型:无
- ///入口参数:CQBaseObj & tmObj
- ///出口参数:无
- ///思路说明:对象拷贝
- ///***************CQGIS****************///
- //////////////////////////////////////////
- void CQBaseObj::Copy(const CQBaseObj & tmObj)
- {
- m_lObjID = tmObj.GetObjID();
- m_lLayerID = tmObj.GetObjLayerID();
- m_lMapID = tmObj.GetObjMapID();
- m_crPenColor = tmObj.GetObjPenColor();
- m_crBrushColor = tmObj.GetObjBrushColor();
- m_fLineWidth = tmObj.GetObjLineWidth();
- m_bDeleted = tmObj.GetObjDeleted();
- m_bHided = tmObj.GetObjHided();
- m_bSelected = tmObj.GetObjSeleted();
- m_szObjName = tmObj.GetObjName();
- m_nObjType = tmObj.GetObjType();
- m_nLineType = tmObj.GetObjLineType();
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:SetObjIndex
- ///返回类型:long
- ///入口参数:无
- ///出口参数:无
- ///思路说明:设置图元的索引,用于对图元进行自动命名
- ///***************CQGIS****************///
- //////////////////////////////////////////
- long CQBaseObj::SetObjIndex()
- {
- return ++glObjIndex;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- long CQBaseObj::SetObjIDByRand()
- {
- //初始化随机数
- long lObjID = 0;
- srand( (unsigned)time( NULL ) );
- while(1)
- {
- int g = rand()%10; //个位
- int s = rand()%10; //十位
- int b = rand()%10; //百位
- int q = rand()%10; //万位
- int m = rand()%10; //十万位
- lObjID = m*10000+q*1000+b*100+s*10+g;
- if(lObjID != m_lObjID)
- break;
- }
- return lObjID;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- void CQBaseObj::SetObjPenColor(COLORREF & crPen)
- {
- m_crPenColor = crPen;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:GetObjPenColor
- ///返回类型:COLORREF
- ///入口参数:无
- ///出口参数:无
- ///思路说明:返回图元的画笔颜色值
- ///***************CQGIS****************///
- //////////////////////////////////////////
- COLORREF CQBaseObj::GetObjPenColor() const
- {
- return m_crPenColor;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- void CQBaseObj::SetObjBrushColor(COLORREF & crBrush)
- {
- m_crBrushColor = crBrush;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:GetObjBrushColor
- ///返回类型:COLORREF
- ///入口参数:无
- ///出口参数:无
- ///思路说明:返回图元的画刷颜色值
- ///***************CQGIS****************///
- //////////////////////////////////////////
- COLORREF CQBaseObj::GetObjBrushColor() const
- {
- return m_crBrushColor;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:SetObjSelected
- ///返回类型:无
- ///入口参数:BOOL & bSelect
- ///出口参数:无
- ///思路说明:设置图元的选择状态
- ///***************CQGIS****************///
- //////////////////////////////////////////
- void CQBaseObj::SetObjSelected(BOOL bSelect)
- {
- if(bSelect) m_bSelected = TRUE;
- else m_bSelected = FALSE;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:GetObjSeleted
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- BOOL CQBaseObj::GetObjSeleted() const
- {
- return m_bSelected;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:SetObjDeleted
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- void CQBaseObj::SetObjDeleted(BOOL bDeleted)
- {
- if(bDeleted) m_bDeleted = TRUE;
- else m_bDeleted = FALSE;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:GetObjDeleted
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- BOOL CQBaseObj::GetObjDeleted() const
- {
- return m_bDeleted;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:SetObjHided
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- void CQBaseObj::SetObjHided(BOOL bHided)
- {
- if(bHided) m_bHided = TRUE;
- else m_bHided = FALSE;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:GetObjHided
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- BOOL CQBaseObj::GetObjHided() const
- {
- return m_bHided;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:SetObjType
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- void CQBaseObj::SetObjType(short & nObjType)
- {
- m_nObjType = nObjType;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:GetObjType
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- short CQBaseObj::GetObjType() const
- {
- return m_nObjType;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:SetObjName
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- void CQBaseObj::SetObjName(CString & szName)
- {
- m_szObjName = szName;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:GetObjName
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- CString CQBaseObj::GetObjName() const
- {
- return m_szObjName;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- void CQBaseObj::SetObjID(long & lObjID)
- {
- if(lObjID == m_lObjID)
- return;
- else
- m_lObjID = lObjID;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- long CQBaseObj::GetObjID() const
- {
- return m_lObjID;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- void CQBaseObj::SetObjLayerID(const long & lLayerID)
- {
- if(lLayerID == m_lLayerID)
- return;
- else
- m_lLayerID = lLayerID;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- long CQBaseObj::GetObjLayerID() const
- {
- return m_lLayerID;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- void CQBaseObj::SetObjMapID(const long & lMapID)
- {
- if(lMapID == m_lMapID)
- return;
- else
- m_lMapID = lMapID;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- long CQBaseObj::GetObjMapID() const
- {
- return m_lMapID;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- void CQBaseObj::SetObjLineWidth(double & fLineWidth)
- {
- if(fLineWidth<0)
- m_fLineWidth = 0;
- else
- m_fLineWidth = fLineWidth;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- double CQBaseObj::GetObjLineWidth() const
- {
- return m_fLineWidth;
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:
- ///返回类型:
- ///入口参数:
- ///出口参数:
- ///思路说明:
- ///***************CQGIS****************///
- //////////////////////////////////////////
- void CQBaseObj::Serialize(CArchive& ar)
- {
- if(ar.IsStoring()) //存
- {
- ar.Write(&m_lObjID,sizeof(long));
- ar.Write(&m_lLayerID,sizeof(long));
- ar.Write(&m_lMapID,sizeof(long));
- ar.Write(((const unsigned long *)(&m_crPenColor)),sizeof(long));
- ar.Write(((const unsigned long *)(&m_crBrushColor)),sizeof(long));
- ar.Write(&m_nObjType,sizeof(short));
- ar.Write(&m_fLineWidth,sizeof(double));
- ar.Write(&m_nLineType,sizeof(short));
- int i = m_szObjName.GetLength();
- ar.Write(&i,sizeof(int));
- ar.Write((const char *)m_szObjName,i);
- ar.Write(&m_bDeleted,sizeof(BOOL));
- ar.Write(&m_bHided,sizeof(BOOL));
- ar.Write(&m_bSelected,sizeof(BOOL));
- }
- else //读
- {
- long lObjID = 0;
- ar.Read(&lObjID,sizeof(long));
- if(lObjID == m_lObjID)
- m_lObjID = SetObjIDByRand();
- else
- m_lObjID = lObjID;
- ar.Read(&m_lLayerID,sizeof(long));
- ar.Read(&m_lMapID,sizeof(long));
- ar.Read(((unsigned long *)(&m_crPenColor)),sizeof(long));
- ar.Read(((unsigned long *)(&m_crBrushColor)),sizeof(long));
- ar.Read(&m_nObjType,sizeof(short));
- ar.Read(&m_fLineWidth,sizeof(double));
- ar.Read(&m_nLineType,sizeof(short));
- int i=0;
- ar.Read(&i,sizeof(int));
- char szName[255];
- ar.Read(szName,i);
- szName[i] = ' ';
- m_szObjName = szName;
- ar.Read(&m_bDeleted,sizeof(BOOL));
- ar.Read(&m_bHided,sizeof(BOOL));
- ar.Read(&m_bSelected,sizeof(BOOL));
- }
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:Rotate
- ///返回类型:无
- ///入口参数:CQPoint * pt,CQPoint & pt,double & fAngleDegree
- ///出口参数:CQPoint * pt
- ///思路说明:根据旋转矩阵,求出旋转后的点位坐标
- ///***************CQGIS****************///
- //////////////////////////////////////////
- void CQBaseObj::Rotate(CQPoint * ptR,CQPoint & ptO,double & fAngleDegree)
- {
- //这里的减法运算相当于将点ptR移到了坐标原点
- //这个旋转矩阵是相对于坐标原点的
- double fx = ptR->GetX() - ptO.GetX();
- double fy = ptR->GetY() - ptO.GetY();
- double fxx = fx*cos(fAngleDegree*PI/180) - fy*sin(fAngleDegree*PI/180);
- double fyy = fx*sin(fAngleDegree*PI/180) + fy*cos(fAngleDegree*PI/180);
- double fxR = ptO.GetX()+fxx;
- double fyR = ptO.GetY()+fyy;
- ptR->SetPoint(fxR,fyR);
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:WriteToFile
- ///返回类型:无
- ///入口参数:CFile * pFile
- ///出口参数:无
- ///思路说明:存储文件
- ///***************CQGIS****************///
- //////////////////////////////////////////
- void CQBaseObj::WriteToFile(CFile * pFile)
- {
- pFile->Write(&m_lObjID,sizeof(long));
- pFile->Write(&m_lLayerID,sizeof(long));
- pFile->Write(&m_lMapID,sizeof(long));
- pFile->Write(&m_nObjType,sizeof(short));
- int i = m_szObjName.GetLength();
- pFile->Write(&i,sizeof(int));
- pFile->Write((const char *)m_szObjName,i);
- float fWidth = (float)m_fLineWidth;
- pFile->Write(&fWidth,sizeof(float));
- pFile->Write(&m_nLineType,sizeof(short));
- pFile->Write((const unsigned long *)(&m_crPenColor),sizeof(long));
- pFile->Write((const unsigned long *)(&m_crBrushColor),sizeof(long));
- pFile->Write(&m_bDeleted,sizeof(BOOL));
- pFile->Write(&m_bHided,sizeof(BOOL));
- pFile->Write(&m_bSelected,sizeof(BOOL));
- }
- //////////////////////////////////////////
- ///***************CQGIS****************///
- ///函数名称:ReadFromFile
- ///返回类型:无
- ///入口参数:CFile * pFile
- ///出口参数:无
- ///思路说明:从磁盘中读取文件
- ///***************CQGIS****************///
- //////////////////////////////////////////
- void CQBaseObj::ReadFromFile(CFile * pFile)
- {
- pFile->Read(&m_lObjID,sizeof(long));
- pFile->Read(&m_lLayerID,sizeof(long));
- pFile->Read(&m_lMapID,sizeof(long));
- pFile->Read(&m_nObjType,sizeof(short));
- char szName[255];
- int i = 0;
- pFile->Read(&i,sizeof(int));
- pFile->Read(szName,i);
- szName[i] = ' ';
- m_szObjName = szName;
- float fWidth = 0;
- pFile->Read(&fWidth,sizeof(float));
- m_fLineWidth = fWidth;
- pFile->Read(&m_nLineType,sizeof(short));
- pFile->Read((unsigned long *)(&m_crPenColor),sizeof(long));
- pFile->Read((unsigned long *)(&m_crBrushColor),sizeof(long));
- pFile->Read(&m_bDeleted,sizeof(BOOL));
- pFile->Read(&m_bHided,sizeof(BOOL));
- pFile->Read(&m_bSelected,sizeof(BOOL));
- }
- inline short CQBaseObj::GetObjLineType() const
- {
- return m_nLineType;
- }
- CString CQBaseObj::VarToStr()
- {
- CString szVar = _T("");
- szVar.Format("图元ID:%ld,图元所在图层ID:%ld,图元所在图幅ID:%ld,图元类型:%d,图元名称:%s,图元线宽:%f,图元线型:%d,图元线颜色:%ld,图元填充色:%ld,图元的删除:%d,图元的隐藏状态:%d,图元的选中状态",m_lObjID,m_lLayerID,m_lMapID,m_nObjType,(const char *)m_szObjName,(float)m_fLineWidth,m_nLineType,(unsigned long)m_crPenColor,(unsigned long)m_crBrushColor,(short)m_bDeleted,(short)m_bHided,(short)m_bSelected);
- return szVar;
- }
- void CQBaseObj::SetobjLineType(short & nLineType)
- {
- m_nLineType = nLineType;
- }