www.gusucode.com > VC++开源的SHP格式GIS地图查看软件源程序源码程序 > VC++开源的SHP格式GIS地图查看软件源程序源码程序\code\MapTableDesc.cpp

    //Download by http://www.NewXing.com
#include "stdafx.h"
#include "MapField.h"
#include "MapTableDesc.h"



CMapTableDesc::CMapTableDesc()
{


}

CMapTableDesc::CMapTableDesc(CMapTableDesc& tblDesc)
{

   int i,iCount;
   FIELD_ELEMENT *pField,*pSource;
   
   iCount = tblDesc.GetFieldCount()  - 1;
   for ( i = 0 ; i <= iCount ; i++ )
   { 
		pField = new  FIELD_ELEMENT;
		pSource = tblDesc.GetDesc(i); 
        strcpy(pField->szFieldName,pSource->szFieldName);
		pField->cFieldType = pSource->cFieldType; 
		pField->ucFieldDecimal = pSource->ucFieldDecimal;
		pField->ucFieldLength = pSource->ucFieldLength;
		pField->ulOffset = pSource->ulOffset;
		pField->cProductionIndex = pSource->cProductionIndex;
		pField->dbaseiv_id = pSource->dbaseiv_id;
		strcpy(pField->reserved1 , pField->reserved1);
		strcpy(pField->reserved2 , pField->reserved2);
		m_fieldsDesc.Add(pField); 	
   }
}
CMapTableDesc::~CMapTableDesc()
{
	Clear();  

}

short CMapTableDesc::GetFieldCount()
{
	return m_fieldsDesc.GetSize(); 

}

void CMapTableDesc::SetFieldCount(short sCount)
{


}
	
CString CMapTableDesc::GetFieldName(short sIndex)
{
	int iCount;
	FIELD_ELEMENT *pField;
	
	iCount = m_fieldsDesc.GetSize()  - 1;
	if ( sIndex < 0 || sIndex > iCount )
		return _T("");
    pField = m_fieldsDesc.GetAt(sIndex);
	CString csName(pField->szFieldName); 
	return csName; 
}

void CMapTableDesc::SetFieldName(short sIndex, LPCTSTR lpszNewValue)
{
	int iCount;
	FIELD_ELEMENT* pField;

	iCount = m_fieldsDesc.GetSize() - 1;
	if ( sIndex < 0 || sIndex > iCount )
		return ;
    pField = m_fieldsDesc.GetAt(sIndex);
	strcpy(pField->szFieldName , lpszNewValue); 

}

long CMapTableDesc::GetFieldType(short sIndex)
{
	int iCount;
	FIELD_ELEMENT* pField;

	iCount = m_fieldsDesc.GetSize()  - 1;
	if ( sIndex < 0 || sIndex > iCount )
		return INVALID_VALUE;
    pField = m_fieldsDesc.GetAt(sIndex);
	return pField->cFieldType; 

}

void CMapTableDesc::SetFieldType(short sIndex, long nNewValue)
{
	int iCount;
	FIELD_ELEMENT* pField;

	iCount = m_fieldsDesc.GetSize() - 1;
	if ( sIndex < 0 || sIndex > iCount )
		return;
    pField = m_fieldsDesc.GetAt(sIndex);
	pField->cFieldType  = (unsigned char )nNewValue; 


}

short CMapTableDesc::GetFieldPrecision(short sIndex)
{
	int iCount;
	FIELD_ELEMENT* pField;

	iCount = m_fieldsDesc.GetSize() - 1;
	if ( sIndex < 0 || sIndex > iCount )
		return INVALID_VALUE;
    pField = m_fieldsDesc.GetAt(sIndex);
	return pField->ucFieldDecimal; 

}

void CMapTableDesc::SetFieldPrecision(short sIndex, short nNewValue)
{
    int iCount;
	FIELD_ELEMENT* pField;

	iCount = m_fieldsDesc.GetSize() - 1;
	if ( sIndex < 0 || sIndex > iCount )
		return;
    pField = m_fieldsDesc.GetAt(sIndex);
	pField->ucFieldDecimal  = (unsigned char)nNewValue; 

}

short CMapTableDesc::GetFieldLength(short sIndex)
{
	int iCount;
	FIELD_ELEMENT* pField;

	iCount = m_fieldsDesc.GetSize() - 1;
	if ( sIndex < 0 || sIndex > iCount )
		return INVALID_VALUE;
    pField = m_fieldsDesc.GetAt(sIndex);
	return pField->ucFieldLength; 
}

void CMapTableDesc::SetFieldLength(short sIndex, short nNewValue)
{

    int iCount;
	FIELD_ELEMENT* pField;

	iCount = m_fieldsDesc.GetSize() - 1;
	if ( sIndex < 0 || sIndex > iCount )
		return;
    pField = m_fieldsDesc.GetAt(sIndex);
	pField->ucFieldLength  = (unsigned char)nNewValue; 
}

/*short CMapTableDesc::GetFieldScale(short sIndex)
{
	int iCount;
	FIELD_ELEMENT* pField;

	iCount = m_fieldsDesc.GetSize() - 1;
	if ( sIndex < 0 || sIndex > iCount )
		return INVALID_VALUE;
    pField = m_fieldsDesc.GetAt(sIndex);
	return pField->sfdScale; 

}

void CMapTableDesc::SetFieldScale(short sIndex, short nNewValue)
{
	int iCount;
	FIELD_ELEMENT* pField;

	iCount = m_fieldsDesc.GetSize() - 1;
	if ( sIndex < 0 || sIndex > iCount )
		return;
    pField = m_fieldsDesc.GetAt(sIndex);
	pField->sfdScale  = nNewValue;

}*/

FIELD_ELEMENT* CMapTableDesc::GetDesc(short sIndex)
{
	int iCount;
	FIELD_ELEMENT*  pDesc = NULL;

	iCount = m_fieldsDesc.GetSize()-1;
	if ( sIndex < 0 || sIndex > iCount )
		return pDesc;
    pDesc = m_fieldsDesc.GetAt(sIndex);
	return pDesc;
}
void CMapTableDesc::Add(FIELD_ELEMENT* pfdDesc)
{

    if ( pfdDesc == NULL )
		return;
	m_fieldsDesc.Add( pfdDesc);
}

void CMapTableDesc::Remove(short sIndex)
{
	int iCount;
	FIELD_ELEMENT* pfdDesc;
	
	iCount = m_fieldsDesc.GetSize()-1;
	if ( sIndex < 0 || sIndex > iCount )
		return ;
	pfdDesc = m_fieldsDesc.GetAt( sIndex );  
    m_fieldsDesc.RemoveAt(sIndex,1);   
	delete pfdDesc; 
}

void CMapTableDesc::Insert(short sindex,FIELD_ELEMENT* pfdDesc)
{
	int iCount;
	
	iCount = m_fieldsDesc.GetSize()-1;
	if ( sindex < 0 || sindex > iCount )
		return ;
	m_fieldsDesc.InsertAt(sindex,pfdDesc);

}

void CMapTableDesc::Clear()
{
   int i,iCount;
   FIELD_ELEMENT *pfdDesc;
   
   iCount = m_fieldsDesc.GetSize() - 1;
   for ( i = iCount ; i >= 0   ; i-- )
   {
		pfdDesc = m_fieldsDesc.GetAt(i);
		delete pfdDesc;
   } 
   m_fieldsDesc.RemoveAll(); 
}