27 #include "qgis_core.h" 36 int QgisEvent = QEvent::User + 1;
94 ARGB32_Premultiplied = 13
158 #define cast_to_fptr(f) f 180 , mPreviousState( object->blockSignals( true ) )
185 mObject->blockSignals( mPreviousState );
193 Object *mObject =
nullptr;
218 CORE_EXPORT uint
qHash(
const QVariant &variant );
229 QString str = QString::number( a,
'f',
precision );
230 if ( str.contains( QLatin1Char(
'.' ) ) )
233 int idx = str.length() - 1;
234 while ( str.at( idx ) ==
'0' && idx > 1 )
238 if ( idx < str.length() - 1 )
239 str.truncate( str.at( idx ) ==
'.' ? idx : idx + 1 );
247 const QString str( QString::number( a,
'f',
precision ) );
248 if ( str == QLatin1String(
"-0" ) )
250 return QLatin1String(
"0" );
265 inline bool qgsDoubleNear(
double a,
double b,
double epsilon = 4 * std::numeric_limits<double>::epsilon() )
267 const double diff = a - b;
268 return diff > -epsilon && diff <= epsilon;
277 inline bool qgsFloatNear(
float a,
float b,
float epsilon = 4 * FLT_EPSILON )
279 const float diff = a - b;
280 return diff > -epsilon && diff <= epsilon;
292 double ar = std::frexp( a, &aexp );
293 double br = std::frexp( b, &bexp );
295 return aexp == bexp &&
296 std::round( ar * std::pow( 10.0, significantDigits ) ) == std::round( br * std::pow( 10.0, significantDigits ) );
304 inline double qgsRound(
double number,
int places )
306 double m = ( number < 0.0 ) ? -1.0 : 1.0;
307 double scaleFactor = std::pow( 10.0, places );
308 return ( std::round( number * m * scaleFactor ) / scaleFactor ) * m;
337 template <
typename T>
struct QgsAddConst {
typedef const T Type; };
339 template <
typename T>
340 constexpr
typename QgsAddConst<T>::Type &as_const( T &t ) noexcept {
return t; }
342 template <
typename T>
343 void as_const(
const T && ) =
delete;
347 template<
class T>
struct _Unique_if
349 typedef std::unique_ptr<T> _Single_object;
352 template<
class T>
struct _Unique_if<T[]>
354 typedef std::unique_ptr<T[]> _Unknown_bound;
357 template<
class T,
size_t N>
struct _Unique_if<T[N]>
359 typedef void _Known_bound;
362 template<
class T,
class... Args>
363 typename _Unique_if<T>::_Single_object
364 make_unique( Args &&... args )
366 return std::unique_ptr<T>(
new T( std::forward<Args>( args )... ) );
370 typename _Unique_if<T>::_Unknown_bound
371 make_unique(
size_t n )
373 typedef typename std::remove_extent<T>::type U;
374 return std::unique_ptr<T>(
new U[n]() );
377 template<
class T,
class... Args>
378 typename _Unique_if<T>::_Known_bound
379 make_unique( Args &&... ) =
delete;
393 template<
typename... Args>
struct overload
395 template<
typename C,
typename R>
396 static constexpr
auto of( R( C::*pmf )( Args... ) ) -> decltype( pmf )
412 QMetaEnum metaEnum = QMetaEnum::fromType<T>();
413 Q_ASSERT( metaEnum.isValid() );
414 QMap<T, QString> enumMap;
415 for (
int idx = 0; idx < metaEnum.keyCount(); ++idx )
417 const char *enumKey = metaEnum.key( idx );
418 enumMap.insert( static_cast<T>( metaEnum.keyToValue( enumKey ) ), QString( enumKey ) );
429 QMetaEnum metaEnum = QMetaEnum::fromType<T>();
430 Q_ASSERT( metaEnum.isValid() );
431 return QString::fromUtf8( metaEnum.valueToKey( value ) );
441 QMetaEnum metaEnum = QMetaEnum::fromType<T>();
442 Q_ASSERT( metaEnum.isValid() );
444 T v =
static_cast<T
>( metaEnum.keyToValue( key.toUtf8().data(), &ok ) );
503 CORE_EXPORT
bool qgsVariantEqual(
const QVariant &lhs,
const QVariant &rhs );
514 CORE_EXPORT QString
qgsVsiPrefix(
const QString &path );
542 extern CORE_EXPORT
const QString
GEOWKT;
546 extern CORE_EXPORT
const QString
GEOPROJ4;
562 extern CORE_EXPORT
const QString
GEO_NONE;
579 const int PREVIEW_JOB_DELAY_MS = 250;
582 const int MAXIMUM_LAYER_PREVIEW_TIME_MS = 250;
599 #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__) 601 #define Q_NOWARN_DEPRECATED_PUSH \ 602 _Pragma("GCC diagnostic push") \ 603 _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\""); 604 #define Q_NOWARN_DEPRECATED_POP \ 605 _Pragma("GCC diagnostic pop"); 606 #define Q_NOWARN_UNREACHABLE_PUSH 607 #define Q_NOWARN_UNREACHABLE_POP 609 #elif defined(_MSC_VER) 611 #define Q_NOWARN_DEPRECATED_PUSH \ 612 __pragma(warning(push)) \ 613 __pragma(warning(disable:4996)) 614 #define Q_NOWARN_DEPRECATED_POP \ 615 __pragma(warning(pop)) 616 #define Q_NOWARN_UNREACHABLE_PUSH \ 617 __pragma(warning(push)) \ 618 __pragma(warning(disable:4702)) 619 #define Q_NOWARN_UNREACHABLE_POP \ 620 __pragma(warning(pop)) 624 #define Q_NOWARN_DEPRECATED_PUSH 625 #define Q_NOWARN_DEPRECATED_POP 626 #define Q_NOWARN_UNREACHABLE_PUSH 627 #define Q_NOWARN_UNREACHABLE_POP 634 # define QGISEXTERN extern "C" __declspec( dllexport ) 637 # pragma warning(disable:4190) 640 # if defined(__GNUC__) || defined(__clang__) 641 # define QGISEXTERN extern "C" __attribute__ ((visibility ("default"))) 643 # define QGISEXTERN extern "C" 649 #if __cplusplus >= 201500 650 #define FALLTHROUGH [[fallthrough]]; 651 #elif defined(__clang__) 652 #define FALLTHROUGH [[clang::fallthrough]]; 653 #elif defined(__GNUC__) && __GNUC__ >= 7 654 #define FALLTHROUGH [[gnu::fallthrough]]; 660 #if __cplusplus >= 201703L 661 #define NODISCARD [[nodiscard]] 662 #elif defined(__clang__) 663 #define NODISCARD [[nodiscard]] 664 #elif defined(_MSC_VER) 665 #define NODISCARD // no support 666 #elif defined(__has_cpp_attribute) 667 #if __has_cpp_attribute(nodiscard) 668 #define NODISCARD [[nodiscard]] 669 #elif __has_cpp_attribute(gnu::warn_unused_result) 670 #define NODISCARD [[gnu::warn_unused_result]] 672 #define NODISCARD Q_REQUIRED_RESULT 675 #define NODISCARD Q_REQUIRED_RESULT 678 #if __cplusplus >= 201703L 679 #define MAYBE_UNUSED [[maybe_unused]] 680 #elif defined(__clang__) 681 #define MAYBE_UNUSED [[maybe_unused]] 682 #elif defined(_MSC_VER) 683 #define MAYBE_UNUSED // no support 684 #elif defined(__has_cpp_attribute) 685 #if __has_cpp_attribute(gnu::unused) 686 #define MAYBE_UNUSED [[gnu::unused]] CORE_EXPORT QString qgsVsiPrefix(const QString &path)
static const QString QGIS_VERSION
Version string.
static const char * QGIS_DEV_VERSION
The development version.
static const double UI_SCALE_FACTOR
UI scaling factor.
bool qgsFloatNear(float a, float b, float epsilon=4 *FLT_EPSILON)
Compare two floats (but allow some difference)
CORE_EXPORT bool qgsVariantEqual(const QVariant &lhs, const QVariant &rhs)
Compares two QVariant values and returns whether they are equal, NULL values are treated as equal...
QString qgsEnumValueToKey(const T &value)
Returns the value for the given key of an enum.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
DataType
Raster data types.
UnitType
Type of unit of tolerance value from settings.
static const QColor DEFAULT_HIGHLIGHT_COLOR
Default highlight color.
void CORE_EXPORT * qgsCalloc(size_t nmemb, size_t size)
Allocates memory for an array of nmemb elements of size bytes each and returns a pointer to the alloc...
MessageLevel
Level for messages This will be used both for message log and message bar in application.
static const int QGIS_VERSION_INT
Version number used for comparing versions using the "Check QGIS Version" function.
QMap< QString, QString > QgsStringMap
The Qgis class provides global constants for use throughout the application.
CORE_EXPORT bool qgsVariantLessThan(const QVariant &lhs, const QVariant &rhs)
Compares two QVariant values and returns whether the first is less than the second.
static const double DEFAULT_Z_COORDINATE
Default Z coordinate value for 2.5d geometry This value have to be assigned to the Z coordinate for t...
QgsSignalBlocker(Object *object)
Constructor for QgsSignalBlocker.
T qgsEnumKeyToValue(const QString &key, const T &defaultValue)
Returns the value corresponding to the given key of an enum.
static const double DEFAULT_SNAP_TOLERANCE
Default snapping distance tolerance.
CORE_EXPORT const QString GEO_NONE
Constant that holds the string representation for "No ellips/No CRS".
const double DEFAULT_SEGMENT_EPSILON
Default snapping tolerance for segments.
QString qgsDoubleToString(double a, int precision=17)
Returns a string representation of a double.
const long GEOCRS_ID
Magic number for a geographic coord sys in QGIS srs.db tbl_srs.srs_id.
static const double DEFAULT_SEARCH_RADIUS_MM
Identify search radius in mm.
CORE_EXPORT double qgsPermissiveToDouble(QString string, bool &ok)
Converts a string to a double in a permissive way, e.g., allowing for incorrect numbers of digits bet...
CORE_EXPORT const QString GEOPROJ4
PROJ4 string that represents a geographic coord sys.
RAII signal blocking class.
static const QgsTolerance::UnitType DEFAULT_SNAP_UNITS
Default snapping distance units.
void CORE_EXPORT qgsFree(void *ptr)
Frees the memory space pointed to by ptr.
CORE_EXPORT qlonglong qgsPermissiveToLongLong(QString string, bool &ok)
Converts a string to an qlonglong in a permissive way, e.g., allowing for incorrect numbers of digits...
unsigned long long qgssize
Qgssize is used instead of size_t, because size_t is stdlib type, unknown by SIP, and it would be har...
const double DEFAULT_POINT_SIZE
Magic number that determines the default point size for point symbols.
static const float DEFAULT_MAPTOPIXEL_THRESHOLD
Default threshold between map coordinates and device coordinates for map2pixel simplification.
const int USER_CRS_START_ID
Magick number that determines whether a projection crsid is a system (srs.db) or user (~/...
const QMap< T, QString > qgsEnumMap()
Returns a map of all enum entries.
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.
const long GEOSRID
Magic number for a geographic coord sys in POSTGIS SRID.
static const QString QGIS_RELEASE_NAME
Release name.
double qgsRound(double number, int places)
Returns a double number, rounded (as close as possible) to the specified number of places...
bool qgsDoubleNearSig(double a, double b, int significantDigits=10)
Compare two doubles using specified number of significant digits.
const double DEFAULT_LINE_WIDTH
CORE_EXPORT const QString PROJECT_SCALES
CORE_EXPORT uint qHash(const QVariant &variant)
Hash for QVariant.
static const double DEFAULT_HIGHLIGHT_MIN_WIDTH_MM
Default highlight line/stroke minimum width in mm.
static const double DEFAULT_HIGHLIGHT_BUFFER_MM
Default highlight buffer in mm.
CORE_EXPORT int qgsPermissiveToInt(QString string, bool &ok)
Converts a string to an integer in a permissive way, e.g., allowing for incorrect numbers of digits b...
CORE_EXPORT bool qgsVariantGreaterThan(const QVariant &lhs, const QVariant &rhs)
Compares two QVariant values and returns whether the first is greater than the second.
void CORE_EXPORT * qgsMalloc(size_t size)
Allocates size bytes and returns a pointer to the allocated memory.
Object * operator->()
Returns pointer to blocked QObject.
const long GEO_EPSG_CRS_ID
Magic number for a geographic coord sys in EpsgCrsId ID format.
static const double SCALE_PRECISION
Fudge factor used to compare two scales.
CORE_EXPORT const QString GEO_EPSG_CRS_AUTHID
Geographic coord sys from EPSG authority.
CORE_EXPORT const QString GEOWKT
Wkt string that represents a geographic coord sys.