QGIS API Documentation 3.99.0-Master (26c88405ac0)
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:
56
69 Q_DECLARE_FLAGS( CadCapacities, CadCapacity )
70 Q_FLAG( CadCapacities )
71
72
83
84
91 class GUI_EXPORT CadConstraint
92 {
93 public:
94
104
112 CadConstraint( QLineEdit *lineEdit, QToolButton *lockerButton, QToolButton *relativeButton = nullptr, QToolButton *repeatingLockButton = nullptr )
113 : mLineEdit( lineEdit )
114 , mLockerButton( lockerButton )
115 , mRelativeButton( relativeButton )
116 , mRepeatingLockButton( repeatingLockButton )
117 , mLockMode( NoLock )
118 , mRepeatingLock( false )
119 , mRelative( false )
120 , mValue( 0.0 )
121 {}
122
127 LockMode lockMode() const { return mLockMode; }
128
132 bool isLocked() const { return mLockMode != NoLock; }
133
139 bool isRepeatingLock() const { return mRepeatingLock; }
140
144 bool relative() const { return mRelative; }
145
149 double value() const { return mValue; }
150
154 QLineEdit *lineEdit() const { return mLineEdit; }
155
159 void setLockMode( LockMode mode );
160
167 void setRepeatingLock( bool repeating );
168
172 void setRelative( bool relative );
173
179 void setValue( double value, bool updateWidget = true );
180
185 QString displayValue() const;
186
190 void toggleLocked();
191
195 void toggleRelative();
196
203 int precision() const { return mPrecision; }
204
211 void setPrecision( int precision );
212
217 Qgis::CadConstraintType cadConstraintType() const;
218
223 void setCadConstraintType( Qgis::CadConstraintType constraintType );
224
229 void setMapCanvas( QgsMapCanvas *mapCanvas );
230
235 static QString removeSuffix( const QString &text, Qgis::CadConstraintType constraintType );
236
237
238 private:
239 QLineEdit *mLineEdit = nullptr;
240 QToolButton *mLockerButton = nullptr;
241 QToolButton *mRelativeButton = nullptr;
242 QToolButton *mRepeatingLockButton = nullptr;
243 LockMode mLockMode;
244 bool mRepeatingLock;
245 bool mRelative;
246 double mValue;
247 int mPrecision = 6;
249 QgsMapCanvas *mMapCanvas = nullptr;
250 };
251
258 explicit QgsAdvancedDigitizingDockWidget( QgsMapCanvas *canvas, QWidget *parent = nullptr, QgsUserInputWidget *userInputWidget = nullptr );
260
267 bool canvasKeyPressEventFilter( QKeyEvent *e );
268
273 bool applyConstraints( QgsMapMouseEvent *e );
274
280
284 void processCanvasPressEvent( QgsMapMouseEvent *event );
285
289 void processCanvasMoveEvent( QgsMapMouseEvent *event );
290
294 void processCanvasReleaseEvent( QgsMapMouseEvent *event );
295
300 void setTool( QgsAdvancedDigitizingTool *tool );
301
306 QgsAdvancedDigitizingTool *tool() const;
307
312 void releaseLocks( bool releaseRepeatingLocks = true );
313
317 void clear();
318
319 void keyPressEvent( QKeyEvent *e ) override;
320
322 bool cadEnabled() const { return mCadEnabled; }
323
328 void switchZM();
329
334 void setEnabledZ( bool enable );
335
340 void setEnabledM( bool enable );
341
346 bool constructionMode() const { return mConstructionMode; }
347
352 QgsVectorLayer *constructionGuidesLayer() const { return mConstructionGuidesLayer.get(); }
353
358 bool showConstructionGuides() const;
359
364 bool snapToConstructionGuides() const;
365
370 bool recordConstructionGuides() const;
371
376 Qgis::BetweenLineConstraint betweenLineConstraint() const { return mBetweenLineConstraint; }
378 const CadConstraint *constraintAngle() const { return mAngleConstraint.get(); }
380 const CadConstraint *constraintDistance() const { return mDistanceConstraint.get(); }
382 const CadConstraint *constraintX() const { return mXConstraint.get(); }
384 const CadConstraint *constraintY() const { return mYConstraint.get(); }
385
390 const CadConstraint *constraintZ() const { return mZConstraint.get(); }
391
396 const CadConstraint *constraintM() const { return mMConstraint.get(); }
398 bool commonAngleConstraint() const { return !qgsDoubleNear( mCommonAngleConstraint, 0.0 ); }
399
401 const CadConstraint *constraintLineExtension() const { return mLineExtensionConstraint.get(); }
402
404 Qgis::LineExtensionSide lineExtensionSide() const { return mSoftLockLineExtension; }
405
407 const CadConstraint *constraintXyVertex() const { return mXyVertexConstraint.get(); }
408
410 double softLockX() const { return mSoftLockX; }
411
413 double softLockY() const { return mSoftLockY; }
414
419 void toggleConstraintDistance();
420
425 QgsPointLocator::Match mapPointMatch() const { return mSnapMatch; }
426
431 QList<QgsPointLocator::Match> lockedSnapVertices() const { return mLockedSnapVertices; }
432
438 void clearLockedSnapVertices( bool force = true );
439
443 void clearPoints();
444
448 void addPoint( const QgsPointXY &point );
449
454 void removePreviousPoint();
455
460 void updateCurrentPoint( const QgsPoint &point );
461
468 void setPoints( const QList<QgsPointXY> &points );
469
477 QgsPoint currentPointV2( bool *exists = nullptr ) const;
478
484 QgsPoint currentPointLayerCoordinates( QgsMapLayer *layer ) const;
485
492 Q_DECL_DEPRECATED QgsPointXY currentPoint( bool *exists = nullptr ) const SIP_DEPRECATED { return currentPointV2( exists ); };
493
499 QgsPoint previousPointV2( bool *exists = nullptr ) const;
500
507 Q_DECL_DEPRECATED QgsPointXY previousPoint( bool *exists = nullptr ) const SIP_DEPRECATED { return previousPointV2( exists ); };
508
514 QgsPoint penultimatePointV2( bool *exists = nullptr ) const;
515
522 Q_DECL_DEPRECATED QgsPointXY penultimatePoint( bool *exists = nullptr ) const SIP_DEPRECATED { return penultimatePointV2( exists ); };
523
527 inline int pointsCount() const { return mCadPointList.count(); }
528
532 inline bool snappedToVertex() const { return ( mSnapMatch.isValid() && ( mSnapMatch.hasVertex() || mSnapMatch.hasLineEndpoint() ) ); }
533
537 QList<QgsPointXY> snappedSegment() const { return mSnappedSegment; }
538
540 QAction *enableAction() { return mEnableAction; }
541
548 void enable();
549
553 void disable();
554
558 void updateCadPaintItem();
559
568 void setX( const QString &value, WidgetSetMode mode );
569
578 void setY( const QString &value, WidgetSetMode mode );
579
588 void setZ( const QString &value, WidgetSetMode mode );
589
598 void setM( const QString &value, WidgetSetMode mode );
599
608 void setAngle( const QString &value, WidgetSetMode mode );
609
618 void setDistance( const QString &value, WidgetSetMode mode );
619
624 double getLineZ() const;
625
630 double getLineM() const;
631
636 CadCapacities capacities() const { return mCapacities; };
637
642 QString formatCommonAngleSnapping( double angle );
643
644 signals:
645
651 void pushWarning( const QString &message );
652
657
665 void pointChangedV2( const QgsPoint &point );
666
674 Q_DECL_DEPRECATED void pointChanged( const QgsPointXY &point ) SIP_DEPRECATED;
675
677
685 void cadEnabledChanged( bool enabled );
686
693 void valueXChanged( const QString &value );
694
701 void valueYChanged( const QString &value );
702
709 void valueZChanged( const QString &value );
710
717 void valueMChanged( const QString &value );
718
725 void valueAngleChanged( const QString &value );
726
733 void valueDistanceChanged( const QString &value );
734
741 void valueBearingChanged( const QString &value );
742
749 void lockXChanged( bool locked );
750
757 void lockYChanged( bool locked );
758
765 void lockZChanged( bool locked );
766
773 void lockMChanged( bool locked );
774
781 void lockAngleChanged( bool locked );
782
789 void lockDistanceChanged( bool locked );
790
799 void relativeXChanged( bool relative );
800
809 void relativeYChanged( bool relative );
810
819 void relativeZChanged( bool relative );
820
829 void relativeMChanged( bool relative );
830
839 void relativeAngleChanged( bool relative );
840
847 void softLockLineExtensionChanged( bool locked );
848
855 void softLockXyChanged( bool locked );
856
857 // relativeDistanceChanged doesn't exist as distance is always relative
858
868 void enabledChangedX( bool enabled );
869
879 void enabledChangedY( bool enabled );
880
890 void enabledChangedZ( bool enabled );
891
901 void enabledChangedM( bool enabled );
902
912 void enabledChangedAngle( bool enabled );
913
923 void enabledChangedDistance( bool enabled );
924
932
940
948
956
964
972
978
984
985 private slots:
987 void betweenLineConstraintClicked( bool activated );
988
990 void lockConstraint( bool activate = true );
991
993 void lockParameterlessConstraint( bool activate = true );
994
999 void constraintTextEdited( const QString &textValue );
1000
1005 void constraintFocusOut();
1006
1008 void setConstraintRelative( bool activate );
1009
1011 void setConstraintRepeatingLock( bool activate );
1012
1017 void activateCad( bool enabled );
1018
1020 void setConstructionMode( bool enabled );
1021
1023 void settingsButtonTriggered( QAction *action );
1024
1025 private:
1026
1030 QgsMapLayer *targetLayer() const;
1031
1033 void setCadEnabled( bool enabled );
1034
1039 void updateCapacity( bool updateUIwithoutChange = false );
1040
1042 void lockBetweenLineConstraint( Qgis::BetweenLineConstraint constraint );
1043
1049 QList<QgsPointXY> snapSegmentToAllLayers( const QgsPointXY &originalMapPoint, bool *snapped = nullptr ) const;
1050
1055 bool filterKeyPress( QKeyEvent *e );
1056
1061 bool eventFilter( QObject *obj, QEvent *event ) override SIP_SKIP;
1062
1064 void triggerMouseMoveEvent();
1065
1067 CadConstraint *objectToConstraint( const QObject *obj ) const;
1068
1070 double parseUserInput( const QString &inputValue, const Qgis::CadConstraintType type, bool &ok ) const;
1071
1078 void updateConstraintValue( CadConstraint *constraint, const QString &textValue, bool convertExpression = false );
1079
1081 void updateUnlockedConstraintValues( const QgsPoint &point );
1082
1088 void toggleLockedSnapVertex( const QgsPointLocator::Match &snapMatch, const QgsPointLocator::Match &previouslySnap );
1089
1093 void resetConstructionGuides();
1094
1099 void updateConstructionGuidesCrs();
1100
1101 QgsMapCanvas *mMapCanvas = nullptr;
1102 QgsUserInputWidget *mUserInputWidget = nullptr;
1103
1104 QgsAdvancedDigitizingCanvasItem *mCadPaintItem = nullptr;
1106 std::unique_ptr<QgsSnapIndicator> mSnapIndicator;
1107
1108 CadCapacities mCapacities = CadCapacities();
1109
1110 bool mCurrentMapToolSupportsCad = false;
1111
1112 // Pointer to the floater
1113 QgsAdvancedDigitizingFloater *mFloater = nullptr;
1114
1115 // CAD properties
1117 bool mCadEnabled = false;
1118 bool mConstructionMode = false;
1119
1120 // constraints
1121 std::unique_ptr<CadConstraint> mAngleConstraint;
1122 std::unique_ptr<CadConstraint> mDistanceConstraint;
1123 std::unique_ptr<CadConstraint> mXConstraint;
1124 std::unique_ptr<CadConstraint> mYConstraint;
1125 std::unique_ptr<CadConstraint> mZConstraint;
1126 std::unique_ptr<CadConstraint> mMConstraint;
1127 std::unique_ptr<CadConstraint> mLineExtensionConstraint;
1128 std::unique_ptr<CadConstraint> mXyVertexConstraint;
1129 Qgis::BetweenLineConstraint mBetweenLineConstraint;
1130 double mCommonAngleConstraint; // if 0: do not snap to common angles
1131
1133 bool mSnappingPrioritizeFeatures = false;
1134
1135 // Point list and current snap point / segment
1136 QList<QgsPoint> mCadPointList;
1137 QList<QgsPointXY> mSnappedSegment;
1138
1139 bool mSessionActive = false;
1140
1141 // Construction path history
1142 std::unique_ptr<QgsVectorLayer> mConstructionGuidesLayer;
1143 QgsFeatureId mConstructionGuideId;
1144 QgsLineString mConstructionGuideLine;
1145 bool mDeferredUpdateConstructionGuidesCrs = false;
1146
1147 // Error message
1148 std::unique_ptr<QgsMessageBarItem> mErrorMessage;
1149
1150 // UI
1151 QMap<double, QAction *> mCommonAngleActions; // map the common angle actions with their angle values
1152 QAction *mLineExtensionAction = nullptr;
1153 QAction *mXyVertexAction = nullptr;
1154 QAction *mRecordConstructionGuides = nullptr;
1155 QAction *mShowConstructionGuides = nullptr;
1156 QAction *mSnapToConstructionGuides = nullptr;
1157 QAction *mClearConstructionGuides = nullptr;
1158
1159 // Snap indicator
1160 QgsPointLocator::Match mSnapMatch;
1161 QgsPointLocator::Match mLastSnapMatch;
1162
1163 // Extra constraint context
1164 Qgis::LineExtensionSide mSoftLockLineExtension;
1165 double mSoftLockX;
1166 double mSoftLockY;
1167 QQueue<QgsPointLocator::Match> mLockedSnapVertices;
1168
1169 // Advanced digitizing tool
1170 QPointer<QgsAdvancedDigitizingTool> mCurrentTool;
1171
1172#ifdef SIP_RUN
1174 bool eventFilter( QObject *obj, QEvent *event );
1175#endif
1177 QgsPoint pointXYToPoint( const QgsPointXY &point ) const;
1178
1179 QMenu *mCommonAngleActionsMenu = nullptr;
1180 QMenu *mFloaterActionsMenu = nullptr;
1181
1182 /* Store whether the target layer supports Z and M, to avoid unnecessary checks
1183 * when floater settings are changed */
1184 bool mTargetLayerSupportsZ = false;
1185 bool mTargetLayerSupportsM = false;
1186
1187 static const QgsSettingsEntryBool *settingsCadSnappingPriorityPrioritizeFeature;
1188 static const QgsSettingsEntryBool *settingsCadRecordConstructionGuides;
1189 static const QgsSettingsEntryBool *settingsCadShowConstructionGuides;
1190 static const QgsSettingsEntryBool *settingsCadSnapToConstructionGuides;
1191
1194};
1195
1197
1198#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)