📄 qgsgrassmodule.cpp
字号:
mItems.push_back(mi); } else if ( optionType == "field" ) { QgsGrassModuleField *mi = new QgsGrassModuleField ( mModule, this, key, e, gDocElem, gnode, mParent ); layout->addWidget ( mi ); mItems.push_back(mi); } else if ( optionType == "selection" ) { QgsGrassModuleSelection *mi = new QgsGrassModuleSelection ( mModule, this, key, e, gDocElem, gnode, mParent ); layout->addWidget ( mi ); mItems.push_back(mi); } else if ( optionType == "file" ) { QgsGrassModuleFile *mi = new QgsGrassModuleFile ( mModule, key, e, gDocElem, gnode, mParent ); layout->addWidget ( mi ); mItems.push_back(mi); } else if ( optionType == "flag" ) { QgsGrassModuleFlag *flag = new QgsGrassModuleFlag ( mModule, key, e, gDocElem, gnode, mParent ); layout->addWidget ( flag ); mItems.push_back(flag); } } n = n.nextSibling(); } // Create list of flags n = gDocElem.firstChild(); while( !n.isNull() ) { QDomElement e = n.toElement(); if( !e.isNull() ) { QString optionType = e.tagName(); QgsDebugMsg("optionType = " + optionType); if ( optionType == "flag" ) { QString name = e.attribute("name").trimmed(); QgsDebugMsg("name = " + name); mFlagNames.append( name ); } } n = n.nextSibling(); } layout->addStretch();}QStringList QgsGrassModuleStandardOptions::arguments(){ QStringList arg; for ( unsigned int i = 0; i < mItems.size(); i++ ) { QStringList list = mItems[i]->options(); for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { arg.append ( *it ); } } return arg;}QgsGrassModuleItem *QgsGrassModuleStandardOptions::item ( QString id ){ QgsDebugMsg("id = " + id); for ( unsigned int i = 0; i < mItems.size(); i++ ) { if ( mItems[i]->id() == id ) { return mItems[i]; } } QMessageBox::warning( 0, tr("Warning"), tr("Item with id ") + id + tr(" not found" ) ); return 0;}QStringList QgsGrassModuleStandardOptions::checkOutput(){ QgsDebugMsg("called."); QStringList list; for ( unsigned int i = 0; i < mItems.size(); i++ ) { if ( typeid(*(mItems[i])) != typeid (QgsGrassModuleOption) ) { continue; } QgsGrassModuleOption *opt = dynamic_cast<QgsGrassModuleOption *> ( mItems[i] ); QgsDebugMsg("opt->key() = " + opt->key()); if ( opt->isOutput() ) { QString out = opt->outputExists(); if ( !out.isNull() ) { list.append ( out ); } } } return list;}void QgsGrassModuleStandardOptions::freezeOutput(){ QgsDebugMsg("called.");#ifdef WIN32 for ( unsigned int i = 0; i < mItems.size(); i++ ) { if ( typeid(*(mItems[i])) != typeid (QgsGrassModuleOption) ) { continue; } QgsGrassModuleOption *opt = dynamic_cast<QgsGrassModuleOption *> ( mItems[i] ); QgsDebugMsg("opt->key() = " + opt->key()); if ( opt->isOutput() && opt->outputType() == QgsGrassModuleOption::Vector ) { QgsDebugMsg("freeze vector layers"); QChar sep = '/'; int nlayers = mCanvas->layerCount(); for ( int i = 0; i < nlayers; i++ ) { QgsMapLayer *layer = mCanvas->getZpos(i); if ( layer->type() != QgsMapLayer::VECTOR ) continue; QgsVectorLayer *vector = (QgsVectorLayer*)layer; if ( vector->providerType() != "grass" ) continue; //TODO dynamic_cast ? QgsGrassProvider *provider = (QgsGrassProvider *) vector->getDataProvider(); // TODO add map() mapset() location() gisbase() to grass provider QString source = QDir::cleanPath ( provider->dataSourceUri() ); QgsDebugMsg("source = " + source); // Check GISBASE and LOCATION QStringList split = QStringList::split ( sep, source ); if ( split.size() < 4 ) continue; split.pop_back(); // layer QString map = split.last(); split.pop_back(); // map QString mapset = split.last(); split.pop_back(); // mapset QString loc = source.remove ( QRegExp("/[^/]+/[^/]+/[^/]+$") ); loc = QDir(loc).canonicalPath(); QDir curlocDir ( QgsGrass::getDefaultGisdbase() + sep + QgsGrass::getDefaultLocation() ); QString curloc = curlocDir.canonicalPath(); if ( loc != curloc ) continue; if ( mapset != QgsGrass::getDefaultMapset() ) continue; if ( provider->isFrozen() ) continue; provider->freeze(); } } } #endif}void QgsGrassModuleStandardOptions::thawOutput(){ QgsDebugMsg("called.");#ifdef WIN32 for ( unsigned int i = 0; i < mItems.size(); i++ ) { if ( typeid(*(mItems[i])) != typeid (QgsGrassModuleOption) ) { continue; } QgsGrassModuleOption *opt = dynamic_cast<QgsGrassModuleOption *> ( mItems[i] ); QgsDebugMsg("opt->key() = " + opt->key()); if ( opt->isOutput() && opt->outputType() == QgsGrassModuleOption::Vector ) { QgsDebugMsg("thaw vector layers"); QChar sep = '/'; int nlayers = mCanvas->layerCount(); for ( int i = 0; i < nlayers; i++ ) { QgsMapLayer *layer = mCanvas->getZpos(i); if ( layer->type() != QgsMapLayer::VECTOR ) continue; QgsVectorLayer *vector = (QgsVectorLayer*)layer; if ( vector->providerType() != "grass" ) continue; //TODO dynamic_cast ? QgsGrassProvider *provider = (QgsGrassProvider *) vector->getDataProvider(); // TODO add map() mapset() location() gisbase() to grass provider QString source = QDir::cleanPath ( provider->dataSourceUri() ); QgsDebugMsg("source = " + source); // Check GISBASE and LOCATION QStringList split = QStringList::split ( sep, source ); if ( split.size() < 4 ) continue; split.pop_back(); // layer QString map = split.last(); split.pop_back(); // map QString mapset = split.last(); split.pop_back(); // mapset QString loc = source.remove ( QRegExp("/[^/]+/[^/]+/[^/]+$") ); loc = QDir(loc).canonicalPath(); QDir curlocDir ( QgsGrass::getDefaultGisdbase() + sep + QgsGrass::getDefaultLocation() ); QString curloc = curlocDir.canonicalPath(); if ( loc != curloc ) continue; if ( mapset != QgsGrass::getDefaultMapset() ) continue; if ( !provider->isFrozen() ) continue; provider->thaw(); } } } #endif}QStringList QgsGrassModuleStandardOptions::output(int type ){ QgsDebugMsg("called."); QStringList list; for ( unsigned int i = 0; i < mItems.size(); i++ ) { if ( typeid(*(mItems[i])) != typeid (QgsGrassModuleOption) ) { continue; } QgsGrassModuleOption *opt = dynamic_cast<QgsGrassModuleOption *> ( mItems[i] ); QgsDebugMsg("opt->key() = " + opt->key()); if ( opt->isOutput() ) { if ( opt->outputType() == type ) { QString out = opt->value(); list.append ( out ); } } } return list;}QStringList QgsGrassModuleStandardOptions::ready(){ QgsDebugMsg("QgsGrassModuleStandardOptions::ready()"); QStringList list; for ( unsigned int i = 0; i < mItems.size(); i++ ) { QString err = mItems[i]->ready(); if ( !err.isNull() ) { list.append ( err ); } } return list;}QStringList QgsGrassModuleStandardOptions::checkRegion(){ QgsDebugMsg("called."); QStringList list; struct Cell_head currentWindow; if ( !QgsGrass::region ( QgsGrass::getDefaultGisdbase(), QgsGrass::getDefaultLocation(), QgsGrass::getDefaultMapset(), ¤tWindow ) ) { QMessageBox::warning( 0, tr("Warning"), tr("Cannot get current region") ); return list; } for ( unsigned int i = 0; i < mItems.size(); i++ ) { if ( typeid(*(mItems[i])) != typeid (QgsGrassModuleInput) ) { continue; } struct Cell_head window; QgsGrassModuleInput *item = dynamic_cast<QgsGrassModuleInput *> (mItems[i]); int mapType; switch ( item->type() ) { case QgsGrassModuleInput::Raster : mapType = QgsGrass::Raster; break; case QgsGrassModuleInput::Vector : mapType = QgsGrass::Vector; break; } QStringList mm = item->currentMap().split("@"); QString map = mm.at(0); QString mapset = QgsGrass::getDefaultMapset(); if ( mm.size() > 1 ) mapset = mm.at(1); if ( !QgsGrass::mapRegion ( mapType, QgsGrass::getDefaultGisdbase(), QgsGrass::getDefaultLocation(), mapset, map, &window ) ) { QMessageBox::warning( 0, tr("Warning"), tr("Cannot check region " "of map ") + item->currentMap() ); continue; } if ( G_window_overlap ( ¤tWindow , window.north, window.south, window.east, window.west) == 0 ) { list.append ( item->currentMap() ); } } return list;}bool QgsGrassModuleStandardOptions::inputRegion ( struct Cell_head *window, bool all ){ QgsDebugMsg("called."); // Get current resolution if ( !QgsGrass::region ( QgsGrass::getDefaultGisdbase(), QgsGrass::getDefaultLocation(), QgsGrass::getDefaultMapset(), window ) ) { QMessageBox::warning( 0, tr("Warning"), tr("Cannot get current region" ) ); return false; } int rasterCount = 0; int vectorCount = 0; for ( unsigned int i = 0; i < mItems.size(); i++ ) { if ( typeid(*(mItems[i])) != typeid (QgsGrassModuleInput) ) { continue; } struct Cell_head mapWindow; QgsGrassModuleInput *item = dynamic_cast<QgsGrassModuleInput *> (mItems[i]); if ( !all && !item->useRegion() ) continue; int mapType; switch ( item->type() ) { case QgsGrassModuleInput::Raster : mapType = QgsGrass::Raster; break; case QgsGrassModuleInput::Vector : mapType = QgsGrass::Vector; break; } QStringList mm = item->currentMap().split("@"); QString map = mm.at(0); QString mapset = QgsGrass::getDefaultMapset(); if ( mm.size() > 1 ) mapset = mm.at(1); if ( !QgsGrass::mapRegion ( mapType, QgsGrass::getDefaultGisdbase(), QgsGrass::getDefaultLocation(), mapset, map, &mapWindow ) ) { QMessageBox::warning( 0, tr("Warning"), tr("Cannot set region " "of map ") + item->currentMap() ); return false; } // TODO: best way to set resolution ? if ( item->type() == QgsGrassModuleInput::Raster && rasterCount == 0 ) { QgsGrass::copyRegionResolution ( &mapWindow, window ); } if ( rasterCount + vectorCount == 0 ) { QgsGrass::copyRegionExtent ( &mapWindow, window ); } else { QgsGrass::extendRegion ( &mapWindow, window ); } if ( item->type() == QgsGrassModuleInput::Raster ) rasterCount++; else if ( item->type() == QgsGrassModuleInput::Vector ) vectorCount++; } G_adjust_Cell_head3 ( window, 0, 0, 0 ); return true;}bool QgsGrassModuleStandardOptions::requestsRegion(){ QgsDebugMsg("called."); for ( unsigned int i = 0; i < mItems.size(); i++ ) { if ( typeid(*(mItems[i])) != typeid (QgsGrassModuleInput) ) { continue; } QgsGrassModuleInput *item = dynamic_cast<QgsGrassModuleInput *> (mItems[i]); if ( item->useRegion() ) return true; } return false;}bool QgsGrassModuleStandardOptions::usesRegion (){ QgsDebugMsg("called."); for ( unsigned int i = 0; i < mItems.size(); i++ ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -