This commit is contained in:
alemuntoni 2021-04-16 11:33:36 +02:00
parent fad0f6919e
commit 96937a827c
10 changed files with 93 additions and 89 deletions

View File

@ -47,7 +47,7 @@ set(HEADERS
plugins/containers/decorate_plugin_container.h
plugins/containers/edit_plugin_container.h
plugins/containers/filter_plugin_container.h
plugins/containers/iomesh_plugin_container.h
plugins/containers/io_plugin_container.h
plugins/containers/render_plugin_container.h
plugins/interfaces/meshlab_plugin.h
plugins/interfaces/meshlab_plugin_logger.h
@ -95,7 +95,7 @@ set(SOURCES
plugins/containers/decorate_plugin_container.cpp
plugins/containers/edit_plugin_container.cpp
plugins/containers/filter_plugin_container.cpp
plugins/containers/iomesh_plugin_container.cpp
plugins/containers/io_plugin_container.cpp
plugins/containers/render_plugin_container.cpp
plugins/interfaces/meshlab_plugin_logger.cpp
plugins/interfaces/decorate_plugin.cpp

View File

@ -40,7 +40,7 @@ HEADERS += \
plugins/containers/decorate_plugin_container.h \
plugins/containers/edit_plugin_container.h \
plugins/containers/filter_plugin_container.h \
plugins/containers/iomesh_plugin_container.h \
plugins/containers/io_plugin_container.h \
plugins/containers/render_plugin_container.h \
plugins/interfaces/meshlab_plugin.h \
plugins/interfaces/meshlab_plugin_logger.h \
@ -86,7 +86,7 @@ SOURCES += \
plugins/containers/decorate_plugin_container.cpp \
plugins/containers/edit_plugin_container.cpp \
plugins/containers/filter_plugin_container.cpp \
plugins/containers/iomesh_plugin_container.cpp \
plugins/containers/io_plugin_container.cpp \
plugins/containers/render_plugin_container.cpp \
plugins/interfaces/meshlab_plugin_logger.cpp \
plugins/interfaces/decorate_plugin.cpp \

View File

@ -1,90 +1,90 @@
#include "iomesh_plugin_container.h"
#include "io_plugin_container.h"
IOMeshPluginContainer::IOMeshPluginContainer()
IOPluginContainer::IOPluginContainer()
{
}
size_t IOMeshPluginContainer::size() const
size_t IOPluginContainer::size() const
{
return ioMeshPlugins.size();
return ioPlugins.size();
}
void IOMeshPluginContainer::clear()
void IOPluginContainer::clear()
{
ioMeshPlugins.clear();
ioPlugins.clear();
inputMeshFormatToPluginMap.clear();
outputMeshFormatToPluginMap.clear();
inputRasterFormatToPluginMap.clear();
}
void IOMeshPluginContainer::pushIOMeshPlugin(IOPlugin* iIOMesh)
void IOPluginContainer::pushIOPlugin(IOPlugin* iIO)
{
ioMeshPlugins.push_back(iIOMesh);
ioPlugins.push_back(iIO);
//add input formats to inputFormatMap
for (const FileFormat& ff : iIOMesh->importFormats()){
for (const FileFormat& ff : iIO->importFormats()){
for (const QString& currentExtension : ff.extensions) {
if (! inputMeshFormatToPluginMap.contains(currentExtension.toLower())) {
inputMeshFormatToPluginMap.insert(currentExtension.toLower(), iIOMesh);
inputMeshFormatToPluginMap.insert(currentExtension.toLower(), iIO);
}
}
}
//add output formats to outputFormatMap
for (const FileFormat& ff : iIOMesh->exportFormats()){
for (const FileFormat& ff : iIO->exportFormats()){
for (const QString& currentExtension : ff.extensions) {
if (! outputMeshFormatToPluginMap.contains(currentExtension.toLower())) {
outputMeshFormatToPluginMap.insert(currentExtension.toLower(), iIOMesh);
outputMeshFormatToPluginMap.insert(currentExtension.toLower(), iIO);
}
}
}
//add input raster formats to inputFormatMap
for (const FileFormat& ff : iIOMesh->importRasterFormats()){
for (const FileFormat& ff : iIO->importRasterFormats()){
for (const QString& currentExtension : ff.extensions) {
if (! inputRasterFormatToPluginMap.contains(currentExtension.toLower())) {
inputRasterFormatToPluginMap.insert(currentExtension.toLower(), iIOMesh);
inputRasterFormatToPluginMap.insert(currentExtension.toLower(), iIO);
}
}
}
}
void IOMeshPluginContainer::eraseIOMeshPlugin(IOPlugin* iIOMesh)
void IOPluginContainer::eraseIOPlugin(IOPlugin* iIO)
{
ioMeshPlugins.erase(std::find(ioMeshPlugins.begin(), ioMeshPlugins.end(), iIOMesh));
for (const FileFormat& ff : iIOMesh->importFormats()){
ioPlugins.erase(std::find(ioPlugins.begin(), ioPlugins.end(), iIO));
for (const FileFormat& ff : iIO->importFormats()){
for (const QString& currentExtension : ff.extensions) {
inputMeshFormatToPluginMap.remove(currentExtension.toLower());
}
}
for (const FileFormat& ff : iIOMesh->exportFormats()){
for (const FileFormat& ff : iIO->exportFormats()){
for (const QString& currentExtension : ff.extensions) {
outputMeshFormatToPluginMap.remove(currentExtension.toLower());
}
}
for (const FileFormat& ff : iIOMesh->importRasterFormats()){
for (const FileFormat& ff : iIO->importRasterFormats()){
for (const QString& currentExtension : ff.extensions) {
inputRasterFormatToPluginMap.remove(currentExtension.toLower());
}
}
}
bool IOMeshPluginContainer::isInputMeshFormatSupported(const QString& inputFormat) const
bool IOPluginContainer::isInputMeshFormatSupported(const QString& inputFormat) const
{
return inputMeshFormatToPluginMap.find(inputFormat.toLower()) != inputMeshFormatToPluginMap.end();
}
bool IOMeshPluginContainer::isOutputMeshFormatSupported(const QString& outputFormat) const
bool IOPluginContainer::isOutputMeshFormatSupported(const QString& outputFormat) const
{
return outputMeshFormatToPluginMap.find(outputFormat.toLower()) != outputMeshFormatToPluginMap.end();
}
bool IOMeshPluginContainer::isInputRasterFormatSupported(const QString& inputFormat) const
bool IOPluginContainer::isInputRasterFormatSupported(const QString& inputFormat) const
{
return inputRasterFormatToPluginMap.find(inputFormat.toLower()) != inputRasterFormatToPluginMap.end();
}
IOPlugin* IOMeshPluginContainer::inputMeshPlugin(const QString& inputFormat) const
IOPlugin* IOPluginContainer::inputMeshPlugin(const QString& inputFormat) const
{
auto it = inputMeshFormatToPluginMap.find(inputFormat.toLower());
if (it != inputMeshFormatToPluginMap.end())
@ -92,7 +92,7 @@ IOPlugin* IOMeshPluginContainer::inputMeshPlugin(const QString& inputFormat) con
return nullptr;
}
IOPlugin* IOMeshPluginContainer::outputMeshPlugin(const QString& outputFormat) const
IOPlugin* IOPluginContainer::outputMeshPlugin(const QString& outputFormat) const
{
auto it = outputMeshFormatToPluginMap.find(outputFormat.toLower());
if (it != outputMeshFormatToPluginMap.end())
@ -100,7 +100,7 @@ IOPlugin* IOMeshPluginContainer::outputMeshPlugin(const QString& outputFormat) c
return nullptr;
}
IOPlugin* IOMeshPluginContainer::inputRasterPlugin(const QString& inputFormat) const
IOPlugin* IOPluginContainer::inputRasterPlugin(const QString& inputFormat) const
{
auto it = inputRasterFormatToPluginMap.find(inputFormat.toLower());
if (it != inputRasterFormatToPluginMap.end())
@ -108,38 +108,38 @@ IOPlugin* IOMeshPluginContainer::inputRasterPlugin(const QString& inputFormat) c
return nullptr;
}
QStringList IOMeshPluginContainer::inputMeshFormatList() const
QStringList IOPluginContainer::inputMeshFormatList() const
{
return inputMeshFormatToPluginMap.keys();
}
QStringList IOMeshPluginContainer::outputMeshFormatList() const
QStringList IOPluginContainer::outputMeshFormatList() const
{
return outputMeshFormatToPluginMap.keys();
}
QStringList IOMeshPluginContainer::inputRasterFormatList() const
QStringList IOPluginContainer::inputRasterFormatList() const
{
return inputRasterFormatToPluginMap.keys();
}
IOMeshPluginContainer::IOMeshPluginRangeIterator IOMeshPluginContainer::ioMeshPluginIterator(bool iterateAlsoDisabledPlugins) const
IOPluginContainer::IOPluginRangeIterator IOPluginContainer::ioPluginIterator(bool iterateAlsoDisabledPlugins) const
{
return IOMeshPluginRangeIterator(this, iterateAlsoDisabledPlugins);
return IOPluginRangeIterator(this, iterateAlsoDisabledPlugins);
}
ConstPluginIterator<IOPlugin> IOMeshPluginContainer::IOMeshPluginRangeIterator::begin()
ConstPluginIterator<IOPlugin> IOPluginContainer::IOPluginRangeIterator::begin()
{
return ConstPluginIterator<IOPlugin>(pm->ioMeshPlugins, pm->ioMeshPlugins.begin(), b);
return ConstPluginIterator<IOPlugin>(pm->ioPlugins, pm->ioPlugins.begin(), b);
}
ConstPluginIterator<IOPlugin> IOMeshPluginContainer::IOMeshPluginRangeIterator::end()
ConstPluginIterator<IOPlugin> IOPluginContainer::IOPluginRangeIterator::end()
{
return ConstPluginIterator<IOPlugin>(pm->ioMeshPlugins, pm->ioMeshPlugins.end(), b);
return ConstPluginIterator<IOPlugin>(pm->ioPlugins, pm->ioPlugins.end(), b);
}
IOMeshPluginContainer::IOMeshPluginRangeIterator::IOMeshPluginRangeIterator(
const IOMeshPluginContainer* pm,
IOPluginContainer::IOPluginRangeIterator::IOPluginRangeIterator(
const IOPluginContainer* pm,
bool iterateAlsoDisabledPlugins) :
pm(pm), b(iterateAlsoDisabledPlugins)
{

View File

@ -21,29 +21,29 @@
* *
****************************************************************************/
#ifndef MESHLAB_IOMESH_PLUGIN_CONTAINER_H
#define MESHLAB_IOMESH_PLUGIN_CONTAINER_H
#ifndef MESHLAB_IO_PLUGIN_CONTAINER_H
#define MESHLAB_IO_PLUGIN_CONTAINER_H
#include "../interfaces/io_plugin.h"
#include "generic_container_iterator.h"
/**
* @brief The IOMeshPluginContainer class allows to organize
* all the IOMesh plugins contained in the PluginManager.
* @brief The IOPluginContainer class allows to organize
* all the IO plugins contained in the PluginManager.
*
* Note: plugins are not owned by this container, but by the PluginManager,
* since each plugin can inherit from more than one PluginInterface.
*/
class IOMeshPluginContainer
class IOPluginContainer
{
public:
class IOMeshPluginRangeIterator;
IOMeshPluginContainer();
class IOPluginRangeIterator;
IOPluginContainer();
size_t size() const;
void clear();
void pushIOMeshPlugin(IOPlugin* iIOMesh);
void eraseIOMeshPlugin(IOPlugin* iIOMesh);
void pushIOPlugin(IOPlugin* iIO);
void eraseIOPlugin(IOPlugin* iIO);
bool isInputMeshFormatSupported(const QString& inputFormat) const;
bool isOutputMeshFormatSupported(const QString& outputFormat) const;
@ -56,27 +56,27 @@ public:
QStringList outputMeshFormatList() const;
QStringList inputRasterFormatList() const;
IOMeshPluginRangeIterator ioMeshPluginIterator(bool iterateAlsoDisabledPlugins = false) const;
IOPluginRangeIterator ioPluginIterator(bool iterateAlsoDisabledPlugins = false) const;
private:
std::vector<IOPlugin*> ioMeshPlugins;
std::vector<IOPlugin*> ioPlugins;
QMap<QString,IOPlugin*> inputMeshFormatToPluginMap;
QMap<QString,IOPlugin*> outputMeshFormatToPluginMap;
QMap<QString,IOPlugin*> inputRasterFormatToPluginMap;
};
class IOMeshPluginContainer::IOMeshPluginRangeIterator
class IOPluginContainer::IOPluginRangeIterator
{
friend class IOMeshPluginContainer;
friend class IOPluginContainer;
public:
ConstPluginIterator<IOPlugin> begin();
ConstPluginIterator<IOPlugin> end();
private:
IOMeshPluginRangeIterator(
const IOMeshPluginContainer* pm,
IOPluginRangeIterator(
const IOPluginContainer* pm,
bool iterateAlsoDisabledPlugins = false);
const IOMeshPluginContainer* pm;
const IOPluginContainer* pm;
bool b;
};
#endif // MESHLAB_IOMESH_PLUGIN_CONTAINER_H
#endif // MESHLAB_IO_PLUGIN_CONTAINER_H

View File

@ -32,7 +32,7 @@
#include "../../ml_document/raster_model.h"
/**
* @brief The IOMeshPlugin is the base class for all the single mesh loading plugins.
* @brief The IOPlugin is the base class for all the single mesh loading plugins.
*/
class IOPlugin : virtual public MeshLabPlugin, virtual public MeshLabPluginLogger
{
@ -43,14 +43,18 @@ public:
/**
* @brief The importFormats function returns a list of all the
* input file formats supported by the plugin.
* This function must be implemented on any IOMesh plugin.
* This function must be implemented on any IO plugin.
* If yout plugin does not import any mesh format, just return an
* empty list.
*/
virtual std::list<FileFormat> importFormats() const = 0;
/**
* @brief The exportFormats function returns a list of all the
* output file formats supported by the plugin.
* This function must be implemented on any IOMesh plugin.
* This function must be implemented on any IO plugin.
* If yout plugin does not export any mesh format, just return an
* empty list.
*/
virtual std::list<FileFormat> exportFormats() const = 0;

View File

@ -46,9 +46,9 @@ MeshLabPluginType::MeshLabPluginType(const MeshLabPlugin* fpi) : type(0)
if (iFilter){
type |= FILTER;
}
//IOMesh
const IOPlugin *iIOMesh = dynamic_cast<const IOPlugin *>(fpi);
if (iIOMesh) {
//IO
const IOPlugin *iIO = dynamic_cast<const IOPlugin *>(fpi);
if (iIO) {
type |= IO;
}
@ -82,7 +82,7 @@ bool MeshLabPluginType::isFilterPlugin() const
return type & FILTER;
}
bool MeshLabPluginType::isIOMeshPlugin() const
bool MeshLabPluginType::isIOPlugin() const
{
return type & IO;
}
@ -123,7 +123,7 @@ QString MeshLabPluginType::pluginTypeString() const
if (!type.isEmpty()) type += "|";
type += "Filter";
}
if (isIOMeshPlugin()){
if (isIOPlugin()){
if (!type.isEmpty()) type += "|";
type += "IO";
}

View File

@ -37,7 +37,7 @@ public:
bool isDecoratePlugin() const;
bool isEditPlugin() const;
bool isFilterPlugin() const;
bool isIOMeshPlugin() const;
bool isIOPlugin() const;
bool isRenderPlugin() const;
bool isMultipleTypePlugin() const;

View File

@ -207,8 +207,8 @@ void PluginManager::loadPlugin(const QString& fileName)
if (type.isFilterPlugin()){
filterPlugins.pushFilterPlugin(qobject_cast<FilterPlugin *>(plugin));
}
if (type.isIOMeshPlugin()){
ioMeshPlugins.pushIOMeshPlugin(qobject_cast<IOPlugin *>(plugin));
if (type.isIOPlugin()){
ioPlugins.pushIOPlugin(qobject_cast<IOPlugin *>(plugin));
}
if (type.isRenderPlugin()){
renderPlugins.pushRenderPlugin(qobject_cast<RenderPlugin *>(plugin));
@ -237,8 +237,8 @@ void PluginManager::unloadPlugin(MeshLabPlugin* ifp)
if (type.isFilterPlugin()){
filterPlugins.eraseFilterPlugin(dynamic_cast<FilterPlugin *>(ifp));
}
if (type.isIOMeshPlugin()){
ioMeshPlugins.eraseIOMeshPlugin(dynamic_cast<IOPlugin *>(ifp));
if (type.isIOPlugin()){
ioPlugins.eraseIOPlugin(dynamic_cast<IOPlugin *>(ifp));
}
if (type.isRenderPlugin()){
renderPlugins.eraseRenderPlugin(dynamic_cast<RenderPlugin *>(ifp));
@ -276,7 +276,7 @@ unsigned int PluginManager::size() const
int PluginManager::numberIOPlugins() const
{
return ioMeshPlugins.size();
return ioPlugins.size();
}
// Search among all the decorator plugins the one that contains a decoration with the given name
@ -292,62 +292,62 @@ QAction* PluginManager::filterAction(const QString& name)
IOPlugin* PluginManager::inputMeshPlugin(const QString& inputFormat) const
{
return ioMeshPlugins.inputMeshPlugin(inputFormat);
return ioPlugins.inputMeshPlugin(inputFormat);
}
IOPlugin* PluginManager::outputMeshPlugin(const QString& outputFormat) const
{
return ioMeshPlugins.outputMeshPlugin(outputFormat);
return ioPlugins.outputMeshPlugin(outputFormat);
}
IOPlugin* PluginManager::inputRasterPlugin(const QString inputFormat) const
{
return ioMeshPlugins.inputRasterPlugin(inputFormat);
return ioPlugins.inputRasterPlugin(inputFormat);
}
bool PluginManager::isInputMeshFormatSupported(const QString inputFormat) const
{
return ioMeshPlugins.isInputMeshFormatSupported(inputFormat);
return ioPlugins.isInputMeshFormatSupported(inputFormat);
}
bool PluginManager::isOutputMeshFormatSupported(const QString outputFormat) const
{
return ioMeshPlugins.isOutputMeshFormatSupported(outputFormat);
return ioPlugins.isOutputMeshFormatSupported(outputFormat);
}
bool PluginManager::isInputRasterFormatSupported(const QString inputFormat) const
{
return ioMeshPlugins.isInputRasterFormatSupported(inputFormat);
return ioPlugins.isInputRasterFormatSupported(inputFormat);
}
QStringList PluginManager::inputMeshFormatList() const
{
return ioMeshPlugins.inputMeshFormatList();
return ioPlugins.inputMeshFormatList();
}
QStringList PluginManager::outputMeshFormatList() const
{
return ioMeshPlugins.outputMeshFormatList();
return ioPlugins.outputMeshFormatList();
}
QStringList PluginManager::inputRasterFormatList() const
{
return ioMeshPlugins.inputRasterFormatList();
return ioPlugins.inputRasterFormatList();
}
QStringList PluginManager::inputMeshFormatListDialog() const
{
return inputFormatListDialog(ioMeshPluginIterator());
return inputFormatListDialog(ioPluginIterator());
}
QStringList PluginManager::outputMeshFormatListDialog() const
{
return outputFormatListDialog(ioMeshPluginIterator());
return outputFormatListDialog(ioPluginIterator());
}
QStringList PluginManager::inputRasterFormatListDialog() const
{
return inputRasterFormatListDialog(ioMeshPluginIterator());
return inputRasterFormatListDialog(ioPluginIterator());
}
MeshLabPlugin* PluginManager::operator[](unsigned int i) const
@ -365,9 +365,9 @@ FilterPluginContainer::FilterPluginRangeIterator PluginManager::filterPluginIter
return filterPlugins.filterPluginIterator(iterateAlsoDisabledPlugins);
}
IOMeshPluginContainer::IOMeshPluginRangeIterator PluginManager::ioMeshPluginIterator(bool iterateAlsoDisabledPlugins) const
IOPluginContainer::IOPluginRangeIterator PluginManager::ioPluginIterator(bool iterateAlsoDisabledPlugins) const
{
return ioMeshPlugins.ioMeshPluginIterator(iterateAlsoDisabledPlugins);
return ioPlugins.ioPluginIterator(iterateAlsoDisabledPlugins);
}
RenderPluginContainer::RenderPluginRangeIterator PluginManager::renderPluginIterator(bool iterateAlsoDisabledPlugins) const

View File

@ -27,7 +27,7 @@
#include "containers/decorate_plugin_container.h"
#include "containers/edit_plugin_container.h"
#include "containers/filter_plugin_container.h"
#include "containers/iomesh_plugin_container.h"
#include "containers/io_plugin_container.h"
#include "containers/render_plugin_container.h"
#include <QPluginLoader>
@ -80,7 +80,7 @@ public:
/** Member functions for range iterators **/
PluginRangeIterator pluginIterator(bool iterateAlsoDisabledPlugins = false) const;
FilterPluginContainer::FilterPluginRangeIterator filterPluginIterator(bool iterateAlsoDisabledPlugins = false) const;
IOMeshPluginContainer::IOMeshPluginRangeIterator ioMeshPluginIterator(bool iterateAlsoDisabledPlugins = false) const;
IOPluginContainer::IOPluginRangeIterator ioPluginIterator(bool iterateAlsoDisabledPlugins = false) const;
RenderPluginContainer::RenderPluginRangeIterator renderPluginIterator(bool iterateAlsoDisabledPlugins = false) const;
DecoratePluginContainer::DecoratePluginRangeIterator decoratePluginIterator(bool iterateAlsoDisabledPlugins = false) const;
EditPluginContainer::EditPluginFactoryRangeIterator editPluginFactoryIterator(bool iterateAlsoDisabledPlugins = false) const;
@ -93,7 +93,7 @@ private:
//Plugin containers: used for better organization of each type of plugin
// note: these containers do not own any plugin. Plugins are owned by the PluginManager
IOMeshPluginContainer ioMeshPlugins;
IOPluginContainer ioPlugins;
FilterPluginContainer filterPlugins;
RenderPluginContainer renderPlugins;
DecoratePluginContainer decoratePlugins;

View File

@ -178,7 +178,7 @@ void PluginInfoDialog::populateTreeWidget()
for(QAction *a: fpi->actions())
tmplist.push_back(a->text());
}
if (type.isIOMeshPlugin()){
if (type.isIOPlugin()){
IOPlugin* iopi = dynamic_cast<IOPlugin*>(fp);
for(const FileFormat& f: iopi->importFormats()){
QString formats;