Umasoft
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
Route.h
1 //
2 // Route.h
3 //
4 // Copyright (c) 2001-2011 Virtual Terrain Project
5 // Free for all uses, see license.txt for details.
6 //
8 
9 #ifndef ROUTEH
10 #define ROUTEH
11 
12 #include "vtdata/vtString.h"
13 
14 class vtHeightField3d;
15 class vtTerrain;
16 class vtMesh;
17 class vtUtilStruct;
18 
25 {
26 public:
27  vtUtilNode();
28  void Offset(const DPoint2 &delta);
29 
30  DPoint2 m_dpOffsetElevations; // x=Left, y=Right
31  DPoint2 m_dpOffsetDistances; // x=Left, y=Right
32  double dRadAzimuth; // azimuth (orientation to next node)
33  vtUtilStruct *m_struct; // Object to draw.
34  vtString m_sStructName; // Structure Family
35 
36  DPoint2 m_Point;
37 
38  vtTransformPtr m_pTrans;
39 };
40 
45 class vtRoute
46 {
47 public:
48  vtRoute(vtTerrain* pT);
49  ~vtRoute();
50 
51  void AddPoint(const DPoint2 &epos, const char *structname);
52 
53  void BuildGeometry(vtHeightField3d *pHeightField);
54  void DestroyGeometry();
55  void Dirty();
56 
57  vtGeode *GetGeom() { return m_pWireGeom; }
58 
59  // Station set readers.
60  vtUtilNode *GetAt(uint iter)
61  {
62  return (iter < m_Nodes.GetSize() ? m_Nodes[iter] : NULL);
63  }
64  long GetSize() { return m_Nodes.GetSize(); }
65 
66 protected:
67  bool _LoadStructure(vtUtilNode *node);
68  // bool _WireReader(const char *filename, vtUtilStruct *st);
69  void _ComputeStructureRotations();
70  void _CreateStruct(int iNode);
71  void _DeleteStruct(int iNode);
72  void _AddRouteMeshes(vtHeightField3d *pHeightField);
73  void _StringWires(long lTowerIndex, vtHeightField3d *pHeightField);
74  void _DrawCat(FPoint3 p0, FPoint3 p1,
75  double catenary, int iNumSegs, vtMesh *pWireMesh);
76 
77  // all routes share the same set of materials
78  static vtMaterialArray *m_pRouteMats;
79  static void _CreateMaterials();
80  static int m_mi_wire;
81 
82  vtGeode *m_pWireGeom;
83  vtTerrain *m_pTheTerrain;
84  vtArray<vtUtilNode*> m_Nodes;
85 
86  bool m_bBuilt;
87  bool m_bDirty;
88 };
89 
93 class vtRouteMap : public vtArray<vtRoute *>
94 {
95 public:
96  virtual ~vtRouteMap() { Empty(); free(m_Data); m_Data = NULL; m_MaxSize = 0; }
97  void DestructItems(uint first, uint last)
98  {
99  for (uint i = first; i <= last; i++)
100  delete GetAt(i);
101  }
102 
103  bool FindClosestUtilNode(const DPoint2 &point, double error,
104  vtRoute* &route, vtUtilNode* &node, double &closest);
105  void BuildGeometry(vtHeightField3d *pHeightField);
106  bool FindRouteFromNode(osg::Node *pNode, int &iOffset);
107 };
108 
109 #endif //ROUTEH