Files
qt-migration-legatus/qt5-before/dlbo/Lts/Viewer/SituationMap/Rubberbands/rubberband_rectangle.h
T
torstenandCopilot 7173785915 Qt6 Migration: Complete migration with DDS/RTI support and build validation
Major Changes:
- Merged latest Qt5 devel content from dlbo (292 files changed, 7 new dirs)
- Consolidated forward-declarations and include folders
- Removed unneeded modules per Niklas' repo check list

Build System Fixes:
- Fixed CMake VERSION_GREATER syntax in ParticipantManagement/CMakeLists.txt
- Added VLC packages (libvlc-dev, vlc-plugin-base) to docker_build.sh
- Added PostgreSQL dev packages (libpq-dev, postgresql-server-dev-all) to Dockerfile
- Fixed locale warnings (ANSI_X3.4-1968 → C.UTF-8)
- Fixed ArcGIS SDK path warnings when BUILD_ARCGIS=OFF

Code Generation Fixes:
- Fixed IDL enum collisions (PortType→CorePortType/DdsutPortType, PdmEventType)
- Fixed Grantlee template svc_translation.cpp.grantlee:
  - Changed {{ idl_enum.name }}_def:: to {{ idl_enum.name }}::
  - Fixed .underlying() calls for C++11 scoped enums (enum class)
- Removed generated files from repo (moc_*, *_dtc.h, *_ftc.h)

Validation:
- BUILD_RTI=ON: SUCCESS
- BUILD_RTI=OFF: SUCCESS
- C++17 standard maintained for RTI 7.7 compatibility
- Ubuntu 26.04 Docker environment verified

Remaining Warnings (expected):
- BgViewer, KDChart, KDReports, Poppler-Qt6 not found (optional features)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-09-15 18:20:26 +00:00

275 lines
11 KiB
Objective-C

/**
**
** @RDE_HEADER@
** Definition of rubberband class to define point feature geoemtry
** $Id$
** $HeadURL$
** $Author$
**
** -----------------------------------------------------------------------------------------------
**
** Hardware-Environment: Intel-PC
** Software-Environment: Windows 7, Qt 5.4. ArcGIS 10.2.5
**
** Language ........: C++ 11
**
** -----------------------------------------------------------------------------------------------
**
** Author ...........: Jörg Turla, SPD G, Tel. 3132
**
** -----------------------------------------------------------------------------------------------
**
** Notes .........:
**
** 17.06.2015, JT : First edition for use with Qt5
**
** -----------------------------------------------------------------------------------------------
*/
#pragma once
#include "rubberband.h"
#include <MathUtils/matrix2d.h>
namespace SituationMap { namespace RB
{
class RubberbandPointHandle;
/**
@class RubberbandRectangle rubberband_rectangle.h
@brief Implementation of a rectangle rubberband
@see Rubberband
*/
class SITUATIONMAP_EXPORT RubberbandRectangle : public Rubberband
{
Q_OBJECT
/**
@name Construction & Destruction
@}
*/
friend class RubberbandFactory;
friend class RubberbandEllipse;
friend class RubberbandTransform;
explicit RubberbandRectangle( SituationMap::Map * map, QObject * parent = nullptr );
public:
~RubberbandRectangle();
/** @} */
bool selectAction ( AbstractEventDispatcher * causer, int x, int y ) override;
bool multiSelectActionPress ( AbstractEventDispatcher * causer, int x, int y ) override;
bool multiSelectActionRelease( AbstractEventDispatcher * causer, int x, int y ) override;
bool setCoordinateAction ( AbstractEventDispatcher * causer, int x, int y ) override;
bool moveAction ( AbstractEventDispatcher * causer, int x, int y ) override;
bool movePickedAction ( AbstractEventDispatcher * causer, int x, int y ) override;
bool contextMenuAction ( AbstractEventDispatcher * causer, int x, int y ) override;
bool completeStateAction ( AbstractEventDispatcher * causer, int x, int y ) override;
bool deleteAction ( AbstractEventDispatcher * causer, int x, int y ) override;
bool undoAction ( AbstractEventDispatcher * causer, int x, int y ) override;
/**
@see rectangleVerticies
*/
bool coordinatesAreValid() const override { return rectangleIsValid(); }
/**
* @brief Get 4 verticies of rectangle
*/
QVector<QPointF> coordinateVector( CoordinateSystem cs = CoordinateSystem::Geo ) const override;
/**
* @brief Get center point of rectangle, see methode centerPoint
*/
QPointF singleCoordinate( unsigned int idx = 0, CoordinateSystem cs = CoordinateSystem::Geo ) const override;
/**
* @brief Set 4 verticies of rectangle
*/
void setCoordinateVector( const QVector<QPointF> &, CoordinateSystem cs = CoordinateSystem::Geo ) override;
/**
* @brief Returns center point of rectangle
*/
QPointF centerPoint( CoordinateSystem cs = CoordinateSystem::Geo ) const;
/**
* @brief Sets center point of rectangle
*/
void centerPoint(const QPointF &centerPoint, CoordinateSystem cs = CoordinateSystem::Geo );
/**
* @brief Get 4 verticies of rectangle
*/
QVector<QPointF> rectangleVerticies( CoordinateSystem cs = CoordinateSystem::Geo ) const;
/**
* @brief Set 4 verticies of rectangle
*/
void rectangleVerticies( const QVector<QPointF> &, CoordinateSystem cs = CoordinateSystem::Geo );
/**
* @brief Returns true if a valid rectangle has been set with method \c rectangleVerticies
* The rectangle rubberband is expecting input coordinates defining a rectangle in map coordinate system. Otherwise
* a similar as possible rectangle is used for rubberbanding and the coordinates returned by \c coordinateVector()
* will be different from input coordinates.
*/
bool rectangleIsValid() const;
/**
* @brief Pass back the rectangle parameter
* For convenience some times it would be an asset to get the parameter like center, width, height and rotation. This
* function pass back these parameter. A coordinate transformation or projection will \b not be done. All values are related to
* the coordinate system of the map.
* <b>Warning, if the map coordinate system doesn't use the same geographical projection as the simulation coordinate system
* the returned parameter may be all wrong.</b>
*
* @param center Center point of the rectangle in map coordinates.
* @param width Width of the rectangle.
* @param height Height of the rectangle.
* @param direction Normalized direction vector related to width axis.
*/
void rectangleParameter( QPointF & center, qreal & width, qreal & height, QPointF & direction, CoordinateSystem cs = CoordinateSystem::Geo );
/**
* @brief Build rectangle from rectangle parameter
* For convenience some times it would be an asset to initialize a rectangle rubberband from rectangle the parameter like width, height and rotation.
* A coordinate transformation or projection will \b not be done. All values are related to the coordinate system of the map.
* <b>Warning, if the map coordinate system doesn't use the same geographical projection as the simulation coordinate system all parameter may be wrong.</b>
*
* @param center Center of the rectangle in \b cs coordinate.
* @param width Width of the rectangle.
* @param height Height of the rectangle.
* @param direction Normalized direction vector related to width axis.
* @param cs Coordinate System.
*/
void buildFromRectangleParamter( const QPointF & center, qreal width, qreal height, const QPointF & direction, CoordinateSystem cs = CoordinateSystem::Geo );
/**
* @brief Build rectangle relative to the bottom left corner
* For convenience some times it would be an asset to initialize a rectangle rubberband from rectangle the parameter like width, height and rotation.
* A coordinate transformation or projection will \b not be done. All values are related to the coordinate system of the map.
* <b>Warning, if the map coordinate system doesn't use the same geographical projection as the simulation coordinate system all parameter may be wrong.</b>
*
* @param bottomLeft Bottom left corner of the rectangle in \b cs coordinates.
* @param width Width of the rectangle.
* @param height Height of the rectangle.
* @param direction Normalized direction vector related to width axis.
* @param cs Coordinate System.
*/
void buildRectangleRelativeToBottomLeftCorner( const QPointF & bottomLeft, qreal width, qreal height, const QPointF & direction, CoordinateSystem cs = CoordinateSystem::Geo );
/**
* @brief If set to true only quadratic rectangles can be created.
*/
void constrainQuadratic( bool on );
/**
* @brief Returns the setting for quadratic constrain.
*/
bool constrainQuadratic() const;
/**
* @brief If set to true the rectangle can not be rotated.
*/
void constrainOrthogonal( bool on );
/**
* @brief Returns the setting fpr orthogonsl constrain.
*/
bool constrainOrthogonal() const;
/**
@name Setting Constrains for Width and Height
To define a constrain value a postive values has to be assigned. Negative values will reset the constrain setting to undefined state.
@{
*/
void minWidth ( qreal x );
void maxWidth ( qreal x );
void minHeight( qreal x );
void maxHeight( qreal x );
/** @} */
protected:
/*
Forward declaration of InternalData to hold private member variables. Becareful the base class Rubberband
has similary a class for internal data member with name "InternalData". Don't be confused it is not the same.
*/
struct InternalData;
InternalData * _internal;
bool _rectangleIsValid;
/*
Coordinate matrix to describe the change of coordinates of the last user input
*/
MathUtils::Matrix2D _lastCoordinateChange;
/*
ModificationMode is used internally to restrict input for special purposes. It will be defined
by derived class
*/
enum class ModificationMode
{
NoneRestriction,
NoneRotation,
TranslationOnly,
ScalingOnly,
RotationOnly
};
void setModificationMode( ModificationMode );
void activateButtons() override;
void constructHandles();
void updateHandles( const QPointF & scenePos, QPointF deltaMove );
bool adjustLine( QPointF & deltaMove, bool & constrainsComplied );
void adjustNeighbouringPoints( RubberbandPointHandle * handlePointPtr, unsigned int handleIdx, QPointF deltaMove );
bool checkMinMaxConstrains(const QPointF & vertexScene, QPointF & deltaMovePtr );
bool checkMinMaxConstrains(const QPointF & vertexScene, bool isVertical );
bool constrainsSatisfied( RubberbandPointHandle * handlePointPtr, unsigned int handleIdx, QPointF & deltaMove, bool & constrainsComplied );
void useDottedLineHandles( bool on = true );
void update() override;
QPointF getSceneCenter() const;
qreal getSceneWidth() const;
qreal getSceneHeight() const;
QPointF getCenter() const;
qreal getWidth() const;
qreal getHeight() const;
void getSceneRotation( qreal & sinA, qreal & cosA ) const;
void getMapRotation ( qreal & sinA, qreal & cosA ) const;
void buildTmpConstructionPath(const QPointF & start, const QPointF & end, QVector<QPointF> & path, QPointF & sceneCenter, qreal & sceneWidth, qreal & sceneHeight );
virtual void buildTmpConstruction( SituationMap::RefPointer<RubberbandDrawable> & tmpGraphic, QPointF & start, QPointF & end );
virtual void getTmpConstructionParameter( const QPointF & start, const QPointF & end, QPointF & sceneCenter, qreal & sceneWidth, qreal & sceneHeight );
private:
void setButtonPosition();
}; /* RubberbandRectangle */
} } /* namespace SituationMap::RB */