[QGIS Commit] r13022 - trunk/qgis/python/plugins/fTools/tools

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sun Mar 7 21:20:27 EST 2010


Author: cfarmer
Date: 2010-03-07 21:20:27 -0500 (Sun, 07 Mar 2010)
New Revision: 13022

Modified:
   trunk/qgis/python/plugins/fTools/tools/doRandPoints.py
   trunk/qgis/python/plugins/fTools/tools/doRegPoints.py
Log:
Both tools now uses project crs instead of None (or input vector layer if selected in regular points). Fixes #2494.

Modified: trunk/qgis/python/plugins/fTools/tools/doRandPoints.py
===================================================================
--- trunk/qgis/python/plugins/fTools/tools/doRandPoints.py	2010-03-08 02:14:14 UTC (rev 13021)
+++ trunk/qgis/python/plugins/fTools/tools/doRandPoints.py	2010-03-08 02:20:27 UTC (rev 13022)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 #-----------------------------------------------------------
 # 
 # Generate Random Points
@@ -47,213 +48,218 @@
         QObject.connect(self.inShape, SIGNAL("currentIndexChanged(QString)"), self.update)
         self.progressBar.setValue(0)
         self.setWindowTitle(self.tr("Random Points"))
-        mapCanvas = self.iface.mapCanvas()
-        for i in range(mapCanvas.layerCount()):
-            layer = mapCanvas.layer(i)
+        self.mapCanvas = self.iface.mapCanvas()
+        for i in range(self.mapCanvas.layerCount()):
+            layer = self.mapCanvas.layer(i)
             if (layer.type() == layer.VectorLayer and layer.geometryType() == QGis.Polygon) or layer.type() == layer.RasterLayer:
-            	self.inShape.addItem(layer.name())
+                self.inShape.addItem(layer.name())
 
-# If input layer is changed, update field list            		
+# If input layer is changed, update field list                
     def update(self, inputLayer):
         self.cmbField.clear()
         changedLayer = self.getMapLayerByName(inputLayer)
         if changedLayer.type() == changedLayer.VectorLayer:
-        	self.rdoStratified.setEnabled(True)
-        	self.rdoDensity.setEnabled(True)
-        	self.rdoField.setEnabled(True)
-        	self.label_4.setEnabled(True)
-        	changedLayer = self.getVectorLayerByName(inputLayer)
-        	changedFields = self.getFieldList(changedLayer)
-        	for i in changedFields:
-        		self.cmbField.addItem(unicode(changedFields[i].name()))
+            self.rdoStratified.setEnabled(True)
+            self.rdoDensity.setEnabled(True)
+            self.rdoField.setEnabled(True)
+            self.label_4.setEnabled(True)
+            changedLayer = self.getVectorLayerByName(inputLayer)
+            changedFields = self.getFieldList(changedLayer)
+            for i in changedFields:
+                self.cmbField.addItem(unicode(changedFields[i].name()))
         else:
-        	self.rdoUnstratified.setChecked(True)
-        	self.rdoStratified.setEnabled(False)
-        	self.rdoDensity.setEnabled(False)
-        	self.rdoField.setEnabled(False)
-        	self.spnStratified.setEnabled(False)
-        	self.spnDensity.setEnabled(False)
-        	self.cmbField.setEnabled(False)
-        	self.label_4.setEnabled(False)
+            self.rdoUnstratified.setChecked(True)
+            self.rdoStratified.setEnabled(False)
+            self.rdoDensity.setEnabled(False)
+            self.rdoField.setEnabled(False)
+            self.spnStratified.setEnabled(False)
+            self.spnDensity.setEnabled(False)
+            self.cmbField.setEnabled(False)
+            self.label_4.setEnabled(False)
 
 # when 'OK' button is pressed, gather required inputs, and initiate random points generation            
     def accept(self):
