@@ -20,34 +20,56 @@ def __init__(self, iface):
2020
2121 self .extentSelector .setCanvas (self .canvas )
2222 self .outputFormat = Utils .fillRasterOutputFormat ()
23+ self .layers = []
24+ self .maskLayers = []
2325
2426 self .setParamsStatus (
2527 [
2628 (self .inputLayerCombo , [SIGNAL ("currentIndexChanged(int)" ), SIGNAL ("editTextChanged(const QString &)" )] ),
2729 (self .outputFileEdit , SIGNAL ("textChanged(const QString &)" )),
28- (self .noDataSpin , SIGNAL ("valueChanged(int)" ), self .noDataCheck ),
29- ( self .extentSelector , [SIGNAL ("selectionStarted()" ), SIGNAL ("newExtentDefined()" )] )
30+ (self .noDataSpin , SIGNAL ("valueChanged(int)" ), self .noDataCheck , "1.7.0" ),
31+ (self .maskLayerCombo , [SIGNAL ("currentIndexChanged(int)" ), SIGNAL ("editTextChanged(const QString &)" )], self .maskModeRadio , "1.6.0" ),
32+ ( self .extentSelector , [SIGNAL ("selectionStarted()" ), SIGNAL ("newExtentDefined()" )] ),
33+ (self .modeStackedWidget , SIGNAL ("currentIndexChanged(int)" ))
3034 ]
3135 )
3236
3337 self .connect (self .selectInputFileButton , SIGNAL ("clicked()" ), self .fillInputFileEdit )
3438 self .connect (self .selectOutputFileButton , SIGNAL ("clicked()" ), self .fillOutputFileEdit )
39+ self .connect (self .selectMaskFileButton , SIGNAL ("clicked()" ), self .fillMaskFileEdit )
3540 self .connect (self .extentSelector , SIGNAL ("newExtentDefined()" ), self .checkRun )
3641 self .connect (self .extentSelector , SIGNAL ("selectionStarted()" ), self .checkRun )
3742
43+ self .connect (self .extentModeRadio , SIGNAL ("toggled(bool)" ), self .switchClippingMode )
44+
3845 def show_ (self ):
39- self .extentSelector . start ()
46+ self .switchClippingMode ()
4047 BasePluginWidget .show_ (self )
4148
4249 def onClosing (self ):
4350 self .extentSelector .stop ()
4451 BasePluginWidget .onClosing (self )
4552
53+ def switchClippingMode (self ):
54+ if self .extentModeRadio .isChecked ():
55+ index = 0
56+ self .extentSelector .start ()
57+ else :
58+ self .extentSelector .stop ()
59+ index = 1
60+ self .modeStackedWidget .setCurrentIndex ( index )
61+ self .checkRun ()
62+
4663 def checkRun (self ):
47- self .base .enableRun ( self .extentSelector .getExtent () != None )
64+ if self .extentModeRadio .isChecked ():
65+ enabler = self .extentSelector .isCoordsValid ()
66+ else :
67+ enabler = not self .getMaskFileName ().isEmpty ()
68+ self .base .enableRun ( enabler )
4869
4970 def onLayersChanged (self ):
5071 self .fillInputLayerCombo ()
72+ self .fillMaskLayerCombo ()
5173
5274 def fillInputLayerCombo (self ):
5375 self .inputLayerCombo .clear ()
@@ -74,26 +96,73 @@ def fillOutputFileEdit(self):
7496 self .outputFormat = Utils .fillRasterOutputFormat (lastUsedFilter , outputFile )
7597 self .outputFileEdit .setText (outputFile )
7698
99+ def fillMaskLayerCombo (self ):
100+ self .maskLayerCombo .clear ()
101+ self .maskLayers = filter ( lambda x : x .geometryType () == QGis .Polygon , Utils .LayerRegistry .instance ().getVectorLayers ()[0 ] )
102+ self .maskLayerCombo .addItems ( map ( lambda x : x .name (), self .maskLayers ) )
103+ self .checkRun ()
104+
105+ def fillMaskFileEdit ( self ):
106+ lastUsedFilter = Utils .FileFilter .lastUsedVectorFilter ()
107+ maskFile = Utils .FileDialog .getOpenFileName (self , self .tr ( "Select the mask file" ), Utils .FileFilter .allVectorsFilter (), lastUsedFilter )
108+ if maskFile .isEmpty ():
109+ return
110+ Utils .FileFilter .setLastUsedVectorFilter (lastUsedFilter )
111+
112+ self .maskLayerCombo .setCurrentIndex (- 1 )
113+ self .maskLayerCombo .setEditText ( maskFile )
114+ self .checkRun ()
115+
77116 def getArguments (self ):
117+ if not self .extentModeRadio .isChecked ():
118+ return self .getArgsModeMask ()
119+ return self .getArgsModeExtent ()
120+
121+ def getArgsModeExtent (self ):
122+ self .base .setPluginCommand ( "gdal_translate" )
78123 arguments = QStringList ()
79124 if self .noDataCheck .isChecked ():
80125 arguments << "-a_nodata"
81126 arguments << str (self .noDataSpin .value ())
82- if self .extentSelector .isCoordsValid ():
127+ if self .extentModeRadio . isChecked () and self . extentSelector .isCoordsValid ():
83128 rect = self .extentSelector .getExtent ()
84129 if rect != None :
85130 arguments << "-projwin"
86131 arguments << str (rect .xMinimum ())
87132 arguments << str (rect .yMaximum ())
88133 arguments << str (rect .xMaximum ())
89134 arguments << str (rect .yMinimum ())
135+ if Utils .GdalConfig .version () >= "1.7.0" :
136+ arguments << "-q"
90137 if not self .getOutputFileName ().isEmpty ():
91138 arguments << "-of"
92139 arguments << self .outputFormat
93140 arguments << self .getInputFileName ()
94141 arguments << self .getOutputFileName ()
95142 return arguments
96143
144+ def getArgsModeMask (self ):
145+ self .base .setPluginCommand ( "gdalwarp" )
146+ arguments = QStringList ()
147+ if self .noDataCheck .isChecked ():
148+ arguments << "-dstnodata"
149+ arguments << str (self .noDataSpin .value ())
150+ if self .maskModeRadio .isChecked ():
151+ mask = self .getMaskFileName ()
152+ if not mask .isEmpty ():
153+ arguments << "-q"
154+ arguments << "-cutline"
155+ arguments << mask
156+ arguments << "-dstalpha"
157+
158+ outputFn = self .getOutputFileName ()
159+ if not outputFn .isEmpty ():
160+ arguments << "-of"
161+ arguments << self .outputFormat
162+ arguments << self .getInputFileName ()
163+ arguments << outputFn
164+ return arguments
165+
97166 def getOutputFileName (self ):
98167 return self .outputFileEdit .text ()
99168
@@ -102,6 +171,11 @@ def getInputFileName(self):
102171 return self .layers [self .inputLayerCombo .currentIndex ()].source ()
103172 return self .inputLayerCombo .currentText ()
104173
174+ def getMaskFileName (self ):
175+ if self .maskLayerCombo .currentIndex () >= 0 :
176+ return self .maskLayers [self .maskLayerCombo .currentIndex ()].source ()
177+ return self .maskLayerCombo .currentText ()
178+
105179 def addLayerIntoCanvas (self , fileInfo ):
106180 self .iface .addRasterLayer (fileInfo .filePath ())
107181
0 commit comments