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/IndexedPoint3Array>
00026 #include <gfx/TriangleIterator>
00027
00028 using gfx::IndexedPoint3Array;
00029
00030
00031
00032 IndexedPoint3Array::IndexedPoint3Array()
00033 : points(0,10), index(0,10)
00034 {
00035 }
00036
00037 IndexedPoint3Array::IndexedPoint3Array(const array<Point3>& a)
00038 : points(0,a.size()), index(0,a.size())
00039 {
00040 for (Int p=0; p<a.size(); p++)
00041 addPoint(a[p]);
00042 points.trim();
00043 }
00044
00045
00046 IndexedPoint3Array::IndexedPoint3Array(const TriangleContainer& tc)
00047 {
00048 TriangleContainer::const_iterator t = tc.begin();
00049 TriangleContainer::const_iterator end = tc.end();
00050 while (t != end) {
00051 const Triangle3& tri(*t);
00052 addPoint(tri[0]);
00053 addPoint(tri[1]);
00054 addPoint(tri[2]);
00055 ++t;
00056 }
00057 }
00058
00059
00060 IndexedPoint3Array::IndexedPoint3Array(const IndexedPoint3Array& ipa)
00061 : points(points), index(index)
00062 {
00063 }
00064
00065 IndexedPoint3Array::~IndexedPoint3Array()
00066 {
00067 }
00068
00069 Int IndexedPoint3Array::addPoint(const Point3& p)
00070 {
00071
00072 Int i;
00073 bool found = findPoint(p,i);
00074
00075
00076 if (found)
00077 index.at(index.size()) = i;
00078 else {
00079
00080 points.at(points.size()) = p;
00081 index.at(index.size()) = points.size()-1;
00082 }
00083 return index[index.size()-1];
00084 }
00085
00086
00087 bool IndexedPoint3Array::findPoint(const Point3& p, Int& index)
00088 {
00089 Int i=0;
00090 while (i < points.size()) {
00091 if (points[i] == p) {
00092 index = i;
00093 return true;
00094 }
00095 ++i;
00096 }
00097 return false;
00098 }
00099
00100
00101 Int IndexedPoint3Array::indexOf(const Point3& p) throw(std::invalid_argument)
00102 {
00103 Int index;
00104 if (findPoint(p,index))
00105 return index;
00106 else
00107 throw std::invalid_argument(Exception("Point3 p is not a member of the array"));
00108 }
00109
00110
00111 const base::array<base::Point3>& IndexedPoint3Array::getPointArray() const
00112 {
00113 return points;
00114 }
00115
00116 const base::array<Int>& IndexedPoint3Array::getIndexArray() const
00117 {
00118 return index;
00119 }
00120