-	if self.inShape.currentText() == "":
-	    QMessageBox.information(self, self.tr("Random Points"), self.tr("No input layer specified"))
-	elif self.outShape.text() == "":
-	    QMessageBox.information(self, self.tr("Random Points"), self.tr("Please specify output shapefile"))
-	else:
-		inName = self.inShape.currentText()
-		self.progressBar.setValue(1)
-		outPath = self.outShape.text()
-		self.progressBar.setValue(2.5)
-		if outPath.contains("\\"):
-			outName = outPath.right((outPath.length() - outPath.lastIndexOf("\\")) - 1)
-		else:
-			outName = outPath.right((outPath.length() - outPath.lastIndexOf("/")) - 1)
-		if outName.endsWith(".shp"):
-			outName = outName.left(outName.length() - 4)
-		self.progressBar.setValue(5)
-		mLayer = self.getMapLayerByName(unicode(inName))
-		if mLayer.type() == mLayer.VectorLayer:
-			inLayer = QgsVectorLayer(unicode(mLayer.source(),'latin1'),  unicode(mLayer.name(),'latin1'),  unicode(mLayer.dataProvider().name()))
-			if self.rdoUnstratified.isChecked():
-				design = self.tr("unstratified")
-				value = self.spnUnstratified.value()
-			elif self.rdoStratified.isChecked():
-				design = self.tr("stratified")
-				value = self.spnStratified.value()
-			elif self.rdoDensity.isChecked():
-				design = self.tr("density")
-				value = self.spnDensity.value()
-			else:
-				design = self.tr("field")
-				value = unicode(self.cmbField.currentText())
-		elif mLayer.type() == mLayer.RasterLayer:
-			inLayer = QgsRasterLayer(unicode(mLayer.source(),'latin1'), unicode(mLayer.name(),'latin1'))
-			design = self.tr("unstratified")
-			value = self.spnUnstratified.value()
-		else:
-			QMessageBox.information(self, self.tr("Random Points"), self.tr("Unknown layer type..."))
-		if self.chkMinimum.isChecked():
-			minimum = self.spnMinimum.value()
-		else:
-			minimum = 0.00
-		self.progressBar.setValue(10)
-		self.randomize(inLayer, outPath, minimum, design, value, self.progressBar)
-		self.progressBar.setValue(100)
-		self.outShape.clear()
-		addToTOC = QMessageBox.question(self, self.tr("Random Points"), self.tr("Created output point shapefile:\n%1\n\nWould you like to add the new layer to the TOC?").arg(outPath), QMessageBox.Yes, QMessageBox.No, QMessageBox.NoButton)
-		if addToTOC == QMessageBox.Yes:
-			self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr")
-			QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)
-		self.progressBar.setValue(0)            
+        if self.inShape.currentText() == "":
+            QMessageBox.information(self, self.tr("Random Points"), self.tr("No input layer specified"))
+        elif self.outShape.text() == "":
+            QMessageBox.information(self, self.tr("Random Points"), self.tr("Please specify output shapefile"))
+        else:
+            inName = self.inShape.currentText()
+            self.progressBar.setValue(1)
+            outPath = self.outShape.text()
+            self.progressBar.setValue(2.5)
+            if outPath.contains("\\"):
+                outName = outPath.right((outPath.length() - outPath.lastIndexOf("\\")) - 1)
+            else:
+                outName = outPath.right((outPath.length() - outPath.lastIndexOf("/")) - 1)
+            if outName.endsWith(".shp"):
+                outName = outName.left(outName.length() - 4)
+            self.progressBar.setValue(5)
+            mLayer = self.getMapLayerByName(unicode(inName))
+            if mLayer.type() == mLayer.VectorLayer:
+                inLayer = QgsVectorLayer(unicode(mLayer.source()),  unicode(mLayer.name()),  unicode(mLayer.dataProvider().name()))
+                if self.rdoUnstratified.isChecked():
+                    design = self.tr("unstratified")
+                    value = self.spnUnstratified.value()
+                elif self.rdoStratified.isChecked():
+                    design = self.tr("stratified")
+                    value = self.spnStratified.value()
+                elif self.rdoDensity.isChecked():
+                    design = self.tr("density")
+                    value = self.spnDensity.value()
+                else:
+                    design = self.tr("field")
+                    value = unicode(self.cmbField.currentText())
+            elif mLayer.type() == mLayer.RasterLayer:
+                inLayer = QgsRasterLayer(unicode(mLayer.source()), unicode(mLayer.name()))
+                design = self.tr("unstratified")
+                value = self.spnUnstratified.value()
+            else:
+                QMessageBox.information(self, self.tr("Random Points"), self.tr("Unknown layer type..."))
+            if self.chkMinimum.isChecked():
+                minimum = self.spnMinimum.value()
+            else:
+                minimum = 0.00
+            self.progressBar.setValue(10)
+            self.randomize(inLayer, outPath, minimum, design, value)
+            self.progressBar.setValue(100)
+            self.outShape.clear()
+            addToTOC = QMessageBox.question(self, self.tr("Random Points"),
+            self.tr("Created output point shapefile:\n%1\n\nWould you like to add the new layer to the TOC?").arg(outPath), QMessageBox.Yes, QMessageBox.No, QMessageBox.NoButton)
+            if addToTOC == QMessageBox.Yes:
+                self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr")
+                QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)
+            self.progressBar.setValue(0)
 
     def outFile(self):
