KDIS  2-8-x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Minefield_State_PDU.h
Go to the documentation of this file.
1 /*********************************************************************
2 Copyright 2013 Karl Jones
3 All rights reserved.
4 
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions are met:
7 
8 1. Redistributions of source code must retain the above copyright notice, this
9  list of conditions and the following disclaimer.
10 2. Redistributions in binary form must reproduce the above copyright notice,
11  this list of conditions and the following disclaimer in the documentation
12  and/or other materials provided with the distribution.
13 
14 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
15 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
18 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 
25 For Further Information Please Contact me at
26 Karljj1@yahoo.com
27 http://p.sf.net/kdis/UserGuide
28 *********************************************************************/
29 
30 /********************************************************************
31  class: Minefield_State_PDU
32  DIS: (6) 1278.1a - 1998
33  created: 13/04/2010
34  author: Karl Jones
35 
36  purpose: Provides information about the complete minefield. The minefield presence,
37  perimeter, protocol mode, and the types of mines contained within the minefield.
38 
39  size: 576 bits / 72 octets - Min size
40 *********************************************************************/
41 
42 #pragma once
43 
44 #include "./Minefield_Header.h"
45 #include "./../../DataTypes/EntityType.h"
46 #include "./../../DataTypes/WorldCoordinates.h"
47 #include "./../../DataTypes/EulerAngles.h"
48 #include "./../../DataTypes/MinefieldAppearance.h"
49 #include "./../../DataTypes/PerimeterPointCoordinate.h"
50 #include <vector>
51 
52 namespace KDIS {
53 namespace PDU {
54 
56 {
57 protected:
58 
59  union
60  {
61  struct
62  {
63  KUINT16 m_ui16Reserved : 1;
64  KUINT16 m_ui16SeqNum15 : 15;
65  };
67  } m_SeqNumUnion;
68 
70 
72 
74 
76 
78 
80 
82 
83  union
84  {
85  struct
86  {
87  KUINT16 m_ui16ProtocolMode2 : 2;
88  KUINT16 m_ui16Reserved : 14;
89  };
91  } m_ui16ProtocolModeUnion;
92 
93  std::vector<KDIS::DATA_TYPE::PerimeterPointCoordinate> m_vPoints;
94 
95  std::vector<KDIS::DATA_TYPE::EntityType> m_vMineTypes;
96 
97 public:
98 
99  static const KUINT16 MINEFIELD_STATE_PDU_SIZE = 72; // Min size
100 
102 
103  Minefield_State_PDU( KDataStream & stream ) throw( KException );
104 
105  Minefield_State_PDU( const Header & H, KDataStream & stream ) throw( KException );
106 
110 
111  virtual ~Minefield_State_PDU();
112 
113  //************************************
114  // FullName: KDIS::PDU::Minefield_State_PDU::SetSequenceNumber
115  // KDIS::PDU::Minefield_State_PDU::GetSequenceNumber
116  //!Description: Specifies a change in state of a minefield as a result of a
117  //! change in minefield information or a change in the state,
118  //! in accordance with the rules specified in 5.9.2.3(IEEE 1278.1a).
119  // Parameter: KUINT16 S
120  //************************************
121  void SetSequenceNumber( KUINT16 S );
122  KUINT16 GetSequenceNumber() const;
123 
124  //************************************
125  // FullName: KDIS::PDU::Minefield_State_PDU::SetForceID
126  // KDIS::PDU::Minefield_State_PDU::GetForceID
127  //!Description: Force ID. Enumerated value representing the force the minefield belongs to,
128  //! such as friendly, opposing or neutral.
129  // Parameter: ForceID ID
130  //************************************
131  void SetForceID( KDIS::DATA_TYPE::ENUMS::ForceID ID );
132  KDIS::DATA_TYPE::ENUMS::ForceID GetForceID() const;
133 
134  //************************************
135  // FullName: KDIS::PDU::Minefield_State_PDU::GetNumberOfPerimeterPoints
136  //!Description: Number of points in the perimeter of the minefield.
137  //************************************
138  KUINT8 GetNumberOfPerimeterPoints() const;
139 
140  //************************************
141  // FullName: KDIS::PDU::Minefield_State_PDU::SetMinefieldType
142  // KDIS::PDU::Minefield_State_PDU::GetMinefieldType
143  //!Description: Identifies the minefield type of the issuing minefield.
144  //! Consists of 7 values used to represent the type of minefield.
145  //! Please see DIS Enums document found on the SISO website for a full list of enumerations available.
146  //! See 6.2.30(IEEE 1278.1) and Section 4 of SISO-REF-010.
147  // Parameter: const EntityType & Type
148  //************************************
149  void SetMinefieldType( const KDIS::DATA_TYPE::EntityType & Type );
150  const KDIS::DATA_TYPE::EntityType & GetMinefieldType() const;
151  KDIS::DATA_TYPE::EntityType & GetMinefieldType();
152 
153  //************************************
154  // FullName: KDIS::PDU::Minefield_State_PDU::GetNumberOfMineTypes
155  //!Description: The number of different mine types employed in the minefield.
156  //************************************
157  KUINT8 GetNumberOfMineTypes() const;
158 
159  //************************************
160  // FullName: KDIS::PDU::Minefield_State_PDU::SetMinefieldLocation
161  // KDIS::PDU::Minefield_State_PDU::GetMinefieldLocation
162  //!Description: Location of the center of the minefield in Geocentric world coordinates.
163  //! Note: See KConversions.h for some useful coordinate conversions.
164  // Parameter: const WorldCoordinates & L
165  //************************************
166  void SetMinefieldLocation( const KDIS::DATA_TYPE::WorldCoordinates & L );
167  const KDIS::DATA_TYPE::WorldCoordinates & GetMinefieldLocation() const;
168  KDIS::DATA_TYPE::WorldCoordinates & GetMinefieldLocation();
169 
170  //************************************
171  // FullName: KDIS::PDU::Minefield_State_PDU::SetMinefieldOrientation
172  // KDIS::PDU::Minefield_State_PDU::GetMinefieldOrientation
173  //!Description: Orientation of minefield. Geocentric Euler Angles.
174  //! Note: See KConversions.h for some useful orientation conversions.
175  // Parameter: const EulerAngles & O
176  //************************************
177  void SetMinefieldOrientation( const KDIS::DATA_TYPE::EulerAngles & O );
178  const KDIS::DATA_TYPE::EulerAngles & GetMinefieldOrientation() const;
179  KDIS::DATA_TYPE::EulerAngles & GetMinefieldOrientation();
180 
181  //************************************
182  // FullName: KDIS::PDU::Minefield_State_PDU::SetMinefieldAppearance
183  // KDIS::PDU::Minefield_State_PDU::GetMinefieldAppearance
184  //!Description: The appearance of the minefield.
185  // Parameter: const MinefieldAppearance & MA
186  //************************************
187  void SetMinefieldAppearance( const KDIS::DATA_TYPE::MinefieldAppearance & MA );
188  const KDIS::DATA_TYPE::MinefieldAppearance & GetMinefieldAppearance() const;
189  KDIS::DATA_TYPE::MinefieldAppearance & GetMinefieldAppearance();
190 
191  //************************************
192  // FullName: KDIS::PDU::Minefield_State_PDU::SetMinefieldProtocolMode
193  // KDIS::PDU::Minefield_State_PDU::GetMinefieldProtocolMode
194  //!Description: Specifies which protocol mode is being used to communicate the minefield data.
195  // Parameter: MinefieldProtocolMode MPM
196  //************************************
197  void SetMinefieldProtocolMode( KDIS::DATA_TYPE::ENUMS::MinefieldProtocolMode MPM );
198  KDIS::DATA_TYPE::ENUMS::MinefieldProtocolMode GetMinefieldProtocolMode() const;
199 
200  //************************************
201  // FullName: KDIS::PDU::Minefield_State_PDU::AddPerimeterPointCoordinate
202  // KDIS::PDU::Minefield_State_PDU::SetPerimeterPointCoordinates
203  // KDIS::PDU::Minefield_State_PDU::GetPerimeterPointCoordinates
204  //!Description: Specifies the location of each perimeter point, relative to
205  //! the Minefield Location field.
206  //! Only the x and y coordinates of each perimeter point shall be specified.
207  // Parameter: const PerimeterPointCoordinate & PPC, vector<PerimeterPointCoordinate> & PPC
208  //************************************
209  void AddPerimeterPointCoordinate( const KDIS::DATA_TYPE::PerimeterPointCoordinate & PPC );
210  void SetPerimeterPointCoordinates( const std::vector<KDIS::DATA_TYPE::PerimeterPointCoordinate> & PPC );
211  const std::vector<KDIS::DATA_TYPE::PerimeterPointCoordinate> & GetPerimeterPointCoordinates() const;
212 
213  //************************************
214  // FullName: KDIS::PDU::Minefield_State_PDU::AddMineType
215  // KDIS::PDU::Minefield_State_PDU::SetMineTypes
216  // KDIS::PDU::Minefield_State_PDU::GetMineTypes
217  //!Description: Specifies the type of each mine contained within the minefield.
218  // Parameter: const EntityType & MT, vector<EntityType> & MT
219  //************************************
220  void AddMineType( const KDIS::DATA_TYPE::EntityType & MT );
221  void SetMineTypes( const std::vector<KDIS::DATA_TYPE::EntityType> & MT );
222  const std::vector<KDIS::DATA_TYPE::EntityType> & GetMineTypes() const;
223 
224  //************************************
225  // FullName: KDIS::PDU::Minefield_State_PDU::GetAsString
226  //!Description: Returns a string representation of the PDU.
227  //************************************
228  virtual KString GetAsString() const;
229 
230  //************************************
231  // FullName: KDIS::PDU::Minefield_State_PDU::Decode
232  //!Description: Convert From Network Data.
233  // Parameter: KDataStream & stream
234  // Parameter: bool ignoreHeader = false - Decode the header from the stream?
235  //************************************
236  virtual void Decode( KDataStream & stream, bool ignoreHeader = false ) throw( KException );
237 
238  //************************************
239  // FullName: KDIS::PDU::Minefield_State_PDU::Encode
240  //!Description: Convert To Network Data.
241  // Parameter: KDataStream & stream
242  //************************************
243  virtual KDataStream Encode() const;
244  virtual void Encode( KDataStream & stream ) const;
245 
246  KBOOL operator == ( const Minefield_State_PDU & Value ) const;
247  KBOOL operator != ( const Minefield_State_PDU & Value ) const;
248 };
249 
250 } // END namespace PDU
251 } // END namespace KDIS
Definition: EntityType.h:46
KDIS::DATA_TYPE::WorldCoordinates m_Loc
Definition: Minefield_State_PDU.h:77
unsigned short int KUINT16
Definition: KDefines.h:101
KDIS::DATA_TYPE::EntityType m_MinefieldType
Definition: Minefield_State_PDU.h:73
std::vector< KDIS::DATA_TYPE::EntityType > m_vMineTypes
Definition: Minefield_State_PDU.h:95
KUINT8 m_ui8NumPerimPoints
Definition: Minefield_State_PDU.h:71
Definition: KDefines.h:182
Definition: KDataStream.h:48
Definition: WorldCoordinates.h:52
KUINT8 m_ui8ForceID
Definition: Minefield_State_PDU.h:69
KDIS::DATA_TYPE::EulerAngles m_Ori
Definition: Minefield_State_PDU.h:79
bool KBOOL
Definition: KDefines.h:119
Definition: Minefield_Header.h:49
Definition: EulerAngles.h:46
KUINT16 m_ui16ProtocolMode16
Definition: Minefield_State_PDU.h:90
std::string KString
Definition: KDefines.h:116
KUINT16 m_ui16SeqNum
Definition: Minefield_State_PDU.h:66
Definition: EntityIdentifier.h:49
std::vector< KDIS::DATA_TYPE::PerimeterPointCoordinate > m_vPoints
Definition: Minefield_State_PDU.h:93
KUINT16 m_ui16NumMineTypes
Definition: Minefield_State_PDU.h:75
Definition: Minefield_State_PDU.h:55
ForceID
Definition: EnumEntityInfoInteraction.h:886
Definition: Header7.h:142
unsigned char KUINT8
Definition: KDefines.h:99
KDIS::DATA_TYPE::MinefieldAppearance m_App
Definition: Minefield_State_PDU.h:81
#define KDIS_EXPORT
Definition: KDefines.h:82
Definition: MinefieldAppearance.h:46
MinefieldProtocolMode
Definition: EnumMinefield.h:73
Definition: PerimeterPointCoordinate.h:46