KDIS  2-8-x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Collision_Elastic_PDU.h
Go to the documentation of this file.
1 /*********************************************************************
2 
3 Copyright 2013 Karl Jones
4 All rights reserved.
5 
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
8 
9 1. Redistributions of source code must retain the above copyright notice, this
10  list of conditions and the following disclaimer.
11 2. Redistributions in binary form must reproduce the above copyright notice,
12  this list of conditions and the following disclaimer in the documentation
13  and/or other materials provided with the distribution.
14 
15 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
19 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 
26 For Further Information Please Contact me at
27 Karljj1@yahoo.com
28 http://p.sf.net/kdis/UserGuide
29 *********************************************************************/
30 
31 /********************************************************************
32  class: Collision_Elastic_PDU
33  DIS: (6) 1278.1A - 1998
34  created: 08/11/2008
35  author: Karl Jones
36 
37  purpose: The Collision-Elastic PDU is a member of a commercially
38  available set of Newtonian Protocols and in that protocol
39  set is named the Newtonian Collision PDU.
40  The Newtonian Protocol provides a mechanism for introducing
41  high fidelity interactions in DIS exercises.
42 
43  Size: 800 bits / 100 octets
44 *********************************************************************/
45 
46 #pragma once
47 
48 #include "./../Header.h"
49 #include "./../../DataTypes/EntityIdentifier.h"
50 #include "./../../DataTypes/Vector.h"
51 
52 namespace KDIS {
53 namespace PDU {
54 
57 
59 {
60 protected:
61 
63 
65 
67 
69 
71 
73 
75 
77 
79 
81 
83 
85 
87 
89 
91 
92 public:
93 
94  static const KUINT16 COLLISION_ELASTIC_PDU_SIZE = 100;
95 
97 
98  Collision_Elastic_PDU( KDataStream & stream ) throw( KException );
99 
100  Collision_Elastic_PDU( const Header & H, KDataStream & stream ) throw( KException );
101 
102  virtual ~Collision_Elastic_PDU();
103 
104  //************************************
105  // FullName: KDIS::PDU::Collision_Elastic_PDU::SetIssuingEntityID
106  // KDIS::PDU::Collision_Elastic_PDU::GetIssuingEntityID
107  //!Description: Entity Issuing the collision
108  // Parameter: const EntityIdentifier & ID
109  //************************************
110  void SetIssuingEntityID( const KDIS::DATA_TYPE::EntityIdentifier & ID );
111  const KDIS::DATA_TYPE::EntityIdentifier & GetIssuingEntityID() const;
112  KDIS::DATA_TYPE::EntityIdentifier & GetIssuingEntityID();
113 
114  //************************************
115  // FullName: KDIS::PDU::Collision_Elastic_PDU::SetCollidingEntityID
116  // KDIS::PDU::Collision_Elastic_PDU::GetCollidingEntityID
117  //!Description: Entity that has collided with the issuing entity
118  //! If collision is with terrain or unknown entity
119  //! the id will be ENTITY_ID_UNKNOWN
120  // Parameter: const EntityIdentifier & ID
121  //************************************
122  void SetCollidingEntityID( const KDIS::DATA_TYPE::EntityIdentifier & ID );
123  const KDIS::DATA_TYPE::EntityIdentifier & GetCollidingEntityID() const;
124  KDIS::DATA_TYPE::EntityIdentifier & GetCollidingEntityID();
125 
126  //************************************
127  // FullName: KDIS::PDU::Collision_Elastic_PDU::SetEventID
128  // KDIS::PDU::Collision_Elastic_PDU::GetEventID
129  //!Description: ID generated to associate related collision events
130  //! to this one.
131  // Parameter: const EntityIdentifier & ID
132  //************************************
133  void SetEventID( const KDIS::DATA_TYPE::EntityIdentifier & ID );
134  const KDIS::DATA_TYPE::EntityIdentifier & GetEventID() const;
135  KDIS::DATA_TYPE::EntityIdentifier & GetEventID();
136 
137  //************************************
138  // FullName: KDIS::PDU::Collision_Elastic_PDU::SetContactVelocity
139  // KDIS::PDU::Collision_Elastic_PDU::GetContactVelocity
140  //!Description: Velocity at the time collision is detected at the point the
141  //! collision is detected.
142  //! Linear Velocity Vector.
143  // Parameter: const Vector & V
144  //************************************
145  void SetContactVelocity( const KDIS::DATA_TYPE::Vector & V );
146  const KDIS::DATA_TYPE::Vector & GetContactVelocity() const;
147  KDIS::DATA_TYPE::Vector & GetContactVelocity();
148 
149  //************************************
150  // FullName: KDIS::PDU::Collision_Elastic_PDU::SetMass
151  // KDIS::PDU::Collision_Elastic_PDU::GetMass
152  //!Description: Issuing entity mass in kilograms
153  // Parameter: KFLOAT32 M
154  //************************************
155  void SetMass( KFLOAT32 M );
156  KFLOAT32 GetMass() const;
157 
158  //************************************
159  // FullName: KDIS::PDU::Collision_Elastic_PDU::SetLocation
160  // KDIS::PDU::Collision_Elastic_PDU::GetLocation
161  //!Description: Location of collision with respect to the
162  //! issuing entity. Represented by an
163  //! Entity Coordinate Vector.
164  // Parameter: const Vector & L
165  //************************************
166  void SetLocation( const KDIS::DATA_TYPE::Vector & L );
167  const KDIS::DATA_TYPE::Vector & GetLocation() const;
168  KDIS::DATA_TYPE::Vector & GetLocation();
169 
170  //************************************
171  // FullName: KDIS::PDU::Collision_Elastic_PDU::SetCollisionIntermediateResult
172  // KDIS::PDU::Collision_Elastic_PDU::GetCollisionIntermediateResult
173  //!Description: Collision intermediate result. Theese six records represent
174  //! the six independent components of a positive semi-definite matrix
175  //! formed by pre-multiplying and post-multiplying the tensor inertia, by
176  //! the antisymmetric matrix generated by the moment arm.
177  // Parameter: KFLOAT32 CIR, void
178  //************************************
179  void SetCollisionIntermediateResultXX( KFLOAT32 CIR );
180  void SetCollisionIntermediateResultXY( KFLOAT32 CIR );
181  void SetCollisionIntermediateResultXZ( KFLOAT32 CIR );
182  void SetCollisionIntermediateResultYY( KFLOAT32 CIR );
183  void SetCollisionIntermediateResultYZ( KFLOAT32 CIR );
184  void SetCollisionIntermediateResultZZ( KFLOAT32 CIR );
185  KFLOAT32 GetCollisionIntermediateResultXX() const;
186  KFLOAT32 GetCollisionIntermediateResultXY() const;
187  KFLOAT32 GetCollisionIntermediateResultXZ() const;
188  KFLOAT32 GetCollisionIntermediateResultYY() const;
189  KFLOAT32 GetCollisionIntermediateResultYZ() const;
190  KFLOAT32 GetCollisionIntermediateResultZZ() const;
191  void SetCollisionIntermediateResult( KFLOAT32 XX, KFLOAT32 XY, KFLOAT32 XZ,
192  KFLOAT32 YY, KFLOAT32 YZ, KFLOAT32 ZZ );
193 
194  //************************************
195  // FullName: KDIS::PDU::Collision_Elastic_PDU::SetUnitSurfaceNormal
196  // KDIS::PDU::Collision_Elastic_PDU::GetUnitSurfaceNormal
197  //!Description: Normal vector to the surface at the point
198  //! of collision detection. Represented in world coordinates.
199  //! Vector type = Entity Coordinate Vector.
200  // Parameter: const Vector & USN
201  //************************************
202  void SetUnitSurfaceNormal( const KDIS::DATA_TYPE::Vector & USN );
203  const KDIS::DATA_TYPE::Vector & GetUnitSurfaceNormal() const;
204  KDIS::DATA_TYPE::Vector & GetUnitSurfaceNormal();
205 
206  //************************************
207  // FullName: KDIS::PDU::Collision_Elastic_PDU::SetCoefficientOfRestitution
208  // KDIS::PDU::Collision_Elastic_PDU::GetCoefficientOfRestitution
209  //!Description: Represents the degree to which energy is conserved
210  //! in addition represents a free parameter which developers
211  //! may tune their collision interactions.
212  // Parameter: KFLOAT32 COR
213  //************************************
214  void SetCoefficientOfRestitution( KFLOAT32 COR );
215  KFLOAT32 GetCoefficientOfRestitution() const;
216 
217  //************************************
218  // FullName: KDIS::PDU::Collision_Elastic_PDU::GetAsString
219  //!Description: Returns a string representation of the PDU.
220  //************************************
221  virtual KString GetAsString() const;
222 
223  //************************************
224  // FullName: KDIS::PDU::Collision_Elastic_PDU::Decode
225  //!Description: Convert From Network Data.
226  // Parameter: KDataStream & stream
227  // Parameter: bool ignoreHeader = false - Decode the header from the stream?
228  //************************************
229  virtual void Decode( KDataStream & stream, bool ignoreHeader = false ) throw( KException );
230 
231  //************************************
232  // FullName: KDIS::PDU::Collision_Elastic_PDU::Encode
233  //!Description: Convert To Network Data.
234  // Parameter: KDataStream & stream
235  //************************************
236  virtual KDataStream Encode() const;
237  virtual void Encode( KDataStream & stream ) const;
238 
239  KBOOL operator == ( const Collision_Elastic_PDU & Value ) const;
240  KBOOL operator != ( const Collision_Elastic_PDU & Value ) const;
241 };
242 
243 } // END namespace PDU
244 } // END namespace KDIS
KFLOAT32 m_f32CIRXZ
Definition: Collision_Elastic_PDU.h:80
KFLOAT32 m_f32CIRXX
Definition: Collision_Elastic_PDU.h:76
KFLOAT32 m_f32CIRXY
Definition: Collision_Elastic_PDU.h:78
unsigned short int KUINT16
Definition: KDefines.h:101
float KFLOAT32
Definition: KDefines.h:113
KFLOAT32 m_f32Mass
Definition: Collision_Elastic_PDU.h:72
KFLOAT32 m_f32CIRYZ
Definition: Collision_Elastic_PDU.h:84
KDIS::DATA_TYPE::EntityIdentifier m_EventID
Definition: Collision_Elastic_PDU.h:66
KFLOAT32 m_f32COR
Definition: Collision_Elastic_PDU.h:90
Definition: Vector.h:71
KDIS::DATA_TYPE::Vector m_UnitSurfaceNormal
Definition: Collision_Elastic_PDU.h:88
Definition: KDefines.h:182
KDIS::DATA_TYPE::EntityIdentifier m_IssuingEntityID
Definition: Collision_Elastic_PDU.h:62
Definition: KDataStream.h:48
bool KBOOL
Definition: KDefines.h:119
KDIS::DATA_TYPE::Vector m_Location
Definition: Collision_Elastic_PDU.h:74
KDIS::DATA_TYPE::Vector m_ContactVelocity
Definition: Collision_Elastic_PDU.h:70
std::string KString
Definition: KDefines.h:116
Definition: EntityIdentifier.h:49
KUINT16 m_ui16Padding1
Definition: Collision_Elastic_PDU.h:68
Definition: Collision_Elastic_PDU.h:58
KFLOAT32 m_f32CIRZZ
Definition: Collision_Elastic_PDU.h:86
KDIS::DATA_TYPE::EntityIdentifier m_CollidingEntityID
Definition: Collision_Elastic_PDU.h:64
Definition: Header7.h:142
#define KDIS_EXPORT
Definition: KDefines.h:82
KFLOAT32 m_f32CIRYY
Definition: Collision_Elastic_PDU.h:82