-		self.outShape.clear()
-		( self.shapefileName, self.encoding ) = ftools_utils.saveDialog( self )
-		if self.shapefileName is None or self.encoding is None:
-			return
-		self.outShape.setText( QString( self.shapefileName ) )
-			
+        self.outShape.clear()
+        ( self.shapefileName, self.encoding ) = ftools_utils.saveDialog( self )
+        if self.shapefileName is None or self.encoding is None:
+            return
+        self.outShape.setText( QString( self.shapefileName ) )
+    
 # combine all polygons in layer to create single polygon (slow for complex polygons)     
-    def createSinglePolygon(self, vlayer, progressBar):
-		provider = vlayer.dataProvider()
-		allAttrs = provider.attributeIndexes()
-		provider.select(allAttrs)
-		feat = QgsFeature()
-		geom = QgsGeometry()
-		geom2 = QgsGeometry()
-		provider.nextFeature(feat)
-		geom = feat.geometry()
-		count = 10.00
-		add = 40.00 / provider.featureCount()
-		provider.rewind()
-		provider.nextFeature(feat)
-		geom = QgsGeometry(feat.geometry())
-		while provider.nextFeature(feat):
-			geom = geom.combine(QgsGeometry( feat.geometry() ))
-			count = count + add
-			progressBar.setValue(count)
-		return geom
-	
+    def createSinglePolygon(self, vlayer):
+        provider = vlayer.dataProvider()
+        allAttrs = provider.attributeIndexes()
+        provider.select(allAttrs)
+        feat = QgsFeature()
+        geom = QgsGeometry()
+        geom2 = QgsGeometry()
+        provider.nextFeature(feat)
+        geom = feat.geometry()
+        count = 10.00
+        add = ( 40.00 - 10.00 ) / provider.featureCount()
+        provider.rewind()
+        provider.nextFeature(feat)
+        geom = QgsGeometry(feat.geometry())
+        while provider.nextFeature(feat):
+            geom = geom.combine(QgsGeometry( feat.geometry() ))
+            count = count + add
+            self.progressBar.setValue(count)
+        return geom
+    
 # Generate list of random points     
     def simpleRandom(self, n, bound, xmin, xmax, ymin, ymax):
-		seed()
-		points = []
-		i = 1
-		while i <= n:
-			pGeom = QgsGeometry().fromPoint(QgsPoint(xmin + (xmax-xmin) * random(), ymin + (ymax-ymin) * random()))
-			if pGeom.intersects(bound):
-				points.append(pGeom)
-				i = i + 1
-		return points
-	
+        seed()
+        points = []
+        i = 1
+        count = 40.00
+        add = ( 70.00 - 40.00 ) / n
+        while i <= n:
+            pGeom = QgsGeometry().fromPoint(QgsPoint(xmin + (xmax-xmin) * random(), ymin + (ymax-ymin) * random()))
+            if pGeom.intersects(bound):
+                points.append(pGeom)
+                i = i + 1
+                count = count + add
+                self.progressBar.setValue(count)
+        return points
+    
 # Get vector layer by name from TOC     
     def getVectorLayerByName(self, myName):
-		mc = self.iface.mapCanvas()
-		nLayers = mc.layerCount()
-		for l in range(nLayers):
-			layer = mc.layer(l)
-			if layer.name() == unicode(myName):
-				vlayer = QgsVectorLayer(unicode(layer.source()),  unicode(myName),  unicode(layer.dataProvider().name()))
-				if vlayer.isValid():
-					return vlayer
-				else:
-					QMessageBox.information(self, self.tr("Generate Centroids"), self.tr("Vector layer is not valid"))
-	
+        mc = self.mapCanvas
+        nLayers = mc.layerCount()
+        for l in range(nLayers):
+            layer = mc.layer(l)
+            if layer.name() == unicode(myName):
+                vlayer = QgsVectorLayer(unicode(layer.source()),  unicode(myName),  unicode(layer.dataProvider().name()))
+                if vlayer.isValid():
+                    return vlayer
+                else:
+                    QMessageBox.information(self, self.tr("Random Points"), self.tr("Vector layer is not valid"))
+    
 # Get map layer by name from TOC     
     def getMapLayerByName(self, myName):
-    	mc = self.iface.mapCanvas()
-    	nLayers = mc.layerCount()
-    	for l in range(nLayers):
-    		layer = mc.layer(l)
-    		if layer.name() == unicode(myName):
-    			if layer.isValid():
-    				return layer
+        mc = self.mapCanvas
+        nLayers = mc.layerCount()
+        for l in range(nLayers):
+            layer = mc.layer(l)
+            if layer.name() == unicode(myName):
+                if layer.isValid():
+                    return layer
 # Retrieve the field map of a vector Layer
     def getFieldList(self, vlayer):
-    	fProvider = vlayer.dataProvider()
-    	feat = QgsFeature()
-    	allAttrs = fProvider.attributeIndexes()
-    	fProvider.select(allAttrs)
-    	myFields = fProvider.fields()
-    	return myFields
-	
+        fProvider = vlayer.dataProvider()
+        feat = QgsFeature()
+        allAttrs = fProvider.attributeIndexes()
+        fProvider.select(allAttrs)
+        myFields = fProvider.fields()
+        return myFields
+    
 
-    def randomize(self, inLayer, outPath, minimum, design, value, progressBar):
-		outFeat = QgsFeature()
-		if design == self.tr("unstratified"):
-			ext = inLayer.extent()
-			if inLayer.type() == inLayer.RasterLayer: bound = ext
-			else: bound = self.createSinglePolygon(inLayer, progressBar)
-			points = self.simpleRandom(int(value), bound, ext.xMinimum(), ext.xMaximum(), ext.yMinimum(), ext.yMaximum())
-			progressBar.setValue(70)
-		else: points = self.loopThruPolygons(inLayer, value, design, progressBar)
-
-		fields = { 0 : QgsField("ID", QVariant.Int) }
-		check = QFile(self.shapefileName)
-		if check.exists():
-			if not QgsVectorFileWriter.deleteShapeFile(self.shapefileName):
-				return
-		writer = QgsVectorFileWriter(self.shapefileName, self.encoding, fields, QGis.WKBPoint, None)
-		idVar = 0
-		count = 70.00
-		add = 30.00 / len(points)
-		for i in points:
-			outFeat.setGeometry(i)
-			outFeat.addAttribute(0, QVariant(idVar))
-			writer.addFeature(outFeat)
-			idVar = idVar + 1
-			count = count + add
-			progressBar.setValue(count)
-		del writer
-	
+    def randomize(self, inLayer, outPath, minimum, design, value):
+        outFeat = QgsFeature()
+        if design == self.tr("unstratified"):
+            ext = inLayer.extent()
+            if inLayer.type() == inLayer.RasterLayer: bound = ext
+            else: bound = self.createSinglePolygon(inLayer)
+            points = self.simpleRandom(int(value), bound, ext.xMinimum(), ext.xMaximum(), ext.yMinimum(), ext.yMaximum())
+        else: points = self.loopThruPolygons(inLayer, value, design)
+        crs = self.mapCanvas.mapRenderer().destinationSrs()
+        if not crs.isValid(): crs = None
+        fields = { 0 : QgsField("ID", QVariant.Int) }
+        check = QFile(self.shapefileName)
+        if check.exists():
+            if not QgsVectorFileWriter.deleteShapeFile(self.shapefileName):
+                return
+        writer = QgsVectorFileWriter(self.shapefileName, self.encoding, fields, QGis.WKBPoint, crs)
+        idVar = 0
+        count = 70.00
+        add = ( 100.00 - 70.00 ) / len(points)
+        for i in points:
+            outFeat.setGeometry(i)
+            outFeat.addAttribute(0, QVariant(idVar))
+            writer.addFeature(outFeat)
+            idVar = idVar + 1
+            count = count + add
+            self.progressBar.setValue(count)
+        del writer
+    
 #   
