| 223 | } |
| 224 | |
| 225 | void OgreXmlSerializer::ReadMesh(MeshXml *mesh) { |
| 226 | XmlNode root = mParser->getRootNode(); |
| 227 | if (nullptr == root) { |
| 228 | throw DeadlyImportError("Root node is <" + std::string(root.name()) + "> expecting <mesh>"); |
| 229 | } |
| 230 | |
| 231 | XmlNode startNode = root.child(nnMesh); |
| 232 | if (startNode.empty()) { |
| 233 | throw DeadlyImportError("Root node is <" + std::string(root.name()) + "> expecting <mesh>"); |
| 234 | } |
| 235 | for (XmlNode currentNode : startNode.children()) { |
| 236 | const std::string currentName = currentNode.name(); |
| 237 | if (currentName == nnSharedGeometry) { |
| 238 | mesh->sharedVertexData = new VertexDataXml(); |
| 239 | ReadGeometry(currentNode, mesh->sharedVertexData); |
| 240 | } else if (currentName == nnSubMeshes) { |
| 241 | for (XmlNode &subMeshesNode : currentNode.children()) { |
| 242 | const std::string ¤tSMName = subMeshesNode.name(); |
| 243 | if (currentSMName == nnSubMesh) { |
| 244 | ReadSubMesh(subMeshesNode, mesh); |
| 245 | } |
| 246 | } |
| 247 | } else if (currentName == nnBoneAssignments) { |
| 248 | ReadBoneAssignments(currentNode, mesh->sharedVertexData); |
| 249 | } else if (currentName == nnSkeletonLink) { |
| 250 | mesh->skeletonRef = currentNode.attribute("name").as_string(); |
| 251 | } |
| 252 | } |
| 253 | |
| 254 | ASSIMP_LOG_VERBOSE_DEBUG("Reading Mesh"); |
| 255 | } |
| 256 | |
| 257 | void OgreXmlSerializer::ReadGeometry(XmlNode &node, VertexDataXml *dest) { |
| 258 | dest->count = ReadAttribute<uint32_t>(node, "vertexcount"); |
no test coverage detected