00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef __INCLUDE_PCIDSK_VECTORSEGMENT_H
00029 #define __INCLUDE_PCIDSK_VECTORSEGMENT_H
00030
00031 #include <string>
00032 #include <vector>
00033 #include <iterator>
00034 #include "pcidsk_shape.h"
00035
00036 namespace PCIDSK
00037 {
00038 class ShapeIterator;
00039
00040
00041
00042
00043
00078 class PCIDSK_DLL PCIDSKVectorSegment
00079 {
00080 public:
00081 virtual ~PCIDSKVectorSegment() {}
00082
00093 virtual std::string GetRst() = 0;
00094
00095
00105 virtual int GetFieldCount() = 0;
00106
00113 virtual std::string GetFieldName(int field_index) = 0;
00114
00121 virtual std::string GetFieldDescription(int field_index) = 0;
00122
00129 virtual ShapeFieldType GetFieldType(int field_index) = 0;
00130
00137 virtual std::string GetFieldFormat(int field_index) = 0;
00138
00145 virtual ShapeField GetFieldDefault(int field_index) = 0;
00146
00151 virtual ShapeIterator begin() = 0;
00152
00157 virtual ShapeIterator end() = 0;
00158
00163 virtual ShapeId FindFirst() = 0;
00164
00170 virtual ShapeId FindNext(ShapeId id) = 0;
00171
00177 virtual void GetVertices( ShapeId id,
00178 std::vector<ShapeVertex>& list ) = 0;
00179
00185 virtual void GetFields( ShapeId id,
00186 std::vector<ShapeField>& list ) = 0;
00187 };
00188
00189
00190
00191
00192
00194
00195 class ShapeIterator : public std::iterator<std::input_iterator_tag, ShapeId>
00196 {
00197 ShapeId id;
00198 PCIDSKVectorSegment *seg;
00199
00200 public:
00201 ShapeIterator(PCIDSKVectorSegment *seg_in)
00202 : seg(seg_in) { id = seg->FindFirst(); }
00203 ShapeIterator(PCIDSKVectorSegment *seg_in, ShapeId id_in )
00204 : id(id_in), seg(seg_in) {}
00205 ShapeIterator(const ShapeIterator& mit) : id(mit.id), seg(mit.seg) {}
00206 ShapeIterator& operator++() { id=seg->FindNext(id); return *this;}
00207 ShapeIterator& operator++(int) { id=seg->FindNext(id); return *this;}
00208 bool operator==(const ShapeIterator& rhs) {return id == rhs.id;}
00209 bool operator!=(const ShapeIterator& rhs) {return id != rhs.id;}
00210 ShapeId& operator*() {return id;}
00211 };
00212
00213 }
00214
00215 #endif // __INCLUDE_PCIDSK_VECTORSEGMENT_H