-    def loopThruPolygons(self, inLayer, numRand, design, progressBar):
-		sProvider = inLayer.dataProvider()
-		sAllAttrs = sProvider.attributeIndexes()
-		sProvider.select(sAllAttrs)
-		sFeat = QgsFeature()
-		sGeom = QgsGeometry()
-		sPoints = []
-		if design == "field":
-			for (i, attr) in sProvider.fields().iteritems():
-				if (unicode(numRand) == attr.name()): index = i #get input field index
-		count = 10.00
-		add = 60.00 / sProvider.featureCount()
-		while sProvider.nextFeature(sFeat):
-			sGeom = sFeat.geometry()
-			if design == self.tr("density"):
-				sDistArea = QgsDistanceArea()
-				value = int(round(numRand * sDistArea.measure(sGeom)))
-			elif design == self.tr("field"):
-				sAtMap = sFeat.attributeMap()
-				value = sAtMap[index].toInt()[0]
-			else:
-				value = numRand
-			sExt = sGeom.boundingBox()
-			sPoints.extend(self.simpleRandom(value, sGeom, sExt.xMinimum(), sExt.xMaximum(), sExt.yMinimum(), sExt.yMaximum()))
-			count = count + add
-			progressBar.setValue(count)
-		return sPoints
+    def loopThruPolygons(self, inLayer, numRand, design):
+        sProvider = inLayer.dataProvider()
+        sAllAttrs = sProvider.attributeIndexes()
+        sProvider.select(sAllAttrs)
+        sFeat = QgsFeature()
+        sGeom = QgsGeometry()
+        sPoints = []
+        if design == "field":
+            for (i, attr) in sProvider.fields().iteritems():
+                if (unicode(numRand) == attr.name()): index = i #get input field index
+        count = 10.00
+        add = 60.00 / sProvider.featureCount()
+        while sProvider.nextFeature(sFeat):
+            sGeom = sFeat.geometry()
+            if design == self.tr("density"):
+                sDistArea = QgsDistanceArea()
+                value = int(round(numRand * sDistArea.measure(sGeom)))
+            elif design == self.tr("field"):
+                sAtMap = sFeat.attributeMap()
+                value = sAtMap[index].toInt()[0]
+            else:
+                value = numRand
+            sExt = sGeom.boundingBox()
+            sPoints.extend(self.simpleRandom(value, sGeom, sExt.xMinimum(), sExt.xMaximum(), sExt.yMinimum(), sExt.yMaximum()))
+            count = count + add
+            self.progressBar.setValue(count)
+        return sPoints

Modified: trunk/qgis/python/plugins/fTools/tools/doRegPoints.py
===================================================================
--- trunk/qgis/python/plugins/fTools/tools/doRegPoints.py	2010-03-08 02:14:14 UTC (rev 13021)
+++ trunk/qgis/python/plugins/fTools/tools/doRegPoints.py	2010-03-08 02:20:27 UTC (rev 13022)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 #-----------------------------------------------------------
 # 
 # Generate Regular Points
@@ -39,131 +40,135 @@
 from ui_frmRegPoints import Ui_Dialog
 
 class Dialog(QDialog, Ui_Dialog):
-	def __init__(self, iface):
-		QDialog.__init__(self)
-		self.iface = iface
-		self.setupUi(self)
-		QObject.connect(self.toolOut, SIGNAL("clicked()"), self.outFile)
-		self.setWindowTitle( self.tr("Regular points") )
-		self.progressBar.setValue(0)
-		mapCanvas = self.iface.mapCanvas()
-		for i in range(mapCanvas.layerCount()):
-			layer = mapCanvas.layer(i)
-			self.inShape.addItem(layer.name())
+    def __init__(self, iface):
+        QDialog.__init__(self)
+        self.iface = iface
+        self.setupUi(self)
+        QObject.connect(self.toolOut, SIGNAL("clicked()"), self.outFile)
+        self.setWindowTitle( self.tr("Regular points") )
+        self.progressBar.setValue(0)
+        self.mapCanvas = self.iface.mapCanvas()
+        for i in range(self.mapCanvas.layerCount()):
+            layer = self.mapCanvas.layer(i)
+            self.inShape.addItem(layer.name())
 
-	def accept(self):
-		if not self.rdoCoordinates.isChecked() and self.inShape.currentText() == "":
-			QMessageBox.information(self, self.tr("Generate Regular Points"), self.tr("Please specify input layer"))
-		elif self.rdoCoordinates.isChecked() and (self.xMin.text() == "" or self.xMax.text() == "" or self.yMin.text() == "" or self.yMax.text() == ""):
-			QMessageBox.information(self, self.tr("Generate Regular Points"), self.tr("Please properly specify extent coordinates"))
-		elif self.outShape.text() == "":
-			QMessageBox.information(self, self.tr("Generate Regular Points"), self.tr("Please specify output shapefile"))
-		else:
-			inName = self.inShape.currentText()
-			outPath = self.outShape.text()
-			self.outShape.clear()
-			if outPath.contains("\\"):
-				outName = outPath.right((outPath.length() - outPath.lastIndexOf("\\")) - 1)
-			else:
-				outName = outPath.right((outPath.length() - outPath.lastIndexOf("/")) - 1)
-			if outName.endsWith(".shp"):
-				outName = outName.left(outName.length() - 4)
-			if self.rdoSpacing.isChecked(): value = self.spnSpacing.value()
-			else: value = self.spnNumber.value()
-			if self.chkRandom.isChecked(): offset = True
-			else: offset = False
-			if self.rdoBoundary.isChecked():
-				mLayer = self.getMapLayerByName(unicode(inName))
-				boundBox = mLayer.extent()
-			else:
-				boundBox = QgsRectangle(float(self.xMin.text()), float(self.yMin.text()), float(self.xMax.text()), float(self.yMax.text()))
-			self.regularize(boundBox, outPath, offset, value, self.rdoSpacing.isChecked(), self.spnInset.value(), self.progressBar)
-			addToTOC = QMessageBox.question(self, self.tr("Generate Regular Points"), self.tr("Created output point shapefile:\n%1\n\nNote: Layer has no associated coordinate system, please use the Projection Management Tool to specify spatial reference system.\n\nWould you like to add the new layer to the TOC?").arg( outPath ), QMessageBox.Yes, QMessageBox.No, QMessageBox.NoButton)
-			if addToTOC == QMessageBox.Yes:
-				self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr")
-				QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)
-			self.progressBar.setValue(0)
+    def accept(self):
+        if not self.rdoCoordinates.isChecked() and self.inShape.currentText() == "":
+            QMessageBox.information(self, self.tr("Generate Regular Points"), self.tr("Please specify input layer"))
+        elif self.rdoCoordinates.isChecked() and (self.xMin.text() == "" or self.xMax.text() == "" or self.yMin.text() == "" or self.yMax.text() == ""):
+            QMessageBox.information(self, self.tr("Generate Regular Points"), self.tr("Please properly specify extent coordinates"))
+        elif self.outShape.text() == "":
+            QMessageBox.information(self, self.tr("Generate Regular Points"), self.tr("Please specify output shapefile"))
+        else:
+            inName = self.inShape.currentText()
+            outPath = self.outShape.text()
+            self.outShape.clear()
+            if outPath.contains("\\"):
+                outName = outPath.right((outPath.length() - outPath.lastIndexOf("\\")) - 1)
+            else:
+                outName = outPath.right((outPath.length() - outPath.lastIndexOf("/")) - 1)
+            if outName.endsWith(".shp"):
+                outName = outName.left(outName.length() - 4)
+            if self.rdoSpacing.isChecked(): value = self.spnSpacing.value()
+            else: value = self.spnNumber.value()
+            if self.chkRandom.isChecked(): offset = True
+            else: offset = False
+            if self.rdoBoundary.isChecked():
+                mLayer = self.getMapLayerByName(unicode(inName))
+                boundBox = mLayer.extent()
+                crs = mLayer.crs()
+            else:
+                boundBox = QgsRectangle(float(self.xMin.text()), float(self.yMin.text()), float(self.xMax.text()), float(self.yMax.text()))
+                crs = self.mapCanvas.mapRenderer().destinationSrs()
+                print crs.isValid()
+                if not crs.isValid(): crs = None
+            self.regularize(boundBox, outPath, offset, value, self.rdoSpacing.isChecked(), self.spnInset.value(), crs)
+            addToTOC = QMessageBox.question(self, self.tr("Generate Regular Points"), self.tr("Created output point shapefile:\n%1\n\nWould you like to add the new layer to the TOC?").arg( outPath ), QMessageBox.Yes, QMessageBox.No, QMessageBox.NoButton)
+            if addToTOC == QMessageBox.Yes:
+                self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr")
+                QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)
+            self.progressBar.setValue(0)
 
-	def outFile(self):
-		self.outShape.clear()
-		( self.shapefileName, self.encoding ) = ftools_utils.saveDialog( self )
-		if self.shapefileName is None or self.encoding is None:
-			return
-		self.outShape.setText( QString( self.shapefileName ) )
-	
+    def outFile(self):
+        self.outShape.clear()
+        ( self.shapefileName, self.encoding ) = ftools_utils.saveDialog( self )
+        if self.shapefileName is None or self.encoding is None:
+            return
+        self.outShape.setText( QString( self.shapefileName ) )
+    
 # Generate list of random points     
-	def simpleRandom(self, n, bound, xmin, xmax, ymin, ymax):
-		seed()
-		points = []
-		i = 1
-		while i <= n:
-			pGeom = QgsGeometry().fromPoint(QgsPoint(xmin + (xmax-xmin) * random(), ymin + (ymax-ymin) * random()))
-			if pGeom.intersects(bound):
-				points.append(pGeom)
-				i = i + 1
-		return points
-	
+    def simpleRandom(self, n, bound, xmin, xmax, ymin, ymax):
+        seed()
+        points = []
+        i = 1
+        while i <= n:
+            pGeom = QgsGeometry().fromPoint(QgsPoint(xmin + (xmax-xmin) * random(), ymin + (ymax-ymin) * random()))
+            if pGeom.intersects(bound):
+                points.append(pGeom)
+                i = i + 1
+        return points
+    
 # Get vector layer by name from TOC     
-	def getVectorLayerByName(self, myName):
-		mc = self.iface.mapCanvas()
-		nLayers = mc.layerCount()
-		for l in range(nLayers):
-			layer = mc.layer(l)
-			if layer.name() == unicode(myName):
-				vlayer = QgsVectorLayer(unicode(layer.source()),  unicode(myName),  unicode(layer.dataProvider().name()))
-				if vlayer.isValid():
-					return vlayer
-				else:
-					QMessageBox.information(self, self.tr("Generate Regular Points"), self.tr("Vector layer is not valid"))
-	
+    def getVectorLayerByName(self, myName):
+        mc = self.mapCanvas
+        nLayers = mc.layerCount()
+        for l in range(nLayers):
+            layer = mc.layer(l)
+            if layer.name() == unicode(myName):
+                vlayer = QgsVectorLayer(unicode(layer.source()),  unicode(myName),  unicode(layer.dataProvider().name()))
+                if vlayer.isValid():
+                    return vlayer
+                else:
+                    QMessageBox.information(self, self.tr("Generate Regular Points"), self.tr("Vector layer is not valid"))
+    
 # Get map layer by name from TOC     
