MCPcopy Create free account
hub / github.com/InteractiveComputerGraphics/PositionBasedDynamics / readRigidBodies

Method readRigidBodies

Utils/SceneLoader.cpp:152–252  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

150}
151
152void SceneLoader::readRigidBodies(const nlohmann::json &j, const std::string &key, const std::string &basePath, SceneData &sceneData)
153{
154 const nlohmann::json &child = j[key];
155
156 sceneData.m_rigidBodyData.reserve(5000);
157
158 for (auto& rigidBody : child)
159 {
160 std::string geomFileName;
161 if (readValue<std::string>(rigidBody, "geometryFile", geomFileName))
162 {
163 if (FileSystem::isRelativePath(geomFileName))
164 {
165 geomFileName = basePath + "/" + geomFileName;
166 }
167
168 sceneData.m_rigidBodyData.emplace_back(RigidBodyData());
169 RigidBodyData &rbd = sceneData.m_rigidBodyData.back();
170 rbd.m_modelFile = geomFileName;
171
172 // id
173 rbd.m_id = 0;
174 readValue(rigidBody, "id", rbd.m_id);
175
176 // is dynamic body
177 rbd.m_isDynamic = true;
178 readValue(rigidBody, "isDynamic", rbd.m_isDynamic);
179
180 // is dynamic body
181 rbd.m_flatShading = false;
182 readValue(rigidBody, "flatShading", rbd.m_flatShading);
183
184 // density
185 rbd.m_density = 1.0;
186 readValue(rigidBody, "density", rbd.m_density);
187
188 // translation
189 rbd.m_x.setZero();
190 readVector(rigidBody, "translation", rbd.m_x);
191
192 // rotation axis
193 Vector3r axis;
194 axis.setZero();
195 Real angle = 0.0;
196 if (readVector(rigidBody, "rotationAxis", axis) &&
197 readValue<Real>(rigidBody, "rotationAngle", angle))
198 {
199 axis.normalize();
200 rbd.m_q = Quaternionr(AngleAxisr(angle, axis));
201 }
202 else
203 rbd.m_q = Quaternionr(1.0, 0.0, 0.0, 0.0);
204
205 // scale
206 rbd.m_scale = Vector3r(1.0, 1.0, 1.0);
207 readVector(rigidBody, "scale", rbd.m_scale);
208
209 // velocity

Callers

nothing calls this directly

Calls 5

RigidBodyDataClass · 0.85
backMethod · 0.80
reserveMethod · 0.45
setZeroMethod · 0.45
normalizeMethod · 0.45

Tested by

no test coverage detected