Skip to content

Commit

Permalink
parsing pid and pindex to group nodes
Browse files Browse the repository at this point in the history
CURA-9755
  • Loading branch information
saumyaj3 committed Oct 10, 2023
1 parent a1ac15d commit 8d5966d
Show file tree
Hide file tree
Showing 6 changed files with 3,880 additions and 3 deletions.
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
```
Expand All @@ -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/<version>@<user>/<channel> --build=missing --update
cmake --preset release
cmake --build --preset release
Expand Down
8 changes: 8 additions & 0 deletions include/Savitar/SceneNode.h
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::string, std::string> getPidPindex();

[[maybe_unused]] void setPidPindex(std::string pid, std::string pindex);

/**
* Get the (non-unique) display name of the node.
Expand Down Expand Up @@ -75,6 +81,8 @@ class SceneNode
MeshData mesh_data_;
std::map<std::string, MetadataEntry> settings_;
std::string id_;
std::string pid_ {""};
std::string pindex_ {""};
std::string name_;
std::string type_{ "model" };

Expand Down
13 changes: 13 additions & 0 deletions src/SceneNode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -127,6 +129,17 @@ void SceneNode::fillByXMLNode(pugi::xml_node xml_node)
}
}

std::pair<std::string, std::string> SceneNode::getPidPindex()
{
return {pid_, pindex_};
}

void SceneNode::setPidPindex(std::string pid, std::string pindex)
{
pid_ = pid;
pindex_ = pindex;
}

std::string SceneNode::getId()
{
return id_;
Expand Down
3 changes: 2 additions & 1 deletion tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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()
83 changes: 83 additions & 0 deletions tests/ParserForPidTest.cpp
Original file line number Diff line number Diff line change
@@ -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 <gtest/gtest.h>

#include <array>
#include <filesystem>
#include <fstream>
#include <iterator>
#include <map>
#include <string>

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<char>{ 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<SceneNode*> nodes = scene.getSceneNodes();
ASSERT_FALSE(nodes.empty());
ASSERT_EQ(nodes.size(), 20UL);

std::array<std::string, 20> 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<std::string, std::string> 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
Loading

0 comments on commit 8d5966d

Please sign in to comment.