-	def getMapLayerByName(self, myName):
-		mc = self.iface.mapCanvas()
-		nLayers = mc.layerCount()
-		for l in range(nLayers):
-			layer = mc.layer(l)
-			if layer.name() == unicode(myName):
-				if layer.isValid():
-					return layer
-	
+    def getMapLayerByName(self, myName):
+        mc = self.mapCanvas
+        nLayers = mc.layerCount()
+        for l in range(nLayers):
+            layer = mc.layer(l)
+            if layer.name() == unicode(myName):
+                if layer.isValid():
+                    return layer
+    
  
-	def regularize(self, bound, outPath, offset, value, gridType, inset, progressBar):
-		area = bound.width() * bound.height()
-		if offset:
-			seed()
-		if gridType:
-			pointSpacing = value
-		else:
-			# Calculate grid spacing
-			pointSpacing = sqrt(area / value)
-		outFeat = QgsFeature()
-		fields = { 0 : QgsField("ID", QVariant.Int) }
-		check = QFile(self.shapefileName)
-		if check.exists():
-			if not QgsVectorFileWriter.deleteShapeFile(self.shapefileName):
-				return
-		writer = QgsVectorFileWriter(self.shapefileName, self.encoding, fields, QGis.WKBPoint, None)
-		#writer = QgsVectorFileWriter(unicode(outPath), "CP1250", fields, QGis.WKBPoint, None)
-		idVar = 0
-		count = 10.00
-		add = 90.00 / (area / pointSpacing)
-		y = bound.yMaximum() - inset
-		while y >= bound.yMinimum():
-			x = bound.xMinimum() + inset
-			while x <= bound.xMaximum():
-				if offset:
-					pGeom = QgsGeometry().fromPoint(QgsPoint(uniform(x - (pointSpacing / 2.0), x + (pointSpacing / 2.0)), 
-					uniform(y - (pointSpacing / 2.0), y + (pointSpacing / 2.0))))
-				else:
-					pGeom = QgsGeometry().fromPoint(QgsPoint(x, y))
-				if pGeom.intersects(bound):
-					outFeat.setGeometry(pGeom)
-					outFeat.addAttribute(0, QVariant(idVar))
-					writer.addFeature(outFeat)
-					idVar = idVar + 1
-					x = x + pointSpacing
-					count = count + add
-					progressBar.setValue(count)
-			y = y - pointSpacing
-		del writer
+    def regularize(self, bound, outPath, offset, value, gridType, inset, crs):
+        area = bound.width() * bound.height()
+        if offset:
+            seed()
+        if gridType:
+            pointSpacing = value
+        else:
+            # Calculate grid spacing
+            pointSpacing = sqrt(area / value)
+        outFeat = QgsFeature()
+        fields = { 0 : QgsField("ID", QVariant.Int) }
+        check = QFile(self.shapefileName)
+        if check.exists():
+            if not QgsVectorFileWriter.deleteShapeFile(self.shapefileName):
+                return
+        writer = QgsVectorFileWriter(self.shapefileName, self.encoding, fields, QGis.WKBPoint, crs)
+        #writer = QgsVectorFileWriter(unicode(outPath), "CP1250", fields, QGis.WKBPoint, None)
+        idVar = 0
+        count = 10.00
+        add = 90.00 / (area / pointSpacing)
+        y = bound.yMaximum() - inset
+        while y >= bound.yMinimum():
+            x = bound.xMinimum() + inset
+            while x <= bound.xMaximum():
+                if offset:
+                    pGeom = QgsGeometry().fromPoint(QgsPoint(uniform(x - (pointSpacing / 2.0), x + (pointSpacing / 2.0)),
+                    uniform(y - (pointSpacing / 2.0), y + (pointSpacing / 2.0))))
+                else:
+                    pGeom = QgsGeometry().fromPoint(QgsPoint(x, y))
+                if pGeom.intersects(bound):
+                    outFeat.setGeometry(pGeom)
+                    outFeat.addAttribute(0, QVariant(idVar))
+                    writer.addFeature(outFeat)
+                    idVar = idVar + 1
+                    x = x + pointSpacing
+                    count = count + add
+                    self.progressBar.setValue(count)
+            y = y - pointSpacing
+        del writer
 



More information about the QGIS-commit mailing list