Quantum GIS API Documentation  1.7.4
src/core/qgsfeature.cpp
Go to the documentation of this file.
00001 /***************************************************************************
00002                 qgsfeature.cpp - Spatial Feature Implementation
00003                      --------------------------------------
00004 Date                 : 09-Sep-2003
00005 Copyright            : (C) 2003 by Gary E.Sherman
00006 email                : sherman at mrcc.com
00007  ***************************************************************************
00008  *                                                                         *
00009  *   This program is free software; you can redistribute it and/or modify  *
00010  *   it under the terms of the GNU General Public License as published by  *
00011  *   the Free Software Foundation; either version 2 of the License, or     *
00012  *   (at your option) any later version.                                   *
00013  *                                                                         *
00014  ***************************************************************************/
00015 /* $Id$ */
00016 
00017 #include "qgsfeature.h"
00018 #include "qgsgeometry.h"
00019 #include "qgsrectangle.h"
00020 
00025 QgsFeature::QgsFeature( int id, QString typeName )
00026     : mFid( id )
00027     , mGeometry( 0 )
00028     , mOwnsGeometry( 0 )
00029     , mValid( false )
00030     , mDirty( 0 )
00031     , mTypeName( typeName )
00032 {
00033   // NOOP
00034 }
00035 
00036 QgsFeature::QgsFeature( QgsFeature const & rhs )
00037     : mFid( rhs.mFid )
00038     , mAttributes( rhs.mAttributes )
00039     , mGeometry( 0 )
00040     , mOwnsGeometry( false )
00041     , mValid( rhs.mValid )
00042     , mDirty( rhs.mDirty )
00043     , mTypeName( rhs.mTypeName )
00044 {
00045 
00046   // copy embedded geometry
00047   if ( rhs.mGeometry )
00048   {
00049     setGeometry( *rhs.mGeometry );
00050   }
00051 }
00052 
00053 
00054 QgsFeature & QgsFeature::operator=( QgsFeature const & rhs )
00055 {
00056   if ( &rhs == this )
00057     return *this;
00058 
00059   mFid =  rhs.mFid;
00060   mDirty =  rhs.mDirty;
00061   mAttributes =  rhs.mAttributes;
00062   mValid =  rhs.mValid;
00063   mTypeName = rhs.mTypeName;
00064 
00065   // make sure to delete the old geometry (if exists)
00066   if ( mGeometry && mOwnsGeometry )
00067     delete mGeometry;
00068 
00069   mGeometry = 0;
00070   mOwnsGeometry = false;
00071 
00072   if ( rhs.mGeometry )
00073     setGeometry( *rhs.mGeometry );
00074 
00075   return *this;
00076 } // QgsFeature::operator=( QgsFeature const & rhs )
00077 
00078 
00079 
00081 QgsFeature::~QgsFeature()
00082 {
00083   // Destruct the attached geometry only if we still own it.
00084   if ( mOwnsGeometry && mGeometry )
00085     delete mGeometry;
00086 }
00087 
00092 int QgsFeature::id() const
00093 {
00094   return mFid;
00095 }
00096 
00101 const QgsAttributeMap& QgsFeature::attributeMap() const
00102 {
00103   return mAttributes;
00104 }
00105 
00107 void QgsFeature::setAttributeMap( const QgsAttributeMap& attributes )
00108 {
00109   mAttributes = attributes;
00110 }
00111 
00113 void QgsFeature::clearAttributeMap()
00114 {
00115   mAttributes.clear();
00116 }
00117 
00121 void QgsFeature::addAttribute( int field, QVariant attr )
00122 {
00123   mAttributes.insert( field, attr );
00124 }
00125 
00127 void QgsFeature::deleteAttribute( int field )
00128 {
00129   mAttributes.remove( field );
00130 }
00131 
00132 
00133 void QgsFeature::changeAttribute( int field, QVariant attr )
00134 {
00135   mAttributes[field] = attr;
00136 }
00137 
00138 QgsGeometry *QgsFeature::geometry()
00139 {
00140   return mGeometry;
00141 }
00142 
00143 QgsGeometry *QgsFeature::geometryAndOwnership()
00144 {
00145   mOwnsGeometry = false;
00146 
00147   return mGeometry;
00148 }
00149 
00150 
00151 
00154 void QgsFeature::setFeatureId( int id )
00155 {
00156   mFid = id;
00157 }
00158 
00159 
00160 QString QgsFeature::typeName() const
00161 {
00162   return mTypeName;
00163 } // QgsFeature::typeName
00164 
00165 
00166 
00169 void QgsFeature::setTypeName( QString typeName )
00170 {
00171   mTypeName = typeName;
00172 } // QgsFeature::typeName
00173 
00174 
00175 void QgsFeature::setGeometry( const QgsGeometry& geom )
00176 {
00177   setGeometry( new QgsGeometry( geom ) );
00178 }
00179 
00180 void QgsFeature::setGeometry( QgsGeometry* geom )
00181 {
00182   // Destruct the attached geometry only if we still own it, before assigning new one.
00183   if ( mOwnsGeometry && mGeometry )
00184   {
00185     delete mGeometry;
00186     mGeometry = 0;
00187   }
00188 
00189   mGeometry = geom;
00190   mOwnsGeometry = true;
00191 }
00192 
00195 void QgsFeature::setGeometryAndOwnership( unsigned char *geom, size_t length )
00196 {
00197   QgsGeometry *g = new QgsGeometry();
00198   g->fromWkb( geom, length );
00199   setGeometry( g );
00200 }
00201 
00202 
00203 bool QgsFeature::isValid() const
00204 {
00205   return mValid;
00206 }
00207 
00208 void QgsFeature::setValid( bool validity )
00209 {
00210   mValid = validity;
00211 }
00212 
00213 bool QgsFeature::isDirty() const
00214 {
00215   return mDirty;
00216 }
00217 
00218 void QgsFeature::clean()
00219 {
00220   mDirty = false;
00221 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines