Materials: External Modules Part 1
Refactored code to support local and external material sources This is the first PR in a series to support external modules. External modules allow materials to be stored in external data sources such as databases or web services. No new functionality is introduced in this PR, rather it is a refactoring of code that will allow for changes to be introduced in future PRs. Minor performance improvements have also been made in the model and material managers. The Python API has been enhanced for many data types to allow for modification within Python.
This commit is contained in:
committed by
Chris Hennes
parent
3c4977a2d4
commit
00c57a9d08
@@ -57,12 +57,12 @@ protected:
|
||||
QDir libDir(libPath);
|
||||
libDir.removeRecursively(); // Clear old run data
|
||||
libDir.mkdir(libPath);
|
||||
_library = std::make_shared<Materials::MaterialLibrary>(QStringLiteral("Testing"),
|
||||
_library = std::make_shared<Materials::MaterialLibraryLocal>(QStringLiteral("Testing"),
|
||||
libPath,
|
||||
QStringLiteral(":/icons/preferences-general.svg"),
|
||||
false);
|
||||
_modelManager = new Materials::ModelManager();
|
||||
_materialManager = new Materials::MaterialManager();
|
||||
_modelManager = &(Materials::ModelManager::getManager());
|
||||
_materialManager = &(Materials::MaterialManager::getManager());
|
||||
|
||||
_testMaterialUUID = QStringLiteral("c6c64159-19c1-40b5-859c-10561f20f979");
|
||||
}
|
||||
@@ -70,7 +70,7 @@ protected:
|
||||
// void TearDown() override {}
|
||||
Materials::ModelManager* _modelManager;
|
||||
Materials::MaterialManager* _materialManager;
|
||||
std::shared_ptr<Materials::MaterialLibrary> _library;
|
||||
std::shared_ptr<Materials::MaterialLibraryLocal> _library;
|
||||
QString _testMaterialUUID;
|
||||
};
|
||||
|
||||
@@ -187,17 +187,17 @@ TEST_F(TestMaterialCards, TestColumns)
|
||||
EXPECT_TRUE(testMaterial->hasPhysicalProperty(QStringLiteral("TestArray2D")));
|
||||
auto array2d = testMaterial->getPhysicalProperty(QStringLiteral("TestArray2D"))->getMaterialValue();
|
||||
EXPECT_TRUE(array2d);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Material2DArray &>(*array2d).columns(), 2);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Array2D &>(*array2d).columns(), 2);
|
||||
|
||||
EXPECT_TRUE(testMaterial->hasPhysicalProperty(QStringLiteral("TestArray2D3Column")));
|
||||
auto array2d3Column = testMaterial->getPhysicalProperty(QStringLiteral("TestArray2D3Column"))->getMaterialValue();
|
||||
EXPECT_TRUE(array2d3Column);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Material2DArray &>(*array2d3Column).columns(), 3);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Array2D &>(*array2d3Column).columns(), 3);
|
||||
|
||||
EXPECT_TRUE(testMaterial->hasPhysicalProperty(QStringLiteral("TestArray3D")));
|
||||
auto array3d = testMaterial->getPhysicalProperty(QStringLiteral("TestArray3D"))->getMaterialValue();
|
||||
EXPECT_TRUE(array3d);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Material3DArray &>(*array3d).columns(), 2);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Array3D &>(*array3d).columns(), 2);
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
|
||||
@@ -52,8 +52,8 @@ protected:
|
||||
}
|
||||
|
||||
void SetUp() override {
|
||||
_modelManager = new Materials::ModelManager();
|
||||
_materialManager = new Materials::MaterialManager();
|
||||
_modelManager = &(Materials::ModelManager::getManager());
|
||||
_materialManager = &(Materials::MaterialManager::getManager());
|
||||
|
||||
// Use our test files as a custom directory
|
||||
ParameterGrp::handle hGrp =
|
||||
@@ -74,7 +74,7 @@ protected:
|
||||
|
||||
_materialManager->refresh();
|
||||
|
||||
_library = _materialManager->getLibrary(QLatin1String("Custom"));
|
||||
_library = _materialManager->getLibrary(QStringLiteral("Custom"));
|
||||
}
|
||||
|
||||
void TearDown() override {
|
||||
@@ -153,7 +153,7 @@ TEST_F(TestMaterialFilter, TestFilters)
|
||||
ASSERT_EQ(tree->size(), 5);
|
||||
|
||||
// Create a basic rendering filter
|
||||
filter->setName(QLatin1String("Basic Appearance"));
|
||||
filter->setName(QStringLiteral("Basic Appearance"));
|
||||
filter->addRequiredComplete(Materials::ModelUUIDs::ModelUUID_Rendering_Basic);
|
||||
options.setIncludeLegacy(false);
|
||||
|
||||
@@ -166,7 +166,7 @@ TEST_F(TestMaterialFilter, TestFilters)
|
||||
|
||||
// Create an advanced rendering filter
|
||||
filter->clear();
|
||||
filter->setName(QLatin1String("Advanced Appearance"));
|
||||
filter->setName(QStringLiteral("Advanced Appearance"));
|
||||
filter->addRequiredComplete(Materials::ModelUUIDs::ModelUUID_Rendering_Advanced);
|
||||
options.setIncludeLegacy(false);
|
||||
|
||||
@@ -179,7 +179,7 @@ TEST_F(TestMaterialFilter, TestFilters)
|
||||
|
||||
// Create a Density filter
|
||||
filter->clear();
|
||||
filter->setName(QLatin1String("Density"));
|
||||
filter->setName(QStringLiteral("Density"));
|
||||
filter->addRequiredComplete(Materials::ModelUUIDs::ModelUUID_Mechanical_Density);
|
||||
options.setIncludeLegacy(false);
|
||||
|
||||
@@ -192,7 +192,7 @@ TEST_F(TestMaterialFilter, TestFilters)
|
||||
|
||||
// Create a Hardness filter
|
||||
filter->clear();
|
||||
filter->setName(QLatin1String("Hardness"));
|
||||
filter->setName(QStringLiteral("Hardness"));
|
||||
filter->addRequiredComplete(Materials::ModelUUIDs::ModelUUID_Mechanical_Hardness);
|
||||
options.setIncludeLegacy(false);
|
||||
|
||||
@@ -205,7 +205,7 @@ TEST_F(TestMaterialFilter, TestFilters)
|
||||
|
||||
// Create a Density and Basic Rendering filter
|
||||
filter->clear();
|
||||
filter->setName(QLatin1String("Density and Basic Rendering"));
|
||||
filter->setName(QStringLiteral("Density and Basic Rendering"));
|
||||
filter->addRequiredComplete(Materials::ModelUUIDs::ModelUUID_Rendering_Basic);
|
||||
filter->addRequiredComplete(Materials::ModelUUIDs::ModelUUID_Mechanical_Density);
|
||||
options.setIncludeLegacy(false);
|
||||
@@ -219,7 +219,7 @@ TEST_F(TestMaterialFilter, TestFilters)
|
||||
|
||||
// Create a Linear Elastic filter
|
||||
filter->clear();
|
||||
filter->setName(QLatin1String("Linear Elastic"));
|
||||
filter->setName(QStringLiteral("Linear Elastic"));
|
||||
filter->addRequiredComplete(Materials::ModelUUIDs::ModelUUID_Mechanical_LinearElastic);
|
||||
options.setIncludeLegacy(false);
|
||||
|
||||
@@ -231,7 +231,7 @@ TEST_F(TestMaterialFilter, TestFilters)
|
||||
ASSERT_EQ(tree->size(), 0);
|
||||
|
||||
filter->clear();
|
||||
filter->setName(QLatin1String("Linear Elastic"));
|
||||
filter->setName(QStringLiteral("Linear Elastic"));
|
||||
filter->addRequired(Materials::ModelUUIDs::ModelUUID_Mechanical_LinearElastic);
|
||||
options.setIncludeLegacy(false);
|
||||
|
||||
|
||||
@@ -130,9 +130,9 @@ TEST_F(TestMaterialProperties, TestEmpty)
|
||||
|
||||
TEST_F(TestMaterialProperties, TestSingle)
|
||||
{
|
||||
Materials::MaterialProperty prop(modelProp1, QLatin1String("sampleUUID"));
|
||||
Materials::MaterialProperty prop(modelProp1, QStringLiteral("sampleUUID"));
|
||||
EXPECT_EQ(prop.getType(), Materials::MaterialValue::Quantity);
|
||||
EXPECT_EQ(prop.getModelUUID(), QLatin1String("sampleUUID"));
|
||||
EXPECT_EQ(prop.getModelUUID(), QStringLiteral("sampleUUID"));
|
||||
EXPECT_TRUE(prop.isNull());
|
||||
auto variant = prop.getValue();
|
||||
EXPECT_TRUE(variant.canConvert<Base::Quantity>());
|
||||
@@ -146,9 +146,9 @@ TEST_F(TestMaterialProperties, TestSingle)
|
||||
void check2DArray(Materials::MaterialProperty& prop)
|
||||
{
|
||||
EXPECT_EQ(prop.getType(), Materials::MaterialValue::Array2D);
|
||||
EXPECT_EQ(prop.getModelUUID(), QLatin1String("sampleUUID"));
|
||||
EXPECT_EQ(prop.getModelUUID(), QStringLiteral("sampleUUID"));
|
||||
EXPECT_TRUE(prop.isNull());
|
||||
auto array = std::static_pointer_cast<Materials::Material2DArray>(prop.getMaterialValue());
|
||||
auto array = std::static_pointer_cast<Materials::Array2D>(prop.getMaterialValue());
|
||||
EXPECT_EQ(array->rows(), 0);
|
||||
auto variant = prop.getValue(); // Throw an error?
|
||||
EXPECT_FALSE(variant.canConvert<QString>());
|
||||
@@ -162,20 +162,20 @@ void check2DArray(Materials::MaterialProperty& prop)
|
||||
|
||||
TEST_F(TestMaterialProperties, Test2DArray)
|
||||
{
|
||||
Materials::MaterialProperty prop(modelProp, QLatin1String("sampleUUID"));
|
||||
Materials::MaterialProperty prop(modelProp, QStringLiteral("sampleUUID"));
|
||||
check2DArray(prop);
|
||||
}
|
||||
|
||||
TEST_F(TestMaterialProperties, Test2DArrayCopy)
|
||||
{
|
||||
Materials::MaterialProperty propBase(modelProp, QLatin1String("sampleUUID"));
|
||||
Materials::MaterialProperty propBase(modelProp, QStringLiteral("sampleUUID"));
|
||||
Materials::MaterialProperty prop(propBase);
|
||||
check2DArray(prop);
|
||||
}
|
||||
|
||||
TEST_F(TestMaterialProperties, Test2DArrayAssignment)
|
||||
{
|
||||
Materials::MaterialProperty propBase(modelProp, QLatin1String("sampleUUID"));
|
||||
Materials::MaterialProperty propBase(modelProp, QStringLiteral("sampleUUID"));
|
||||
Materials::MaterialProperty prop;
|
||||
|
||||
prop = propBase;
|
||||
@@ -185,9 +185,9 @@ TEST_F(TestMaterialProperties, Test2DArrayAssignment)
|
||||
void check3DArray(Materials::MaterialProperty& prop)
|
||||
{
|
||||
EXPECT_EQ(prop.getType(), Materials::MaterialValue::Array3D);
|
||||
EXPECT_EQ(prop.getModelUUID(), QLatin1String("sampleUUID"));
|
||||
EXPECT_EQ(prop.getModelUUID(), QStringLiteral("sampleUUID"));
|
||||
EXPECT_TRUE(prop.isNull());
|
||||
auto array = std::static_pointer_cast<Materials::Material3DArray>(prop.getMaterialValue());
|
||||
auto array = std::static_pointer_cast<Materials::Array3D>(prop.getMaterialValue());
|
||||
EXPECT_EQ(array->depth(), 0);
|
||||
auto variant = prop.getValue(); // Throw an error?
|
||||
EXPECT_FALSE(variant.canConvert<QString>());
|
||||
@@ -201,20 +201,20 @@ void check3DArray(Materials::MaterialProperty& prop)
|
||||
|
||||
TEST_F(TestMaterialProperties, Test3DArray)
|
||||
{
|
||||
Materials::MaterialProperty prop(model3DProp, QLatin1String("sampleUUID"));
|
||||
Materials::MaterialProperty prop(model3DProp, QStringLiteral("sampleUUID"));
|
||||
check3DArray(prop);
|
||||
}
|
||||
|
||||
TEST_F(TestMaterialProperties, Test3DArrayCopy)
|
||||
{
|
||||
Materials::MaterialProperty propBase(model3DProp, QLatin1String("sampleUUID"));
|
||||
Materials::MaterialProperty propBase(model3DProp, QStringLiteral("sampleUUID"));
|
||||
Materials::MaterialProperty prop(propBase);
|
||||
check3DArray(prop);
|
||||
}
|
||||
|
||||
TEST_F(TestMaterialProperties, Test3DArrayAssignment)
|
||||
{
|
||||
Materials::MaterialProperty propBase(model3DProp, QLatin1String("sampleUUID"));
|
||||
Materials::MaterialProperty propBase(model3DProp, QStringLiteral("sampleUUID"));
|
||||
Materials::MaterialProperty prop;
|
||||
|
||||
prop = propBase;
|
||||
|
||||
@@ -172,7 +172,7 @@ TEST_F(TestMaterialValue, TestArray2DType)
|
||||
{
|
||||
EXPECT_THROW(auto mat1 = Materials::MaterialValue(Materials::MaterialValue::Array2D), Materials::InvalidMaterialType);
|
||||
|
||||
auto mat2 = Materials::Material2DArray();
|
||||
auto mat2 = Materials::Array2D();
|
||||
EXPECT_EQ(mat2.getType(), Materials::MaterialValue::Array2D);
|
||||
EXPECT_TRUE(mat2.isNull());
|
||||
EXPECT_EQ(mat2.rows(), 0);
|
||||
@@ -182,7 +182,7 @@ TEST_F(TestMaterialValue, TestArray3DType)
|
||||
{
|
||||
EXPECT_THROW(auto mat1 = Materials::MaterialValue(Materials::MaterialValue::Array3D), Materials::InvalidMaterialType);
|
||||
|
||||
auto mat2 = Materials::Material3DArray();
|
||||
auto mat2 = Materials::Array3D();
|
||||
mat2.setColumns(2);
|
||||
EXPECT_EQ(mat2.getType(), Materials::MaterialValue::Array3D);
|
||||
EXPECT_TRUE(mat2.isNull());
|
||||
|
||||
@@ -58,8 +58,8 @@ class TestMaterial : public ::testing::Test {
|
||||
|
||||
void SetUp() override {
|
||||
Base::Interpreter().runString("import Part");
|
||||
_modelManager = new Materials::ModelManager();
|
||||
_materialManager = new Materials::MaterialManager();
|
||||
_modelManager = &(Materials::ModelManager::getManager());
|
||||
_materialManager = &(Materials::MaterialManager::getManager());
|
||||
}
|
||||
|
||||
// void TearDown() override {}
|
||||
@@ -72,11 +72,11 @@ TEST_F(TestMaterial, TestInstallation)
|
||||
ASSERT_NE(_modelManager, nullptr);
|
||||
|
||||
// We should have loaded at least the system library
|
||||
auto libraries = _materialManager->getMaterialLibraries();
|
||||
auto libraries = _materialManager->getLibraries();
|
||||
ASSERT_GT(libraries->size(), 0);
|
||||
|
||||
// We should have at least one material
|
||||
auto materials = _materialManager->getMaterials();
|
||||
auto materials = _materialManager->getLocalMaterials();
|
||||
ASSERT_GT(materials->size(), 0);
|
||||
}
|
||||
|
||||
@@ -365,17 +365,17 @@ TEST_F(TestMaterial, TestColumns)
|
||||
EXPECT_TRUE(testMaterial.hasPhysicalProperty(QStringLiteral("TestArray2D")));
|
||||
auto array2d = testMaterial.getPhysicalProperty(QStringLiteral("TestArray2D"))->getMaterialValue();
|
||||
EXPECT_TRUE(array2d);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Material2DArray &>(*array2d).columns(), 2);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Array2D &>(*array2d).columns(), 2);
|
||||
|
||||
EXPECT_TRUE(testMaterial.hasPhysicalProperty(QStringLiteral("TestArray2D3Column")));
|
||||
auto array2d3Column = testMaterial.getPhysicalProperty(QStringLiteral("TestArray2D3Column"))->getMaterialValue();
|
||||
EXPECT_TRUE(array2d3Column);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Material2DArray &>(*array2d3Column).columns(), 3);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Array2D &>(*array2d3Column).columns(), 3);
|
||||
|
||||
EXPECT_TRUE(testMaterial.hasPhysicalProperty(QStringLiteral("TestArray3D")));
|
||||
auto array3d = testMaterial.getPhysicalProperty(QStringLiteral("TestArray3D"))->getMaterialValue();
|
||||
EXPECT_TRUE(array3d);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Material3DArray &>(*array3d).columns(), 2);
|
||||
EXPECT_EQ(dynamic_cast<Materials::Array3D &>(*array3d).columns(), 2);
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
|
||||
@@ -46,7 +46,7 @@ class TestModel : public ::testing::Test {
|
||||
}
|
||||
|
||||
void SetUp() override {
|
||||
_modelManager = new Materials::ModelManager();
|
||||
_modelManager = &(Materials::ModelManager::getManager());
|
||||
}
|
||||
|
||||
// void TearDown() override {}
|
||||
@@ -76,7 +76,7 @@ TEST_F(TestModel, TestInstallation)
|
||||
ASSERT_NE(_modelManager, nullptr);
|
||||
|
||||
// We should have loaded at least the system library
|
||||
auto libraries = _modelManager->getModelLibraries();
|
||||
auto libraries = _modelManager->getLibraries();
|
||||
ASSERT_GT(libraries->size(), 0);
|
||||
|
||||
// We should have at least one model
|
||||
|
||||
Reference in New Issue
Block a user