📄 ugkfeaturedefn.cpp
字号:
// ugkfeaturedefn.cpp: implementation of the UGKFeatureDefn class.////////////////////////////////////////////////////////////////////////#include "ugkfeaturedefn.h"#include "ugk_memopr.h"#include "ugk_string.h"#include "ugk_errhandle.h"/************************************************************************//* UGKFeatureDefn() *//************************************************************************/UGKFeatureDefn::UGKFeatureDefn( const char * pszName ){ pszFeatureClassName = UGKStrdup( pszName ); nRefCount = 0; nFieldCount = 0; papoFieldDefn = NULL; eGeomType = wkbUnknown;}/************************************************************************//* ~UGKFeatureDefn() *//************************************************************************/UGKFeatureDefn::~UGKFeatureDefn(){ //assert(nRefCount != 0 ); 只有nRefCount为零才能释放 assert(nRefCount == 0 ); //MOD --ZGQ --06/03/20 UGK_Free( pszFeatureClassName ); for( int i = 0; i < nFieldCount; i++ ) { delete papoFieldDefn[i]; } UGK_Free( papoFieldDefn );}/************************************************************************//* Clone() *//************************************************************************//** * \fn UGKFeatureDefn *UGKFeatureDefn::Clone(); * * Create a copy of this feature definition. * * Creates a deep copy of the feature definition. * * @return the copy. */UGKFeatureDefn *UGKFeatureDefn::Clone(){ UGKFeatureDefn *poCopy; poCopy = new UGKFeatureDefn( GetName() ); poCopy->SetGeomType( GetGeomType() ); for( int i = 0; i < GetFieldCount(); i++ ) poCopy->AddFieldDefn( GetFieldDefn( i ) ); return poCopy;}/************************************************************************//* GetFieldDefn() *//************************************************************************//** * Fetch field definition. 获取字段定义 * * @param iField the field to fetch, between 0 and GetFieldCount()-1. * * @return a pointer to an internal field definition object. This object * should not be modified or freed by the application. */UGKFieldDefn *UGKFeatureDefn::GetFieldDefn( int iField ){ if( iField < 0 || iField >= nFieldCount ) { UGKError(ET_Failure,UGKErr_IllegalArg, "UGKFeatureDefn::GetFieldDefn(),Invalid param iField!"); return NULL; } return papoFieldDefn[iField];}/************************************************************************//* AddFieldDefn() *//************************************************************************//** * Add a new field definition. * * This method should only be called while there are no UGKFeature * objects in existance based on this UGKFeatureDefn. The UGKFieldDefn * passed in is copied, and remains the responsibility of the caller. * * @param poNewDefn the definition of the new field. */void UGKFeatureDefn::AddFieldDefn( UGKFieldDefn * poNewDefn ){ papoFieldDefn = (UGKFieldDefn **) UGK_Realloc( papoFieldDefn, sizeof(void*)*(nFieldCount+1) ); papoFieldDefn[nFieldCount] = new UGKFieldDefn( poNewDefn ); nFieldCount++;}/************************************************************************//* SetGeomType() *//************************************************************************//** * Assign the base geometry type for this layer. * * All geometry objects using this type must be of the defined type or * a derived type. The default upon creation is wkbUnknown which allows for * any geometry type. The geometry type should generally not be changed * after any UGKFeatures have been created against this definition. * * @param eNewType the new type to assign. */void UGKFeatureDefn::SetGeomType( UGKwkbGeometryType eNewType ){ eGeomType = eNewType;}/************************************************************************//* GetFieldIndex() *//************************************************************************//** * Find field by name. * 返回匹配给定参数的第一个字段 * The field index of the first field matching the passed field name (case * insensitively) is returned. * * @param pszFieldName the field name to search for. * * @return the field index, or -1 if no match found. */ int UGKFeatureDefn::GetFieldIndex( const char * pszFieldName ){ for( int i = 0; i < nFieldCount; i++ ) { if( EQUAL(pszFieldName, papoFieldDefn[i]->GetNameRef() ) ) return i; } return -1;}/************************************************************************//* CreateFeatureDefn() *//************************************************************************/UGKFeatureDefn *UGKFeatureDefn::CreateFeatureDefn( const char *pszName ){ return new UGKFeatureDefn( pszName );}/************************************************************************//* DestroyFeatureDefn() *//************************************************************************/void UGKFeatureDefn::DestroyFeatureDefn( UGKFeatureDefn *poDefn ){ delete poDefn;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -