| 210 | |
| 211 | template<typename DracoMesh> |
| 212 | void copy_metadata(std::unique_ptr<DracoMesh>& draco_mesh, Mesh::Ptr mesh) { |
| 213 | const auto metadata = draco_mesh->GetMetadata(); |
| 214 | if (metadata == nullptr) return; |
| 215 | const auto& attr_metadatas = metadata->attribute_metadatas(); |
| 216 | for (const auto& attr_metadata : attr_metadatas) { |
| 217 | std::string name=""; |
| 218 | attr_metadata->GetEntryString("name", &name); |
| 219 | if (name == "") continue; |
| 220 | auto uid = attr_metadata->att_unique_id(); |
| 221 | |
| 222 | const auto attr = draco_mesh->GetAttributeByUniqueId(uid); |
| 223 | const auto num_rows = attr->size(); |
| 224 | const auto num_cols = attr->num_components(); |
| 225 | |
| 226 | VectorF data(num_rows * num_cols); |
| 227 | for (size_t i=0; i<num_rows; i++) { |
| 228 | attr->ConvertValue(draco::AttributeValueIndex(i), |
| 229 | data.data() + i*num_cols); |
| 230 | } |
| 231 | mesh->add_empty_attribute(name); |
| 232 | mesh->set_attribute(name, data); |
| 233 | } |
| 234 | } |
| 235 | |
| 236 | Mesh::Ptr from_draco_mesh(std::unique_ptr<draco::Mesh> draco_mesh) { |
| 237 | assert(draco_mesh); |
no test coverage detected