diff --git a/conandata.yml b/conandata.yml index 0644c1a..1ac66bd 100644 --- a/conandata.yml +++ b/conandata.yml @@ -1 +1 @@ -version: "5.11.0-alpha.0" +version: "5.12.0" diff --git a/include/Savitar/MeshData.h b/include/Savitar/MeshData.h index 5c3e806..744ac62 100644 --- a/include/Savitar/MeshData.h +++ b/include/Savitar/MeshData.h @@ -35,7 +35,7 @@ class MeshData /** * Serialise the meshData to xml_node */ - void toXmlNode(pugi::xml_node& xml_node); + void toXmlNode(pugi::xml_node& xml_node) const; /** * Return the vertices as flattend bytes. @@ -49,7 +49,7 @@ class MeshData * * If there for example is a single face, it will return a byte array containing 3 ints (so 3 * 4 bytes) */ - [[nodiscard]] bytearray getFacesAsBytes(); + [[nodiscard]] bytearray getFacesAsBytes() const; /** * Instead of getting all unique vertices, this function returns a bytearray with 3 vertices per face. @@ -93,7 +93,11 @@ class MeshData */ void setFacesFromBytes(const bytearray& data); - [[nodiscard]] std::vector getVertices(); + [[nodiscard]] const std::vector& getVertices() const; + + [[nodiscard]] const std::vector& getFaces() const; + + [[nodiscard]] int getUVGroupId() const; /** * Reset the data of the MeshData object. @@ -116,4 +120,4 @@ class MeshData }; } // namespace Savitar -#endif \ No newline at end of file +#endif diff --git a/include/Savitar/Scene.h b/include/Savitar/Scene.h index 651e3aa..b54a81f 100644 --- a/include/Savitar/Scene.h +++ b/include/Savitar/Scene.h @@ -28,7 +28,7 @@ class Scene * Get the scene nodes in this scene. * \return The scene nodes that are in the scene. */ - [[nodiscard]] std::vector getSceneNodes(); + [[nodiscard]] const std::vector& getSceneNodes() const; [[nodiscard]] std::vector getAllSceneNodes() const; @@ -46,7 +46,7 @@ class Scene /** * Serialise the scene to model_node */ - void toXmlNode(pugi::xml_node& model_node); + void toXmlNode(pugi::xml_node& model_node) const; /** * Store a metadata entry as metadata. @@ -84,7 +84,7 @@ class Scene * Get the unit (milimeter, inch, etc) of the scene. * This is in milimeter by default. */ - [[nodiscard]] std::string getUnit(); + [[nodiscard]] const std::string& getUnit() const; void setUnit(std::string unit); @@ -116,4 +116,4 @@ class Scene SceneNode* createSceneNodeFromObject(pugi::xml_node root_node, pugi::xml_node object_node); }; } // namespace Savitar -#endif \ No newline at end of file +#endif diff --git a/include/Savitar/SceneNode.h b/include/Savitar/SceneNode.h index 6821683..1339902 100644 --- a/include/Savitar/SceneNode.h +++ b/include/Savitar/SceneNode.h @@ -21,14 +21,14 @@ class SceneNode SceneNode() = default; virtual ~SceneNode() = default; - [[nodiscard]] std::string getTransformation(); - void setTransformation(std::string); + [[nodiscard]] const std::string& getTransformation() const; + void setTransformation(const std::string& transformation); - [[nodiscard]] std::vector getChildren(); - [[nodiscard]] std::vector getAllChildren(); + [[nodiscard]] const std::vector& getChildren() const; + [[nodiscard]] std::vector getAllChildren() const; bool addChild(SceneNode* node); - MeshData& getMeshData(); + [[nodiscard]] const MeshData& getMeshData() const; void setMeshData(const MeshData& mesh_data); /** @@ -51,7 +51,7 @@ class SceneNode /** * Get the (non-unique) display name of the node. */ - [[nodiscard]] std::string getName(); + [[nodiscard]] const std::string& getName() const; [[maybe_unused]] void setName(std::string name); diff --git a/include/Savitar/TextureData.h b/include/Savitar/TextureData.h index 9524406..088866e 100644 --- a/include/Savitar/TextureData.h +++ b/include/Savitar/TextureData.h @@ -31,7 +31,7 @@ class TextureData void fillByXMLNode(pugi::xml_node xml_node); - void toXmlNode(pugi::xml_node& resources_node); + void toXmlNode(pugi::xml_node& resources_node) const; [[nodiscard]] std::string getTexturePath(const int texture_id) const; @@ -61,4 +61,4 @@ class TextureData }; } // namespace Savitar -#endif \ No newline at end of file +#endif diff --git a/src/MeshData.cpp b/src/MeshData.cpp index 4206545..25a0cc0 100644 --- a/src/MeshData.cpp +++ b/src/MeshData.cpp @@ -204,7 +204,7 @@ std::string MeshData::getTexturePath(const Scene* scene) const return scene->getTexturePathFromGroupId(uv_group_id_); } -bytearray MeshData::getFacesAsBytes() +bytearray MeshData::getFacesAsBytes() const { bytearray face_data; @@ -220,7 +220,7 @@ bytearray MeshData::getFacesAsBytes() return face_data; } -void MeshData::toXmlNode(pugi::xml_node& node) +void MeshData::toXmlNode(pugi::xml_node& node) const { pugi::xml_node vertices_node = node.append_child("vertices"); for (auto& vertice : vertices_) @@ -288,13 +288,23 @@ void MeshData::setFacesFromBytes(const bytearray& data) } } -std::vector MeshData::getVertices() +const std::vector& MeshData::getVertices() const { return vertices_; } +const std::vector& MeshData::getFaces() const +{ + return faces_; +} + +int MeshData::getUVGroupId() const +{ + return uv_group_id_; +} + template void MeshData::exportToByteArray(bytearray& data, const T value) { data.insert(data.end(), reinterpret_cast(&value), reinterpret_cast(&value) + sizeof(T)); -} \ No newline at end of file +} diff --git a/src/Scene.cpp b/src/Scene.cpp index 6a69f3d..f351a8d 100644 --- a/src/Scene.cpp +++ b/src/Scene.cpp @@ -10,7 +10,7 @@ using namespace Savitar; -std::vector Scene::getSceneNodes() +const std::vector& Scene::getSceneNodes() const { return scene_nodes_; } @@ -87,7 +87,7 @@ void Scene::fillByXMLNode(pugi::xml_node xml_node) } } -void Scene::toXmlNode(pugi::xml_node& model_node) +void Scene::toXmlNode(pugi::xml_node& model_node) const { pugi::xml_node resources_node = model_node.append_child("resources"); pugi::xml_node build_node = model_node.append_child("build"); @@ -286,7 +286,7 @@ void Scene::setMetaDataEntry(const std::string& key, const std::string& value, c metadata_.emplace(key, MetadataEntry(value, type, preserve)); } -std::string Scene::getUnit() +const std::string& Scene::getUnit() const { return unit_; } diff --git a/src/SceneNode.cpp b/src/SceneNode.cpp index ba86548..c0a9d50 100644 --- a/src/SceneNode.cpp +++ b/src/SceneNode.cpp @@ -8,12 +8,12 @@ using namespace Savitar; -std::string SceneNode::getTransformation() +const std::string& SceneNode::getTransformation() const { return transformation_; } -void SceneNode::setTransformation(std::string transformation) +void SceneNode::setTransformation(const std::string& transformation) { transformation_ = transformation; } @@ -28,7 +28,7 @@ std::string SceneNode::getComponentPath() const return component_path_; } -std::vector SceneNode::getChildren() +const std::vector& SceneNode::getChildren() const { return children_; } @@ -52,7 +52,7 @@ bool SceneNode::addChild(SceneNode* node) return true; } -MeshData& SceneNode::getMeshData() +const MeshData& SceneNode::getMeshData() const { return mesh_data_; } @@ -181,7 +181,7 @@ void SceneNode::setId(const int id) id_ = id; } -std::string SceneNode::getName() +const std::string& SceneNode::getName() const { return name_; } @@ -212,7 +212,7 @@ void SceneNode::removeSetting(std::string key) } -std::vector SceneNode::getAllChildren() +std::vector SceneNode::getAllChildren() const { std::vector all_children; diff --git a/src/TextureData.cpp b/src/TextureData.cpp index e4b25bf..68bac07 100644 --- a/src/TextureData.cpp +++ b/src/TextureData.cpp @@ -45,7 +45,7 @@ void TextureData::fillByXMLNode(pugi::xml_node xml_node) } } -void TextureData::toXmlNode(pugi::xml_node& resources_node) +void TextureData::toXmlNode(pugi::xml_node& resources_node) const { // Handle textures paths for (const auto& texture_path : textures_paths_) diff --git a/tests/ThreeMFParserTest.cpp b/tests/ThreeMFParserTest.cpp index 0cdf25d..7645889 100644 --- a/tests/ThreeMFParserTest.cpp +++ b/tests/ThreeMFParserTest.cpp @@ -60,10 +60,10 @@ TEST_F(ThreeMFParserTest, parse) std::array expected_tris = { 144UL, 144UL, 0UL, 0UL }; std::array expected_child = { 0UL, 0UL, 1UL, 1UL }; int i = -1; - for (SceneNode* node : nodes) + for (const SceneNode* node : nodes) { ++i; - MeshData& data = node->getMeshData(); + const MeshData& data = node->getMeshData(); const std::vector& verts = data.getVertices(); EXPECT_EQ(verts.size(), expected_verts[i]); @@ -71,13 +71,13 @@ TEST_F(ThreeMFParserTest, parse) const bytearray& tris = data.getFacesAsBytes(); EXPECT_EQ(tris.size(), expected_tris[i]); - const std::vector& children = node->getAllChildren(); + const std::vector children = node->getAllChildren(); ASSERT_EQ(children.size(), expected_child[i]); - for (SceneNode* child : children) + for (const SceneNode* child : children) { - data = child->getMeshData(); - EXPECT_FALSE(data.getVertices().empty()); - EXPECT_FALSE(data.getFacesAsBytes().empty()); + const MeshData& child_data = child->getMeshData(); + EXPECT_FALSE(child_data.getVertices().empty()); + EXPECT_FALSE(child_data.getFacesAsBytes().empty()); } } // NOTE: To/from for content of vertices/triangles is tested in MeshDataTest.