gwnavgeneration/raster/dynamicrastercolumntoaltitudes.h Source File

dynamicrastercolumntoaltitudes.h
Go to the documentation of this file.
1 /*
2 * Copyright 2015 Autodesk, Inc. All rights reserved.
3 * Use of this software is subject to the terms of the Autodesk license agreement and any attachments or Appendices thereto provided at the time of installation or download,
4 * or which otherwise accompanies this software in either electronic or hard copy form, or which is signed by you and accepted by Autodesk.
5 */
6 
7 
8 // primary contact: GUAL - secondary contact: NOBODY
9 #ifndef GwNavGen_DynamicRasterColumnToAltitudes_H
10 #define GwNavGen_DynamicRasterColumnToAltitudes_H
11 
12 
15 
16 
17 namespace Kaim
18 {
19 
20 
21 class DynamicRasterColumnToAltitudes
22 {
23 public:
24  DynamicRasterColumnToAltitudes(KyFloat32 meterMergeDistance, KyUInt32 elementsMaxCount);
25 
26  ~DynamicRasterColumnToAltitudes();
27 
28  void ColumnToAltitudes(const DynamicRasterColumn* column, KyFloat32 navTagMergeTolerance, const KyArrayTLS_POD<const NavTag*>& navTagArray);
29 
30  KyUInt32 GetAltitudesCount() { return m_altitudesCount; }
31  KyFloat32* GetAltitudes() { return (m_altitudesCount != 0) ? m_altitudes : KY_NULL; }
32 
33  KyUInt32 GetNavTagCount() { return m_navTagCount; }
34  KyUInt32* GetNavTagIdices() { return (m_navTagCount != 0) ? m_navTagIndices : KY_NULL; }
35 
36  KyUInt32 GetMaxOwnerCountInColumn() const { return m_maxOwnerCountInMergedElements; }
37 
38 private:
39  void AddAltitude(KyFloat32 altitude)
40  {
41  KY_DEBUG_ASSERTN(m_altitudesCount < m_altitudesMaxCount, ("Max altitudeCount reached"));
42  m_altitudes[m_altitudesCount] = altitude;
43  ++m_altitudesCount;
44  }
45 
46  void AddNavTagIdx(KyUInt32 navTagIdx)
47  {
48  KY_DEBUG_ASSERTN(m_navTagCount < m_navTagMaxCount, ("Max NavTag count reached"));
49  m_navTagIndices[m_navTagCount] = navTagIdx;
50  ++m_navTagCount;
51  }
52 
53  void UpdateOwnerList(KyUInt32 newOwner)
54  {
55  KyUInt32 newOwnerIdx = 0;
56  for (; newOwnerIdx < m_ownersCount; ++newOwnerIdx)
57  {
58  if (m_owners[newOwnerIdx] == newOwner)
59  return;
60  }
61  KY_DEBUG_ASSERTN(newOwnerIdx < m_ownersMaxCount, ("Max owners count reached"));
62  m_owners[m_ownersCount++] = newOwner;
63  }
64 
65  void ResetOwnerList()
66  {
67  m_maxOwnerCountInMergedElements = Kaim::Max(m_maxOwnerCountInMergedElements, m_ownersCount);
68  m_ownersCount = 0;
69  }
70 
71 private:
72  KyFloat32 m_meterMergeDistance;
73 
74  KyUInt32 m_sortedElementsMaxCount;
75  KyUInt32 m_sortedElementsCount;
76  DynamicRasterPixel* m_sortedElements;
77 
78  KyUInt32 m_altitudesMaxCount;
79  KyUInt32 m_altitudesCount;
80  KyFloat32* m_altitudes;
81 
82  KyUInt32 m_navTagMaxCount;
83  KyUInt32 m_navTagCount;
84  KyUInt32* m_navTagIndices;
85 
86  KyUInt32 m_ownersMaxCount;
87  KyUInt32 m_ownersCount;
88  KyUInt32* m_owners;
89  KyUInt32 m_maxOwnerCountInMergedElements;
90 };
91 
92 
93 }
94 
95 
96 #endif
#define KY_NULL
Null value.
Definition: types.h:247
T Max(const T &a, const T &b)
Returns the greater of the two specified values.
Definition: fastmath.h:121
Definition: gamekitcrowddispersion.h:20
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36
float KyFloat32
Type used internally to represent a 32-bit floating-point number.
Definition: types.h:43