QGIS API Documentation 3.99.0-Master (2fe06baccd8)
Loading...
Searching...
No Matches
qgsadvanceddigitizingdockwidget.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsadvanceddigitizingdockwidget.h - dock for CAD tools
3 ----------------------
4 begin : October 2014
5 copyright : (C) Denis Rouzaud
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#ifndef QGSADVANCEDDIGITIZINGDOCK
17#define QGSADVANCEDDIGITIZINGDOCK
18
19#include "ui_qgsadvanceddigitizingdockwidgetbase.h"
20
21#include <memory>
22
23#include "qgis_gui.h"
24#include "qgis_sip.h"
26#include "qgsdockwidget.h"
27#include "qgsmessagebaritem.h"
28#include "qgspointlocator.h"
29#include "qgspointxy.h"
30#include "qgssnapindicator.h"
31
32#include <QList>
33#include <QQueue>
34
38class QgsMapCanvas;
39class QgsMapTool;
43
51class GUI_EXPORT QgsAdvancedDigitizingDockWidget : public QgsDockWidget, private Ui::QgsAdvancedDigitizingDockWidgetBase
52{
53 Q_OBJECT
54
55 public:
68 Q_DECLARE_FLAGS( CadCapacities, CadCapacity )
69 Q_FLAG( CadCapacities )
70
71
82
83
90 class GUI_EXPORT CadConstraint
91 {
92 public:
102
110 CadConstraint( QLineEdit *lineEdit, QToolButton *lockerButton, QToolButton *relativeButton = nullptr, QToolButton *repeatingLockButton = nullptr )
111 : mLineEdit( lineEdit )
112 , mLockerButton( lockerButton )
113 , mRelativeButton( relativeButton )
114 , mRepeatingLockButton( repeatingLockButton )
115 {}
116
121 LockMode lockMode() const { return mLockMode; }
122
126 bool isLocked() const { return mLockMode != NoLock; }
127
133 bool isRepeatingLock() const { return mRepeatingLock; }
134
138 bool relative() const { return mRelative; }
139
143 double value() const { return mValue; }
144
148 QLineEdit *lineEdit() const { return mLineEdit; }
149
153 void setLockMode( LockMode mode );
154
161 void setRepeatingLock( bool repeating );
162
166 void setRelative( bool relative );
167
173 void setValue( double value, bool updateWidget = true );
174
179 QString displayValue() const;
180
184 void toggleLocked();
185
189 void toggleRelative();
190
197 int precision() const { return mPrecision; }
198
205 void setPrecision( int precision );
206
211 Qgis::CadConstraintType cadConstraintType() const;
212
217 void setCadConstraintType( Qgis::CadConstraintType constraintType );
218
223 void setMapCanvas( QgsMapCanvas *mapCanvas );
224
229 static QString removeSuffix( const QString &text, Qgis::CadConstraintType constraintType );
230
231
232 private:
233 QLineEdit *mLineEdit = nullptr;
234 QToolButton *mLockerButton = nullptr;
235 QToolButton *mRelativeButton = nullptr;
236 QToolButton *mRepeatingLockButton = nullptr;
237 LockMode mLockMode = NoLock;
238 bool mRepeatingLock = false;
239 bool mRelative = false;
240 double mValue = 0.0;
241 int mPrecision = 6;
243 QgsMapCanvas *mMapCanvas = nullptr;
244 };
245
252 explicit QgsAdvancedDigitizingDockWidget( QgsMapCanvas *canvas, QWidget *parent = nullptr, QgsUserInputWidget *userInputWidget = nullptr );
254
261 bool canvasKeyPressEventFilter( QKeyEvent *e );
262
267 bool applyConstraints( QgsMapMouseEvent *e );
268
274
278 void processCanvasPressEvent( QgsMapMouseEvent *event );
279
283 void processCanvasMoveEvent( QgsMapMouseEvent *event );
284
288 void processCanvasReleaseEvent( QgsMapMouseEvent *event );
289
294 void setTool( QgsAdvancedDigitizingTool *tool );
295
300 QgsAdvancedDigitizingTool *tool() const;
301
306 void releaseLocks( bool releaseRepeatingLocks = true );
307
311 void clear();
312
313 void keyPressEvent( QKeyEvent *e ) override;
314
316 bool cadEnabled() const { return mCadEnabled; }
317
322 void switchZM();
323
328 void setEnabledZ( bool enable );
329
334 void setEnabledM( bool enable );
335
340 bool constructionMode() const { return mConstructionMode; }
341
346 QgsVectorLayer *constructionGuidesLayer() const { return mConstructionGuidesLayer.get(); }
347
352 bool showConstructionGuides() const;
353
358 bool snapToConstructionGuides() const;
359
364 bool recordConstructionGuides() const;
365
370 Qgis::BetweenLineConstraint betweenLineConstraint() const { return mBetweenLineConstraint; }
372 const CadConstraint *constraintAngle() const { return mAngleConstraint.get(); }
374 const CadConstraint *constraintDistance() const { return mDistanceConstraint.get(); }
376 const CadConstraint *constraintX() const { return mXConstraint.get(); }
378 const CadConstraint *constraintY() const { return mYConstraint.get(); }
379
384 const CadConstraint *constraintZ() const { return mZConstraint.get(); }
385
390 const CadConstraint *constraintM() const { return mMConstraint.get(); }
392 bool commonAngleConstraint() const { return !qgsDoubleNear( mCommonAngleConstraint, 0.0 ); }
393
395 const CadConstraint *constraintLineExtension() const { return mLineExtensionConstraint.get(); }
396
398 Qgis::LineExtensionSide lineExtensionSide() const { return mSoftLockLineExtension; }
399
401 const CadConstraint *constraintXyVertex() const { return mXyVertexConstraint.get(); }
402
404 double softLockX() const { return mSoftLockX; }
405
407 double softLockY() const { return mSoftLockY; }
408
413 void toggleConstraintDistance();
414
419 QgsPointLocator::Match mapPointMatch() const { return mSnapMatch; }
420
425 QList<QgsPointLocator::Match> lockedSnapVertices() const { return mLockedSnapVertices; }
426
432 void clearLockedSnapVertices( bool force = true );
433
437 void clearPoints();
438
442 void addPoint( const QgsPointXY &point );
443
448 void removePreviousPoint();
449
454 void updateCurrentPoint( const QgsPoint &point );
455
462 void setPoints( const QList<QgsPointXY> &points );
463
471 QgsPoint currentPointV2( bool *exists = nullptr ) const;
472
478 QgsPoint currentPointLayerCoordinates( QgsMapLayer *layer ) const;
479
486 Q_DECL_DEPRECATED QgsPointXY currentPoint( bool *exists = nullptr ) const SIP_DEPRECATED { return currentPointV2( exists ); };
487
493 QgsPoint previousPointV2( bool *exists = nullptr ) const;
494
501 Q_DECL_DEPRECATED QgsPointXY previousPoint( bool *exists = nullptr ) const SIP_DEPRECATED { return previousPointV2( exists ); };
502
508 QgsPoint penultimatePointV2( bool *exists = nullptr ) const;
509
516 Q_DECL_DEPRECATED QgsPointXY penultimatePoint( bool *exists = nullptr ) const SIP_DEPRECATED { return penultimatePointV2( exists ); };
517
521 inline int pointsCount() const { return mCadPointList.count(); }
522
526 inline bool snappedToVertex() const { return ( mSnapMatch.isValid() && ( mSnapMatch.hasVertex() || mSnapMatch.hasLineEndpoint() ) ); }
527
531 QList<QgsPointXY> snappedSegment() const { return mSnappedSegment; }
532
534 QAction *enableAction() { return mEnableAction; }
535
542 void enable();
543
547 void disable();
548
552 void updateCadPaintItem();
553
562 void setX( const QString &value, WidgetSetMode mode );
563
572 void setY( const QString &value, WidgetSetMode mode );
573
582 void setZ( const QString &value, WidgetSetMode mode );
583
592 void setM( const QString &value, WidgetSetMode mode );
593
602 void setAngle( const QString &value, WidgetSetMode mode );
603
612 void setDistance( const QString &value, WidgetSetMode mode );
613
618 double getLineZ() const;
619
624 double getLineM() const;
625
630 CadCapacities capacities() const { return mCapacities; };
631
636 QString formatCommonAngleSnapping( double angle );
637
638 signals:
639
645 void pushWarning( const QString &message );
646
651
659 void pointChangedV2( const QgsPoint &point );
660
668 Q_DECL_DEPRECATED void pointChanged( const QgsPointXY &point ) SIP_DEPRECATED;
669
671
679 void cadEnabledChanged( bool enabled );
680
687 void valueXChanged( const QString &value );
688
695 void valueYChanged( const QString &value );
696
703 void valueZChanged( const QString &value );
704
711 void valueMChanged( const QString &value );
712
719 void valueAngleChanged( const QString &value );
720
727 void valueDistanceChanged( const QString &value );
728
735 void valueBearingChanged( const QString &value );
736
743 void lockXChanged( bool locked );
744
751 void lockYChanged( bool locked );
752
759 void lockZChanged( bool locked );
760
767 void lockMChanged( bool locked );
768
775 void lockAngleChanged( bool locked );
776
783 void lockDistanceChanged( bool locked );
784
793 void relativeXChanged( bool relative );
794
803 void relativeYChanged( bool relative );
804
813 void relativeZChanged( bool relative );
814
823 void relativeMChanged( bool relative );
824
833 void relativeAngleChanged( bool relative );
834
841 void softLockLineExtensionChanged( bool locked );
842
849 void softLockXyChanged( bool locked );
850
851 // relativeDistanceChanged doesn't exist as distance is always relative
852
862 void enabledChangedX( bool enabled );
863
873 void enabledChangedY( bool enabled );
874
884 void enabledChangedZ( bool enabled );
885
895 void enabledChangedM( bool enabled );
896
906 void enabledChangedAngle( bool enabled );
907
917 void enabledChangedDistance( bool enabled );
918
926
934
942
950
958
966
972
978
979 private slots:
981 void betweenLineConstraintClicked( bool activated );
982
984 void lockConstraint( bool activate = true );
985
987 void lockParameterlessConstraint( bool activate = true );
988
993 void constraintTextEdited( const QString &textValue );
994
999 void constraintFocusOut();
1000
1002 void setConstraintRelative( bool activate );
1003
1005 void setConstraintRepeatingLock( bool activate );
1006
1011 void activateCad( bool enabled );
1012
1014 void setConstructionMode( bool enabled );
1015
1017 void settingsButtonTriggered( QAction *action );
1018
1019 private:
1023 QgsMapLayer *targetLayer() const;
1024
1026 void setCadEnabled( bool enabled );
1027
1032 void updateCapacity( bool updateUIwithoutChange = false );
1033
1035 void lockBetweenLineConstraint( Qgis::BetweenLineConstraint constraint );
1036
1042 QList<QgsPointXY> snapSegmentToAllLayers( const QgsPointXY &originalMapPoint, bool *snapped = nullptr ) const;
1043
1048 bool filterKeyPress( QKeyEvent *e );
1049
1054 bool eventFilter( QObject *obj, QEvent *event ) override SIP_SKIP;
1055
1057 void triggerMouseMoveEvent();
1058
1060 CadConstraint *objectToConstraint( const QObject *obj ) const;
1061
1063 double parseUserInput( const QString &inputValue, const Qgis::CadConstraintType type, bool &ok ) const;
1064
1071 void updateConstraintValue( CadConstraint *constraint, const QString &textValue, bool convertExpression = false );
1072
1074 void updateUnlockedConstraintValues( const QgsPoint &point );
1075
1081 void toggleLockedSnapVertex( const QgsPointLocator::Match &snapMatch, const QgsPointLocator::Match &previouslySnap );
1082
1086 void resetConstructionGuides();
1087
1092 void updateConstructionGuidesCrs();
1093
1094 QgsMapCanvas *mMapCanvas = nullptr;
1095 QgsUserInputWidget *mUserInputWidget = nullptr;
1096
1097 QgsAdvancedDigitizingCanvasItem *mCadPaintItem = nullptr;
1099 std::unique_ptr<QgsSnapIndicator> mSnapIndicator;
1100
1101 CadCapacities mCapacities = CadCapacities();
1102
1103 bool mCurrentMapToolSupportsCad = false;
1104
1105 // Pointer to the floater
1106 QgsAdvancedDigitizingFloater *mFloater = nullptr;
1107
1108 // CAD properties
1110 bool mCadEnabled = false;
1111 bool mConstructionMode = false;
1112
1113 // constraints
1114 std::unique_ptr<CadConstraint> mAngleConstraint;
1115 std::unique_ptr<CadConstraint> mDistanceConstraint;
1116 std::unique_ptr<CadConstraint> mXConstraint;
1117 std::unique_ptr<CadConstraint> mYConstraint;
1118 std::unique_ptr<CadConstraint> mZConstraint;
1119 std::unique_ptr<CadConstraint> mMConstraint;
1120 std::unique_ptr<CadConstraint> mLineExtensionConstraint;
1121 std::unique_ptr<CadConstraint> mXyVertexConstraint;
1122 Qgis::BetweenLineConstraint mBetweenLineConstraint;
1123 double mCommonAngleConstraint; // if 0: do not snap to common angles
1124
1126 bool mSnappingPrioritizeFeatures = false;
1127
1128 // Point list and current snap point / segment
1129 QList<QgsPoint> mCadPointList;
1130 QList<QgsPointXY> mSnappedSegment;
1131
1132 bool mSessionActive = false;
1133
1134 // Construction path history
1135 std::unique_ptr<QgsVectorLayer> mConstructionGuidesLayer;
1136 QgsFeatureId mConstructionGuideId;
1137 QgsLineString mConstructionGuideLine;
1138 bool mDeferredUpdateConstructionGuidesCrs = false;
1139
1140 // Error message
1141 std::unique_ptr<QgsMessageBarItem> mErrorMessage;
1142
1143 // UI
1144 QMap<double, QAction *> mCommonAngleActions; // map the common angle actions with their angle values
1145 QAction *mLineExtensionAction = nullptr;
1146 QAction *mXyVertexAction = nullptr;
1147 QAction *mRecordConstructionGuides = nullptr;
1148 QAction *mShowConstructionGuides = nullptr;
1149 QAction *mSnapToConstructionGuides = nullptr;
1150 QAction *mClearConstructionGuides = nullptr;
1151
1152 // Snap indicator
1153 QgsPointLocator::Match mSnapMatch;
1154 QgsPointLocator::Match mLastSnapMatch;
1155
1156 // Extra constraint context
1157 Qgis::LineExtensionSide mSoftLockLineExtension;
1158 double mSoftLockX;
1159 double mSoftLockY;
1160 QQueue<QgsPointLocator::Match> mLockedSnapVertices;
1161
1162 // Advanced digitizing tool
1163 QPointer<QgsAdvancedDigitizingTool> mCurrentTool;
1164
1165#ifdef SIP_RUN
1167 bool eventFilter( QObject *obj, QEvent *event );
1168#endif
1170 QgsPoint pointXYToPoint( const QgsPointXY &point ) const;
1171
1172 QMenu *mCommonAngleActionsMenu = nullptr;
1173 QMenu *mFloaterActionsMenu = nullptr;
1174
1175 /* Store whether the target layer supports Z and M, to avoid unnecessary checks
1176 * when floater settings are changed */
1177 bool mTargetLayerSupportsZ = false;
1178 bool mTargetLayerSupportsM = false;
1179
1180 static const QgsSettingsEntryBool *settingsCadSnappingPriorityPrioritizeFeature;
1181 static const QgsSettingsEntryBool *settingsCadRecordConstructionGuides;
1182 static const QgsSettingsEntryBool *settingsCadShowConstructionGuides;
1183 static const QgsSettingsEntryBool *settingsCadSnapToConstructionGuides;
1184
1187};
1188
1190
1191#endif // QGSADVANCEDDIGITIZINGDOCK_H
CadConstraintType
Advanced digitizing constraint type.
Definition qgis.h:4074
@ Generic
Generic value.
Definition qgis.h:4075
BetweenLineConstraint
Between line constraints which can be enabled.
Definition qgis.h:4048
LineExtensionSide
Designates whether the line extension constraint is currently soft locked with the previous or next v...
Definition qgis.h:4061
Draws the graphical elements of the CAD tools (.
The CadConstraint is a class for all basic constraints (angle/distance/x/y).
CadConstraint(QLineEdit *lineEdit, QToolButton *lockerButton, QToolButton *relativeButton=nullptr, QToolButton *repeatingLockButton=nullptr)
Constructor for CadConstraint.
bool isLocked() const
Is any kind of lock mode enabled.
bool isRepeatingLock() const
Returns true if a repeating lock is set for the constraint.
LockMode lockMode() const
The current lock mode of this constraint.
int precision() const
Returns the numeric precision (decimal places) to show in the associated widget.
bool relative() const
Is the constraint in relative mode.
QLineEdit * lineEdit() const
The line edit that manages the value of the constraint.
A dockable widget used to handle the CAD tools on top of a selection of map tools.
void valueDistanceChanged(const QString &value)
Emitted whenever the distance value changes (either the mouse moved, or the user changed the input).
bool commonAngleConstraint() const
Returns true if a constraint on a common angle is active.
Q_DECL_DEPRECATED QgsPointXY currentPoint(bool *exists=nullptr) const
The last point.
QgsAdvancedDigitizingDockWidget(QgsMapCanvas *canvas, QWidget *parent=nullptr, QgsUserInputWidget *userInputWidget=nullptr)
Create an advanced digitizing dock widget.
void lockZChanged(bool locked)
Emitted whenever the Z parameter is locked.
double softLockY() const
Returns the Y value of the Y soft lock. The value is NaN is the constraint isn't magnetized to a line...
const CadConstraint * constraintM() const
Returns the CadConstraint on the M coordinate.
void enabledChangedY(bool enabled)
Emitted whenever the Y field is enabled or disabled.
QAction * enableAction()
Returns the action used to enable/disable the tools.
bool cadEnabled() const
determines if CAD tools are enabled or if map tools behaves "nomally"
int pointsCount() const
The number of points in the CAD point helper list.
QList< QgsPointXY > snappedSegment() const
Snapped to a segment.
void relativeMChanged(bool relative)
Emitted whenever the M parameter is toggled between absolute and relative.
void lockXChanged(bool locked)
Emitted whenever the X parameter is locked.
void softLockLineExtensionChanged(bool locked)
Emitted whenever the soft line extension parameter is locked.
void focusOnXRequested()
Emitted whenever the X field should get the focus using the shortcuts (X).
bool constructionMode() const
Returns whether the construction mode is activated.
void enabledChangedX(bool enabled)
Emitted whenever the X field is enabled or disabled.
void valueYChanged(const QString &value)
Emitted whenever the Y value changes (either the mouse moved, or the user changed the input).
Q_DECL_DEPRECATED QgsPointXY penultimatePoint(bool *exists=nullptr) const
The penultimate point.
const CadConstraint * constraintLineExtension() const
Returns the CadConstraint.
void focusOnYRequested()
Emitted whenever the Y field should get the focus using the shortcuts (Y).
void enabledChangedDistance(bool enabled)
Emitted whenever the distance field is enabled or disabled.
bool snappedToVertex() const
Is it snapped to a vertex.
void valueZChanged(const QString &value)
Emitted whenever the Z value changes (either the mouse moved, or the user changed the input).
QList< QgsPointLocator::Match > lockedSnapVertices() const
Returns the snap matches whose vertices have been locked.
QgsPoint previousPointV2(bool *exists=nullptr) const
The previous point.
void lockAngleChanged(bool locked)
Emitted whenever the angle parameter is locked.
QgsPoint penultimatePointV2(bool *exists=nullptr) const
The penultimate point.
void pointChangedV2(const QgsPoint &point)
Sometimes a constraint may change the current point out of a mouse event.
void commonAngleSnappingShowInFloaterChanged(bool enabled)
Emitted whenever the option to show common angle snapping in the floater changes.
void relativeXChanged(bool relative)
Emitted whenever the X parameter is toggled between absolute and relative.
void focusOnAngleRequested()
Emitted whenever the angle field should get the focus using the shortcuts (A).
WidgetSetMode
Type of interaction to simulate when editing values from external widget.
const CadConstraint * constraintXyVertex() const
Returns the CadConstraint.
void focusOnZRequested()
Emitted whenever the Z field should get the focus using the shortcuts (Z).
void focusOnMRequested()
Emitted whenever the M field should get the focus using the shortcuts (M).
void popWarning()
Remove any previously emitted warnings (if any).
void valueXChanged(const QString &value)
Emitted whenever the X value changes (either the mouse moved, or the user changed the input).
void lockMChanged(bool locked)
Emitted whenever the M parameter is locked.
void cadEnabledChanged(bool enabled)
Signals for external widgets that need to update according to current values.
void lockYChanged(bool locked)
Emitted whenever the Y parameter is locked.
const CadConstraint * constraintY() const
Returns the CadConstraint on the Y coordinate.
void valueAngleChanged(const QString &value)
Emitted whenever the angle value changes (either the mouse moved, or the user changed the input).
void valueMChanged(const QString &value)
Emitted whenever the M value changes (either the mouse moved, or the user changed the input).
QgsVectorLayer * constructionGuidesLayer() const
Returns the vector layer within which construction guides are stored.
void relativeZChanged(bool relative)
Emitted whenever the Z parameter is toggled between absolute and relative.
double softLockX() const
Returns the X value of the X soft lock. The value is NaN is the constraint isn't magnetized to a line...
Q_DECL_DEPRECATED void pointChanged(const QgsPointXY &point)
Sometimes a constraint may change the current point out of a mouse event.
CadCapacity
The CadCapacity enum defines the possible constraints to be set depending on the number of points in ...
@ RelativeAngle
Also for parallel and perpendicular.
@ RelativeCoordinates
This corresponds to distance and relative coordinates.
Qgis::BetweenLineConstraint betweenLineConstraint() const
Returns the between line constraints which are used to place perpendicular/parallel segments to snapp...
void enabledChangedAngle(bool enabled)
Emitted whenever the angle field is enabled or disabled.
Q_DECL_DEPRECATED QgsPointXY previousPoint(bool *exists=nullptr) const
The previous point.
void enabledChangedZ(bool enabled)
Emitted whenever the Z field is enabled or disabled.
void lockDistanceChanged(bool locked)
Emitted whenever the distance parameter is locked.
void relativeAngleChanged(bool relative)
Emitted whenever the angleX parameter is toggled between absolute and relative.
const CadConstraint * constraintX() const
Returns the CadConstraint on the X coordinate.
CadCapacities capacities() const
Returns the capacities.
void softLockXyChanged(bool locked)
Emitted whenever the soft x/y extension parameter is locked.
const CadConstraint * constraintZ() const
Returns the CadConstraint on the Z coordinate.
void valueBearingChanged(const QString &value)
Emitted whenever the bearing value changes.
void enabledChangedM(bool enabled)
Emitted whenever the M field is enabled or disabled.
QgsPointLocator::Match mapPointMatch() const
Returns the point locator match.
QgsPoint currentPointV2(bool *exists=nullptr) const
The last point.
void focusOnDistanceRequested()
Emitted whenever the distance field should get the focus using the shortcuts (D).
const CadConstraint * constraintAngle() const
Returns the CadConstraint on the angle.
void valueCommonAngleSnappingChanged(double angle)
Emitted whenever the snapping to common angle option changes, angle = 0 means that the functionality ...
void pushWarning(const QString &message)
Push a warning.
Qgis::LineExtensionSide lineExtensionSide() const
Returns on which side of the constraint line extension point, the line was created.
const CadConstraint * constraintDistance() const
Returns the CadConstraint on the distance.
void relativeYChanged(bool relative)
Emitted whenever the Y parameter is toggled between absolute and relative.
A widget that floats next to the mouse pointer, and allows interaction with the AdvancedDigitizing fe...
An abstract class for advanced digitizing tools.
QgsDockWidget(QWidget *parent=nullptr, Qt::WindowFlags flags=Qt::WindowFlags())
Constructor for QgsDockWidget.
Line string geometry type, with support for z-dimension and m-values.
Map canvas is a class for displaying all GIS data types on a canvas.
Base class for all map layer types.
Definition qgsmaplayer.h:80
A mouse event which is the result of a user interaction with a QgsMapCanvas.
A QgsMapTool which gives events directly in map coordinates and allows filtering of events.
Abstract base class for all map tools.
Definition qgsmaptool.h:72
Represents a 2D point.
Definition qgspointxy.h:60
Point geometry type, with support for z-dimension and m-values.
Definition qgspoint.h:49
A boolean settings entry.
A floating widget that can be used to display widgets for user inputs.
Represents a vector layer which manages a vector based dataset.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference).
Definition qgis.h:6607
#define SIP_DEPRECATED
Definition qgis_sip.h:114
#define SIP_ENUM_BASETYPE(type)
Definition qgis_sip.h:275
#define SIP_SKIP
Definition qgis_sip.h:134
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsProjectionSelectionWidget::CrsOptions)