00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "stdpacs.h"
00027
00028 #include "pacs/exterior_mesh.h"
00029 #include "pacs/local_retriever.h"
00030 #include "pacs/collision_desc.h"
00031
00032
00033 using namespace std;
00034 using namespace NLMISC;
00035
00036 namespace NLPACS
00037 {
00038
00039
00040 static inline bool isStrictlyLess(const CVector &a, const CVector &b)
00041 {
00042 if (a.x < b.x) return true;
00043 if (a.x > b.x) return false;
00044 if (a.y < b.y) return true;
00045 if (a.y > b.y) return false;
00046 if (a.z < b.y) return true;
00047 return false;
00048 }
00049
00050 static inline bool isStrictlyGreater(const CVector &a, const CVector &b)
00051 {
00052 if (a.x > b.x) return true;
00053 if (a.x < b.x) return false;
00054 if (a.y > b.y) return true;
00055 if (a.y < b.y) return false;
00056 if (a.z > b.y) return true;
00057 return false;
00058 }
00059
00060 CExteriorMesh::CExteriorMesh() { }
00061
00062 void CExteriorMesh::setEdges(const vector<CExteriorMesh::CEdge> &edges)
00063 {
00064 _Edges = edges;
00065 _OrderedEdges.clear();
00066
00067 uint i;
00068 for (i=0; i+1<_Edges.size(); )
00069 {
00070 _OrderedEdges.resize(_OrderedEdges.size()+1);
00071 COrderedEdges &edges = _OrderedEdges.back();
00072 edges.Start = i;
00073 if (isStrictlyLess(_Edges[i].Start, _Edges[i+1].Start))
00074 {
00075 edges.Forward = true;
00076 do
00077 {
00078 ++i;
00079 }
00080 while (i+1<_Edges.size() && isStrictlyLess(_Edges[i].Start, _Edges[i+1].Start));
00081 }
00082 else
00083 {
00084 edges.Forward = false;
00085 do
00086 {
00087 ++i;
00088 }
00089 while (i+1<_Edges.size() && isStrictlyGreater(_Edges[i].Start, _Edges[i+1].Start));
00090 }
00091 edges.End = i;
00092 }
00093 }
00094
00095 void CExteriorMesh::serial(NLMISC::IStream &f)
00096 {
00097
00098
00099
00100
00101 (void)f.serialVersion(0);
00102
00103 f.serialCont(_Edges);
00104 f.serialCont(_OrderedEdges);
00105 f.serialCont(_Links);
00106 f.serial(_BBox);
00107 }
00108 };