Panda3D
panda
src
ode
odeJoint.cxx
Go to the documentation of this file.
1
/**
2
* PANDA 3D SOFTWARE
3
* Copyright (c) Carnegie Mellon University. All rights reserved.
4
*
5
* All use of this software is subject to the terms of the revised BSD
6
* license. You should have received a copy of this license along
7
* with this source code in a file named "LICENSE."
8
*
9
* @file odeJoint.cxx
10
* @author joswilso
11
* @date 2006-12-27
12
*/
13
14
#include "
config_ode.h
"
15
#include "
odeJoint.h
"
16
#include "
odeBallJoint.h
"
17
#include "
odeHingeJoint.h
"
18
#include "
odeHinge2Joint.h
"
19
#include "
odeSliderJoint.h
"
20
#include "
odeContactJoint.h
"
21
#include "
odeUniversalJoint.h
"
22
#include "
odeFixedJoint.h
"
23
#include "
odeNullJoint.h
"
24
#include "
odePlane2dJoint.h
"
25
#include "
odeAMotorJoint.h
"
26
#include "
odeLMotorJoint.h
"
27
#include "
odeBody.h
"
28
29
TypeHandle
OdeJoint::_type_handle;
30
31
OdeJoint::
32
OdeJoint() :
33
_id(nullptr) {
34
if
(odejoint_cat.is_debug()) {
35
std::ostream &out = odejoint_cat.debug();
36
out << get_type() <<
"("
<< _id <<
")\n"
;
37
}
38
}
39
40
OdeJoint::
41
OdeJoint(dJointID
id
) :
42
_id(id) {
43
if
(odejoint_cat.is_debug()) {
44
std::ostream &out = odejoint_cat.debug();
45
out << get_type() <<
"("
<< _id <<
")\n"
;
46
}
47
}
48
49
OdeJoint::
50
~OdeJoint() {
51
}
52
53
void
OdeJoint::
54
destroy() {
55
nassertv(_id);
56
dJointDestroy(_id);
57
}
58
59
/**
60
* Attaches two OdeBody objects to this joint. Order is important. Consider
61
* using the OdeJoint::attach extension function if you're using the Python
62
* interface.
63
*/
64
void
OdeJoint::
65
attach_bodies
(
const
OdeBody
&body1,
const
OdeBody
&body2) {
66
nassertv(_id);
67
nassertv(body1.
get_id
() !=
nullptr
|| body2.
get_id
() !=
nullptr
);
68
dJointAttach(_id, body1.
get_id
(), body2.
get_id
());
69
}
70
71
/**
72
* Attaches a single OdeBody to this joint at the specified index (0 or 1).
73
* The other index will be set to the environment (null). Consider using the
74
* OdeJoint::attach extension function if you're using the Python interface.
75
*/
76
void
OdeJoint::
77
attach_body
(
const
OdeBody
&body,
int
index) {
78
nassertv(_id);
79
nassertv(body.
get_id
() !=
nullptr
);
80
nassertv(index == 0 || index == 1);
81
if
(index == 0) {
82
dJointAttach(_id, body.
get_id
(),
nullptr
);
83
}
else
{
84
dJointAttach(_id,
nullptr
, body.
get_id
());
85
}
86
}
87
88
void
OdeJoint::
89
detach() {
90
nassertv(_id);
91
dJointAttach(_id,
nullptr
,
nullptr
);
92
}
93
94
OdeBody
OdeJoint::
95
get_body(
int
index)
const
{
96
nassertr(_id,
OdeBody
(
nullptr
));
97
nassertr(index == 0 || index == 1,
OdeBody
(
nullptr
));
98
return
OdeBody
(dJointGetBody(_id, index));
99
}
100
101
void
OdeJoint::
102
write(std::ostream &out,
unsigned
int
indent
)
const
{
103
out.width(
indent
); out <<
""
<< get_type() \
104
<<
"(id = "
<< _id \
105
<<
", body1 = "
;
106
OdeBody
body = get_body(0);
107
if
(body.
get_id
() !=
nullptr
) {
108
body.write(out);
109
}
110
else
{
111
out <<
"0"
;
112
}
113
out <<
", body2 = "
;
114
body = get_body(1);
115
if
(body.
get_id
() !=
nullptr
) {
116
body.write(out);
117
}
118
else
{
119
out <<
"0"
;
120
}
121
out <<
")"
;
122
123
}
124
125
OdeJoint::
126
operator bool ()
const
{
127
return
(_id !=
nullptr
);
128
}
129
130
OdeBallJoint
OdeJoint::
131
convert_to_ball()
const
{
132
nassertr(_id !=
nullptr
,
OdeBallJoint
(
nullptr
));
133
nassertr(get_joint_type() == JT_ball,
OdeBallJoint
(
nullptr
));
134
return
OdeBallJoint
(_id);
135
}
136
137
OdeHingeJoint
OdeJoint::
138
convert_to_hinge()
const
{
139
nassertr(_id !=
nullptr
,
OdeHingeJoint
(
nullptr
));
140
nassertr(get_joint_type() == JT_hinge,
OdeHingeJoint
(
nullptr
));
141
return
OdeHingeJoint
(_id);
142
}
143
144
OdeSliderJoint
OdeJoint::
145
convert_to_slider()
const
{
146
nassertr(_id !=
nullptr
,
OdeSliderJoint
(
nullptr
));
147
nassertr(get_joint_type() == JT_slider,
OdeSliderJoint
(
nullptr
));
148
return
OdeSliderJoint
(_id);
149
}
150
151
OdeContactJoint
OdeJoint::
152
convert_to_contact()
const
{
153
nassertr(_id !=
nullptr
,
OdeContactJoint
(
nullptr
));
154
nassertr(get_joint_type() == JT_contact,
OdeContactJoint
(
nullptr
));
155
return
OdeContactJoint
(_id);
156
}
157
158
OdeUniversalJoint
OdeJoint::
159
convert_to_universal()
const
{
160
nassertr(_id !=
nullptr
,
OdeUniversalJoint
(
nullptr
));
161
nassertr(get_joint_type() == JT_universal,
OdeUniversalJoint
(
nullptr
));
162
return
OdeUniversalJoint
(_id);
163
}
164
165
OdeHinge2Joint
OdeJoint::
166
convert_to_hinge2()
const
{
167
nassertr(_id !=
nullptr
,
OdeHinge2Joint
(
nullptr
));
168
nassertr(get_joint_type() == JT_hinge2,
OdeHinge2Joint
(
nullptr
));
169
return
OdeHinge2Joint
(_id);
170
}
171
172
OdeFixedJoint
OdeJoint::
173
convert_to_fixed()
const
{
174
nassertr(_id !=
nullptr
,
OdeFixedJoint
(
nullptr
));
175
nassertr(get_joint_type() == JT_fixed,
OdeFixedJoint
(
nullptr
));
176
return
OdeFixedJoint
(_id);
177
}
178
179
OdeNullJoint
OdeJoint::
180
convert_to_null()
const
{
181
nassertr(_id !=
nullptr
,
OdeNullJoint
(
nullptr
));
182
nassertr(get_joint_type() == JT_null,
OdeNullJoint
(
nullptr
));
183
return
OdeNullJoint
(_id);
184
}
185
186
OdeAMotorJoint
OdeJoint::
187
convert_to_a_motor()
const
{
188
nassertr(_id !=
nullptr
,
OdeAMotorJoint
(
nullptr
));
189
nassertr(get_joint_type() == JT_a_motor,
OdeAMotorJoint
(
nullptr
));
190
return
OdeAMotorJoint
(_id);
191
}
192
193
OdeLMotorJoint
OdeJoint::
194
convert_to_l_motor()
const
{
195
nassertr(_id !=
nullptr
,
OdeLMotorJoint
(
nullptr
));
196
nassertr(get_joint_type() == JT_l_motor,
OdeLMotorJoint
(
nullptr
));
197
return
OdeLMotorJoint
(_id);
198
}
199
200
OdePlane2dJoint
OdeJoint::
201
convert_to_plane2d()
const
{
202
nassertr(_id !=
nullptr
,
OdePlane2dJoint
(
nullptr
));
203
nassertr(get_joint_type() == JT_plane2d,
OdePlane2dJoint
(
nullptr
));
204
return
OdePlane2dJoint
(_id);
205
}
indent
std::ostream & indent(std::ostream &out, int indent_level)
A handy function for doing text formatting.
Definition:
indent.cxx:20
OdeNullJoint
Definition:
odeNullJoint.h:29
odeHingeJoint.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
OdeLMotorJoint
Definition:
odeLMotorJoint.h:28
OdeContactJoint
Definition:
odeContactJoint.h:30
OdeJoint::attach_body
void attach_body(const OdeBody &body, int index)
Attaches a single OdeBody to this joint at the specified index (0 or 1).
Definition:
odeJoint.cxx:77
odeFixedJoint.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
odeBody.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
odePlane2dJoint.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
OdeBallJoint
Definition:
odeBallJoint.h:29
odeHinge2Joint.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
OdeAMotorJoint
Definition:
odeAMotorJoint.h:29
odeAMotorJoint.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
TypeHandle
TypeHandle is the identifier used to differentiate C++ class types.
Definition:
typeHandle.h:81
OdeBody::get_id
dBodyID get_id() const
Returns the underlying dBodyID.
Definition:
odeBody.I:28
OdeSliderJoint
Definition:
odeSliderJoint.h:28
odeSliderJoint.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
OdeUniversalJoint
Definition:
odeUniversalJoint.h:30
OdeJoint::attach_bodies
void attach_bodies(const OdeBody &body1, const OdeBody &body2)
Attaches two OdeBody objects to this joint.
Definition:
odeJoint.cxx:65
OdeHinge2Joint
Definition:
odeHinge2Joint.h:28
odeJoint.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
config_ode.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
odeNullJoint.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
odeUniversalJoint.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
OdeFixedJoint
Definition:
odeFixedJoint.h:29
OdePlane2dJoint
Definition:
odePlane2dJoint.h:28
OdeBody
Definition:
odeBody.h:32
odeContactJoint.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
OdeHingeJoint
Definition:
odeHingeJoint.h:28
odeLMotorJoint.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
odeBallJoint.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
Generated on Sun Dec 27 2020 13:23:06 for Panda3D by
1.8.20