Browse Source

AnySceneImporter: propagate sceneField[For]Name() as well.

pull/570/head
Vladimír Vondruš 4 years ago
parent
commit
0f063fe86a
  1. 11
      src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp
  2. 8
      src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h
  3. 30
      src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp
  4. 1
      src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt
  5. 12
      src/MagnumPlugins/AnySceneImporter/Test/scene-custom-field.gltf

11
src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp

@ -192,6 +192,17 @@ Containers::String AnySceneImporter::doSceneName(const UnsignedInt id) { return
Containers::String AnySceneImporter::doObjectName(const UnsignedLong id) { return _in->objectName(id); } Containers::String AnySceneImporter::doObjectName(const UnsignedLong id) { return _in->objectName(id); }
Containers::Optional<SceneData> AnySceneImporter::doScene(const UnsignedInt id) { return _in->scene(id); } Containers::Optional<SceneData> AnySceneImporter::doScene(const UnsignedInt id) { return _in->scene(id); }
SceneField AnySceneImporter::doSceneFieldForName(const Containers::StringView name) {
/* This API can be called even if no file is opened, in that case return
an invalid ID */
return _in ? _in->sceneFieldForName(name) : SceneField{};
}
Containers::String AnySceneImporter::doSceneFieldName(const UnsignedInt name) {
/* This API can be called even if no file is opened, in that case return
an invalid ID */
return _in ? _in->sceneFieldName(sceneFieldCustom(name)) : Containers::String{};
}
UnsignedInt AnySceneImporter::doLightCount() const { return _in->lightCount(); } UnsignedInt AnySceneImporter::doLightCount() const { return _in->lightCount(); }
Int AnySceneImporter::doLightForName(const Containers::StringView name) { return _in->lightForName(name); } Int AnySceneImporter::doLightForName(const Containers::StringView name) { return _in->lightForName(name); }
Containers::String AnySceneImporter::doLightName(const UnsignedInt id) { return _in->lightName(id); } Containers::String AnySceneImporter::doLightName(const UnsignedInt id) { return _in->lightName(id); }

8
src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h

@ -147,9 +147,9 @@ and corresponding count-/name-related functions are then proxied to the
concrete implementation. The @ref close() function closes and discards the concrete implementation. The @ref close() function closes and discards the
internally instantiated plugin; @ref isOpened() works as usual. internally instantiated plugin; @ref isOpened() works as usual.
While the @ref meshAttributeName() and @ref meshAttributeForName() APIs can While the @ref meshAttributeName(), @ref meshAttributeForName(),
be called without a file opened, they return an empty string or an invalid @ref sceneFieldName() and @ref sceneFieldForName() APIs can be called without a
attribute in that case. file opened, they return an empty string or an invalid attribute in that case.
*/ */
class MAGNUM_ANYSCENEIMPORTER_EXPORT AnySceneImporter: public AbstractImporter { class MAGNUM_ANYSCENEIMPORTER_EXPORT AnySceneImporter: public AbstractImporter {
public: public:
@ -181,6 +181,8 @@ class MAGNUM_ANYSCENEIMPORTER_EXPORT AnySceneImporter: public AbstractImporter {
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doSceneName(UnsignedInt id) override; MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doSceneName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doObjectName(UnsignedLong id) override; MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doObjectName(UnsignedLong id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<SceneData> doScene(UnsignedInt id) override; MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<SceneData> doScene(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL SceneField doSceneFieldForName(Containers::StringView name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doSceneFieldName(Magnum::UnsignedInt name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doLightCount() const override; MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doLightCount() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doLightForName(Containers::StringView name) override; MAGNUM_ANYSCENEIMPORTER_LOCAL Int doLightForName(Containers::StringView name) override;

30
src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp

@ -37,6 +37,7 @@
#include "Magnum/Math/Vector3.h" #include "Magnum/Math/Vector3.h"
#include "Magnum/Trade/AbstractImporter.h" #include "Magnum/Trade/AbstractImporter.h"
#include "Magnum/Trade/MeshData.h" #include "Magnum/Trade/MeshData.h"
#include "Magnum/Trade/SceneData.h"
#ifdef MAGNUM_BUILD_DEPRECATED #ifdef MAGNUM_BUILD_DEPRECATED
#define _MAGNUM_NO_DEPRECATED_MESHDATA /* So it doesn't yell here */ #define _MAGNUM_NO_DEPRECATED_MESHDATA /* So it doesn't yell here */
@ -64,6 +65,8 @@ struct AnySceneImporterTest: TestSuite::Tester {
void propagateConfigurationUnknown(); void propagateConfigurationUnknown();
void propagateFileCallback(); void propagateFileCallback();
void sceneFieldName();
void sceneFieldNameNoFileOpened();
void meshAttributeName(); void meshAttributeName();
void meshAttributeNameNoFileOpened(); void meshAttributeNameNoFileOpened();
@ -113,6 +116,8 @@ AnySceneImporterTest::AnySceneImporterTest() {
&AnySceneImporterTest::propagateConfigurationUnknown, &AnySceneImporterTest::propagateConfigurationUnknown,
&AnySceneImporterTest::propagateFileCallback, &AnySceneImporterTest::propagateFileCallback,
&AnySceneImporterTest::sceneFieldName,
&AnySceneImporterTest::sceneFieldNameNoFileOpened,
&AnySceneImporterTest::meshAttributeName, &AnySceneImporterTest::meshAttributeName,
&AnySceneImporterTest::meshAttributeNameNoFileOpened}); &AnySceneImporterTest::meshAttributeNameNoFileOpened});
@ -313,6 +318,31 @@ void AnySceneImporterTest::propagateFileCallback() {
CORRADE_VERIFY(!importer->isOpened()); CORRADE_VERIFY(!importer->isOpened());
} }
void AnySceneImporterTest::sceneFieldName() {
PluginManager::Manager<AbstractImporter> manager{MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR};
#ifdef ANYSCENEIMPORTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSCENEIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.load("GltfImporter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("GltfImporter plugin can't be loaded.");
Containers::Pointer<AbstractImporter> importer = manager.instantiate("AnySceneImporter");
CORRADE_VERIFY(importer->openFile(Utility::Path::join(ANYSCENEIMPORTER_TEST_DIR, "scene-custom-field.gltf")));
CORRADE_COMPARE(importer->sceneFieldForName("radius"), sceneFieldCustom(0));
CORRADE_COMPARE(importer->sceneFieldForName("nonexistent"), SceneField{});
CORRADE_COMPARE(importer->sceneFieldName(sceneFieldCustom(0)), "radius");
CORRADE_COMPARE(importer->sceneFieldName(sceneFieldCustom(3)), "");
}
void AnySceneImporterTest::sceneFieldNameNoFileOpened() {
Containers::Pointer<AbstractImporter> importer = _manager.instantiate("AnySceneImporter");
CORRADE_COMPARE(importer->sceneFieldForName(""), SceneField{});
CORRADE_COMPARE(importer->sceneFieldName(sceneFieldCustom(0)), "");
}
void AnySceneImporterTest::meshAttributeName() { void AnySceneImporterTest::meshAttributeName() {
PluginManager::Manager<AbstractImporter> manager{MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR}; PluginManager::Manager<AbstractImporter> manager{MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR};
#ifdef ANYSCENEIMPORTER_PLUGIN_FILENAME #ifdef ANYSCENEIMPORTER_PLUGIN_FILENAME

1
src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt

@ -57,6 +57,7 @@ corrade_add_test(AnySceneImporterTest AnySceneImporterTest.cpp
FILES FILES
${PROJECT_SOURCE_DIR}/src/MagnumPlugins/ObjImporter/Test/pointMesh.obj ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/ObjImporter/Test/pointMesh.obj
mesh-custom-attribute.gltf mesh-custom-attribute.gltf
scene-custom-field.gltf
triangle.ply) triangle.ply)
target_include_directories(AnySceneImporterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>) target_include_directories(AnySceneImporterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>)
if(MAGNUM_ANYSCENEIMPORTER_BUILD_STATIC) if(MAGNUM_ANYSCENEIMPORTER_BUILD_STATIC)

12
src/MagnumPlugins/AnySceneImporter/Test/scene-custom-field.gltf

@ -0,0 +1,12 @@
{
"asset": {
"version": "2.0"
},
"nodes": [
{
"extras": {
"radius": 56
}
}
]
}
Loading…
Cancel
Save