QGIS - Tvorba zásuvného modulu krok za krokem
Stránka obsahuje poznámky pro tvorbu vlastního zásuvného modulu pro aplikaci QGIS. Navržený modul má na vstupu dvě vektorové vrstvy - bodovou a polygonovou. Na výstupu vytvoří novou vektorovou vrstvu obsahující pouze body ležící uvnitř polygonů (viz příklad pro knihovnu OGR).
Minimální kód
Projekt obsahuje tři soubory:
- Soubor projektu sampleplugin.pro
# cesta k adresari se zdrojovymi texty QGISu
QGIS_DIR = /home/martin/src/qgis_trunk
TEMPLATE = lib
CONFIG = qt
QT += xml \
qt3support
unix:LIBS += -L/$$QGIS_DIR/lib \
-lqgis_core \
-lqgis_gui
INCLUDEPATH += $$QGIS_DIR/src/ui \
$$QGIS_DIR/src/plugins \
$$QGIS_DIR/src/gui \
$$QGIS_DIR/src/raster \
$$QGIS_DIR/src/core \
$$QGIS_DIR
SOURCES = qgssampleplugin.cpp
HEADERS = qgssampleplugin.h
DEST = sampleplugin.so
DEFINES += GUI_EXPORT= \
CORE_EXPORT=
- Hlavičkový soubor pluginu qgssampleplugin.h
#ifndef QGSSAMPLEPLUGIN_H
#define QGSSAMPLEPLUGIN_H
#include "qgisplugin.h"
/* Testovaci plugin pro QGIS - prostorove predikaty */
class QgsSamplePlugin: public QgisPlugin
{
public:
QgsSamplePlugin(QgisInterface *);
~QgsSamplePlugin();
void initGui();
void unload();
private:
QgisInterface *mIface;
};
#endif // QGSSAMPLEPLUGIN_H
- C++ soubor qgssampleplugin.cpp
#include "qgssampleplugin.h"
#ifdef WIN32
#define QGISEXTERN extern "C" __declspec( dllexport )
#else
#define QGISEXTERN extern "C"
#endif
QgsSamplePlugin::QgsSamplePlugin(QgisInterface* iface): mIface(iface)
{
}
QgsSamplePlugin::~QgsSamplePlugin()
{
}
// Zobrazit elementy GUI nastrojove listy a menu pluginu
void QgsSamplePlugin::initGui()
{
}
// Odstranit alokovane GUI elementy
void QgsSamplePlugin::unload()
{
}
// generator pluginu
QGISEXTERN QgisPlugin* classFactory(QgisInterface* iface)
{
return new QgsSamplePlugin(iface);
}
QGISEXTERN QString name()
{
return "Within";
}
QGISEXTERN QString description()
{
return "Prostorovy predikat within";
}
QGISEXTERN QString version()
{
return "0.00001";
}
// Typ pluginu (UI nebo MapLayer plugin)
QGISEXTERN int type()
{
return QgisPlugin::UI;
}
// Odstranit plugin
QGISEXTERN void unload(QgisPlugin* theQgsSamplePluginPointer)
{
delete theQgsSamplePluginPointer;
}
- Hlavička
#ifndef QGSSAMPLEPLUGIN_H
#define QGSSAMPLEPLUGIN_H
#include "qgisplugin.h"
#include <QObject>
class QAction;
/* Testovaci plugin pro QGIS - prostorove predikaty */
class QgsSamplePlugin: public QObject, public QgisPlugin
{
//Q_OBJECT
public:
QgsSamplePlugin(QgisInterface *);
~QgsSamplePlugin();
void initGui();
void unload();
private:
QgisInterface *mIface;
QAction *mAction;
private slots:
void calculate();
};
#endif // QGSSAMPLEPLUGIN_H
- C++ soubor
#include "qgssampleplugin.h"
#include "qgisinterface.h"
#include <QAction>
#ifdef WIN32
#define QGISEXTERN extern "C" __declspec( dllexport )
#else
#define QGISEXTERN extern "C"
#endif
QgsSamplePlugin::QgsSamplePlugin(QgisInterface* iface): mIface(iface), mAction(0)
{
}
QgsSamplePlugin::~QgsSamplePlugin()
{
}
// Zobrazit elementy GUI nastrojove listy a menu pluginu
void QgsSamplePlugin::initGui()
{
mAction = new QAction(tr("&Prostorovy predikat within"), this);
connect(mAction, SIGNAL(activated()), this, SLOT(calculate()));
mIface->addToolBarIcon(mAction);
mIface->addPluginToMenu(tr("&Prostorovy predikat"), mAction);
}
// Odstranit alokovane GUI elementy
void QgsSamplePlugin::unload()
{
mIface->removeToolBarIcon(mAction);
mIface->removePluginMenu(tr("&Prostorovy predikat within"), mAction);
delete mAction;
}
// generator pluginu
QGISEXTERN QgisPlugin* classFactory(QgisInterface* iface)
{
return new QgsSamplePlugin(iface);
}
QGISEXTERN QString name()
{
return "Within";
}
QGISEXTERN QString description()
{
return "Prostorovy predikat within";
}
QGISEXTERN QString version()
{
return "0.00001";
}
// Typ pluginu (UI nebo MapLayer plugin)
QGISEXTERN int type()
{
return QgisPlugin::UI;
}
// Odstranit plugin
QGISEXTERN void unload(QgisPlugin* theQgsSamplePluginPointer)
{
delete theQgsSamplePluginPointer;
}