A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Portuguese
Docs ▼
Wiki
Manual
Models
Develop ▼
API
Bugs
API
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
hierarchical-mobility-model.cc
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2007 INRIA
4
*
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License version 2 as
7
* published by the Free Software Foundation;
8
*
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
*
18
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
19
*/
20
#include "
hierarchical-mobility-model.h
"
21
#include "ns3/pointer.h"
22
23
namespace
ns3 {
24
25
NS_OBJECT_ENSURE_REGISTERED
(HierarchicalMobilityModel)
26
;
27
28
TypeId
29
HierarchicalMobilityModel::GetTypeId
(
void
)
30
{
31
static
TypeId
tid =
TypeId
(
"ns3::HierarchicalMobilityModel"
)
32
.
SetParent
<
MobilityModel
> ()
33
.AddConstructor<HierarchicalMobilityModel> ()
34
.AddAttribute (
"Child"
,
"The child mobility model."
,
35
PointerValue
(),
36
MakePointerAccessor (&
HierarchicalMobilityModel::SetChild
,
37
&
HierarchicalMobilityModel::GetChild
),
38
MakePointerChecker<MobilityModel> ())
39
.AddAttribute (
"Parent"
,
"The parent mobility model."
,
40
PointerValue
(),
41
MakePointerAccessor (&
HierarchicalMobilityModel::SetParent
,
42
&
HierarchicalMobilityModel::GetParent
),
43
MakePointerChecker<MobilityModel> ())
44
;
45
return
tid;
46
}
47
48
HierarchicalMobilityModel::HierarchicalMobilityModel
()
49
: m_child (0),
50
m_parent (0)
51
{
52
}
53
54
void
55
HierarchicalMobilityModel::SetChild
(
Ptr<MobilityModel>
model)
56
{
57
Ptr<MobilityModel>
oldChild =
m_child
;
58
Vector
pos;
59
if
(
m_child
)
60
{
61
pos =
GetPosition
();
62
m_child
->
TraceDisconnectWithoutContext
(
"CourseChange"
,
MakeCallback
(&
HierarchicalMobilityModel::ChildChanged
,
this
));
63
}
64
m_child
= model;
65
m_child
->
TraceConnectWithoutContext
(
"CourseChange"
,
MakeCallback
(&
HierarchicalMobilityModel::ChildChanged
,
this
));
66
67
// if we had a child before, then we had a valid position before;
68
// try to preserve the old absolute position.
69
if
(oldChild)
70
{
71
SetPosition
(pos);
72
}
73
}
74
75
void
76
HierarchicalMobilityModel::SetParent
(
Ptr<MobilityModel>
model)
77
{
78
Vector
pos;
79
if
(
m_child
)
80
{
81
pos =
GetPosition
();
82
}
83
if
(
m_parent
)
84
{
85
m_parent
->
TraceDisconnectWithoutContext
(
"CourseChange"
,
MakeCallback
(&
HierarchicalMobilityModel::ParentChanged
,
this
));
86
}
87
m_parent
= model;
88
if
(
m_parent
)
89
{
90
m_parent
->
TraceConnectWithoutContext
(
"CourseChange"
,
MakeCallback
(&
HierarchicalMobilityModel::ParentChanged
,
this
));
91
}
92
// try to preserve the old position across parent changes
93
if
(
m_child
)
94
{
95
SetPosition
(pos);
96
}
97
}
98
99
100
Ptr<MobilityModel>
101
HierarchicalMobilityModel::GetChild
(
void
)
const
102
{
103
return
m_child
;
104
}
105
106
Ptr<MobilityModel>
107
HierarchicalMobilityModel::GetParent
(
void
)
const
108
{
109
return
m_parent
;
110
}
111
112
Vector
113
HierarchicalMobilityModel::DoGetPosition
(
void
)
const
114
{
115
if
(!
m_parent
)
116
{
117
return
m_child
->
GetPosition
();
118
}
119
Vector
parentPosition =
m_parent
->
GetPosition
();
120
Vector
childPosition =
m_child
->
GetPosition
();
121
return
Vector
(parentPosition.
x
+ childPosition.
x
,
122
parentPosition.
y
+ childPosition.
y
,
123
parentPosition.
z
+ childPosition.
z
);
124
}
125
void
126
HierarchicalMobilityModel::DoSetPosition
(
const
Vector
&position)
127
{
128
if
(
m_child
== 0)
129
{
130
return
;
131
}
132
// This implementation of DoSetPosition is really an arbitraty choice.
133
// anything else would have been ok.
134
if
(
m_parent
)
135
{
136
Vector
parentPosition =
m_parent
->
GetPosition
();
137
Vector
childPosition (position.
x
- parentPosition.
x
,
138
position.
y
- parentPosition.
y
,
139
position.
z
- parentPosition.
z
);
140
m_child
->
SetPosition
(childPosition);
141
}
142
else
143
{
144
m_child
->
SetPosition
(position);
145
}
146
}
147
Vector
148
HierarchicalMobilityModel::DoGetVelocity
(
void
)
const
149
{
150
if
(
m_parent
)
151
{
152
Vector
parentSpeed =
m_parent
->
GetVelocity
();
153
Vector
childSpeed =
m_child
->
GetVelocity
();
154
Vector
speed (parentSpeed.
x
+ childSpeed.
x
,
155
parentSpeed.
y
+ childSpeed.
y
,
156
parentSpeed.
z
+ childSpeed.
z
);
157
return
speed;
158
}
159
else
160
{
161
return
m_child
->
GetVelocity
();
162
}
163
}
164
165
void
166
HierarchicalMobilityModel::ParentChanged
(
Ptr<const MobilityModel>
model)
167
{
168
MobilityModel::NotifyCourseChange
();
169
}
170
171
void
172
HierarchicalMobilityModel::ChildChanged
(
Ptr<const MobilityModel>
model)
173
{
174
MobilityModel::NotifyCourseChange
();
175
}
176
177
178
179
}
// namespace ns3
ns3::HierarchicalMobilityModel::DoGetVelocity
virtual Vector DoGetVelocity(void) const
Definition:
hierarchical-mobility-model.cc:148
ns3::Vector3D::x
double x
x coordinate of vector
Definition:
vector.h:49
ns3::Ptr< MobilityModel >
ns3::NS_OBJECT_ENSURE_REGISTERED
NS_OBJECT_ENSURE_REGISTERED(NullMessageSimulatorImpl)
ns3::MobilityModel::GetPosition
Vector GetPosition(void) const
Definition:
mobility-model.cc:63
hierarchical-mobility-model.h
ns3::Vector3D
a 3d vector
Definition:
vector.h:31
ns3::MobilityModel::GetVelocity
Vector GetVelocity(void) const
Definition:
mobility-model.cc:68
ns3::HierarchicalMobilityModel::HierarchicalMobilityModel
HierarchicalMobilityModel()
Definition:
hierarchical-mobility-model.cc:48
ns3::MobilityModel
Keep track of the current position and velocity of an object.
Definition:
mobility-model.h:39
ns3::HierarchicalMobilityModel::m_child
Ptr< MobilityModel > m_child
Definition:
hierarchical-mobility-model.h:104
ns3::HierarchicalMobilityModel::m_parent
Ptr< MobilityModel > m_parent
Definition:
hierarchical-mobility-model.h:105
ns3::HierarchicalMobilityModel::GetParent
Ptr< MobilityModel > GetParent(void) const
Definition:
hierarchical-mobility-model.cc:107
ns3::MobilityModel::NotifyCourseChange
void NotifyCourseChange(void) const
Must be invoked by subclasses when the course of the position changes to notify course change listene...
Definition:
mobility-model.cc:97
ns3::Vector
Vector3D Vector
Definition:
vector.h:118
ns3::ObjectBase::TraceDisconnectWithoutContext
bool TraceDisconnectWithoutContext(std::string name, const CallbackBase &cb)
Definition:
object-base.cc:295
ns3::MakeCallback
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
Definition:
callback.h:1238
ns3::HierarchicalMobilityModel::SetChild
void SetChild(Ptr< MobilityModel > model)
Sets the child mobility model to a new one.
Definition:
hierarchical-mobility-model.cc:55
ns3::HierarchicalMobilityModel::GetChild
Ptr< MobilityModel > GetChild(void) const
Definition:
hierarchical-mobility-model.cc:101
ns3::ObjectBase::TraceConnectWithoutContext
bool TraceConnectWithoutContext(std::string name, const CallbackBase &cb)
Definition:
object-base.cc:269
ns3::PointerValue
hold objects of type Ptr
Definition:
pointer.h:33
ns3::HierarchicalMobilityModel::SetParent
void SetParent(Ptr< MobilityModel > model)
Sets the parent mobility model to a new one.
Definition:
hierarchical-mobility-model.cc:76
ns3::HierarchicalMobilityModel::DoGetPosition
virtual Vector DoGetPosition(void) const
Definition:
hierarchical-mobility-model.cc:113
ns3::HierarchicalMobilityModel::DoSetPosition
virtual void DoSetPosition(const Vector &position)
Definition:
hierarchical-mobility-model.cc:126
ns3::Vector3D::y
double y
y coordinate of vector
Definition:
vector.h:53
ns3::MobilityModel::SetPosition
void SetPosition(const Vector &position)
Definition:
mobility-model.cc:74
ns3::HierarchicalMobilityModel::ChildChanged
void ChildChanged(Ptr< const MobilityModel > model)
Definition:
hierarchical-mobility-model.cc:172
ns3::HierarchicalMobilityModel::ParentChanged
void ParentChanged(Ptr< const MobilityModel > model)
Definition:
hierarchical-mobility-model.cc:166
ns3::TypeId
a unique identifier for an interface.
Definition:
type-id.h:49
ns3::HierarchicalMobilityModel::GetTypeId
static TypeId GetTypeId(void)
Definition:
hierarchical-mobility-model.cc:29
ns3::TypeId::SetParent
TypeId SetParent(TypeId tid)
Definition:
type-id.cc:611
ns3::Vector3D::z
double z
z coordinate of vector
Definition:
vector.h:57
src
mobility
model
hierarchical-mobility-model.cc
Generated on Sat Apr 19 2014 14:07:04 for ns-3 by
1.8.6