diff --git a/README.md b/README.md index 2fb451b..2676e97 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,6 @@ which is quite extensive and well maintained. Conan is a Python program and can ### 1. Configure Conan ```bash -pip install conan --upgrade conan config install https://github.com/ultimaker/conan-config.git conan profile new default --detect --force ``` @@ -93,7 +92,7 @@ cd libSavitar #### Release ```bash -conan install . --build=missing --update +conan install . --build=missing --update build_type=Release # optional for a specific version: conan install . pysavitar/@/ --build=missing --update cmake --preset release cmake --build --preset release diff --git a/include/Savitar/SceneNode.h b/include/Savitar/SceneNode.h index 9f8f19c..602253d 100644 --- a/include/Savitar/SceneNode.h +++ b/include/Savitar/SceneNode.h @@ -42,6 +42,12 @@ class SceneNode [[nodiscard]] std::string getId(); void setId(std::string id); + /** + * Get the pid and pindex for the node + */ + [[nodiscard]] std::pair getPidPindex(); + + [[maybe_unused]] void setPidPindex(std::string pid, std::string pindex); /** * Get the (non-unique) display name of the node. @@ -75,6 +81,8 @@ class SceneNode MeshData mesh_data_; std::map settings_; std::string id_; + std::string pid_ {""}; + std::string pindex_ {""}; std::string name_; std::string type_{ "model" }; diff --git a/src/SceneNode.cpp b/src/SceneNode.cpp index 99f396d..dea3fce 100644 --- a/src/SceneNode.cpp +++ b/src/SceneNode.cpp @@ -75,6 +75,8 @@ void SceneNode::fillByXMLNode(pugi::xml_node xml_node) settings_.clear(); id_ = xml_node.attribute("id").as_string(); name_ = xml_node.attribute("name").as_string(); + pid_ = xml_node.attribute("pid").as_string(); + pindex_ = xml_node.attribute("pindex").as_string(); if (xml_node.child("mesh") != nullptr) { @@ -127,6 +129,17 @@ void SceneNode::fillByXMLNode(pugi::xml_node xml_node) } } +std::pair SceneNode::getPidPindex() +{ + return {pid_, pindex_}; +} + +void SceneNode::setPidPindex(std::string pid, std::string pindex) +{ + pid_ = pid; + pindex_ = pindex; +} + std::string SceneNode::getId() { return id_; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index dbc0aa2..0b62099 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -5,10 +5,11 @@ set(savitar_TEST ThreeMFParserTest MeshDataTest NamespaceTest + ParserForPidTest ) foreach (test ${savitar_TEST}) add_executable(${test} main.cpp ${test}.cpp) - target_link_libraries(${test} Savitar GTest::gtest GTest::gmock) + target_link_libraries(${test} PUBLIC Savitar GTest::gtest GTest::gmock) add_test(${test} ${test}) endforeach() \ No newline at end of file diff --git a/tests/ParserForPidTest.cpp b/tests/ParserForPidTest.cpp new file mode 100644 index 0000000..07ddb3a --- /dev/null +++ b/tests/ParserForPidTest.cpp @@ -0,0 +1,83 @@ +// Copyright (c) 2022 Ultimaker B.V. +// libSavitar is released under the terms of the LGPLv3 or higher. + +#include "Savitar/ThreeMFParser.h" +#include "Savitar/Scene.h" +#include "Savitar/SceneNode.h" + +#include + +#include +#include +#include +#include +#include +#include + +namespace Savitar +{ + +/* + * Fixture that loads a testing XML model and gives an instance of the parser to + * test with. + */ +class ParserForPidTest : public testing::Test +{ +public: + std::string xml_string; + ThreeMFParser* parser; + + void SetUp() override + { + xml_string = ""; + std::ifstream test_model_file(std::filesystem::path(__FILE__).parent_path().append("parser_pid.xml").string()); + if (test_model_file.is_open()) + { + xml_string = std::string(std::istreambuf_iterator{ test_model_file }, {}); + } + + parser = new ThreeMFParser(); + } + + void TearDown() override + { + delete parser; + } +}; + +TEST_F(ParserForPidTest, parse) +{ + ASSERT_FALSE(xml_string.empty()); + + Scene scene; + ASSERT_NO_THROW(scene = parser->parse(xml_string)); + + std::vector nodes = scene.getSceneNodes(); + ASSERT_FALSE(nodes.empty()); + ASSERT_EQ(nodes.size(), 20UL); + + std::array expected_pid = { "23", "23", "23", "23", "23", "23", "23", "23" ,"23", "23","", "", "", "", "", "", "", "" ,"", ""}; + + int i = -1; + for (SceneNode* node : nodes) + { + ++i; + MeshData& data = node->getMeshData(); + const std::pair pindex = node->getPidPindex(); + std:: string pidval = pindex.first; + EXPECT_EQ(pidval, expected_pid[i]); + + } + // NOTE: To/from for content of vertices/triangles is tested in MeshDataTest. +} + +TEST_F(ParserForPidTest, sceneToString) +{ + ASSERT_FALSE(xml_string.empty()); + Scene scene = parser->parse(xml_string); + + const std::string scene_string = parser->sceneToString(scene); + EXPECT_FALSE(scene_string.empty()); +} + +} // namespace Savitar diff --git a/tests/parser_pid.xml b/tests/parser_pid.xml new file mode 100644 index 0000000..f5f8664 --- /dev/null +++ b/tests/parser_pid.xml @@ -0,0 +1,3773 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +