-
-
Notifications
You must be signed in to change notification settings - Fork 3k
/
qgsmaptooledit.cpp
123 lines (103 loc) · 3.41 KB
/
qgsmaptooledit.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/***************************************************************************
qgsmaptooledit.cpp - base class for editing map tools
---------------------
begin : Juli 2007
copyright : (C) 2007 by Marco Hugentobler
email : marco dot hugentobler at karto dot baug dot ethz dot ch
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
/* $Id$ */
#include "qgsmaptooledit.h"
#include "qgsproject.h"
#include "qgsmapcanvas.h"
#include "qgsrubberband.h"
#include "qgsvectorlayer.h"
#include <QKeyEvent>
#include <QSettings>
QgsMapToolEdit::QgsMapToolEdit(QgsMapCanvas* canvas): QgsMapTool(canvas)
{
mSnapper.setMapCanvas(canvas);
}
QgsMapToolEdit::~QgsMapToolEdit()
{
}
int QgsMapToolEdit::insertSegmentVerticesForSnap(const QList<QgsSnappingResult>& snapResults, QgsVectorLayer* editedLayer)
{
int returnval = 0;
QgsPoint layerPoint;
if(!editedLayer || !editedLayer->isEditable())
{
return 1;
}
//transform snaping coordinates to layer crs first
QList<QgsSnappingResult> transformedSnapResults = snapResults;
QList<QgsSnappingResult>::iterator it = transformedSnapResults.begin();
for(; it != transformedSnapResults.constEnd(); ++it)
{
QgsPoint layerPoint = toLayerCoords(editedLayer, it->snappedVertex);
it->snappedVertex = layerPoint;
}
return editedLayer->insertSegmentVerticesForSnap(transformedSnapResults);
}
QgsPoint QgsMapToolEdit::snapPointFromResults(const QList<QgsSnappingResult>& snapResults, const QPoint& screenCoords)
{
if(snapResults.size() < 1)
{
return toMapCoords(screenCoords);
}
else
{
return snapResults.constBegin()->snappedVertex;
}
}
QgsRubberBand* QgsMapToolEdit::createRubberBand(bool isPolygon)
{
QSettings settings;
QgsRubberBand* rb = new QgsRubberBand(mCanvas, isPolygon);
QColor color( settings.value("/qgis/digitizing/line_color_red", 255).toInt(),
settings.value("/qgis/digitizing/line_color_green", 0).toInt(),
settings.value("/qgis/digitizing/line_color_blue", 0).toInt());
rb->setColor(color);
rb->setWidth(settings.value("/qgis/digitizing/line_width", 1).toInt());
rb->show();
return rb;
}
QgsVectorLayer* QgsMapToolEdit::currentVectorLayer()
{
QgsMapLayer* currentLayer = mCanvas->currentLayer();
if(!currentLayer)
{
return 0;
}
QgsVectorLayer* vlayer = dynamic_cast<QgsVectorLayer*>(currentLayer);
if(!vlayer)
{
return 0;
}
return vlayer;
}
int QgsMapToolEdit::addTopologicalPoints(const QList<QgsPoint>& geom)
{
if(!mCanvas)
{
return 1;
}
//find out current vector layer
QgsVectorLayer *vlayer = currentVectorLayer();
if (!vlayer)
{
return 2;
}
QList<QgsPoint>::const_iterator list_it = geom.constBegin();
for(; list_it != geom.constEnd(); ++list_it)
{
vlayer->addTopologicalPoints(*list_it);
}
return 0;
}