MCPcopy Create free account
hub / github.com/OSVR/OSVR-Core / handleLevel

Function handleLevel

src/osvr/Common/JSONTransformVisitor.cpp:117–169  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

115 static const char Y_KEY[] = "y";
116 static const char Z_KEY[] = "z";
117 static inline void handleLevel(Transform &t, Json::Value const &v) {
118 if (!v.isObject()) {
119 // This is a non-object leaf node.
120 return;
121 }
122 if (v.isMember(CHANGE_BASIS_KEY)) {
123 Json::Value changeBasis = v[CHANGE_BASIS_KEY];
124 ChangeOfBasis cb;
125 cb.setNewX(vectorFromJson<>(changeBasis[X_KEY]));
126 cb.setNewY(vectorFromJson<>(changeBasis[Y_KEY]));
127 cb.setNewZ(vectorFromJson<>(changeBasis[Z_KEY]));
128 t.transform(cb.get());
129 return;
130 }
131 Eigen::Vector3d position = Eigen::Vector3d::Zero();
132 Eigen::AngleAxisd orientation = Eigen::AngleAxisd::Identity();
133 Eigen::Vector3d preposition = Eigen::Vector3d::Zero();
134 Eigen::AngleAxisd preorientation = Eigen::AngleAxisd::Identity();
135 bool haveTransform = false;
136 bool havePreTransform = false;
137 if (v.isMember(TRANSLATE_KEY)) {
138 position = vectorFromJson<>(v[TRANSLATE_KEY]);
139 haveTransform = true;
140 }
141 if (v.isMember(PRETRANSLATE_KEY)) {
142 preposition = vectorFromJson<>(v[PRETRANSLATE_KEY]);
143 havePreTransform = true;
144 }
145 if (v.isMember(ROTATE_KEY)) {
146 Json::Value rotate = v[ROTATE_KEY];
147 orientation = Eigen::AngleAxisd(angleAsRadians(rotate),
148 vectorFromJson<>(rotate[AXIS_KEY]));
149 haveTransform = true;
150 }
151 if (v.isMember(PREROTATE_KEY)) {
152 Json::Value rotate = v[PREROTATE_KEY];
153 preorientation = Eigen::AngleAxisd(
154 angleAsRadians(rotate), vectorFromJson<>(rotate[AXIS_KEY]));
155 havePreTransform = true;
156 }
157 if (haveTransform) {
158 Eigen::Affine3d xform;
159 xform.fromPositionOrientationScale(position, orientation,
160 Eigen::Vector3d::Constant(1));
161 t.concatPost(xform.matrix());
162 }
163 if (havePreTransform) {
164 Eigen::Affine3d xform;
165 xform.fromPositionOrientationScale(preposition, preorientation,
166 Eigen::Vector3d::Constant(1));
167 t.concatPre(xform.matrix());
168 }
169 }
170
171 static const char CHILD_KEY[] = "child";
172 JSONTransformVisitor::JSONTransformVisitor(Json::Value const &root) {

Callers 1

JSONTransformVisitorMethod · 0.85

Calls 8

angleAsRadiansFunction · 0.85
setNewXMethod · 0.80
setNewYMethod · 0.80
setNewZMethod · 0.80
transformMethod · 0.80
concatPostMethod · 0.80
concatPreMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected