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 #include <gfx/TriangleIterator>
00026 #include <gfx/TriangleContainer>
00027 #include <gfx/TriangleIteratorState>
00028
00029 using gfx::TriangleContainer;
00030 using gfx::TriangleIterator;
00031 using gfx::TriangleIteratorState;
00032
00033 TriangleIterator::TriangleIterator(const TriangleIterator& iter)
00034 : triangles(iter.triangles),
00035 iteratorState( narrow_cast<TriangleIteratorState>(&iter.iteratorState->clone()) )
00036 {
00037 }
00038
00039 TriangleIterator::~TriangleIterator()
00040 {
00041 triangles->deleteTriangleIteratorState(iteratorState);
00042 }
00043
00044
00045 TriangleIterator::TriangleIterator(const TriangleContainer& triangles, bool begin)
00046 : triangles(&triangles)
00047 {
00048 iteratorState = triangles.newTriangleIteratorState(begin);
00049 }
00050
00051
00052 TriangleIterator::reference TriangleIterator::operator*() const
00053 {
00054 return **iteratorState;
00055 }
00056
00057 TriangleIterator::pointer TriangleIterator::operator->() const
00058 {
00059 return &(**iteratorState);
00060 }
00061
00062
00063 TriangleIterator& TriangleIterator::operator++()
00064 {
00065 triangles->nextTriangle(iteratorState);
00066 return *this;
00067 }
00068
00069
00070 bool TriangleIterator::operator==(const TriangleIterator& i) const
00071 {
00072 if (triangles != i.triangles) return false;
00073
00074 return triangles->equalStates(iteratorState, i.iteratorState);
00075 }
00076
00077
00078 TriangleIterator& TriangleIterator::operator=(const TriangleIterator& ti)
00079 {
00080 triangles = ti.triangles;
00081 iteratorState = narrow_cast<TriangleIteratorState>(&ti.iteratorState->clone());
00082 return *this;
00083 }