00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef NL_EXTERIOR_MESH_H
00027 #define NL_EXTERIOR_MESH_H
00028
00029 #include <vector>
00030
00031 #include "nel/misc/types_nl.h"
00032 #include "nel/misc/vector.h"
00033 #include "nel/misc/file.h"
00034
00035 #include "nel/misc/aabbox.h"
00036
00037 #include "pacs/vector_2s.h"
00038 #include "pacs/surface_quad.h"
00039 #include "pacs/chain.h"
00040 #include "pacs/retrievable_surface.h"
00041 #include "pacs/chain_quad.h"
00042
00043 #include "nel/pacs/u_global_position.h"
00044
00045
00046
00047 namespace NLPACS
00048 {
00049
00056 class CExteriorMesh
00057 {
00058 public:
00060 struct CEdge
00061 {
00062 NLMISC::CVector Start;
00063 sint32 Link;
00064
00065 CEdge() {}
00066 CEdge(const CVector &start, sint32 link) : Start(start), Link(link) {}
00067 void serial(NLMISC::IStream &f) { f.serial(Start, Link); }
00068 };
00069
00071 struct COrderedEdges
00072 {
00073 uint32 Start, End;
00074 bool Forward;
00075 void serial(NLMISC::IStream &f) { f.serial(Start, End, Forward); }
00076 };
00077
00079 class CLink
00080 {
00081 public:
00082 uint16 BorderChainId;
00083 uint16 ChainId;
00084 uint16 SurfaceId;
00085 CLink() : BorderChainId(0xFFFF), ChainId(0xFFFF), SurfaceId(0xFFFF) {}
00086 void serial(NLMISC::IStream &f) { f.serial(BorderChainId, ChainId, SurfaceId); }
00087 };
00088
00089 protected:
00090 std::vector<CEdge> _Edges;
00091 std::vector<COrderedEdges> _OrderedEdges;
00092
00093 std::vector<CLink> _Links;
00094
00095 NLMISC::CAABBox _BBox;
00096
00097
00098 public:
00100
00101
00102 CExteriorMesh();
00103
00104
00105
00106
00108
00109
00111 const std::vector<CEdge> &getEdges() const { return _Edges; }
00112
00114 const CEdge getEdge(uint n) const { return _Edges[n]; }
00115
00116
00118 const std::vector<COrderedEdges> &getOrderedEdges() const { return _OrderedEdges; }
00119
00121 const COrderedEdges &getOrderedEdges(uint n) const { return _OrderedEdges[n]; }
00122
00123
00125 const std::vector<CLink> &getLinks() const { return _Links; }
00127 const CLink &getLink(uint n) const { return _Links[n]; }
00128
00130 CLink getLinkFromEdge(uint edge) const { return (_Edges[edge].Link != -1) ? _Links[_Edges[edge].Link] : CLink(); }
00131
00132
00134 const NLMISC::CAABBox &getBBox() const { return _BBox; }
00135
00136
00137
00138
00140
00141
00143 void setEdges(const std::vector<CEdge> &edges);
00144
00146 void setLinks(const std::vector<CLink> &links) { _Links = links; }
00147
00148
00149
00151 void serial(NLMISC::IStream &f);
00152 };
00153
00154 };
00155
00156 #endif // NL_EXTERIOR_MESH_H
00157
00158