00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "qgsfeature.h"
00017 #include "qgsgeometry.h"
00018 #include "qgsrectangle.h"
00019
00024 QgsFeature::QgsFeature( QgsFeatureId id, QString typeName )
00025 : mFid( id )
00026 , mGeometry( 0 )
00027 , mOwnsGeometry( 0 )
00028 , mValid( false )
00029 , mDirty( 0 )
00030 , mTypeName( typeName )
00031 {
00032
00033 }
00034
00035 QgsFeature::QgsFeature( QgsFeature const & rhs )
00036 : mFid( rhs.mFid )
00037 , mAttributes( rhs.mAttributes )
00038 , mGeometry( 0 )
00039 , mOwnsGeometry( false )
00040 , mValid( rhs.mValid )
00041 , mDirty( rhs.mDirty )
00042 , mTypeName( rhs.mTypeName )
00043 {
00044
00045
00046 if ( rhs.mGeometry )
00047 {
00048 setGeometry( *rhs.mGeometry );
00049 }
00050 }
00051
00052
00053 QgsFeature & QgsFeature::operator=( QgsFeature const & rhs )
00054 {
00055 if ( &rhs == this )
00056 return *this;
00057
00058 mFid = rhs.mFid;
00059 mDirty = rhs.mDirty;
00060 mAttributes = rhs.mAttributes;
00061 mValid = rhs.mValid;
00062 mTypeName = rhs.mTypeName;
00063
00064
00065 if ( mGeometry && mOwnsGeometry )
00066 delete mGeometry;
00067
00068 mGeometry = 0;
00069 mOwnsGeometry = false;
00070
00071 if ( rhs.mGeometry )
00072 setGeometry( *rhs.mGeometry );
00073
00074 return *this;
00075 }
00076
00077
00078
00080 QgsFeature::~QgsFeature()
00081 {
00082
00083 if ( mOwnsGeometry && mGeometry )
00084 delete mGeometry;
00085 }
00086
00091 QgsFeatureId QgsFeature::id() const
00092 {
00093 return mFid;
00094 }
00095
00100 const QgsAttributeMap& QgsFeature::attributeMap() const
00101 {
00102 return mAttributes;
00103 }
00104
00106 void QgsFeature::setAttributeMap( const QgsAttributeMap& attributes )
00107 {
00108 mAttributes = attributes;
00109 }
00110
00112 void QgsFeature::clearAttributeMap()
00113 {
00114 mAttributes.clear();
00115 }
00116
00120 void QgsFeature::addAttribute( int field, QVariant attr )
00121 {
00122 mAttributes.insert( field, attr );
00123 }
00124
00126 void QgsFeature::deleteAttribute( int field )
00127 {
00128 mAttributes.remove( field );
00129 }
00130
00131
00132 void QgsFeature::changeAttribute( int field, QVariant attr )
00133 {
00134 mAttributes[field] = attr;
00135 }
00136
00137 QgsGeometry *QgsFeature::geometry()
00138 {
00139 return mGeometry;
00140 }
00141
00142 QgsGeometry *QgsFeature::geometryAndOwnership()
00143 {
00144 mOwnsGeometry = false;
00145
00146 return mGeometry;
00147 }
00148
00149
00150
00153 void QgsFeature::setFeatureId( QgsFeatureId id )
00154 {
00155 mFid = id;
00156 }
00157
00158
00159 QString QgsFeature::typeName() const
00160 {
00161 return mTypeName;
00162 }
00163
00164
00165
00168 void QgsFeature::setTypeName( QString typeName )
00169 {
00170 mTypeName = typeName;
00171 }
00172
00173
00174 void QgsFeature::setGeometry( const QgsGeometry& geom )
00175 {
00176 setGeometry( new QgsGeometry( geom ) );
00177 }
00178
00179 void QgsFeature::setGeometry( QgsGeometry* geom )
00180 {
00181
00182 if ( mOwnsGeometry && mGeometry )
00183 {
00184 delete mGeometry;
00185 mGeometry = 0;
00186 }
00187
00188 mGeometry = geom;
00189 mOwnsGeometry = true;
00190 }
00191
00194 void QgsFeature::setGeometryAndOwnership( unsigned char *geom, size_t length )
00195 {
00196 QgsGeometry *g = new QgsGeometry();
00197 g->fromWkb( geom, length );
00198 setGeometry( g );
00199 }
00200
00201
00202 bool QgsFeature::isValid() const
00203 {
00204 return mValid;
00205 }
00206
00207 void QgsFeature::setValid( bool validity )
00208 {
00209 mValid = validity;
00210 }
00211
00212 bool QgsFeature::isDirty() const
00213 {
00214 return mDirty;
00215 }
00216
00217 void QgsFeature::clean()
00218 {
00219 mDirty = false;
00220 }