WSF
WsfPM_Zone.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2003-2015 The Boeing Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11// ****************************************************************************
12// Updated by Infoscitex, a DCS Company.
13// ****************************************************************************
14
15#ifndef WSFPM_ZONE_HPP
16#define WSFPM_ZONE_HPP
17
18#include "wsf_parser_export.h"
19
20#include <map>
21#include <set>
22#include <string>
23#include <type_traits>
24
25#include "UtColor.hpp"
26#include "UtOptional.hpp"
27#include "UtVec2.hpp"
28#include "WsfPM_ObjectList.hpp"
29#include "WsfPM_ObjectMap.hpp"
30#include "WsfPProxyNode.hpp"
31
32class WSF_PARSER_EXPORT WsfPM_ZonePoint : public WsfPProxyNode
33{
34public:
36 : WsfPProxyNode(aNode)
37 {
38 }
40
41 WsfProxy::Latitude Latitude() const;
42 WsfProxy::Longitude Longitude() const;
43 WsfProxy::Length2 GetPoint() const;
44 WsfProxy::String MGRS() const;
45 WsfProxy::Length Range() const;
46 WsfProxy::Angle Bearing() const;
47
48 double GetX() const;
49 double GetY() const;
50};
51
53class WsfPM_Platform;
54class WsfPM_ZoneSet;
55
56class WSF_PARSER_EXPORT WsfPM_Zone : public WsfPProxyNode
57{
58public:
59 using Point = UtVec2d;
67 : WsfPProxyNode(aNode)
68 {
69 }
70
71 bool IsDefinition() const
72 {
73 const WsfPProxyType* typePtr = GetValue().GetType();
74 return (typePtr && typePtr->mTypeName == "ZoneDefinition");
75 }
76 bool IsZoneSet() const
77 {
78 const WsfPProxyType* typePtr = GetValue().GetType();
79 return (typePtr && typePtr->mTypeName == "ZoneSet");
80 }
81 bool Rename(std::string aNewName);
82 WsfPM_Zone GetSourceZone() const;
83
85 std::string ParentPlatform() const;
86
88 WsfPM_Platform ParentPlatformNode() const;
89
91 std::vector<WsfPM_Zone> GetReferencingZones() const;
92
94 std::vector<WsfPM_ZoneSet> GetUsingZoneSets() const;
95
96 virtual ut::optional<UtColor> GetFillColor() const;
97 virtual ut::optional<UtColor> GetLineColor() const;
98};
99class WSF_PARSER_EXPORT WsfPM_ZoneDefinition : public WsfPM_Zone
100{
101public:
104 : WsfPM_Zone(aNode)
105 {
106 }
107
116
118 DefinitionType GetDefinitionType() const;
119
121 {
122 GetValue().GetAttr("type").SetIntegerValue(static_cast<int>(aType));
124 }
125
128 WsfProxy::Length MinimumAltitude() const;
129
132 WsfProxy::Length MaximumAltitude() const;
133
136 WsfProxy::Length MinimumRadius() const;
137
140 WsfProxy::Length MaximumRadius() const;
141
144 WsfProxy::Length LongitudinalAxis() const;
145
148 WsfProxy::Length LateralAxis() const;
149
152 WsfProxy::Angle StartAngle() const;
153
156 WsfProxy::Angle StopAngle() const;
157
158
160 bool UseLatLon() const;
161
163 bool UseMGRS() const;
164
166 bool UsePolar() const;
167
169 bool UseOffset() const;
170
173 bool IsAbsolute() const;
174
178 WsfProxy::Angle Heading() const noexcept;
179
182 WsfPProxyNode HeadingNode() const noexcept;
183
187 WsfProxy::Position Position() const noexcept;
188
191 WsfPProxyNode PositionNode() const noexcept;
192
193
195 std::string ReferencePlatform() const;
196
198 std::string ReferenceZone() const;
199
201 bool Negative() const;
202
203 using AuxDataMap = std::map<std::string, std::string>;
204 AuxDataMap AuxData() const;
205
207 std::vector<WsfPM_Zone::Point> Points() const;
208
212 WsfPM_Zone::Point GetPoint(size_t aIndex) const;
213
217 WsfPM_ZonePoint GetPointNode(size_t aIndex) const;
218
220 size_t PointCount() const;
221
222
226
232 bool ReferencePoint(double& aX, double& aY, bool& aIsLatLon) const;
233
238 bool ReferencePoint(double& aX, double& aY) const
239 {
240 bool _;
241 return ReferencePoint(aX, aY, _);
242 }
243
246 ut::optional<WsfPM_Zone::Point> ReferencePoint() const;
247
249 WsfPM_ZoneDefinition ReferenceZoneNode() const;
250
252 WsfPM_Platform AnchorPlatformNode() const;
253
255 WsfPM_Platform ReferencePlatformNode() const;
256
258 WsfProxy::Length AnchorPlatformAltitude() const;
259
260 bool IsReferencePlatformValid() const;
261
262 ut::optional<UtColor> GetFillColor() const override;
263
264 ut::optional<UtColor> GetLineColor() const override;
265
266private:
267 template<typename BASIC_VALUE>
268 BASIC_VALUE GetZoneAttr(const std::string& aAttrName, std::set<std::string>& aRefStack) const;
269
270 ut::optional<UtColor> GetColorAttr(const std::string& aAttrName, std::set<std::string>& aRefStack) const;
271
272 WsfPM_ZoneDefinition PointsDefNode(std::set<std::string>& aRefStack) const;
273};
274
275template class WSF_PARSER_EXPORT WsfPM_ObjectList<WsfPM_ZoneDefinition>;
277
278class WSF_PARSER_EXPORT WsfPM_ZoneSet : public WsfPM_Zone
279{
280public:
282 : WsfPM_Zone()
283 {
284 }
286 : WsfPM_Zone(aNode)
287 {
288 }
289
290 // list of zone names...
291 WsfPM_List InclusionZones() const { return *this + "inclusionZones"; }
292 WsfPM_List ExclusionZones() const { return *this + "exclusionZones"; }
293 WsfPM_ZoneDefinitionList EmbeddedInclusionZones() const { return *this + "embeddedInclusionZones"; }
294 WsfPM_ZoneDefinitionList EmbeddedExclusionZones() const { return *this + "embeddedExclusionZones"; }
295};
296
298
299#endif
WsfPM_ObjectList< WsfPM_ZoneDefinition > WsfPM_ZoneDefinitionList
Definition WsfPM_Zone.hpp:276
WsfPM_ObjectMapT< WsfPM_Zone > WsfPM_ZoneMap
Definition WsfPM_Zone.hpp:297
WsfPM_ObjectList< WsfPM_ZonePoint > WsfPM_ZonePointList
Definition WsfPM_Zone.hpp:52
Definition WsfPM_ObjectList.hpp:24
Definition WsfPM_ObjectList.hpp:53
Definition WsfPM_ObjectMap.hpp:88
Definition WsfPM_Platform.hpp:34
Definition WsfPM_Zone.hpp:100
AuxDataMap AuxData() const
Definition WsfPM_Zone.cpp:153
void SetDefinitionType(DefinitionType aType)
Definition WsfPM_Zone.hpp:120
WsfPM_Zone::Point GetPoint(size_t aIndex) const
Returns the point at the given index. If there is no point at this index, returns an empty instance.
Definition WsfPM_Zone.cpp:275
size_t PointCount() const
Returns the number of points on this polygonal zone.
Definition WsfPM_Zone.cpp:679
std::map< std::string, std::string > AuxDataMap
Definition WsfPM_Zone.hpp:203
std::vector< WsfPM_Zone::Point > Points() const
Returns the points that define this polygonal zone.
Definition WsfPM_Zone.cpp:176
WsfPM_ZonePointList PointList() const
Returns a list of zone point proxy nodes on this poygonal zone node. If none are defined for this zon...
Definition WsfPM_Zone.cpp:737
bool ReferencePoint(double &aX, double &aY, bool &aIsLatLon) const
Calculates the reference point for a relative zone defined using absolute coordinates.
Definition WsfPM_Zone.cpp:530
WsfPM_ZoneDefinition(const WsfPProxyNode &aNode)
Definition WsfPM_Zone.hpp:103
WsfPM_ZoneDefinition()
Definition WsfPM_Zone.hpp:102
WsfPM_ZonePoint GetPointNode(size_t aIndex) const
Returns the point proxy node at the given index. If there is no point at this index,...
Definition WsfPM_Zone.cpp:111
DefinitionType
Definition WsfPM_Zone.hpp:109
@ cCIRCULAR
Definition WsfPM_Zone.hpp:111
@ cELLIPTICAL
Definition WsfPM_Zone.hpp:112
@ cTYPE_NOT_SET
Definition WsfPM_Zone.hpp:110
@ cPOLYGONAL
Definition WsfPM_Zone.hpp:113
@ cSPHERICAL
Definition WsfPM_Zone.hpp:114
Definition WsfPM_Zone.hpp:33
WsfPM_ZonePoint(const WsfPProxyNode &aNode)
Definition WsfPM_Zone.hpp:35
WsfPM_ZonePoint()
Definition WsfPM_Zone.hpp:39
Definition WsfPM_Zone.hpp:279
WsfPM_List InclusionZones() const
Definition WsfPM_Zone.hpp:291
WsfPM_ZoneSet()
Definition WsfPM_Zone.hpp:281
WsfPM_ZoneSet(const WsfPProxyNode &aNode)
Definition WsfPM_Zone.hpp:285
WsfPM_ZoneDefinitionList EmbeddedExclusionZones() const
Definition WsfPM_Zone.hpp:294
WsfPM_ZoneDefinitionList EmbeddedInclusionZones() const
Definition WsfPM_Zone.hpp:293
WsfPM_List ExclusionZones() const
Definition WsfPM_Zone.hpp:292
Definition WsfPM_Zone.hpp:57
ZoneType
Definition WsfPM_Zone.hpp:61
@ cZONE_SET
Definition WsfPM_Zone.hpp:62
@ cZONE_DEFINITION
Definition WsfPM_Zone.hpp:63
WsfPM_Zone()
Definition WsfPM_Zone.hpp:65
bool IsZoneSet() const
Definition WsfPM_Zone.hpp:76
UtVec2d Point
Definition WsfPM_Zone.hpp:59
bool IsDefinition() const
Definition WsfPM_Zone.hpp:71
WsfPM_Zone(const WsfPProxyNode &aNode)
Definition WsfPM_Zone.hpp:66
Definition WsfPProxyNode.hpp:60
void NotifyAttributeChanged(const char *aAttributeName) const
Definition WsfPProxyNode.cpp:807
WsfPProxyValue GetValue() const
Definition WsfPProxyNode.cpp:79
WsfPProxyNode()
Definition WsfPProxyNode.cpp:24
Definition WsfPProxyType.hpp:37
std::string mTypeName
Definition WsfPProxyType.hpp:59
void SetIntegerValue(int aValue)
Definition WsfPProxyValue.cpp:348
const WsfPProxyType * GetType() const
Definition WsfPProxyValue.hpp:61
WsfPProxyValue GetAttr(const WsfPProxyKey &aEntry) const
Definition WsfPProxyValue.hpp:62
Definition WsfPProxyBasicValues.hpp:167
Definition WsfPProxyBasicValues.hpp:478
Definition WsfPProxyBasicValues.hpp:41
NumericValueT< UtLonPos, WsfProxy::cLONGITUDE_VALUE > Longitude
Definition WsfPProxyBasicValues.hpp:411
NumericUnitaryValueT< UtLengthValue, WsfProxy::cLENGTH_VALUE > Length
Definition WsfPProxyBasicValues.hpp:413
NumericValueT< UtLatPos, WsfProxy::cLATITUDE_VALUE > Latitude
Definition WsfPProxyBasicValues.hpp:409
NumericUnitaryValueT< UtAngleValue, WsfProxy::cANGLE_VALUE > Angle
Definition WsfPProxyBasicValues.hpp:445
Template specialization for wsf::comm::Address. Allows usage of Address in std::unordered_map/set.
Definition WsfCommAddress.hpp:185
Copyrights Multiple, All Rights Reserved