gwnavruntime/queries/blobs/spatializedpointsinaabbfromposqueryblob.h Source File

spatializedpointsinaabbfromposqueryblob.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 #ifndef Navigation_SpatializedPointCollectorInAABBQueryBlob_H
9 #define Navigation_SpatializedPointCollectorInAABBQueryBlob_H
10 
15 
16 namespace Kaim
17 {
18 
19 class SpatializedPointCollectorInAABBQueryOutputBlob
20 {
21  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
22 public:
23  SpatializedPointCollectorInAABBQueryOutputBlob() : m_result(0) {}
24 
26 public:
27  KyUInt32 m_result;
28  NavTriangleBlob m_startTriangle;
29  QueryDynamicOutputBlob m_queryDynamicOutputBlob;
30 };
31 inline void SwapEndianness(Endianness::Target e, SpatializedPointCollectorInAABBQueryOutputBlob& self)
32 {
33  SwapEndianness(e, self.m_result);
34  SwapEndianness(e, self.m_startTriangle);
35  SwapEndianness(e, self.m_queryDynamicOutputBlob);
36 }
37 
38 
39 class SpatializedPointCollectorInAABBQueryOutputBlobBuilder : public BaseBlobBuilder<SpatializedPointCollectorInAABBQueryOutputBlob>
40 {
41 public:
42  SpatializedPointCollectorInAABBQueryOutputBlobBuilder(BaseSpatializedPointCollectorInAABBQuery* query) { m_query = query; }
43  virtual void DoBuild()
44  {
45  BLOB_SET(m_blob->m_result, (KyUInt32)m_query->GetResult());
46  BLOB_BUILD(m_blob->m_startTriangle, NavTriangleBlobBuilder(m_query->GetStartTrianglePtr()));
47  QueryDynamicOutput* queryDynamicOutput = m_query->GetQueryDynamicOutput();
48  if (queryDynamicOutput != KY_NULL && queryDynamicOutput->IsEmpty() == false)
49  {
50  BUILD_BLOB(m_blob->m_queryDynamicOutputBlob, QueryDynamicOutputBlobBuilder(queryDynamicOutput));
51  }
52  }
53 
54 private:
55  BaseSpatializedPointCollectorInAABBQuery* m_query;
56 };
57 
58 
59 class SpatializedPointCollectorInAABBQueryBlob
60 {
61  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
62  KY_ROOT_BLOB_CLASS(Query, SpatializedPointCollectorInAABBQueryBlob, 0)
63 public:
64  SpatializedPointCollectorInAABBQueryBlob() : m_queryInfoId(KyUInt32MAXVAL), m_databaseIdx(KyUInt32MAXVAL) {}
65 
66 public:
67  KyUInt32 m_queryInfoId;
68 
69  KyUInt32 m_databaseIdx;
70  Vec3f m_startPos3f;
71  Box3f m_extentBox;
72  PositionSpatializationRange m_positionSpatializationRange;
73 
74  BlobRef<SpatializedPointCollectorInAABBQueryOutputBlob> m_queryOutput;
75 };
76 inline void SwapEndianness(Endianness::Target e, SpatializedPointCollectorInAABBQueryBlob& self)
77 {
78  SwapEndianness(e, self.m_queryInfoId);
79  SwapEndianness(e, self.m_databaseIdx);
80  SwapEndianness(e, self.m_startPos3f);
81  SwapEndianness(e, self.m_extentBox);
82  SwapEndianness(e, self.m_positionSpatializationRange);
83 
84  SwapEndianness(e, self.m_queryOutput);
85 }
86 
87 class SpatializedPointCollectorInAABBQueryBlobBuilder : public BaseBlobBuilder<SpatializedPointCollectorInAABBQueryBlob>
88 {
89 public:
90  SpatializedPointCollectorInAABBQueryBlobBuilder(BaseSpatializedPointCollectorInAABBQuery* query) { m_query = query; }
91  virtual void DoBuild()
92  {
93  BLOB_SET(m_blob->m_queryInfoId, m_query->m_queryInfoId);
94 
95  if (m_query->m_database != KY_NULL)
96  {
97  BLOB_SET(m_blob->m_databaseIdx , m_query->m_database->GetDatabaseIndex());
98  BLOB_SET(m_blob->m_startPos3f , m_query->GetStartPos());
99  BLOB_SET(m_blob->m_extentBox , m_query->GetExtentBox());
100  BLOB_SET(m_blob->m_positionSpatializationRange, m_query->GetPositionSpatializationRange());
101 
102  switch (m_query->GetResult())
103  {
106  break;
107  default:
108  BUILD_REFERENCED_BLOB(m_blob->m_queryOutput, SpatializedPointCollectorInAABBQueryOutputBlobBuilder(m_query));
109  break;
110  }
111  }
112  }
113 
114 private:
115  BaseSpatializedPointCollectorInAABBQuery* m_query;
116 };
117 }
118 
119 #endif // Kaim_SpatializedPointCollectorInAABBQueryInputBlob_H
#define BLOB_SET(blob, value)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:136
#define BLOB_BUILD(blob, builder)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:189
SpatializedPointCollectorInAABBQueryResult
Enumerates the possible results of a SpatializedPointCollectorInAABBQuery.
Definition: basespatializedpointcollectorinaabbquery.h:26
#define KY_NULL
Null value.
Definition: types.h:247
Target
Enumerates the possible endianness types relative to the current platform.
Definition: endianness.h:35
SpatializedPointCollectorInAABBQueryOutputBlob * m_blob
The blob maintained by this builder. Only modify using the macros listed under DoBuild().
Definition: baseblobbuilder.h:117
Definition: gamekitcrowddispersion.h:20
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:137
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36
Indicates that the query has not yet been launched.
Definition: basespatializedpointcollectorinaabbquery.h:29
Indicates that the query has not yet been initialized.
Definition: basespatializedpointcollectorinaabbquery.h:28
#define KyUInt32MAXVAL
The maximum value that can be stored in the KyUInt32 variable type.
Definition: types.h:226
#define BUILD_REFERENCED_BLOB(blobRef, builder)
Use this macro only in implementations of BaseBlobBuilder::DoBuild().
Definition: baseblobbuilder.h:197