def _set_rubber_band(self): transform = self.canvas.getCoordinateTransform() rb_center = transform.toMapCoordinates(self.center) rb_tangent = transform.toMapCoordinates(self.tangent_point) rb_circle = QgsCircle( QgsPoint(rb_center.x(), rb_center.y()), rb_center.distance(rb_tangent.x(), rb_tangent.y())) circle_geom = QgsGeometry(rb_circle.toPolygon()) if self.rubber_band: self.rubber_band.reset(QgsWkbTypes.PolygonGeometry) self.rubber_band.addGeometry(circle_geom) self.circle = circle_geom
def handleRequest(self, context): """Simple Circle""" values = self.values(context) x = values['x'] y = values['y'] r = values['r'] f = QgsFeature() f.setAttributes([x, y, r]) f.setGeometry(QgsCircle(QgsPoint(x, y), r).toCircularString()) exporter = QgsJsonExporter() self.write(json.loads(exporter.exportFeature(f)), context)
def testQgsCircleRepr(self): c = QgsCircle(QgsPoint(1, 1), 2.0) self.assertEqual( c.__repr__(), '<QgsCircle: Circle (Center: Point (1 1), Radius: 2, Azimuth: 0)>')
def geomFromType(points, parameters, geomtype, layerType): """ Returns the geometry from a points list, with parameters for the specific geometry type to the layer type Parameters ---------- points: list of coordinates Contains at least one point parameters: list Can be empty, else it's a string needed for some geometry type geomtype: int Identifiant of the type of geometry (Circle from 2 points, Circle from center and diameter, etc.) layerType: int QGIS identifiant of the layer type (0: Point, 1: LineString, 2: Polygon) """ if (geomtype == "Circle2Points"): try: geom = QgsCircle.from2Points(QgsPoint(*[float(f) for f in points[0]]), QgsPoint(*[float(f) for f in points[1]])) if layerType == 0: return QgsGeometry(geom.center()) elif layerType == 1: return QgsGeometry(geom.toLineString()) else: return QgsGeometry(geom.toPolygon()) except: return None elif (geomtype == "Circle3Points"): try: geom = QgsCircle.from3Points(QgsPoint(*[float(f) for f in points[0]]), QgsPoint(*[float(f) for f in points[1]]), QgsPoint(*[float(f) for f in points[2]])) if layerType == 0: return QgsGeometry(geom.center()) elif layerType == 1: return QgsGeometry(geom.toLineString()) else: return QgsGeometry(geom.toPolygon()) except: return None elif (geomtype == "CircleCenterRadius"): try: geom = QgsCircle.fromCenterDiameter(QgsPoint(*[float(f) for f in points[0]]), float(parameters[0]) * 2.0) if layerType == 0: return QgsGeometry(geom.center()) elif layerType == 1: return QgsGeometry(geom.toLineString()) else: return QgsGeometry(geom.toPolygon()) except: return None elif (geomtype == "CircleCenterDiameter"): try: geom = QgsCircle.fromCenterDiameter(QgsPoint(*[float(f) for f in points[0]]), float(parameters[0])) if layerType == 0: return QgsGeometry(geom.center()) elif layerType == 1: return QgsGeometry(geom.toLineString()) else: return QgsGeometry(geom.toPolygon()) except: return None elif (geomtype == "Square2Points"): try: geom = QgsRegularPolygon(QgsPoint(*[float(f) for f in points[0]]), QgsPoint(*[float(f) for f in points[1]]), 4) if layerType == 0: return QgsGeometry(geom.center()) elif layerType == 1: return QgsGeometry(geom.toLineString()) else: return QgsGeometry(geom.toPolygon()) except: return None elif (geomtype == "Square2Diagonal"): # TODO: QgsRegularPolygon? return None elif (geomtype == "Rectangle2PointsHeight"): # TODO: projection des points suivant azimuth entre # points[0] et points[1]? return None elif (geomtype == "Rectangle3PointsDistance"): # TODO: voir code maptools return None elif (geomtype == "Rectangle3PointsProjected"): # TODO: voir code maptools return None elif (geomtype == "Line"): if layerType == 0: return None nb = len(points) if nb < 2: return None line = [] for p in points: line.append(QgsPoint(*[float(f) for f in p])) if layerType == 1: return QgsGeometry.fromPolyline(line) else: if line[0] != line[nb - 1]: line.append(line[0]) p = QgsPolygon() p.setExteriorRing(QgsLineString(line)) return QgsGeometry(p) return None elif (geomtype == "Point"): try: if layerType == 0: return QgsGeometry(QgsPoint(*[float(f) for f in points[0]])) else: return None except: return None return None
def testQgsCircleRepr(self): c = QgsCircle(QgsPoint(1, 1), 2.0) self.assertEqual(c.__repr__(), '<QgsCircle: Circle (Center: Point (1 1), Radius: 2, Azimuth: 0)>')