gwnavgeneration/raster/dynamicrastercolumntoaltitudes.h Source File

dynamicrastercolumntoaltitudes.h
Go to the documentation of this file.
1 /*
2 * Copyright 2016 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 #pragma once
9 
10 
13 
14 
15 namespace Kaim
16 {
17 
18 
19 class DynamicRasterColumnToAltitudes
20 {
21 public:
22  DynamicRasterColumnToAltitudes(KyFloat32 mergeDistance, KyFloat32 navTagMergeTolerance, KyUInt32 elementsMaxCount);
23 
24  ~DynamicRasterColumnToAltitudes();
25 
26  void ColumnToAltitudes(const DynamicRasterColumn* column, const KyArrayTLS_POD<const NavTag*>& navTagArray);
27 
28  KyUInt32 GetAltitudesCount() { return m_altitudesCount; }
29  KyFloat32* GetAltitudes() { return (m_altitudesCount != 0) ? m_altitudes : nullptr; }
30 
31  KyUInt32 GetNavTagCount() { return m_navTagCount; }
32  KyUInt32* GetNavTagIdices() { return (m_navTagCount != 0) ? m_navTagIndices : nullptr; }
33 
34  KyUInt32 GetMaxOwnerCountInColumn() const { return m_maxOwnerCountInMergedElements; }
35 
36 private:
37  void AddAltitude(KyFloat32 altitude)
38  {
39  KY_DEBUG_ASSERTN(m_altitudesCount < m_altitudesMaxCount, ("Max altitudeCount reached"));
40  m_altitudes[m_altitudesCount] = altitude;
41  ++m_altitudesCount;
42  }
43 
44  void AddNavTagIdx(KyUInt32 navTagIdx)
45  {
46  KY_DEBUG_ASSERTN(m_navTagCount < m_navTagMaxCount, ("Max NavTag count reached"));
47  m_navTagIndices[m_navTagCount] = navTagIdx;
48  ++m_navTagCount;
49  }
50 
51  void UpdateOwnerList(KyUInt32 newOwner)
52  {
53  KyUInt32 newOwnerIdx = 0;
54  for (; newOwnerIdx < m_ownersCount; ++newOwnerIdx)
55  {
56  if (m_owners[newOwnerIdx] == newOwner)
57  return;
58  }
59  KY_DEBUG_ASSERTN(newOwnerIdx < m_ownersMaxCount, ("Max owners count reached"));
60  m_owners[m_ownersCount++] = newOwner;
61  }
62 
63  void ResetOwnerList()
64  {
65  m_maxOwnerCountInMergedElements = Kaim::Max(m_maxOwnerCountInMergedElements, m_ownersCount);
66  m_ownersCount = 0;
67  }
68 
69 private:
70  KyFloat32 m_mergeDistance;
71  KyFloat32 m_navTagMergeTolerance;
72 
73  KyUInt32 m_sortedElementsMaxCount;
74  KyUInt32 m_sortedElementsCount;
75  DynamicRasterPixel* m_sortedElements;
76 
77  KyUInt32 m_altitudesMaxCount;
78  KyUInt32 m_altitudesCount;
79  KyFloat32* m_altitudes;
80 
81  KyUInt32 m_navTagMaxCount;
82  KyUInt32 m_navTagCount;
83  KyUInt32* m_navTagIndices;
84 
85  KyUInt32 m_ownersMaxCount;
86  KyUInt32 m_ownersCount;
87  KyUInt32* m_owners;
88  KyUInt32 m_maxOwnerCountInMergedElements;
89 };
90 
91 
92 }
93 
94 
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
float KyFloat32
float
Definition: types.h:32