GRASS modules can be run from QGIS GRASS Tools if QGIS was started from a GRASS shell or if a GRASS mapset was opened from QGIS. The modules work with GRASS data only.
It is easy to modify the menu and add new modules because both the menu and the modules are defined in XML configuration files. Below is described how to write new modules and modify menu tree.
The options of each module shown in module’s_*Options_*tab are created according to combination of definition in QGM (QGIS GRASS module) file and options definition in GRASS module or GRASS script — GMO (GRASS module options). Because each option in QGM is linked to one (or more) GMO, it is often useful if not necessary to see GMO. GMO are output by GRASS module if it is run with _*–interface-description_* option, the output is in XML format, for example:
r.to.vect --interface-description
Some GRASS modules have too many options which can be confusing for beginners. In QGM it is possible to define only some of them and possibly set some default values and/or hide some options with certain value. That means that more QGIS-GRASS modules can be defined for each GRASS module. For example the module r.to.vect was divided into three QGIS-GRASS modules with predefined “feature” option. The QGM definition is written in XML format file with extension .qgm, one for each QGIS-GRASS module. Configuration files are stored in _*qgis/src/plugins/grass/modules*_ directory and installed in _*share/qgis/grass/modules*_ directory. The name of the file should start with GRASS module name + a word describing the specific task. For example, the module which extracts vector lines from raster is called r.to.vect.line.qgm.
Here is an example of a configuration file:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE qgisgrassmodule SYSTEM "http://mrcc.com/qgisgrassmodule.dtd">
<qgisgrassmodule label="Generate aspect map from DEM" module="r.slope.aspect">
<option key="elevation" />
<option key="aspect" />
</qgisgrassmodule>
Each qgisgrassmodule tag can contain one or more option tags:
<option key="elevation" />
<flag key="o" answer="on" hidden="yes" />
<field key="column" layer="map" type="integer,double" label="Attribute field" />
<selection key="list" layerid="input" label="Cats" />
typeoption — this option can be used with vector layer to define the name of vector input type option, when module is run, the type of selected vector layer will be used for that option. For example (v.overlay.or.qgm):
<option key="ainput" typeoption="atype" layeroption="alayer" typemask="area,line" />
It means that if a layer is selected from combobox of this option the _*atype*_ option is automaticaly set to the layer’s type, and thus _*atype*_ does not have to be added at all.
layeroption — equivalent of typeoption for layer.
typmask — for vector input option defines allowed types. Only the layers of one of defined type are displayed in input. See v.overlay.or.qgm for example.
layer — the key attribute of the option which defines the vector this field should depend on
type — defines types of attribute fields which should be added to the field combobox, for example
<field key="column" layer="map" type="integer,double" label="Attribute field" />
It means that only the attribute fields of type in integer and double precision will appear in combobox. See v.what.vect for example (2 different vectors).
The idea QGIS-GRASS modules implementation is to use maximum information from GMO and only simplify the interface. Here are described some rules how information from GMO are used and in which order if not all of them are defined in GMO.
Each module must be represented also by a picture/icon which symbolizes the modules functionality. The pictures are also stored in plugins/grass/modules as SVG (.svg) or PNG (.png) files.
Currently there are supported 3 schemas for the picture:
The name of the picture starts with QGIS-GRASS module name to which is appended picture number, for example: v.overlay.and.1.svg, v.overlay.and.2.svg, v.overlay.and.3.svg. It is possible to combine SVG and PNG pictures.
SVG and PNG pictures can be generated from QGIS using Map Composer. The size of PNG images should be larger than the expected icon size, because it is expected to be later used in automatically generated documentation, where pictures will be used in larger size.
Because it can take long time until a new script is added to stable GRASS release and because some scripts can be useful only for QGIS GUI interface it is possible to add a ‘GRASS’ script to QGIS. The scripts should follow general requirements for GRASS scripts and they are located in qgis/src/plugins/grass/scripts.
GRASS Tools are intended mostly for beginners and not very experienced users. The basic rules are:
Technically, any option can be used. Some kinds of options however are not yet well supported, for example those which depend on other option. Here is a list (probably incomplete) of options which are not yet well supported and so should not be used at present:
Most modules have been added. If you need additional ones, please write to the qgis development mailing list, and list hereafter the modules you think are most important to be added.
You should post the name of a new QGIS-GRASS module, the name of the GRASS module and the options which you want to use. For example:
r.to.vect.area: r.to.vect input output feature=area
See also here for discussion on GRASS-QGIS relevant module list.
List hereafter the modules who should be removed, with a rationale for this suggestion (e.g.: some modules related to projections are difficult to understand, and of no general use). Please note: some modules have not been thoroughly tested. Please test them, and if you find any issue report it to the redmine (better still: fix it yourself and send the patch).