17. Een plug-in voor Processing schrijven
Afhankelijk van het soort plug-in dat u gaat ontwikkelen, zou het misschien een betere optie zijn om de functionaliteit ervan toe te voegen als een algoritme voor Processing (of een set daarvan). Dat zou tot een betere integratie in QGIS leiden, aanvullende functionaliteit (omdat het kan worden uitgevoerd in de componenten van Processing, zoals Grafische modellen bouwen of de Processing interface voor batchverwerking), en een snellere ontwikkelingstijd (omdat Processing een groot deel van het werk zal overnemen).
U zou, om deze algoritmen te kunnen distribueren, een nieuwe plug-in moeten maken die ze toevoegt aan de Toolbox van Processing. De plug-in zou een provider voor algoritmen moeten bevatten, die moet worden geregistreerd als de plug-in wordt geïnstantieerd.
17.1. Maken vanaf niets
U kunt de volgende stappen volgen, met behulp van de Plugin Builder, om vanaf nul een plug-in te maken die een provider voor algoritmen bevat:
Installeer de plug-in Plugin Builder
Maak een nieuwe plug-in met de Plugin Builder. Wanneer de Plugin Builder u vraagt naar het te gebruiken sjabloon, selecteer dan “Processing provider”.
De gemaakte plug-in bevat een provider met één enkel algoritme. Zowel het bestand voor de provider als het bestand voor het algoritme zijn volledig voorzien van commentaar en bevatten informatie over hoe de provider aan te passen en aanvullende algoritmen toe te voegen. Verwijs daarnaar voor meer meer informatie.
17.2. Een plug-in bijwerken
U dient nog enige code toe te voegen als u uw bestaande plug-in wilt toevoegen aan Processing.
In uw bestand
metadata.txt
moet u een variabele toevoegen:hasProcessingProvider=yes
In het bestand van Python waar uw plug-in wordt ingesteld met de methode
initGui
, dient u enkele regels als volgt aan te passen:1from qgis.core import QgsApplication 2from processing_provider.provider import Provider 3 4class YourPluginName(): 5 6 def __init__(self): 7 self.provider = None 8 9 def initProcessing(self): 10 self.provider = Provider() 11 QgsApplication.processingRegistry().addProvider(self.provider) 12 13 def initGui(self): 14 self.initProcessing() 15 16 def unload(self): 17 QgsApplication.processingRegistry().removeProvider(self.provider)
U kunt een map
processing_provider
maken met daarin drie bestanden:__init__.py
waar niets in staat. Dit is noodzakelijk om een geldig pakket voor Python te maken.provider.py
dat de provider voor Processing zal maken en uw algoritmen zal laten zien.1from qgis.core import QgsProcessingProvider 2 3from processing_provider.example_processing_algorithm import ExampleProcessingAlgorithm 4 5 6class Provider(QgsProcessingProvider): 7 8 def loadAlgorithms(self, *args, **kwargs): 9 self.addAlgorithm(ExampleProcessingAlgorithm()) 10 # add additional algorithms here 11 # self.addAlgorithm(MyOtherAlgorithm()) 12 13 def id(self, *args, **kwargs): 14 """The ID of your plugin, used for identifying the provider. 15 16 This string should be a unique, short, character only string, 17 eg "qgis" or "gdal". This string should not be localised. 18 """ 19 return 'yourplugin' 20 21 def name(self, *args, **kwargs): 22 """The human friendly name of your plugin in Processing. 23 24 This string should be as short as possible (e.g. "Lastools", not 25 "Lastools version 1.0.1 64-bit") and localised. 26 """ 27 return self.tr('Your plugin') 28 29 def icon(self): 30 """Should return a QIcon which is used for your provider inside 31 the Processing toolbox. 32 """ 33 return QgsProcessingProvider.icon(self)
example_processing_algorithm.py
wat het voorbeeldbestand voor een algoritme bevat. Kopieer/plak de inhoud van het bestand script template en werk dat naar behoefte bij.
Nu kunt u uw plug-in opnieuw laden in QGIS en u zou uw voorbeeldscript moeten zien in de Toolbox en Grafische modellen bouwen van Processing.