Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
BIN
Binary file not shown.
|
After Width: | Height: | Size: 524 KiB |
@@ -0,0 +1,52 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface of AbstractEffectSimulation
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "abstract_map_object.h"
|
||||
#include "line_style.h"
|
||||
#include "fill_style.h"
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
/**
|
||||
* @brief The AesEffectState enum define the different states a EffectSimulation can have.
|
||||
*/
|
||||
enum class AesEffectState
|
||||
{
|
||||
Unknown = 0, ///< EffectSimulation is unknown.
|
||||
Error = -1, ///< EffectSimulation has an error.
|
||||
Expired = 1, ///< EffectSimulation has finished.
|
||||
Removed = 2, ///< EffectSimulation is deleted.
|
||||
Created = 4, ///< EffectSimulation is created.
|
||||
Prepared = 5, ///< EffectSimulation is created, but activation time is in future.
|
||||
Activated = 6, ///< EffectSimulation is created, and activation time is aimed.
|
||||
Paused = 7 ///< A triggered EffectSimulation is paused.
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief The AbstractEffectSimulation class contains some specific parameters.
|
||||
* Inherenting of this class ease the adding of this functionality.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT AbstractEffectSimulation
|
||||
{
|
||||
public:
|
||||
virtual ~AbstractEffectSimulation() = default;
|
||||
|
||||
virtual AesEffectState aesState() const = 0;
|
||||
virtual void setAesState(AesEffectState aesState) = 0;
|
||||
|
||||
};
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
+424
@@ -0,0 +1,424 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface of AbstractMapObject
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
#include "situation_map_utils.h"
|
||||
#include "text_style.h"
|
||||
#include <Common/referenced.h>
|
||||
#include <situation_map_export.h>
|
||||
|
||||
#include <MathUtils/geometry_engine.h>
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QString>
|
||||
#include <QColor>
|
||||
#include <QList>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
// forward:
|
||||
class BoundingBox;
|
||||
|
||||
/**
|
||||
* @brief The AbstractMapObject class is the baseclass of all MapObjects.
|
||||
* (The class 'Referenced' is for the RefPointer only)
|
||||
*
|
||||
* This class supports main parameters like uniqueMapId, debugInfo and identifier
|
||||
* to differentiate the objects.
|
||||
*
|
||||
* Second, the SymbolData can be set to use the TacticalAppearance of objects.
|
||||
*
|
||||
* Last but not least, visibility and drawOrder can be modified.
|
||||
*
|
||||
* An object has typically two Appearances:
|
||||
* The Technical and the Tactical Appearance.
|
||||
* Both can be switched on of off separatly,
|
||||
* see setVisibility(ObjectAppearance appearance, bool visibility).
|
||||
* @internal
|
||||
* The AbstractMapObjectImpl has to be initialized (set the Map, Layer and so on).
|
||||
* This call is done by the ObjectFactory.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT AbstractMapObject : virtual public Referenced
|
||||
{
|
||||
public:
|
||||
/*! \name Construction, Destruction */
|
||||
//@{
|
||||
/// Constructor
|
||||
AbstractMapObject() = default;
|
||||
|
||||
/// Destructor
|
||||
virtual ~AbstractMapObject() = default;
|
||||
|
||||
virtual void removeMySelf() = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Emulate QObject::property */
|
||||
//@{
|
||||
/**
|
||||
* @brief Set named property to value.
|
||||
* @param name name.
|
||||
* @param value value.
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool setProperty(const char *name, const QVariant &value) = 0;
|
||||
|
||||
/**
|
||||
* @brief Get named property to value.
|
||||
* @param name to retrieve
|
||||
* @return Requested value.
|
||||
*/
|
||||
virtual QVariant property(const char *name) const = 0;
|
||||
//@}
|
||||
|
||||
|
||||
|
||||
|
||||
/*! \name Identification */
|
||||
//@{
|
||||
/**
|
||||
* @brief Get uniqueMapId.
|
||||
* @return uniqueMapId.
|
||||
*/
|
||||
virtual UniqueMapId uniqueMapId() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Get debugInfo.
|
||||
* @return debugInfo.
|
||||
*/
|
||||
virtual QString debugInfo() const = 0;
|
||||
/**
|
||||
* @brief Set DebugInfo.
|
||||
* @param debugInfo new value.
|
||||
*/
|
||||
virtual void setDebugInfo(const QString &debugInfo) = 0;
|
||||
|
||||
/**
|
||||
* @brief toString delivers a string with some parameters.
|
||||
* @return String with some parameters.
|
||||
*/
|
||||
virtual QString toString() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Get identifier.
|
||||
* @return identifier.
|
||||
*/
|
||||
virtual QString identifier() const = 0;
|
||||
/**
|
||||
* @brief Set identifier of object to be displayed on the Map.
|
||||
* @param identifier new value.
|
||||
*/
|
||||
virtual void setIdentifier(const QString &identifier) = 0;
|
||||
|
||||
virtual bool identifierVisible() const = 0;
|
||||
virtual void setIdentifierVisible(bool identifierVisible) = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Direct and indirect assignment
|
||||
* These values (partyId) has a high priority. Therefore it will overwrite
|
||||
* some other values.
|
||||
* \n An example is the line and fill color of an AreaFire.
|
||||
* \n You can specify AreaFire::rLineStyle.setLineColor(Qt::blue) (== direct).
|
||||
* \n But if a valid partyId is provided, this will overwrite the line and fill
|
||||
* \n Exeption:
|
||||
* \n If forcePartyColor is used, this has more priority than the partyId.
|
||||
* parameter, color (== indirect).
|
||||
*/
|
||||
//@{
|
||||
|
||||
/**
|
||||
* @brief Get partyId.
|
||||
* @return partyId.
|
||||
*/
|
||||
virtual int partyId() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Check partyId
|
||||
* @return True if partyId is valid, otherwise false.
|
||||
*/
|
||||
virtual bool isPartyIdValid() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Set PartyId
|
||||
* @param partyId new value.
|
||||
*/
|
||||
virtual void setPartyId(int partyId) = 0;
|
||||
|
||||
/**
|
||||
* @brief If the color of a party changes the partyId has to re-evaluated to the new color.
|
||||
* @param partyColorToForce the color to be forced.
|
||||
* This method set the internal flag, that the next updateView will take the new color.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief If the color of a party changes the partyId has to re-evaluated to the new color.
|
||||
* If relevant this method will set the internal flag, that the next updateView will take the new color.
|
||||
* @param partyId causing the change, If less then 0, setting the internal flag is forced.
|
||||
* @return true if relevant for this object, otherwise false
|
||||
*/
|
||||
virtual bool setPartyIdChanged(int partyId = -1) = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @brief forcePartyColor to fulfill the flashing (e.g. of a participant)
|
||||
* This forcedColor has more priority that than the partyId.
|
||||
* @param partyColorToForce the color to be forced.
|
||||
*/
|
||||
virtual void forcePartyColor(const QColor &partyColorToBeForced) = 0;
|
||||
//@}
|
||||
|
||||
/**
|
||||
* @brief useLightColor Use the light party color instead the normal one
|
||||
*/
|
||||
virtual bool useLightColor() const = 0; ///< Only for Participants
|
||||
virtual void setUseLightColor(bool useLightColor) = 0; ///< Only for Participants
|
||||
//@}
|
||||
|
||||
//@{
|
||||
/**
|
||||
* @brief Get copy of textStyle.
|
||||
* @return textStyle.
|
||||
*/
|
||||
virtual TextStyle textStyle() const = 0;
|
||||
/**
|
||||
* @brief Get reference to TextStyle (to modify easily).
|
||||
* @return Reference to TextStyle.
|
||||
* @note: Use this with caution. This will set the internal changed flag.
|
||||
* Maybe you should prefer setTextStyle.
|
||||
*/
|
||||
virtual TextStyle &rTextStyle() = 0;
|
||||
/**
|
||||
* @brief Set TextStyle to be used for identifier.
|
||||
* @param textStyle new value.
|
||||
*/
|
||||
virtual void setTextStyle(const TextStyle &textStyle) = 0;
|
||||
//@}
|
||||
|
||||
/*! \name User scale */
|
||||
//@{
|
||||
/**
|
||||
* @brief Get scale.
|
||||
* @return scale
|
||||
*/
|
||||
virtual float scale() const = 0;
|
||||
/**
|
||||
* @brief Set scale of object.
|
||||
* @param newScale new value.
|
||||
*/
|
||||
virtual void setScale(float newScale) = 0;
|
||||
|
||||
virtual bool isScaleEnabled() const = 0;
|
||||
virtual void setScaleEnable(bool enabled) = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Layer and draworder */
|
||||
//@{
|
||||
/**
|
||||
* @brief Get logical layername.
|
||||
* @return logical layername.
|
||||
*/
|
||||
virtual QString layer() const = 0;
|
||||
/**
|
||||
* @brief Get drawOrder.
|
||||
* @return drawOrder.
|
||||
*/
|
||||
virtual int drawOrder() const = 0;
|
||||
/**
|
||||
* @brief Set drawOrder.
|
||||
* Caused by internal dependencies, the value MUST be within -3000...+3000. (INT_MAX=+32767 / 10 = 3276 -> ~3000).
|
||||
* \n Otherwise the internal graphics will be disordered.
|
||||
* \internal Background: Due to missing relative drawOrder an absolute drawOrder has to be used.\n
|
||||
* To create an absolute drawOrder the specified drawOrder is multiplied with 10.
|
||||
* The components (usually GraphicalObjects) receive that multiplied valued added by s small offset.
|
||||
* drawOrder() is not influenced by this and will return the value you set before.
|
||||
* @param drawOrder new value.
|
||||
*/
|
||||
virtual void setDrawOrder(int drawOrder) = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/** \name Visibility
|
||||
* If the object has to be invisible setVisibility() should be used.
|
||||
*
|
||||
* If only a single part has to be modified, remember the Technical and the Tactical ObjectAppearance.
|
||||
* Both can be switch on or off separately.
|
||||
*
|
||||
* Attention: If the two ObjectAppearances are invisible setVisibility(true) will make them <B>NOT</B> visibile.
|
||||
**/
|
||||
//@{
|
||||
// Visibility :
|
||||
// Prio 1:
|
||||
/**
|
||||
* @brief Get visibility of the whole object (Prio 1).
|
||||
* @return visibility of the whole object.
|
||||
*/
|
||||
virtual bool visibility() const = 0;
|
||||
/**
|
||||
* @brief Set visibility of the whole object (Prio 1).
|
||||
* @param visibility new value.
|
||||
*/
|
||||
virtual void setVisibility(bool visibility) = 0;
|
||||
|
||||
// Prio 2
|
||||
/**
|
||||
* @brief Get visibility of a specific ObjectAppearance (Prio 2).
|
||||
* @param appearance to be retrieved.
|
||||
* @return Current value.
|
||||
*/
|
||||
virtual bool visibility(ObjectAppearance appearance) const = 0;
|
||||
/**
|
||||
* @brief Set Visibility of a specific ObjectAppearance (Prio 2).
|
||||
* @param appearance to be modified.
|
||||
* @param visibility new value.
|
||||
*/
|
||||
virtual void setVisibility(ObjectAppearance appearance, bool visibility) = 0;
|
||||
|
||||
/**
|
||||
Calculates the intersection of map object another geometry
|
||||
@param intersector_polyline Geometry to intersect with
|
||||
@note: The geometry must be closed like a polyline. (not really sure)
|
||||
*/
|
||||
virtual bool geometryIntersect(const MathUtils::GeometryEngine::Geometry &intersector_polyline) const = 0;
|
||||
|
||||
/**
|
||||
Calculates if the map object is inside another geometry.
|
||||
@param hull_polygon Geometry to check against.
|
||||
@note: The geometry must be closed like a polygon. (not really sure)
|
||||
*/
|
||||
virtual bool geometryIsInHull(const MathUtils::GeometryEngine::Geometry &hull_polygon) const = 0;
|
||||
|
||||
protected:
|
||||
static int s_scaleHasVisibilityValue;
|
||||
public:
|
||||
static void setScaleHasVisibility(int scaleHasVisibility)
|
||||
{
|
||||
s_scaleHasVisibilityValue = scaleHasVisibility;
|
||||
}
|
||||
|
||||
// : Visibility
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Selection, Picking */
|
||||
//@{
|
||||
/**
|
||||
* @brief Get selected state.
|
||||
* @return true if selected, otherwise false.
|
||||
*/
|
||||
virtual bool selected() const = 0;
|
||||
/**
|
||||
* @brief Set selected state.
|
||||
* @param selected new state.
|
||||
*/
|
||||
virtual void setSelected(bool selected) = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get pickable state.
|
||||
* @return true if pickable, otherwise false.
|
||||
*/
|
||||
virtual bool pickable() const = 0;
|
||||
/**
|
||||
* @brief Set pickable state.
|
||||
* @param pickable new state.
|
||||
*/
|
||||
virtual void setPickable(bool pickable) = 0;
|
||||
//@}
|
||||
|
||||
|
||||
|
||||
/*! \name Symbol */
|
||||
//@{
|
||||
/**
|
||||
* @brief Get current symbol.
|
||||
* @return Current symbol.
|
||||
*/
|
||||
virtual SymbolData symbol() const = 0;
|
||||
/**
|
||||
* @brief Set new Symbol
|
||||
* @param symbol new value.
|
||||
*/
|
||||
virtual void setSymbol(const SymbolData &symbol) = 0;
|
||||
|
||||
/**
|
||||
* @brief reRenderSymbol
|
||||
* Will set the changed flag to true, following updateView is required
|
||||
*/
|
||||
virtual void reRenderSymbol() = 0;
|
||||
|
||||
|
||||
virtual SymbolDataToRender symbolDataToRender() const = 0;
|
||||
|
||||
/**
|
||||
* @brief symbolImage returns an image, maybe to be used as preview icon.
|
||||
* @return image of this MapObject.
|
||||
*/
|
||||
virtual SymbolImage symbolImage() const = 0;
|
||||
|
||||
|
||||
virtual QImage previewImage() const = 0;
|
||||
virtual QImage previewImageTypical() const = 0;
|
||||
virtual QImage previewImageSpecific() const = 0;
|
||||
//@}
|
||||
|
||||
|
||||
|
||||
/*! \name Common convenience methode, e.g. for MapObjectIndicator */
|
||||
//@{
|
||||
virtual void boundingBox(BoundingBox &bbox) const = 0;
|
||||
virtual void setForceMajorColor(const QColor &majorColor) = 0;
|
||||
virtual QColor majorColor() const = 0;
|
||||
//@}
|
||||
|
||||
/*! \name Some methods regarding extrusion (renderer approach) */
|
||||
//@{
|
||||
virtual double extrusionHeight() const = 0;
|
||||
virtual void setExtrusionHeight(double height = std::nan("")) = 0;
|
||||
|
||||
virtual const QString extrusionColorName() const = 0;
|
||||
virtual void setExtrusionColorName(const QString &extrusionColorName) = 0;
|
||||
//@}
|
||||
|
||||
|
||||
|
||||
/*! \name updateView */
|
||||
//@{
|
||||
/**
|
||||
* @brief Transfer all values to view
|
||||
* @return true on success
|
||||
*/
|
||||
virtual bool updateView() = 0;
|
||||
//@}
|
||||
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// output operator:
|
||||
//-----------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief Output operator used fo all deriving classes.
|
||||
* @param stream used to stream into.
|
||||
* @param value to be streamed.
|
||||
* @return appended stream.
|
||||
*/
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const AbstractMapObject &value);
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
Executable
+170
@@ -0,0 +1,170 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface of AbstractMapObject
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "bounding_box.h"
|
||||
#include "situation_map_utils.h"
|
||||
#include <situation_map_export.h>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
|
||||
BoundingBox::BoundingBox(ExtentType extentType)
|
||||
{
|
||||
reset();
|
||||
m_extentType = extentType;
|
||||
}
|
||||
|
||||
BoundingBox::BoundingBox(ExtentType extentType, const Point3D ¢er, double width, double height)
|
||||
: m_extentType(extentType),
|
||||
m_center(center),
|
||||
m_width(width),
|
||||
m_height(height)
|
||||
{
|
||||
}
|
||||
|
||||
void BoundingBox::reset()
|
||||
{
|
||||
m_extentType = ExtentType::Undefined;
|
||||
|
||||
m_center = Point3D();
|
||||
m_width = m_height = std::numeric_limits<double>::lowest();
|
||||
}
|
||||
|
||||
BoundingBox::ExtentType BoundingBox::extentType() const
|
||||
{
|
||||
return m_extentType;
|
||||
}
|
||||
|
||||
void BoundingBox::setExtentType(BoundingBox::ExtentType extentType)
|
||||
{
|
||||
m_extentType = extentType;
|
||||
}
|
||||
|
||||
bool BoundingBox::isValid() const
|
||||
{
|
||||
return
|
||||
m_extentType != ExtentType::Undefined &&
|
||||
!m_center.isNull() &&
|
||||
m_width != std::numeric_limits<double>::lowest() &&
|
||||
m_height != std::numeric_limits<double>::lowest();
|
||||
}
|
||||
|
||||
Point3D BoundingBox::center() const
|
||||
{
|
||||
return m_center;
|
||||
}
|
||||
|
||||
double BoundingBox::width() const
|
||||
{
|
||||
return m_width;
|
||||
}
|
||||
|
||||
double BoundingBox::height() const
|
||||
{
|
||||
return m_height;
|
||||
}
|
||||
|
||||
|
||||
Point3D BoundingBox::topLeft() const
|
||||
{
|
||||
return Point3D(m_center.x() - width() / 2.0,
|
||||
m_center.y() + height() / 2.0,
|
||||
m_center.z());
|
||||
}
|
||||
|
||||
Point3D BoundingBox::topRight() const
|
||||
{
|
||||
return Point3D(m_center.x() + width() / 2.0,
|
||||
m_center.y() + height() / 2.0,
|
||||
m_center.z());
|
||||
}
|
||||
|
||||
Point3D BoundingBox::bottomLeft() const
|
||||
{
|
||||
return Point3D(m_center.x() - width() / 2.0,
|
||||
m_center.y() - height() / 2.0,
|
||||
m_center.z());
|
||||
}
|
||||
|
||||
Point3D BoundingBox::bottomRight() const
|
||||
{
|
||||
return Point3D(m_center.x() + width() / 2.0,
|
||||
m_center.y() - height() / 2.0,
|
||||
m_center.z());
|
||||
}
|
||||
|
||||
Point3D BoundingBox::centerRight() const
|
||||
{
|
||||
return Point3D(m_center.x() + width() / 2.0,
|
||||
m_center.y(),
|
||||
m_center.z());
|
||||
}
|
||||
|
||||
|
||||
PositionCont BoundingBox::positions() const
|
||||
{
|
||||
PositionCont posCont;
|
||||
posCont.reserve(4);
|
||||
|
||||
posCont.append(topLeft());
|
||||
posCont.append(topRight());
|
||||
posCont.append(bottomRight());
|
||||
posCont.append(bottomLeft());
|
||||
|
||||
return posCont;
|
||||
}
|
||||
|
||||
|
||||
QString BoundingBox::toString() const
|
||||
{
|
||||
QString asString = toString(m_extentType);
|
||||
asString += QStringLiteral(" center=(%1;%2;%3), width=%4, height=%5")
|
||||
.arg(m_center.x()).arg(m_center.y()).arg(m_center.z()).arg(m_width).arg(m_height);
|
||||
return asString;
|
||||
}
|
||||
|
||||
|
||||
QString BoundingBox::toString(BoundingBox::ExtentType value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case BoundingBox::ExtentType::Undefined:
|
||||
return QLatin1String("Undefined");
|
||||
case BoundingBox::ExtentType::Sim:
|
||||
return QLatin1String("Sim");
|
||||
case BoundingBox::ExtentType::Pixel:
|
||||
return QLatin1String("Pixel");
|
||||
} // switch
|
||||
return QLatin1String("BoundingBox::ExtentTypeERROR");
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// output operator:
|
||||
//-----------------------------------------------------------------------------
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const BoundingBox &value)
|
||||
{
|
||||
stream << value.toString();
|
||||
return stream;
|
||||
}
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const BoundingBox::ExtentType &value)
|
||||
{
|
||||
stream << BoundingBox::toString(value);
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
Executable
+85
@@ -0,0 +1,85 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface of AbstractMapObject
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
#include "situation_map_utils.h"
|
||||
#include <situation_map_export.h>
|
||||
|
||||
// Qt
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
class SITUATIONMAP_EXPORT BoundingBox
|
||||
{
|
||||
public:
|
||||
enum class ExtentType {Undefined, Sim, Pixel};
|
||||
static QString toString(BoundingBox::ExtentType value);
|
||||
|
||||
public:
|
||||
explicit BoundingBox(ExtentType extentType = ExtentType::Undefined);
|
||||
explicit BoundingBox(ExtentType extentType, const Point3D ¢er, double width = 0, double height = 0); ///< relative to BasePoint
|
||||
|
||||
void reset();
|
||||
|
||||
ExtentType extentType() const;
|
||||
void setExtentType(ExtentType extentType);
|
||||
|
||||
bool isValid() const;
|
||||
|
||||
Point3D center() const;
|
||||
|
||||
double width() const; ///< interpret values depending on type
|
||||
double height() const; ///< interpret values depending on type
|
||||
|
||||
Point3D topLeft() const; ///< use quadrant 1
|
||||
Point3D topRight() const; ///< use quadrant 1
|
||||
Point3D bottomLeft() const; ///< use quadrant 1
|
||||
Point3D bottomRight() const; ///< use quadrant 1
|
||||
|
||||
Point3D centerRight() const; ///< use quadrant 1
|
||||
|
||||
PositionCont positions() const;
|
||||
|
||||
|
||||
QString toString() const;
|
||||
|
||||
protected:
|
||||
ExtentType m_extentType = ExtentType::Undefined; ///< relevant for width and height
|
||||
|
||||
Point3D m_center; ///< simCoordinates
|
||||
|
||||
double m_width; ///< simCoordinates or pixel
|
||||
double m_height; ///< simCoordinates or pixel
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// output operator:
|
||||
//-----------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief Output operator
|
||||
* @param stream used to stream into.
|
||||
* @param value to be streamed.
|
||||
* @return appended stream.
|
||||
*/
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const BoundingBox &value);
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const BoundingBox::ExtentType &value);
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
Executable
+99
@@ -0,0 +1,99 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Class Camera
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "camera.h"
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QJsonObject>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
Camera::Camera()
|
||||
{
|
||||
resetCamera();
|
||||
}
|
||||
|
||||
void Camera::resetCamera()
|
||||
{
|
||||
loc_x_lon = 0;
|
||||
loc_y_lat = 0;
|
||||
loc_z = 0;
|
||||
heading = 0;
|
||||
pitch = 0;
|
||||
roll = 0;
|
||||
}
|
||||
|
||||
bool Camera::isNull() const
|
||||
{
|
||||
return qFuzzyIsNull(loc_x_lon) && qFuzzyIsNull(loc_y_lat) && qFuzzyIsNull(loc_z) &&
|
||||
qFuzzyIsNull(heading) && qFuzzyIsNull(pitch) && qFuzzyIsNull(roll);
|
||||
|
||||
}
|
||||
|
||||
Camera Camera::read(const QJsonObject &json)
|
||||
{
|
||||
Camera cam;
|
||||
if (json.contains(QLatin1String("loc_x_lon")))
|
||||
cam.loc_x_lon = json[QLatin1String("loc_x_lon")].toDouble();
|
||||
if (json.contains(QLatin1String("loc_y_lat")))
|
||||
cam.loc_y_lat = json[QLatin1String("loc_y_lat")].toDouble();
|
||||
if (json.contains(QLatin1String("loc_z")))
|
||||
cam.loc_z = json[QLatin1String("loc_z")].toDouble();
|
||||
|
||||
if (json.contains(QLatin1String("heading")))
|
||||
cam.heading = json[QLatin1String("heading")].toDouble();
|
||||
if (json.contains(QLatin1String("loc_x_lon")))
|
||||
cam.pitch = json[QLatin1String("pitch")].toDouble();
|
||||
if (json.contains(QLatin1String("roll")))
|
||||
cam.roll = json[QLatin1String("roll")].toDouble();
|
||||
|
||||
return cam;
|
||||
}
|
||||
QJsonObject Camera::toJsonObject() const
|
||||
{
|
||||
QJsonObject json;
|
||||
json[QLatin1String("loc_x_lon")] = loc_x_lon;
|
||||
json[QLatin1String("loc_y_lat")] = loc_y_lat;
|
||||
json[QLatin1String("loc_z")] = loc_z;
|
||||
json[QLatin1String("heading")] = heading;
|
||||
json[QLatin1String("pitch")] = pitch;
|
||||
json[QLatin1String("roll")] = roll;
|
||||
return json;
|
||||
}
|
||||
|
||||
|
||||
QString Camera::toString() const
|
||||
{
|
||||
QString str;
|
||||
str.append(QStringLiteral("xLon;yLat=%1;%2[rad").arg(loc_x_lon).arg(loc_y_lat) );
|
||||
str.append(QStringLiteral("xLon;yLat=%1;%2[deg").arg(loc_x_lon*180.0/M_PI).arg(loc_y_lat*180.0/M_PI) );
|
||||
str.append(QStringLiteral(" z=%1").arg(loc_z));
|
||||
|
||||
str.append(QStringLiteral(" heading=%1").arg(heading));
|
||||
str.append(QStringLiteral(" pitch=%1").arg(pitch));
|
||||
str.append(QStringLiteral(" roll=%1").arg(roll));
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const Camera &value)
|
||||
{
|
||||
stream << "Camera(" << value.toString() << "): ";
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
Executable
+63
@@ -0,0 +1,63 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Class Camera
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
#include <Common/situation_map_logging.h>
|
||||
#include <situation_map_export.h>
|
||||
|
||||
// Qt
|
||||
#include <QString>
|
||||
|
||||
class QJsonObject;
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// for 3D:
|
||||
/**
|
||||
* @brief A Camera contains the spatial parameters to set a 3D view on a Scene (3D):
|
||||
* A virtual camera's location, orientation and field of view.
|
||||
*
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT Camera
|
||||
{
|
||||
public:
|
||||
Camera();
|
||||
~Camera() = default;
|
||||
|
||||
void resetCamera();
|
||||
bool isNull() const;
|
||||
|
||||
static Camera read(const QJsonObject &json);
|
||||
QJsonObject toJsonObject() const;
|
||||
|
||||
QString toString() const;
|
||||
|
||||
|
||||
double loc_x_lon; ///< location x (longitude)
|
||||
double loc_y_lat; ///< location y (latitude)
|
||||
double loc_z; ///< location z
|
||||
|
||||
double heading;
|
||||
double pitch;
|
||||
double roll;
|
||||
};
|
||||
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::Camera &value);
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
+88
@@ -0,0 +1,88 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface-Implementation of Map
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
|
||||
|
||||
// ESRI
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QString>
|
||||
|
||||
|
||||
namespace Esri
|
||||
{
|
||||
namespace ArcGISRuntime
|
||||
{
|
||||
class Point;
|
||||
}
|
||||
}
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
/**
|
||||
* @brief The CoordTranslationFunctor is a base class translating between
|
||||
* the GeographicCoordinats (WGS84 - EPSG:4326) and the
|
||||
* EsriMap working on map coordinates.
|
||||
*
|
||||
* Forward (geographicToMap):
|
||||
* Geo (lon, lat) to map.
|
||||
*
|
||||
* Backward (mapToGeographic):
|
||||
* Map to Geo (lon, lat).
|
||||
*/
|
||||
class CoordTranslationFunctor
|
||||
{
|
||||
public:
|
||||
/*! \name Construction, Destruction */
|
||||
//@{
|
||||
explicit CoordTranslationFunctor() = default; ///< Contructor
|
||||
virtual ~CoordTranslationFunctor() = default; ///< Destructor
|
||||
//@}
|
||||
|
||||
/*! \name Complete translation */
|
||||
//@{
|
||||
Q_REQUIRED_RESULT virtual QPointF geographicToMap(const double lon, const double lat) const = 0; ///< Forward: geographic coord to mapCoord, in radian
|
||||
Q_REQUIRED_RESULT virtual QPointF mapToGeographic(const double x, const double y) const = 0; ///< Backward: mapCoord to geographic Coord
|
||||
|
||||
Q_REQUIRED_RESULT virtual QPointF geographicToMap(const QPointF &coord) const = 0; ///< Forward: geographic coord to mapCoord
|
||||
Q_REQUIRED_RESULT virtual QPointF mapToGeographic(const QPointF &coord) const = 0; ///< Backward: mapCoord to geographic Coord
|
||||
|
||||
Q_REQUIRED_RESULT virtual QPointF geographicToMap(const Esri::ArcGISRuntime::Point &coord) const = 0; ///< Forward: geographic coord to mapCoord
|
||||
Q_REQUIRED_RESULT virtual QPointF mapToGeographic(const Esri::ArcGISRuntime::Point &coord) const = 0; ///< Backward: mapCoord to geographic Coord
|
||||
|
||||
Q_REQUIRED_RESULT virtual Point3D geographicToMap(const Point3D &point3D) const = 0; ///< Forward: geographic coord to mapCoord
|
||||
Q_REQUIRED_RESULT virtual Point3D mapToGeographic(const Point3D &point3D) const = 0; ///< Backward: mapCoord to geographic Coord
|
||||
|
||||
Q_REQUIRED_RESULT virtual bool mapIsGeographic() const = 0;
|
||||
|
||||
virtual void geographicToUtm(const double referenceLon, QList<QPointF> &points) const = 0; ///< tanslate to proper utm coordinate system
|
||||
virtual void utmToGeographic(const double referenceLon, QList<QPointF> &points) const = 0; ///< translate back to goegraphic coordiante system
|
||||
|
||||
//@}
|
||||
|
||||
/*! \name For statistic or tests */
|
||||
//@{
|
||||
virtual int projectionCounter() const = 0;
|
||||
virtual void resetProjectionCounter() = 0;
|
||||
//@}
|
||||
|
||||
};
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
+146
@@ -0,0 +1,146 @@
|
||||
/**
|
||||
**
|
||||
** @RDE_HEADER@
|
||||
** Simple DropEventManager to manage drop events in SituationMap Map Widget
|
||||
** $Id$
|
||||
** $HeadURL$
|
||||
** $Author$
|
||||
**
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
**
|
||||
** Hardware-Environment: Intel-PC
|
||||
** Software-Environment: Windows 7, Linux, Qt 5.4. ArcGIS 10.2.5
|
||||
**
|
||||
** Language ........: C++ 11
|
||||
**
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
**
|
||||
** Author ...........: Jörg Turla, SPD G, Tel. 3132
|
||||
**
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
**
|
||||
** Notes .........:
|
||||
**
|
||||
** 18.12.2015, JT : First edition for use with Qt5
|
||||
**
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <Common/referenced.h>
|
||||
|
||||
#include <QtCore/QPoint>
|
||||
|
||||
class QMimeData;
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
/**
|
||||
@class DropEventManager drop_event_manager.h
|
||||
@brief Drop event manager interface class.
|
||||
@see SituationMap::Map, PBase::PDropHandler
|
||||
|
||||
To process drop events the map window has to decide accepting a drop when it gets a drag enter event or not, depending on the type of mime data. Later
|
||||
when receiving a drop event the dropped data has to be processed. The DropEventManager class provides information of mime data type to decide handling
|
||||
the type of drop event or not. The function mimeFormatString() should return a uniquely defined string. To handle a special drop event the map will call
|
||||
the manageDrop function. Both functions have to be implemented in the derived class.
|
||||
|
||||
Following example shows how to implement a drop event mamager.
|
||||
|
||||
@code
|
||||
|
||||
#include <Map/drop_event_manager.h>
|
||||
|
||||
class DropEventManager : public SituationMap::DropEventManager
|
||||
{
|
||||
public:
|
||||
|
||||
DropEventManager() = default;
|
||||
|
||||
virtual ~DropEventManager()
|
||||
{
|
||||
// delete all dropHandler
|
||||
for (auto key : m_dropHandlerMap.keys())
|
||||
{
|
||||
delete m_dropHandlerMap[key];
|
||||
m_dropHandlerMap[key] = nullptr;
|
||||
}
|
||||
} // ~DropEventManager()
|
||||
|
||||
QString mimeFormatString() const { return QLatin1String("DropHandlerPtr"); }
|
||||
|
||||
void manageDrop( QPoint windowPos, const QMimeData * mimeData ) override
|
||||
{
|
||||
bool ok = false;
|
||||
qulonglong dropHandlerKey = mimeData->data(mimeFormatString()).toULongLong(&ok);
|
||||
if (ok)
|
||||
{
|
||||
QMap<qulonglong,PBase::PDropHandler*>::iterator dropHandler;
|
||||
dropHandler = m_dropHandlerMap.find( dropHandlerKey );
|
||||
if (dropHandler != m_dropHandlerMap.end())
|
||||
{
|
||||
(*dropHandler)->doDrop( windowPos.x(), windowPos.y(), mimeData );
|
||||
}
|
||||
}
|
||||
} // manageDrop( const QMimeData * mimeData )
|
||||
|
||||
qulonglong add( PBase::PDropHandler * dropHandler )
|
||||
{
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// DropEvewntManager get ownership of dropHandler and delete them in dtor.
|
||||
// See dtor above.
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
qulonglong key = qulonglong(dropHandler);
|
||||
if (dropHandler)
|
||||
{
|
||||
m_dropHandlerMap[key] = dropHandler;
|
||||
}
|
||||
return key;
|
||||
} // add(PBase::PDropHandler * dropHandler)
|
||||
|
||||
protected:
|
||||
|
||||
QMap<qulonglong,PBase::PDropHandler*> m_dropHandlerMap;
|
||||
|
||||
}; // DropEventManager
|
||||
|
||||
|
||||
void installDropEventManager()
|
||||
{
|
||||
m_dropEventManager = new DropEventManager();
|
||||
m_map -> installDropEventManager( m_dropEventManager );
|
||||
}
|
||||
|
||||
@endcode
|
||||
|
||||
*/
|
||||
|
||||
|
||||
class DropEventManager : public Referenced
|
||||
{
|
||||
public:
|
||||
|
||||
DropEventManager() = default;
|
||||
~DropEventManager() = default;
|
||||
|
||||
DropEventManager(const DropEventManager *) = delete;
|
||||
|
||||
/*
|
||||
The function \c mimeFormatString() returns a uniquely defined string to identify type of mime data. The string will be used to call \c QMimeData::hasFormat()
|
||||
@see QMimeData
|
||||
*/
|
||||
virtual QString mimeFormatString() const = 0;
|
||||
|
||||
/*
|
||||
The function \c manageDrop() will be called to process drop events
|
||||
@param windowPos Mouse cursor from drop event
|
||||
@param mimeData Data of drop event to process.
|
||||
*/
|
||||
virtual void manageDrop(QPoint windowPos, const QMimeData *mimeData) = 0;
|
||||
|
||||
}; // DropEventManager
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
Executable
+67
@@ -0,0 +1,67 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* FillStyle
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "fill_style.h"
|
||||
|
||||
|
||||
// ESRI
|
||||
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
|
||||
FillStyle::FillStyle(const QColor &fillColor, FillPattern fillPattern)
|
||||
: m_fillColor(fillColor)
|
||||
, m_fillPattern(fillPattern)
|
||||
{
|
||||
}
|
||||
|
||||
FillStyle::FillStyle(FillPattern fillPattern)
|
||||
: m_fillPattern(fillPattern)
|
||||
{
|
||||
}
|
||||
|
||||
QColor FillStyle::fillColor() const
|
||||
{
|
||||
return m_fillColor;
|
||||
}
|
||||
|
||||
void FillStyle::setFillColor(const QColor &fillColor)
|
||||
{
|
||||
m_fillColor = fillColor;
|
||||
}
|
||||
SituationMap::FillPattern FillStyle::fillPattern() const
|
||||
{
|
||||
return m_fillPattern;
|
||||
}
|
||||
|
||||
void FillStyle::setFillPattern(const SituationMap::FillPattern &fillPattern)
|
||||
{
|
||||
m_fillPattern = fillPattern;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// output operator:
|
||||
//-----------------------------------------------------------------------------
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const FillStyle &value)
|
||||
{
|
||||
QString str;
|
||||
str.append(QStringLiteral(" fillPattern='%1'").arg(static_cast<int>(value.fillPattern())));
|
||||
str.append(QStringLiteral(" fillColor='%1'").arg(value.fillColor().name(QColor::HexArgb)));
|
||||
|
||||
stream << str.toStdString();
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
Executable
+112
@@ -0,0 +1,112 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* FillStyle
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
#include <situation_map_export.h>
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QColor>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief The FillStyle class contains parameter to fill an area with color and pattern.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT FillStyle final
|
||||
{
|
||||
public:
|
||||
|
||||
/*! \name Construction, Destruction */
|
||||
//@{
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
FillStyle() = default;
|
||||
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
FillStyle(const QColor &fillColor, FillPattern fillPattern);
|
||||
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
explicit FillStyle(FillPattern fillPattern);
|
||||
|
||||
/**
|
||||
* @brief Destructor
|
||||
*/
|
||||
~FillStyle() = default;
|
||||
//@}
|
||||
|
||||
|
||||
/** \name FillColor
|
||||
* Set and get methods.
|
||||
*/
|
||||
//@{
|
||||
QColor fillColor() const;
|
||||
void setFillColor(const QColor &fillColor);
|
||||
//@}
|
||||
|
||||
/** \name FillPattern
|
||||
* Set and get methods.
|
||||
*/
|
||||
FillPattern fillPattern() const;
|
||||
void setFillPattern(const FillPattern &fillPattern);
|
||||
//@}
|
||||
|
||||
|
||||
/**
|
||||
* @brief operator== Compare two objects
|
||||
* @param other to be compared with
|
||||
* @return true if identical, otherwise false.
|
||||
*/
|
||||
bool operator==(const FillStyle &other) const
|
||||
{
|
||||
return ((this->m_fillColor == other.m_fillColor) &&
|
||||
(this->m_fillPattern == other.m_fillPattern)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief operator!= Compare two objects
|
||||
* @param other to be compared with
|
||||
* @return true if NOT identical, otherwise false.
|
||||
*/
|
||||
bool operator!=(const FillStyle &other) const
|
||||
{
|
||||
return !(*this == other);
|
||||
}
|
||||
|
||||
private:
|
||||
QColor m_fillColor = QColor(125, 125, 125, 125); // gray
|
||||
FillPattern m_fillPattern = FillPattern::Solid;
|
||||
};
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// output operator:
|
||||
//-----------------------------------------------------------------------------
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const FillStyle &value);
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
+114
@@ -0,0 +1,114 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Construction of MapObjects
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
// Own
|
||||
#include "abstract_map_object.h"
|
||||
#include "situation_map_utils.h"
|
||||
#include <Common/ref_pointer.h>
|
||||
#include <situation_map_export.h>
|
||||
#include <Common/situation_map_logging.h>
|
||||
|
||||
|
||||
#include <typeindex>
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
// forward
|
||||
class Map;
|
||||
class ObjectFactory;
|
||||
|
||||
|
||||
/**
|
||||
* @brief The GenericObjectFactoryBase class define the interface for GenericObjectFactory.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT GenericObjectFactoryBase
|
||||
{
|
||||
public:
|
||||
/*! \name Construction, Destruction */
|
||||
//@{
|
||||
/**
|
||||
* @brief Contructor.
|
||||
* (In case of base class for GenericObjectFactory, map stays null)
|
||||
*/
|
||||
GenericObjectFactoryBase()
|
||||
: m_logger(getLogger("GenericObjectFactoryBase"))
|
||||
{}
|
||||
|
||||
/**
|
||||
* @brief Destruktor
|
||||
*/
|
||||
virtual ~GenericObjectFactoryBase() = default;
|
||||
//@}
|
||||
|
||||
GenericObjectFactoryBase(const GenericObjectFactoryBase &other) = delete;
|
||||
GenericObjectFactoryBase &operator=(GenericObjectFactoryBase &other) = delete;
|
||||
|
||||
virtual RefPointer<AbstractMapObject> makeObj(const QString &debugInfo = QString()) = 0;
|
||||
virtual std::type_index getTypeIndexOfImplementation() = 0;
|
||||
|
||||
private:
|
||||
LOGGER_T m_logger; ///< Interface of the Logging-Facility
|
||||
};
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Generic Object Factory
|
||||
//----------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief The GenericObjectFactory class to create concrete MapObjects
|
||||
*/
|
||||
template <typename IMPL_TYPE>
|
||||
class GenericObjectFactory final : public GenericObjectFactoryBase
|
||||
{
|
||||
public:
|
||||
/*! \name Construction, Destruction */
|
||||
//@{
|
||||
/**
|
||||
* @brief Contructor.
|
||||
*/
|
||||
GenericObjectFactory() = default;
|
||||
/**
|
||||
* @brief Destructor.
|
||||
*/
|
||||
~GenericObjectFactory() = default;
|
||||
//@}
|
||||
|
||||
protected:
|
||||
/**
|
||||
* @brief Create MapObject.
|
||||
* @param debugInfo for the MapObject.
|
||||
* @return RefPointer with object.
|
||||
*/
|
||||
RefPointer<AbstractMapObject> makeObj(const QString &debugInfo = QString()) override
|
||||
{
|
||||
AbstractMapObject *obj = new IMPL_TYPE(debugInfo);
|
||||
return RefPointer<AbstractMapObject>(obj);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get type_index of associated implementation.
|
||||
* @return type_index this GenericObjectFactory::makeObj() will create.
|
||||
* @internal Will be used within ObjectFactory::interfaceToImplementation.
|
||||
*/
|
||||
std::type_index getTypeIndexOfImplementation() override
|
||||
{
|
||||
return std::type_index(typeid(IMPL_TYPE));
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
+181
@@ -0,0 +1,181 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* PlanModel - Renderer
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
|
||||
#include "geometry_model_renderer.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QTime>
|
||||
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
GeometryModelRenderer::GeometryModelRenderer(Map *map, const QString &layerName, GeometryModel &geoModel, QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_stats()
|
||||
, m_nodesPickable(true)
|
||||
, m_enableRedraw(true)
|
||||
, m_map(map)
|
||||
, m_layerName(layerName)
|
||||
, m_geometryModel(geoModel)
|
||||
, m_logger(getLogger("GeometryModelRenderer"))
|
||||
, m_loggerStats(getLogger("GeometryModelRenderer.Stats"))
|
||||
{
|
||||
|
||||
if (!m_map)
|
||||
ERROR_LOG(m_logger) << LOGFUNCTION << " undefined map";
|
||||
|
||||
if (m_layerName.isEmpty())
|
||||
ERROR_LOG(m_logger) << LOGFUNCTION << " empty map layer name";
|
||||
|
||||
|
||||
} // GeometryModelRenderer::GeometryModelRenderer(QWidget *parent, bool showUI)
|
||||
|
||||
void GeometryModelRenderer::resetStats()
|
||||
{
|
||||
m_stats.m_drawCount = 0;
|
||||
m_stats.m_drawElementsRecursiveCount = 0;
|
||||
m_stats.m_drawEllipseCount = 0;
|
||||
m_stats.m_drawLineCount = 0;
|
||||
m_stats.m_drawPolylineCount = 0;
|
||||
m_stats.m_drawRectangleCount = 0;
|
||||
m_stats.m_drawSplineCount = 0;
|
||||
m_stats.m_drawSymbolCount = 0;
|
||||
m_stats.m_drawTextCount = 0;
|
||||
m_stats.m_drawNodeCount = 0;
|
||||
m_stats.m_msEllipse = 0;
|
||||
m_stats.m_msLine = 0;
|
||||
m_stats.m_msPolyline = 0;
|
||||
m_stats.m_msRectangle = 0;
|
||||
m_stats.m_msSpline = 0;
|
||||
m_stats.m_msSymbol = 0;
|
||||
m_stats.m_msText = 0;
|
||||
m_stats.m_msNode = 0;
|
||||
m_stats.m_msEllipseMax = 0;
|
||||
m_stats.m_msLineMax = 0;
|
||||
m_stats.m_msPolylineMax = 0;
|
||||
m_stats.m_msRectangleMax = 0;
|
||||
m_stats.m_msSplineMax = 0;
|
||||
m_stats.m_msSymbolMax = 0;
|
||||
m_stats.m_msTextMax = 0;
|
||||
m_stats.m_msNodeMax = 0;
|
||||
m_stats.m_msEllipseMin = 0;
|
||||
m_stats.m_msLineMin = 0;
|
||||
m_stats.m_msPolylineMin = 0;
|
||||
m_stats.m_msRectangleMin = 0;
|
||||
m_stats.m_msSplineMin = 0;
|
||||
m_stats.m_msSymbolMin = 0;
|
||||
m_stats.m_msTextMin = 0;
|
||||
m_stats.m_msNodeMin = 0;
|
||||
} // void GeometryModelRenderer::resetStats()
|
||||
|
||||
|
||||
void GeometryModelRenderer::printStats()
|
||||
{
|
||||
if (! m_loggerStats.isInfoEnabled())
|
||||
return;
|
||||
|
||||
int sum = m_stats.m_msEllipse
|
||||
+ m_stats.m_msLine
|
||||
+ m_stats.m_msPolyline
|
||||
+ m_stats.m_msRectangle
|
||||
+ m_stats.m_msSpline
|
||||
+ m_stats.m_msSymbol
|
||||
+ m_stats.m_msText
|
||||
+ m_stats.m_msNode;
|
||||
|
||||
QStringList stats;
|
||||
stats.append(QStringLiteral("%1 %2 %3 %4 %5 %6")
|
||||
.arg(QLatin1String("Op"), 10)
|
||||
.arg(QLatin1String("Count"), 10)
|
||||
.arg(QLatin1String("Total"), 10)
|
||||
.arg(QLatin1String("Min"), 10)
|
||||
.arg(QLatin1String("Max"), 10)
|
||||
.arg(QLatin1String("Avg"), 10));
|
||||
|
||||
stats.append(QStringLiteral("%1 %2 %3")
|
||||
.arg(QLatin1String("Draw Geometry"), 10)
|
||||
.arg(m_stats.m_drawCount, 10)
|
||||
.arg(sum, 10));
|
||||
|
||||
stats.append(QStringLiteral("%1 %2")
|
||||
.arg(QLatin1String("Recursive"), 10)
|
||||
.arg(m_stats.m_drawElementsRecursiveCount, 10));
|
||||
|
||||
stats.append(QStringLiteral("%1 %2 %3 %4 %5 %6")
|
||||
.arg(QLatin1String("Ellipse"), 10)
|
||||
.arg(m_stats.m_drawEllipseCount, 10)
|
||||
.arg(m_stats.m_msEllipse, 10)
|
||||
.arg(m_stats.m_msEllipseMin, 10)
|
||||
.arg(m_stats.m_msEllipseMax, 10)
|
||||
.arg((double)m_stats.m_msEllipse / (double)m_stats.m_drawEllipseCount, 10));
|
||||
|
||||
stats.append(QStringLiteral("%1 %2 %3 %4 %5 %6")
|
||||
.arg(QLatin1String("Line"), 10)
|
||||
.arg(m_stats.m_drawLineCount, 10)
|
||||
.arg(m_stats.m_msLine, 10)
|
||||
.arg(m_stats.m_msLineMin, 10)
|
||||
.arg(m_stats.m_msLineMax, 10)
|
||||
.arg((double)m_stats.m_msLine / (double)m_stats.m_drawLineCount, 10));
|
||||
|
||||
stats.append(QStringLiteral("%1 %2 %3 %4 %5 %6")
|
||||
.arg(QLatin1String("Polyline"), 10)
|
||||
.arg(m_stats.m_drawPolylineCount, 10)
|
||||
.arg(m_stats.m_msPolyline, 10)
|
||||
.arg(m_stats.m_msPolylineMin, 10)
|
||||
.arg(m_stats.m_msPolylineMax, 10)
|
||||
.arg((double)m_stats.m_msPolyline / (double)m_stats.m_drawPolylineCount, 10));
|
||||
|
||||
stats.append(QStringLiteral("%1 %2 %3 %4 %5 %6")
|
||||
.arg(QLatin1String("Rectangle"), 10)
|
||||
.arg(m_stats.m_drawRectangleCount, 10)
|
||||
.arg(m_stats.m_msRectangle, 10)
|
||||
.arg(m_stats.m_msRectangleMin, 10)
|
||||
.arg(m_stats.m_msRectangleMax, 10)
|
||||
.arg((double)m_stats.m_msRectangle / (double)m_stats.m_drawRectangleCount, 10));
|
||||
|
||||
stats.append(QStringLiteral("%1 %2 %3 %4 %5 %6")
|
||||
.arg(QLatin1String("Spline"), 10)
|
||||
.arg(m_stats.m_drawSplineCount, 10)
|
||||
.arg(m_stats.m_msSpline, 10)
|
||||
.arg(m_stats.m_msSplineMin, 10)
|
||||
.arg(m_stats.m_msSplineMax, 10)
|
||||
.arg((double)m_stats.m_msSpline / (double)m_stats.m_drawSplineCount, 10));
|
||||
|
||||
stats.append(QStringLiteral("%1 %2 %3 %4 %5 %6")
|
||||
.arg(QLatin1String("Symbol"), 10)
|
||||
.arg(m_stats.m_drawSymbolCount, 10)
|
||||
.arg(m_stats.m_msSymbol, 10)
|
||||
.arg(m_stats.m_msSymbolMin, 10)
|
||||
.arg(m_stats.m_msSymbolMax, 10)
|
||||
.arg((double)m_stats.m_msSymbol / (double)m_stats.m_drawSymbolCount, 10));
|
||||
|
||||
stats.append(QStringLiteral("%1 %2 %3 %4 %5 %6")
|
||||
.arg(QLatin1String("Text"), 10)
|
||||
.arg(m_stats.m_drawTextCount, 10)
|
||||
.arg(m_stats.m_msText, 10)
|
||||
.arg(m_stats.m_msTextMin, 10)
|
||||
.arg(m_stats.m_msTextMax, 10)
|
||||
.arg((double)m_stats.m_msText / (double)m_stats.m_drawTextCount, 10));
|
||||
|
||||
stats.append(QStringLiteral("%1 %2 %3 %4 %5 %6")
|
||||
.arg(QLatin1String("Node"), 10)
|
||||
.arg(m_stats.m_drawNodeCount, 10)
|
||||
.arg(m_stats.m_msNode, 10)
|
||||
.arg(m_stats.m_msNodeMin, 10)
|
||||
.arg(m_stats.m_msNodeMax, 10)
|
||||
.arg((double)m_stats.m_msNode / (double)m_stats.m_drawNodeCount, 10));
|
||||
|
||||
INFO_LOG(m_loggerStats) << "GeometryModelRenderer Timing Statistics:\n"
|
||||
<< stats.join(QLatin1String("\n")).toStdString();
|
||||
} // void GeometryModelRenderer::printStats()
|
||||
|
||||
|
||||
} // namepace SituationMap
|
||||
|
||||
+197
@@ -0,0 +1,197 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* GeometryModel - Renderer
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
// Own
|
||||
#include <GeometryModel/geometry_model.h>
|
||||
#include "situation_map_export.h"
|
||||
|
||||
#include <Map/situation_map_types.h>
|
||||
#include <Map/map.h>
|
||||
|
||||
#include <Common/situation_map_logging.h>
|
||||
|
||||
// Qt
|
||||
#include <QElapsedTimer>
|
||||
#include <QObject>
|
||||
#include <QPointer>
|
||||
|
||||
|
||||
class PESettings;
|
||||
class QDomElement;
|
||||
class QTime;
|
||||
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
class AbstractMapObject;
|
||||
|
||||
using LOGGER_T = SituationMap::LOGGER_T;
|
||||
|
||||
/**
|
||||
* @brief The GeometryModelRenderer class is an interface for the redndering of a geometry model.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT GeometryModelRenderer : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
/*! \name Construction, Destruction */
|
||||
//@{
|
||||
explicit GeometryModelRenderer(Map *map, const QString &layerName, GeometryModel &geoModel, QObject *parent = nullptr);
|
||||
virtual ~GeometryModelRenderer() = default;
|
||||
//@}
|
||||
|
||||
/**
|
||||
Returns unique id of map object associated with node.
|
||||
@param node node of geometry model
|
||||
*/
|
||||
virtual UniqueMapId getIdFromNode(const GeometryModel::Node &node) const = 0;
|
||||
|
||||
/*! \name Rendering */
|
||||
//@{
|
||||
/**
|
||||
* Render to map and update layer if model changes.
|
||||
* \sa setNodesPickable()
|
||||
*/
|
||||
virtual bool render() = 0;
|
||||
|
||||
/**
|
||||
* @brief Render single node
|
||||
* @param node to render
|
||||
* @return True on success, otherwise false.
|
||||
* \sa setNodesPickable()
|
||||
*/
|
||||
virtual bool renderNode(const GeometryModel::Node &node) = 0;
|
||||
|
||||
/**
|
||||
* @brief Render one drawable
|
||||
* @param drawable to render
|
||||
* @return True on success, otherwise false.
|
||||
* \sa setNodesPickable()
|
||||
*/
|
||||
virtual bool render(QPixmap &drawable) = 0;
|
||||
|
||||
|
||||
virtual GeometryModel::Node getAssociatedNode(const AbstractMapObject *mapObject) = 0;
|
||||
|
||||
/**
|
||||
* @brief Get flag 'nodesPickable'
|
||||
* @return flag 'nodesPickable'
|
||||
*/
|
||||
virtual bool getNodesPickable() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Set flag 'nodesPickable'. Should be set BEFORE render is called (and objects creation).
|
||||
* @param New state
|
||||
*/
|
||||
virtual void setNodesPickable(bool nodesPickable) = 0;
|
||||
|
||||
/**
|
||||
* @brief Get flag 'editorMode'
|
||||
* @return value of flag 'editorMode'
|
||||
*/
|
||||
virtual bool editorMode() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Set flag 'editorMode' to switch on additional graphic elements
|
||||
* @return value of flag 'editorMode'
|
||||
*
|
||||
* If the editor mode ist switched on, some additional graphic is drawn e.g. anchor points of text lines. Per default the editor mode is switched off.
|
||||
*/
|
||||
virtual void setEditorMode(bool on) = 0;
|
||||
//@}
|
||||
|
||||
protected:
|
||||
|
||||
//! Create unique SIM-ID for GDW
|
||||
//! \param useID: Use this for creating a previously created simID again
|
||||
// static GDW::SimObjectId createSimID(int useID = -1);
|
||||
|
||||
//! Print the timing-stats to the info-channel
|
||||
void printStats();
|
||||
|
||||
protected:
|
||||
|
||||
//! Collect Timing- and Draw-Statistic in this Struct
|
||||
struct States
|
||||
{
|
||||
QElapsedTimer m_timer;
|
||||
// Count method-calls
|
||||
int m_drawCount = 0;
|
||||
int m_drawElementsRecursiveCount = 0;
|
||||
int m_drawParticipantSymbolCount = 0;
|
||||
int m_drawDictionarySymbolCount = 0;
|
||||
int m_drawEllipseCount = 0;
|
||||
int m_drawLineCount = 0;
|
||||
int m_drawPolylineCount = 0;
|
||||
int m_drawRectangleCount = 0;
|
||||
int m_drawSplineCount = 0;
|
||||
int m_drawSymbolCount = 0;
|
||||
int m_drawTextCount = 0;
|
||||
int m_drawNodeCount = 0;
|
||||
// Total time of method use in milliseconds
|
||||
int m_msDictionarySymbol = 0;
|
||||
int m_msEllipse = 0;
|
||||
int m_msLine = 0;
|
||||
int m_msPolyline = 0;
|
||||
int m_msRectangle = 0;
|
||||
int m_msSpline = 0;
|
||||
int m_msSymbol = 0;
|
||||
int m_msText = 0;
|
||||
int m_msNode = 0;
|
||||
// max time of method use in milliseconds
|
||||
int m_msDictionarySymbolMax = 0;
|
||||
int m_msEllipseMax = 0;
|
||||
int m_msLineMax = 0;
|
||||
int m_msPolylineMax = 0;
|
||||
int m_msRectangleMax = 0;
|
||||
int m_msSplineMax = 0;
|
||||
int m_msSymbolMax = 0;
|
||||
int m_msTextMax = 0;
|
||||
int m_msNodeMax = 0;
|
||||
// min time of method use in milliseconds
|
||||
int m_msDictionarySymbolMin = 0;
|
||||
int m_msEllipseMin = 0;
|
||||
int m_msLineMin = 0;
|
||||
int m_msPolylineMin = 0;
|
||||
int m_msRectangleMin = 0;
|
||||
int m_msSplineMin = 0;
|
||||
int m_msSymbolMin = 0;
|
||||
int m_msTextMin = 0;
|
||||
int m_msNodeMin = 0;
|
||||
}; // States
|
||||
|
||||
States m_stats;
|
||||
|
||||
void resetStats();
|
||||
|
||||
|
||||
bool m_nodesPickable; //! PlanEditor -> true, Displaying -> false
|
||||
bool m_enableRedraw; //! Bool to temporarily disable redraws (on multiple changes to GeometryModel)
|
||||
|
||||
QPointer<Map> m_map;
|
||||
QString m_layerName;
|
||||
|
||||
GeometryModel &m_geometryModel; //!< The current Plan
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
//! Interface to the Logging-Facility
|
||||
|
||||
LOGGER_T m_logger;
|
||||
LOGGER_T m_loggerStats;
|
||||
|
||||
}; // GeometryModelRenderer
|
||||
}
|
||||
|
||||
|
||||
Executable
+50
@@ -0,0 +1,50 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface for Grid
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "situation_map_types.h"
|
||||
#include <situation_map_export.h>
|
||||
#include <QColor>
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
/**
|
||||
* @brief The class Grid enables access to adjust the grid.
|
||||
* Some GridTypes are supported. See GridType.
|
||||
*
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT Grid
|
||||
{
|
||||
|
||||
public:
|
||||
Grid() = default; ///< Contructor
|
||||
virtual ~Grid() = default; ///< Destructor
|
||||
|
||||
|
||||
// based on 10.2.5:
|
||||
virtual GridType gridType() = 0;
|
||||
virtual void setGridType(GridType gridType) = 0;
|
||||
|
||||
virtual bool isVisible() = 0;
|
||||
virtual void setVisible(bool visible) = 0;
|
||||
|
||||
virtual int levelCount() = 0;
|
||||
|
||||
virtual bool isLabelVisible() = 0;
|
||||
virtual void setLabelVisible(bool visible) = 0;
|
||||
|
||||
};
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
Executable
+440
@@ -0,0 +1,440 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface for LayerFactory (Construction of MapObjects)
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
#include <Common/situation_map_logging.h>
|
||||
|
||||
#include <arcgis/arcgisversion.h> // This file is created by RME, not ESRI
|
||||
|
||||
// Qt
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
class Map;
|
||||
class LayerParameter;
|
||||
class LocationToElevationHelper;
|
||||
|
||||
/**
|
||||
* @brief The LayerFactory manages logical layer.
|
||||
* Each logical layer is composed of one or more technical layers. If requested from instances of
|
||||
* AbstractMapObject the associated technical layers are created on demand. This approachs is
|
||||
* choosen to reduce the number of layers and to avoid empty layer.
|
||||
* (It is thinkable to merge different logical layers to one technical layer.)
|
||||
*
|
||||
* \section LayerTypeOverview LayerType and logical respectively technical layernames
|
||||
| Usage | LayerType | Logical layername | Technical layername |
|
||||
| :--------------| : ----------| : ---------------------- | : ------------------------------------ |
|
||||
| Map | Basemap | ArcGISTiled... | e.g. ArcGISTiledMapService |
|
||||
| JumpPoints | JumpPoint | "JumpPoints" | GraphicsLayer |
|
||||
| Overlays | Overlay | Overlay_... | GraphicsLayer and/or MessageGroupLayer |
|
||||
| Participants | Operational | e.g AES, Participants | GraphicsLayer and/or MessageGroupLayer |
|
||||
| Viewshed | Tools | "Tools" | GraphicsLayer and/or MessageGroupLayer |
|
||||
| Rubberband | Rubberband | "RubberbandLayer" | GraphicsLayer and/or MessageGroupLayer |
|
||||
* \sa LayerType
|
||||
* \n
|
||||
* \section HowToDifferentiateBasemaps How to differentiate different basemaps
|
||||
* The basemaps are typically initialized using a list of urls and the required SymbologyType.
|
||||
* The urls are added to the map, whereat the first layer/url is setting the projection.
|
||||
* \n\n The \b access to layers (basemap as well as operational layers) is done using a string called \b layername.
|
||||
* \n All basemaps have a common prefix: 'basemapLayernamePrefix', which can be accessed/modified using basemapLayernamePrefix() / setBasemapLayernamePrefix().
|
||||
* \n The final layername has a continuous number, starting with zero (0): 'basemapLayernamePrefix\%number'
|
||||
* \n
|
||||
* \n E.g: mapServiceUrlList = "url0,url1" will lead to:
|
||||
| # url | pattern | concrete layername |
|
||||
| :------| : ----------------------- | : --------------------------------- |
|
||||
| url0 | basemapLayernamePrefix%0 | "ArcGISTiledLayer_URL_0" |
|
||||
| url1 | basemapLayernamePrefix%1 | "ArcGISTiledLayer_URL_1" |
|
||||
*/
|
||||
class LayerFactory
|
||||
{
|
||||
|
||||
public:
|
||||
/*! \name Construction, Destruction */
|
||||
//@{
|
||||
LayerFactory() = default; ///< Constructor
|
||||
virtual ~LayerFactory() = default; ///< Destructor
|
||||
//@}
|
||||
|
||||
/*! \name Initializing of Basemap Layer
|
||||
* \ref HowToDifferentiateBasemaps
|
||||
*/
|
||||
//@{
|
||||
|
||||
/**
|
||||
* @brief initializeBasemapBuiltIn is for Demos only! (alternative to initializeBasemaps).
|
||||
* @param tpkFile file to be used.
|
||||
* @return True on success, otherwise false.
|
||||
* @note only for special cases.
|
||||
*/
|
||||
virtual bool initializeBasemapBuiltIn(const QString &tpkFile) = 0;
|
||||
|
||||
virtual bool isUsingBaseMapBuiltIn() const = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get basemapLayernamePrefix to construct the layername of the basemaps.
|
||||
* @return basemapLayernamePrefix
|
||||
* default: 'ArcGISTiledMapServiceLayer_URL_' (first basemap -> 'ArcGISTiledMapServiceLayer_URL_0')
|
||||
* @see\ref HowToDifferentiateBasemaps
|
||||
*/
|
||||
virtual QString basemapLayernamePrefix() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Set basemapLayernamePrefix
|
||||
* @param basemapLayernamePrefix to be set.
|
||||
* @see\ref HowToDifferentiateBasemaps
|
||||
*/
|
||||
virtual void setBasemapLayernamePrefix(const QString &basemapLayernamePrefix) = 0;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get prefix/name for participant layer
|
||||
* @return participant layername
|
||||
*/
|
||||
virtual QString participantLayername() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Get RenderingMode for participant layer
|
||||
* @return RenderingMode for participants
|
||||
*/
|
||||
virtual RenderingMode participantLayerRenderingMode() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Get SurfacePlacement for participant layer
|
||||
* @return SurfacePlacement for participants
|
||||
*/
|
||||
virtual SurfacePlacement participantLayerSurfacePlacement() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Set ParticipantLayername: layername, RenderingMode and SurfacePlacement
|
||||
* @param participantLayername like ('Participants:Dynamic:Relative')
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Set ParticipantLayername: layername, RenderingMode and SurfacePlacement
|
||||
* @param participantLayername like ('Participants:Dynamic:Relative')
|
||||
* @param renderingMode mode to be used
|
||||
* @param surfacePlacement placement to be used
|
||||
*/
|
||||
virtual void setParticipantLayer(const QString &participantLayername,
|
||||
RenderingMode renderingMode,
|
||||
SurfacePlacement surfacePlacement) = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @brief addBasemap will add a basemap upon the topmost basemap.
|
||||
* @param layername layer name to be used.
|
||||
* @param mapServiceUrl to be added
|
||||
* @param basemapType to be added
|
||||
* @param displayName to be used.
|
||||
* @param description to be used.
|
||||
* @param previewImage to be used.
|
||||
* @return True on success, otherwise false.
|
||||
* @sa initializeBasemaps
|
||||
*/
|
||||
virtual bool addBasemap(const QString &layername,
|
||||
const QUrl &mapServiceUrl,
|
||||
const BasemapType basemapType,
|
||||
const double minScale = -1,
|
||||
const double maxScale = -1,
|
||||
const QString &displayName = QString(),
|
||||
const QString &description = QString(),
|
||||
const QImage &previewImage = QImage()) = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Remove a basemap.
|
||||
* @param layername to be removed.
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool removeBasemap(const QString &layername) = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Scene Object Layer */
|
||||
//@{
|
||||
// virtual bool initializeSceneObjectLayers(const QStringList &sceneObjectServiceUrls) = 0;
|
||||
virtual bool addSceneObjectLayer(const QString &layername,
|
||||
const QUrl &sceneLayerServiceUrl,
|
||||
const double altitudeOffset = 0,
|
||||
const QString &displayName = QString(),
|
||||
const QString &description = QString(),
|
||||
const QImage &previewImage = QImage()) = 0;
|
||||
|
||||
virtual bool isSceneObjectLayerVisible() const = 0;
|
||||
virtual void setSceneObjectLayerVisible(bool visible) = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Elevation */
|
||||
//@{
|
||||
virtual bool initializeElevationSources(const QStringList &sceneElevationServiceUrls) = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Initializing of Operational Layer*/
|
||||
//@{
|
||||
|
||||
/**
|
||||
* @brief Add an operational layer
|
||||
* @param layerName to add
|
||||
* @param displayName to use
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool addOperationalLayer(const QString &layerName,
|
||||
const QString &displayName,
|
||||
RenderingMode renderMode = RenderingMode::Dynamic,
|
||||
SurfacePlacement surfacePlacement = SurfacePlacement::Relative) = 0;
|
||||
|
||||
/**
|
||||
* @brief Remove an operational layer.
|
||||
* @param layername to be removed.
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool removeOperationalLayer(const QString &layername) = 0;
|
||||
|
||||
/**
|
||||
* @brief Check if OperationalLayer exists
|
||||
* @param layername to be checked
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool hasOperationalLayer(const QString &layername) const = 0;
|
||||
//@}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Add an OverlayLayer to map.
|
||||
* @param logicalLayerName to add
|
||||
* @param displayName to use
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool addOverlayLayer(const QString &logicalLayerName,
|
||||
const QString &displayName,
|
||||
bool isSnapshot = false) = 0;
|
||||
|
||||
/**
|
||||
* @brief Remove an OverlayLayer.
|
||||
* @param layername to be removed.
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool removeOverlayLayer(const QString &logicalLayerName) = 0;
|
||||
|
||||
virtual QString snapshotOverlayLayername() const = 0;
|
||||
|
||||
|
||||
virtual QString toolLayer() = 0; ///< Mame of tool layer.
|
||||
|
||||
virtual QString layernameForCubes() const = 0;
|
||||
virtual void setLayernameForCubes(const QString &logicalName) = 0;
|
||||
virtual bool hasLayernameForCubes() const = 0;
|
||||
|
||||
/**
|
||||
* @brief assignUniqueValueRendererForCubes (displaying the building ownership)
|
||||
* @param logicalName where the renderer should be assigned to
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool assignUniqueValueRendererForCubes() = 0;
|
||||
|
||||
struct UniqueValueData
|
||||
{
|
||||
QString label; // more or less optional
|
||||
QString value; // concrete value like 'Partyname_Red'
|
||||
QImage img;
|
||||
};
|
||||
virtual bool assignUniqueValueRenderer(const QString &layername,
|
||||
const QString &fieldName,
|
||||
const QVector<UniqueValueData> &uvDataCont) = 0;
|
||||
|
||||
|
||||
|
||||
// For BoobyTraps
|
||||
struct UniqueValueDataAesCentral
|
||||
{
|
||||
QString label; // more or less optional
|
||||
QVariantList values; // concrete values like 'Partyname_Red'
|
||||
|
||||
enum class TYPE {SPHERE, CONE};
|
||||
TYPE type{TYPE::SPHERE};
|
||||
|
||||
QColor col;
|
||||
float radius{1.0};
|
||||
float height{1.0};
|
||||
};
|
||||
static QString toString(UniqueValueDataAesCentral::TYPE _type)
|
||||
{
|
||||
switch (_type) {
|
||||
case UniqueValueDataAesCentral::TYPE::SPHERE:
|
||||
return QStringLiteral("SPHERE");
|
||||
break;
|
||||
case UniqueValueDataAesCentral::TYPE::CONE:
|
||||
return QStringLiteral("CONE");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return QStringLiteral("UniqueValueDataAesCentral::TYPE::error");
|
||||
}
|
||||
virtual bool assignUniqueValueRendererAesCentral(const QString &layername,
|
||||
const QStringList &fieldNames,
|
||||
const QVector<UniqueValueDataAesCentral> &uvDataCont) = 0;
|
||||
|
||||
// For Areas (AreaEffect)
|
||||
virtual bool assignUniqueValueRendererAesCentral3DExtrusion(const QString &layername,
|
||||
const QStringList &fieldNames,
|
||||
const QVector<UniqueValueDataAesCentral> &uvDataCont) = 0;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Initialize layer - only for UnitTests.
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool initializeUnitTestLayer() = 0;
|
||||
|
||||
/*! \name Map access */
|
||||
//@{
|
||||
virtual Map *map() const = 0;
|
||||
//@}
|
||||
|
||||
/*! \name Layer access */
|
||||
//@{
|
||||
virtual int count() const = 0; ///< Number of layers
|
||||
|
||||
virtual QStringList layernames() const = 0; ///< List of layernames (basemap, operational, rubberband....
|
||||
|
||||
virtual QStringList layernames(const LayerType &layerType) const = 0; ///< List of layernames (basemap | operational | rubberband....)
|
||||
|
||||
|
||||
/**
|
||||
* @brief rubberbandLayer get rubberbandlayer
|
||||
* @return rubberbandlayer
|
||||
*/
|
||||
virtual QString rubberbandLayer() const = 0;
|
||||
|
||||
|
||||
/*! \name EmergencyCall (at least relevant for GUEZ) */
|
||||
//@{
|
||||
virtual QString emergencyCallLayer(bool getJustTheName = false) = 0;
|
||||
virtual bool emergencyCallLayerExists() const = 0;
|
||||
|
||||
virtual bool switchEmergencyCallLayerOn() = 0; // usefull for Live
|
||||
virtual bool switchEmergencyCallLayerOff() = 0; // usefull for Replay
|
||||
//@}
|
||||
|
||||
/**
|
||||
* @brief Check new LayerOrder
|
||||
* @param orderedLayernames to be checked
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool checkLayerOrder(const QStringList &orderedLayernames) = 0;
|
||||
|
||||
/**
|
||||
* @brief Provide new order of layers. Attention: All LayerType::Basemap are below other types.
|
||||
* @param orderedLayernames new order
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool orderLayerTo(const QStringList &orderedLayernames) = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get the LayerType of a logical layer.
|
||||
* @param layername requested layername.
|
||||
* @return LayerType of logical layer.
|
||||
*/
|
||||
virtual LayerType layerType(const QString &layername) const = 0;
|
||||
|
||||
/**
|
||||
* @brief Get the LayerParameter of a logical layer.
|
||||
* @param layername requested layername.
|
||||
* @return LayerParameter of logical layer.
|
||||
*/
|
||||
virtual LayerParameter layerParameter(const QString &layername) const = 0;
|
||||
|
||||
/**
|
||||
* @brief Set the LayerParameter of a logical layer.
|
||||
* @param layername requested layername.
|
||||
* @param layerParameter to be set.
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool setLayerParameter(const QString &layername, const LayerParameter &layerParameter) = 0;
|
||||
|
||||
/**
|
||||
* @brief Set the layer parameter contrast of all logical layer from given layer type.
|
||||
* @param layerType requested layer type.
|
||||
* @param opacity to be set. value range: 0..100; 100 everything is visible
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool setLayerOpacity(LayerType layerType, int opacity) = 0;
|
||||
|
||||
/**
|
||||
* @brief Set the layer parameter brightness of all logical layer from given layer type.
|
||||
* @param layerType requested layer type.
|
||||
* @param brightness to be set. value range: -100..100
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool setLayerBrightness(LayerType layerType, int brightness) = 0;
|
||||
|
||||
/**
|
||||
* @brief Set the layer parameter contrast of all logical layer from given layer type.
|
||||
* @param layerType requested layer type.
|
||||
* @param contrast to be set. value range: -100..100
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool setLayerContrast(LayerType layerType, int contrast) = 0;
|
||||
|
||||
/**
|
||||
* @brief Set the layer parameter gamma of all logical layer from given layer type.
|
||||
* @param layerType requested layer type.
|
||||
* @param gamma to be set.
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool setLayerGamma(LayerType layerType, int gamma) = 0;
|
||||
|
||||
/**
|
||||
* @brief Set the layers of the given type(s) visible or invisible
|
||||
* @param layerTypes layer types to be modified
|
||||
* @param visbile set visible (true) or hidden (false).
|
||||
*/
|
||||
virtual void setLayersVisible(const QVector<LayerType> &layerTypes, bool visible) = 0;
|
||||
//@}
|
||||
|
||||
#if ACRGIS_VERSION < 0x640500 // 100.5.0 / Update 5
|
||||
// deprecated in V100.5, replaced by GeoView::setSelectionProperties()
|
||||
/*! \name Selection */
|
||||
//@{
|
||||
virtual QColor selectionColor() const = 0; ///< Get current selectionColor.
|
||||
/**
|
||||
* @brief Set selectionColor.
|
||||
* @param selectionColor value to be set.
|
||||
*/
|
||||
virtual void setSelectionColor(const QColor &selectionColor) = 0;
|
||||
//@}
|
||||
#endif // ACRGIS_VERSION
|
||||
|
||||
|
||||
/*! \name Elevation */
|
||||
//@{
|
||||
virtual bool elevationAvailable() const = 0;
|
||||
virtual QPointer<LocationToElevationHelper> locationToElevation() const = 0;
|
||||
//@}
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
+152
@@ -0,0 +1,152 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Class LayerParameter
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "layer_parameter.h"
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QJsonObject>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
LayerParameter::LayerParameter()
|
||||
{
|
||||
resetView();
|
||||
}
|
||||
|
||||
void LayerParameter::resetView()
|
||||
{
|
||||
visible = true;
|
||||
opacity = 100;
|
||||
brightness = 0;
|
||||
contrast = 0;
|
||||
gamma = 0;
|
||||
}
|
||||
|
||||
bool LayerParameter::operator==(const LayerParameter &other) const
|
||||
{
|
||||
return ((this->visible == other.visible)
|
||||
&& (this->opacity == other.opacity)
|
||||
&& (this->brightness == other.brightness)
|
||||
&& (this->contrast == other.contrast)
|
||||
&& (this->gamma == other.gamma)
|
||||
&& (this->minScale == other.minScale)
|
||||
&& (this->maxScale == other.maxScale)
|
||||
&& (this->basemapType == other.basemapType)
|
||||
&& (this->displayName == other.displayName)
|
||||
&& (this->description == other.description)
|
||||
&& (this->previewImage == other.previewImage)
|
||||
&& (this->url == other.url)
|
||||
&& (this->svcDescription == other.svcDescription)
|
||||
);
|
||||
}
|
||||
|
||||
bool LayerParameter::operator!=(const LayerParameter &other) const
|
||||
{
|
||||
return !(*this == other);
|
||||
}
|
||||
|
||||
LayerParameter LayerParameter::read(const QJsonObject &json)
|
||||
{
|
||||
LayerParameter lp;
|
||||
|
||||
// skip reading, values should be taken from new/current sources
|
||||
// maybe mapUrls (and its name, description) has changed in the meantime...
|
||||
// if (json.contains(QLatin1String("displayname")))
|
||||
// lp.displayName = json[QLatin1String("displayname")].toString();
|
||||
// if (json.contains(QLatin1String("description")))
|
||||
// lp.description = json[QLatin1String("description")].toString();
|
||||
|
||||
if (json.contains(QLatin1String("visible")))
|
||||
lp.visible = json[QLatin1String("visible")].toBool();
|
||||
|
||||
if (json.contains(QLatin1String("opacity")))
|
||||
lp.opacity = json[QLatin1String("opacity")].toInt();
|
||||
if (json.contains(QLatin1String("brightness")))
|
||||
lp.brightness = json[QLatin1String("brightness")].toInt();
|
||||
if (json.contains(QLatin1String("contrast")))
|
||||
lp.contrast = json[QLatin1String("contrast")].toInt();
|
||||
if (json.contains(QLatin1String("gamma")))
|
||||
lp.gamma = json[QLatin1String("gamma")].toInt();
|
||||
|
||||
if (json.contains(QLatin1String("minScale")))
|
||||
lp.minScale = json[QLatin1String("minScale")].toDouble();
|
||||
if (json.contains(QLatin1String("maxScale")))
|
||||
lp.maxScale = json[QLatin1String("maxScale")].toDouble();
|
||||
|
||||
if (json.contains(QLatin1String("basemapType")))
|
||||
lp.basemapType = static_cast<BasemapType>(json[QLatin1String("basemapType")].toInt());
|
||||
|
||||
// maybe some more!?
|
||||
|
||||
return lp;
|
||||
}
|
||||
|
||||
QJsonObject LayerParameter::toJsonObject() const
|
||||
{
|
||||
QJsonObject json;
|
||||
|
||||
json[QLatin1String("displayname")] = displayName;
|
||||
json[QLatin1String("description")] = description;
|
||||
|
||||
json[QLatin1String("visible")] = visible;
|
||||
|
||||
json[QLatin1String("opacity")] = opacity;
|
||||
json[QLatin1String("brightness")] = brightness;
|
||||
json[QLatin1String("contrast")] = contrast;
|
||||
json[QLatin1String("gamma")] = gamma;
|
||||
|
||||
json[QLatin1String("minScale")] = minScale;
|
||||
json[QLatin1String("maxScale")] = maxScale;
|
||||
|
||||
json[QLatin1String("basemapType")] = static_cast<int>(basemapType);
|
||||
|
||||
// maybe some more!?
|
||||
|
||||
return json;
|
||||
}
|
||||
|
||||
QString LayerParameter::toString() const
|
||||
{
|
||||
QString str;
|
||||
str.append(QStringLiteral("visible=%1").arg(visible));
|
||||
|
||||
str.append(QStringLiteral(" opacity=%1").arg(opacity));
|
||||
str.append(QStringLiteral(" brightness=%1").arg(brightness));
|
||||
str.append(QStringLiteral(" contrast=%1").arg(contrast));
|
||||
str.append(QStringLiteral(" gamma=%1").arg(gamma));
|
||||
|
||||
str.append(QStringLiteral(" minScale=%1").arg(minScale));
|
||||
str.append(QStringLiteral(" maxScale=%1").arg(maxScale));
|
||||
|
||||
str.append(QStringLiteral(" basemapType=%1").arg((int)basemapType));
|
||||
|
||||
str.append(QStringLiteral(" displayName='%1'").arg(displayName));
|
||||
str.append(QStringLiteral(" description='%1'").arg(description));
|
||||
str.append(QStringLiteral(" previewImage.isNull=%1").arg(previewImage.isNull()));
|
||||
|
||||
str.append(QStringLiteral(" url='%1'").arg(url.toString()));
|
||||
str.append(QStringLiteral(" svcDescription='%1'").arg(svcDescription));
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const LayerParameter &value)
|
||||
{
|
||||
stream << value.toString().toUtf8().data();
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Class LayerParameter
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
#include <Common/situation_map_logging.h>
|
||||
#include <situation_map_export.h>
|
||||
|
||||
// Qt
|
||||
#include <QString>
|
||||
#include <QUrl>
|
||||
|
||||
class QJsonObject;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief The LayerParameter struct contains parameter of a layer
|
||||
* like visibility, opacity, brightness ....
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT LayerParameter
|
||||
{
|
||||
public:
|
||||
static const uint UNDEFINED_SCALE = 0; // neg. value are not defined/allowed (will be ignored by Esri -> errorprone)
|
||||
|
||||
public:
|
||||
LayerParameter();
|
||||
~LayerParameter() = default;
|
||||
|
||||
void resetView();
|
||||
|
||||
bool minScaleValid() const { return (minScale >= 0); }
|
||||
bool maxScaleValid() const { return (maxScale >= 0); }
|
||||
bool minMaxScaleValid() const { return minScaleValid() && maxScaleValid(); }
|
||||
|
||||
bool operator==(const LayerParameter &other) const;
|
||||
bool operator!=(const LayerParameter &other) const;
|
||||
|
||||
static LayerParameter read(const QJsonObject &json);
|
||||
QJsonObject toJsonObject() const;
|
||||
|
||||
QString toString() const;
|
||||
|
||||
|
||||
bool visible = true;
|
||||
int opacity = 100; ///< value range: 0..100; 100 everything is visible
|
||||
int brightness = 0; ///< value range: -100 .. 100
|
||||
int contrast = 0; ///< value range: -100 .. 100
|
||||
int gamma = 0; ///< value range: -100 .. 100
|
||||
|
||||
// Context Basemaplayer: value of -1 is the indicator, that the layer is NOT loaded yet:
|
||||
double minScale = -1; ///< big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001 ; '0' without function
|
||||
double maxScale = -1; ///< small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001 ; '0' without function
|
||||
|
||||
|
||||
BasemapType basemapType = BasemapType::Undefined;
|
||||
|
||||
QString displayName;
|
||||
QString description;
|
||||
QImage previewImage;
|
||||
|
||||
|
||||
|
||||
// following member won`t be 'set/written' to EsriLayer:
|
||||
QUrl url;
|
||||
QString svcDescription;
|
||||
};
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const LayerParameter &value);
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
Q_DECLARE_METATYPE(SituationMap::LayerParameter)
|
||||
Executable
+70
@@ -0,0 +1,70 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* LineStyle
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "line_style.h"
|
||||
|
||||
|
||||
// ESRI
|
||||
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
LineStyle::LineStyle(const QColor &lineColor, int lineWidth, LinePattern linePattern)
|
||||
: m_lineColor(lineColor)
|
||||
, m_lineWidth(lineWidth)
|
||||
, m_linePattern(linePattern)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
QColor LineStyle::lineColor() const
|
||||
{
|
||||
return m_lineColor;
|
||||
}
|
||||
void LineStyle::setLineColor(const QColor &lineColor)
|
||||
{
|
||||
m_lineColor = lineColor;
|
||||
}
|
||||
|
||||
int LineStyle::lineWidth() const
|
||||
{
|
||||
return m_lineWidth;
|
||||
}
|
||||
void LineStyle::setLineWidth(int lineWidth)
|
||||
{
|
||||
m_lineWidth = lineWidth;
|
||||
}
|
||||
|
||||
SituationMap::LinePattern LineStyle::linePattern() const
|
||||
{
|
||||
return m_linePattern;
|
||||
}
|
||||
void LineStyle::setLinePattern(const SituationMap::LinePattern &linePattern)
|
||||
{
|
||||
m_linePattern = linePattern;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// output operator:
|
||||
//-----------------------------------------------------------------------------
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const LineStyle &value)
|
||||
{
|
||||
QString str;
|
||||
str.append(QStringLiteral(" lineColor='%1'").arg(value.lineColor().name(QColor::HexArgb)));
|
||||
|
||||
stream << str.toStdString();
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
Executable
+107
@@ -0,0 +1,107 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* LineStyle
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
#include <situation_map_export.h>
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QColor>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief The LineStyle class contains parameter to draw a line like color, width and pattern.
|
||||
*/
|
||||
|
||||
class SITUATIONMAP_EXPORT LineStyle final
|
||||
{
|
||||
public:
|
||||
|
||||
/*! \name Construction, Destruction */
|
||||
//@{
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
LineStyle() = default;
|
||||
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
explicit LineStyle(const QColor &lineColor, int lineWidth = 1, LinePattern linePattern = LinePattern::Solid);
|
||||
|
||||
/**
|
||||
* @brief Destructor
|
||||
*/
|
||||
~LineStyle() = default;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Set and get for member.*/
|
||||
//@{
|
||||
QColor lineColor() const;
|
||||
void setLineColor(const QColor &lineColor);
|
||||
|
||||
int lineWidth() const;
|
||||
void setLineWidth(int lineWidth);
|
||||
|
||||
LinePattern linePattern() const;
|
||||
void setLinePattern(const LinePattern &linePattern);
|
||||
//@}
|
||||
|
||||
|
||||
/**
|
||||
* @brief operator== Compare two objects
|
||||
* @param other to be compared with
|
||||
* @return true if identical, otherwise false.
|
||||
*/
|
||||
bool operator==(const LineStyle &other) const
|
||||
{
|
||||
return ((this->m_lineColor == other.m_lineColor) &&
|
||||
(this->m_lineWidth == other.m_lineWidth) &&
|
||||
(this->m_linePattern == other.m_linePattern)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief operator!= Compare two objects
|
||||
* @param other to be compared with
|
||||
* @return true if NOT identical, otherwise false.
|
||||
*/
|
||||
bool operator!=(const LineStyle &other) const
|
||||
{
|
||||
return !(*this == other);
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
QColor m_lineColor = Qt::black;
|
||||
int m_lineWidth = 1;
|
||||
SituationMap::LinePattern m_linePattern = LinePattern::Solid;
|
||||
};
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// output operator:
|
||||
//-----------------------------------------------------------------------------
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const LineStyle &value);
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface for LocationDisplay
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "situation_map_types.h"
|
||||
#include <situation_map_export.h>
|
||||
#include <QColor>
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
/**
|
||||
* @brief The class LocationDisplay enables access to the LocationDisplay.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT LocationDisplay
|
||||
{
|
||||
|
||||
public:
|
||||
LocationDisplay() = default; ///< Contructor
|
||||
virtual ~LocationDisplay() = default; ///< Destructor
|
||||
|
||||
/**
|
||||
* @brief setCurrentLocation
|
||||
* @param currentLocation to be displayed
|
||||
* @param horizontalAccuracy The horizontal accuracy in meters. Positive values or NaN are supported
|
||||
* @param velocity The location's velocity in meters per second, 0 => no heading visible
|
||||
* @param course The location's course in degrees (clockwise), 0 being true North.
|
||||
* @return true on success, otherwise false
|
||||
*/
|
||||
virtual bool setCurrentLocation(const Point3D ¤tLocation,
|
||||
double horizontalAccuracy = std::nan(""),
|
||||
double velocity = 0,
|
||||
double course = 0,
|
||||
bool lastKnown = false
|
||||
) = 0;
|
||||
virtual bool setOutdated(bool lastKnown) = 0;
|
||||
virtual bool start() = 0;
|
||||
virtual void stop() = 0;
|
||||
virtual bool isStarted() = 0;
|
||||
};
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
Executable
+107
@@ -0,0 +1,107 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface for Map
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "map.h"
|
||||
#include "abstract_map_object.h"
|
||||
|
||||
#include <MapImpl/map_impl.h>
|
||||
#include <MapImpl/grid_impl.h>
|
||||
#include "map_notifier.h"
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
int AbstractMapObject::s_scaleHasVisibilityValue = 0;
|
||||
|
||||
|
||||
Map::Map(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
{}
|
||||
|
||||
bool Map::applyLicense(const QString &licenseStr, const QStringList &extensions)
|
||||
{
|
||||
return MapImpl::applyLicense(licenseStr, extensions);
|
||||
}
|
||||
|
||||
bool Map::applyNetworkCacheSettings(const EsriNetworkCacheSettings &esriNetworkCacheSettings)
|
||||
{
|
||||
return MapImpl::applyNetworkCacheSettings(esriNetworkCacheSettings);
|
||||
}
|
||||
|
||||
EsriNetworkCacheSettings Map::networkCacheSettings()
|
||||
{
|
||||
return MapImpl::networkCacheSettings();
|
||||
}
|
||||
|
||||
|
||||
Map *Map::create(QWidget *parent)
|
||||
{
|
||||
return new SituationMap::MapImpl(parent);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// output operator:
|
||||
//-----------------------------------------------------------------------------
|
||||
QString toString(const SituationMap::Mode &value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case SituationMap::Mode::Mode_2D:
|
||||
return QLatin1String("Mode_2D");
|
||||
case SituationMap::Mode::Mode_3D:
|
||||
return QLatin1String("Mode_3D");
|
||||
case SituationMap::Mode::Undefined:
|
||||
return QLatin1String("Mode_Undefined");
|
||||
} // switch
|
||||
return QLatin1String("ModeERROR");
|
||||
}
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::Mode &value)
|
||||
{
|
||||
stream << toString(value);
|
||||
return stream;
|
||||
}
|
||||
|
||||
QString toString(const SituationMap::NavigationConstraint &value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case SituationMap::NavigationConstraint::Undefined:
|
||||
return QLatin1String("NavigationConstraint_Undefined");
|
||||
case SituationMap::NavigationConstraint::None:
|
||||
return QLatin1String("NavigationConstraint_None");
|
||||
case SituationMap::NavigationConstraint::StayAbove:
|
||||
return QLatin1String("NavigationConstraint_StayAbove");
|
||||
} // switch
|
||||
return QLatin1String("NavigationConstraintERROR");
|
||||
}
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::NavigationConstraint &value)
|
||||
{
|
||||
stream << toString(value);
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const AbstractMapObject &value)
|
||||
{
|
||||
stream << value.toString();
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
Executable
+960
@@ -0,0 +1,960 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface for Map
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "layer_factory.h"
|
||||
#include "situation_map_types.h"
|
||||
|
||||
#include <Common/referenced.h>
|
||||
#include <Common/ref_pointer.h>
|
||||
#include <situation_map_export.h>
|
||||
|
||||
#include <QPointer>
|
||||
|
||||
// forward
|
||||
class QGraphicsView;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
/**
|
||||
* The main namespace for the SituationMap.
|
||||
* See also AdvancedSymbology.
|
||||
*/
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
class Grid;
|
||||
class SideBar;
|
||||
class ObjectContainer;
|
||||
class CoordTranslationFunctor;
|
||||
class PartyIdToColorFunctor;
|
||||
class GeometryModel;
|
||||
class GeometryModelRenderer;
|
||||
class OverviewMapHandler;
|
||||
class Measurement;
|
||||
class TerrainProfile;
|
||||
class Viewshed;
|
||||
class Camera;
|
||||
class Viewpoint2D;
|
||||
struct OperatorMapSettings;
|
||||
class MapNotifier;
|
||||
class ObjectIndicator;
|
||||
class LocationDisplay;
|
||||
class PixelBasedTextBoxHandler;
|
||||
|
||||
class PixelTextBoxData;
|
||||
|
||||
// MapObjects
|
||||
class AbstractMapObject;
|
||||
class ObjectFactory;
|
||||
class OverlayHandler;
|
||||
class DropEventManager;
|
||||
|
||||
namespace RB { class RubberbandFactory; }
|
||||
|
||||
|
||||
/**
|
||||
* @brief The class Map represents a map display.
|
||||
* \section Common
|
||||
* It wraps the map engine of ESRI and is therefore the main class within this namespace.
|
||||
*
|
||||
* A Map contains a set of layers that can be navigated by your application or by a user.
|
||||
* You can access and adjust properties of the Map such as its
|
||||
* scale, rotation, layer order and user interface behaviour.
|
||||
* Some of these property adjustments are delegated to (sub-)classes like
|
||||
* Grid, LayerFactory and ObjectFactory.
|
||||
* To create a Map, use Map::create() and pass a parent.
|
||||
*
|
||||
* The Map is ready to use when a) its SpatialReference is initialized and
|
||||
* b) has a (full)extent inherented from the first Layer added.
|
||||
* The first part (a) is done by LayerFactory::initializeBasemaps().
|
||||
* The second part (b) is more or less up to you:
|
||||
* Most of the times, the (full)extent of the first Layer added is not what you want.
|
||||
* Therefore you should specify an extent using a Map::setExtent or Map::setCenterPoint.
|
||||
* !!! Due to docking widgets etc it`s recommended to use centerpoint and scale. !!!
|
||||
*
|
||||
* <b> To initialize a usable Map, think of using the MapInitializer and MapSettings.
|
||||
* They are designed for easy initialisation.</b>
|
||||
*
|
||||
* Otherwise the following order is recommended:
|
||||
*
|
||||
* \code
|
||||
*
|
||||
// 0. License:
|
||||
if (!SituationMap::Map::applyLicense())
|
||||
FATAL_LOG(m_logger) << LOGFUNCTION << " applyLicense failed";
|
||||
|
||||
// 1. Map
|
||||
d->m_map = SituationMap::Map::create(this);
|
||||
|
||||
// 2. SymbologyType
|
||||
d->m_map->setSymbologyType(AdvancedSymbology::SymbologyType::MIL2525C)
|
||||
|
||||
|
||||
// 3. init (choose 2d or 3D)
|
||||
d->m_map->init(SituationMap::Mode::Mode_2D)
|
||||
|
||||
// 4. Layer
|
||||
// initializeBasemapBuiltIn OR initializeBasemaps
|
||||
d->m_map->layerFactory().initializeBasemaps(QStringList());
|
||||
d->m_map->layerFactory().initializeOperationalLayers(QStringList()
|
||||
<< QLatin1String("AES")
|
||||
<< QLatin1String("Participants") );
|
||||
|
||||
// 5. Grid
|
||||
d->m_map->grid().setGridType(SituationMap::GridType::MGRS);
|
||||
d->m_map->grid().setVisible(true);
|
||||
|
||||
// 6. Initialize objectFactory
|
||||
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::MapObjectIndicator), new SituationMap::GenericObjectFactory<SituationMap::MapObjectIndicatorImpl>() );
|
||||
|
||||
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::Polygon), new SituationMap::GenericObjectFactory<SituationMap::PolygonImpl>() );
|
||||
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::Polyline), new SituationMap::GenericObjectFactory<SituationMap::PolylineImpl>() );
|
||||
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::Text), new SituationMap::GenericObjectFactory<SituationMap::TextImpl>() );
|
||||
|
||||
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::Participant), new SituationMap::GenericObjectFactory<SituationMap::ParticipantImpl>() );
|
||||
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::AreaFire), new SituationMap::GenericObjectFactory<SituationMap::AreaFireImpl>() );
|
||||
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::BiologicalAgent), new SituationMap::GenericObjectFactory<SituationMap::BiologicalAgentImpl>() );
|
||||
|
||||
|
||||
// 7. IdGenerator & ObjectContainer:
|
||||
// QSharedPointer<SituationMap::IdGenerator> idGen( new SituationMap::IdGenerator );
|
||||
// QSharedPointer<SituationMap::ObjectContainerCTC> objectCont1( new SituationMap::ObjectContainerCTC(idGen) );
|
||||
// QSharedPointer<SituationMap::ObjectContainerCTC> objectCont2( new SituationMap::ObjectContainerCTC(idGen) );
|
||||
|
||||
// d->m_map->setObjectContainer( objectCont1 );
|
||||
|
||||
|
||||
// 8: CoordTransFunctor
|
||||
d->m_map->initializeCoordTranslationFunctor();
|
||||
|
||||
|
||||
// 10. BasePoint, extent, rotation
|
||||
connect(d->m_map, &SituationMap::Map::extentChanged, this, [this]() {
|
||||
DEBUG_LOG(m_logger) << LOGFUNCTION << " extent changed: ";
|
||||
} );
|
||||
|
||||
|
||||
|
||||
// Map has to be ready before extent, center and something can be set:
|
||||
connect(d->m_map, &SituationMap::Map::mapReady, [this]() {
|
||||
INFO_LOG(m_logger) << LOGFUNCTION << " mapReady: ";
|
||||
|
||||
// Recommendation: use 'Center' and 'Scale' to set the extent
|
||||
d->m_map->setCenterPoint(QPointF(92750, 80500)); // QPointF(92750, 80525) -> Rennplatz - Bremen
|
||||
d->m_map->setScale(500000);
|
||||
|
||||
double rotationDegree = 0;
|
||||
DEBUG_LOG(m_logger) << " set rotationDegree to=" << rotationDegree;
|
||||
d->m_map->setRotation(rotationDegree);
|
||||
} );
|
||||
|
||||
|
||||
// 11. Add widget
|
||||
d->m_mainLayout->addWidget(d->m_map, 1, 0);
|
||||
|
||||
// 20: optional:
|
||||
// Tools:
|
||||
d->m_map->viewshed().setViewshedUrl();
|
||||
|
||||
|
||||
// 50. turn over to application (if required):
|
||||
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* \section secMapObjects MapObjects
|
||||
* Of course a map needs objects to be shown on the Map. That can be a polyline or polygon but also simulation-specific classes like a Participant.
|
||||
* AbstractMapObject is the base class for these kind of objects.
|
||||
* You need the ObjectFactory to create them.
|
||||
* \n The AbstractMapObject and it deriving classes are documentated as well as there according implementation classes.
|
||||
* If you are interested in the graphical elements an AbstractMapObject consists of you should look at the Foo<b>Impl</b> class.
|
||||
*
|
||||
* \section secOutputOperator Output operators 'operator<<'
|
||||
* This library define a couple enums, structure and so on. Most of the time \c operator<< is declared for convenience.
|
||||
* So you can simply write:
|
||||
*
|
||||
* \code
|
||||
* #include <AdvancedSymbology/symbol_dictionary.h>
|
||||
* AdvancedSymbology::SymbologyType symType = AdvancedSymbology::SymbologyType::APP6B;
|
||||
* std::cout << " SymbologyType is" << symType << "!" << std::endl;
|
||||
* INFO_LOG(m_logger) << LOGFUNCTION << " SymbologyType is" << symType << "!";
|
||||
* \endcode
|
||||
* Output: \c SymbologyType \c is \c APP6B!
|
||||
*
|
||||
* This operator is also declared for \b QPoint and \b QPointF. This is done in the namespace SituationMap to not pollute the global namespace.
|
||||
* \n To get access to these two operators you can
|
||||
* - simple write \code using namespace SituationMap; // be careful and think about the consequences! \endcode
|
||||
* - write your own operator in the requested namespace and delegate to an existing one like:
|
||||
* \code
|
||||
* std::ostream& operator<< (std::ostream& stream, const QPoint& value)
|
||||
* {
|
||||
* return SituationMap::operator<<(stream, value);
|
||||
* }
|
||||
* \endcode
|
||||
*
|
||||
* \section secCoordinationTransformation Coordination Transformation
|
||||
* All Coordinate of the SitationMapInterface are based on the EPSG code '4236' which means 'WGS84'
|
||||
* For example a geo coordinate is x/lon 0.15.. y/lat 0.927 - angle in rad.
|
||||
*
|
||||
* Geo coordinates are converted into map coordinate using the CoordTranslationFunctor and his methods mapToGeographic and geographicToMap.
|
||||
* These methods include are using Esri::ArcGISRuntime::GeometryEngine::project().
|
||||
*
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT Map : public QWidget, public Referenced
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
using RefPointerMapObjectList = QVector<RefPointer<AbstractMapObject>>;
|
||||
|
||||
/*! \name Construction, Destruction */
|
||||
//@{
|
||||
protected:
|
||||
/**
|
||||
* @brief Constructor.
|
||||
* @param parent
|
||||
*/
|
||||
explicit Map(QWidget *parent = nullptr);
|
||||
public:
|
||||
virtual bool init(const Mode mapMode_2D3D) = 0;
|
||||
virtual bool load() = 0;
|
||||
|
||||
virtual Mode mode() const = 0;
|
||||
|
||||
|
||||
virtual void setParent(QWidget *parent, bool beginDestroy) = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Destructor.
|
||||
*/
|
||||
virtual ~Map() = default;
|
||||
|
||||
/**
|
||||
* @brief Copy constructor - deleted
|
||||
* @param other
|
||||
*/
|
||||
Map(const Map &other) = delete;
|
||||
/**
|
||||
* @brief Assignment constructor - deleted
|
||||
* @param other
|
||||
*/
|
||||
Map &operator=(const Map &other) = delete;
|
||||
//@}
|
||||
|
||||
/*! \name Configuration */
|
||||
/**
|
||||
* @brief animationDuration to be used as default duration if no duration is specified.
|
||||
* Example: setCenterPoint
|
||||
*/
|
||||
//@{
|
||||
virtual double animationDuration() const = 0;
|
||||
virtual void setAnimationDuration(double durationSec) = 0;
|
||||
|
||||
virtual double rocketDuration() const = 0;
|
||||
virtual void setRocketDuration(double durationSec) = 0;
|
||||
|
||||
|
||||
virtual void addMapWidget() = 0;
|
||||
|
||||
virtual bool setTextBox(const PixelTextBoxData &ptbd, bool enableGeometryModifications = true) = 0;
|
||||
virtual bool removeTextBox() = 0;
|
||||
|
||||
|
||||
virtual bool isPositionStringVisible() const = 0;
|
||||
virtual void showPositionString(bool visible = true) = 0;
|
||||
virtual void setPositionStringColor(const QColor &foregroundColor, const QColor &backgroundColor) = 0;
|
||||
|
||||
virtual void setReplay(bool b) = 0;
|
||||
virtual bool isReplay() const = 0;
|
||||
virtual void setPartitionTime(const qint64 &time) = 0;
|
||||
virtual bool isExerciseTimeStringVisible() const = 0;
|
||||
virtual void showExerciseTimeString(bool visible = false) = 0;
|
||||
virtual void setExerciseTimeStringColor(const QColor &foregroundColor, const QColor &backgroundColor) = 0;
|
||||
|
||||
virtual bool isTimeStringVisible() const = 0;
|
||||
virtual void setTimeString(const QString &timeString) = 0;
|
||||
virtual void showTimeString(bool visible = true) = 0;
|
||||
virtual void setTimeStringColor(const QColor &foregroundColor, const QColor &backgroundColor) = 0;
|
||||
|
||||
virtual bool isCompassVisible() const = 0;
|
||||
virtual void showCompass(bool visible = true) = 0;
|
||||
|
||||
virtual void addSideBar() = 0;
|
||||
virtual void removeSideBar() = 0;
|
||||
virtual QPointer<SideBar> sideBar() = 0;
|
||||
|
||||
|
||||
static bool applyLicense(const QString &licenseStr, const QStringList &extensions = QStringList());
|
||||
static bool applyNetworkCacheSettings(const EsriNetworkCacheSettings &esriNetworkCacheSettings);
|
||||
static EsriNetworkCacheSettings networkCacheSettings();
|
||||
|
||||
/**
|
||||
* @brief Create a Map instance.
|
||||
* @param parent Parent widget to be used.
|
||||
* @return Created Map.
|
||||
*/
|
||||
static Map *create(QWidget *parent = nullptr);
|
||||
|
||||
|
||||
/** brief Gets whether the Map is loaded.
|
||||
* @return True if loaded.
|
||||
*/
|
||||
virtual bool isLoaded() const = 0;
|
||||
|
||||
|
||||
virtual QGraphicsView *getQGraphicsView() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Map is Ready?
|
||||
* @return True if Map is ready, otherwise false.
|
||||
*/
|
||||
virtual bool isReady() const = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get current drawStatus
|
||||
* @return current drawStatus
|
||||
*/
|
||||
virtual DrawStatus drawStatus() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Get current wkid.
|
||||
* @return Current wkid.
|
||||
*/
|
||||
virtual int wkid() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Retrieve current Map Settings (for current Operator)
|
||||
* @return current Operator Map Settings
|
||||
* @cond Map has to be ready
|
||||
*/
|
||||
virtual OperatorMapSettings operatorMapSettings() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Restore OperatorMapSettings
|
||||
* @param oms OperatorMapSettings to be restored
|
||||
* @return True on success, otherwise false.
|
||||
* @cond Map has to be ready
|
||||
*/
|
||||
virtual bool restoreOperatorMapSettings(const OperatorMapSettings &oms) = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name BaseSurface Below Ground, introduced with V100.5.0 */
|
||||
//@{
|
||||
virtual NavigationConstraint navigationConstraint() const = 0;
|
||||
virtual bool setNavigationConstraint(SituationMap::NavigationConstraint NavigationConstraint) = 0;
|
||||
|
||||
virtual float baseSurfaceOpacity() const = 0;
|
||||
virtual bool setBaseSurfaceOpacity(float surfaceOpacity) = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name OverviewMap */
|
||||
//@{
|
||||
virtual OverviewMapHandler &overviewMapHandler() const = 0;
|
||||
//@}
|
||||
|
||||
/*! \name Layer */
|
||||
//@{
|
||||
/**
|
||||
* @brief Get access to LayerFactory.
|
||||
* @return Reference to the LayerFactory.
|
||||
*/
|
||||
virtual LayerFactory &layerFactory() const = 0;
|
||||
virtual int technicalLayerCount() const = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Grid */
|
||||
//@{
|
||||
virtual Grid &grid() const = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Symbology and Symbol Dictionary */
|
||||
//@{
|
||||
virtual bool setSymbologyType(AdvancedSymbology::SymbologyType symbologyType) = 0;
|
||||
virtual AdvancedSymbology::SymbologyType symbologyType() = 0;
|
||||
virtual AdvancedSymbology::SymbolDictionary &symbolDictionary() const = 0;
|
||||
virtual bool isSymbolDictionaryLoaded() const = 0;
|
||||
//@}
|
||||
|
||||
|
||||
|
||||
/*! \name Object Creation (create MapObjects using an ObjectFactory)
|
||||
* Don`t forget to register the interfaces and the desired implementations like:
|
||||
*
|
||||
* \code
|
||||
* SituationMap::ObjectFactory::registerMe(typeid(SituationMap::MapObjectIndicator), new SituationMap::GenericObjectFactory<SituationMap::MapObjectIndicatorImpl>() );
|
||||
* \endcode
|
||||
*/
|
||||
//@{
|
||||
|
||||
/**
|
||||
* @brief Get access to ObjectFactory.
|
||||
* @return Reference to the ObjectFactory.
|
||||
*/
|
||||
virtual ObjectFactory &objectFactory() = 0;
|
||||
|
||||
/**
|
||||
* @brief Set ObjectContainer to share an ObjectContainer.
|
||||
* (and in most case its IdContainer) the ObjectContainer can be shared between
|
||||
* multiple Map instances.
|
||||
* @param objectContainer set ObjectContainer to be used.
|
||||
*/
|
||||
virtual void setObjectContainer(QSharedPointer<ObjectContainer> objectContainer) = 0;
|
||||
|
||||
/**
|
||||
* @brief setPartyIdToColorFunctor to convert a partyId to a associated color
|
||||
* @param partyIdToColor new functor
|
||||
*/
|
||||
virtual void setPartyIdToColorFunctor(QSharedPointer<PartyIdToColorFunctor> partyIdToColor) = 0;
|
||||
|
||||
/**
|
||||
* @brief Provide PartyIdToColorFunctor to get information about partyId's and associated colors
|
||||
* @return Reference to PartyIdToColorFunctor
|
||||
*/
|
||||
virtual PartyIdToColorFunctor &partyIdToColorFunctor() const = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get access to OverlayHandler to show overlays created using the PlanEditor.
|
||||
* @return Reference to the OverlayHandler.
|
||||
*/
|
||||
virtual OverlayHandler &overlayHandler() const = 0;
|
||||
|
||||
|
||||
/*! \name JumpPoints... */
|
||||
//@{
|
||||
virtual bool addJumpPoint(const QString &name, const Point3D &originGeo, double mapScale = -1) = 0;
|
||||
virtual bool removeJumpPoint(const QString &name) = 0;
|
||||
virtual QStringList jumpPointNames() const = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Map Extent, Center with Scale, ViewPoint */
|
||||
//@{
|
||||
/**
|
||||
* @brief Initialize (activate) CoordTranslationFunctor.
|
||||
*/
|
||||
virtual void initCoordTranslationFunctor() = 0;
|
||||
/**
|
||||
* @brief Get Access to the coordTranslationFunctor.
|
||||
* @return coordTranslationFunctor.
|
||||
*/
|
||||
virtual CoordTranslationFunctor *coordTranslationFunctor() const = 0;
|
||||
// virtual void setCoordTranslationFunctor(CoordTranslationFunctor* ctFuntor);
|
||||
|
||||
|
||||
virtual Viewpoint2D initialViewpoint() const = 0;
|
||||
/**
|
||||
* @brief setInitialViewpoint set initial viewpoint
|
||||
* @param initialViewpoint
|
||||
* @note rotation is skipped here
|
||||
*/
|
||||
virtual void setInitialViewpoint(const Viewpoint2D &initialViewpoint) = 0;
|
||||
|
||||
|
||||
virtual Viewpoint2D viewpoint2D() const = 0;
|
||||
|
||||
/**
|
||||
* @brief setViewpoint2D set new viewpoint
|
||||
* @param viewpoint new viewpoint (evaluates position, scale and rotation)
|
||||
* @param durationSeconds the duration of the animation in seconds.
|
||||
*/
|
||||
virtual void setViewpoint2D(const Viewpoint2D &viewpoint, float durationSeconds = -1.0) = 0;
|
||||
virtual void setViewpoint2DAndWait(const Viewpoint2D &viewpoint) = 0;
|
||||
|
||||
|
||||
virtual QPointF centerPoint() const = 0;
|
||||
virtual void setCenterPoint(const QPointF ¢er, double scale = -1.0, float durationSeconds = -1.0) = 0; ///< lon/lat in radian
|
||||
|
||||
/**
|
||||
* @brief scale
|
||||
* @return scale value.
|
||||
*/
|
||||
virtual double scale() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Set new scale without animation
|
||||
* @param absoluteScale new value (scale must be greater than zero)
|
||||
*/
|
||||
virtual void setScale(double absoluteScale) = 0;
|
||||
|
||||
/**
|
||||
* @brief Get the rotation angle.
|
||||
* @return Rotation angle.
|
||||
*/
|
||||
virtual double rotation() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Set Rotation of Map.
|
||||
* @param absoluteAngleDegrees new rotation angle.
|
||||
*/
|
||||
virtual void setRotation(double absoluteAngleDegrees) = 0;
|
||||
|
||||
|
||||
virtual QRectF extent() const = 0;
|
||||
virtual void setExtent(const QRectF &extent) = 0;
|
||||
virtual void setExtent(double xmin, double ymin, double xmax, double ymax) = 0; ///< lon/lat in radian
|
||||
|
||||
virtual void zoomToArea(const QVector<QPointF> &coords, int paddingInDIPS) = 0;
|
||||
|
||||
virtual void setTrainingsAreaExtent(const QVector<QPointF> &trainingsAreaExtent) = 0; ///< for compass context menue: zoom to area
|
||||
|
||||
// virtual QRectF fullExtent() const = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Map Scale
|
||||
* Annotation:
|
||||
* \n MinScale and maxScale are initialized by the basemap first loaded.
|
||||
* These values can be overwritte using setMinScale() and setMaxScale().
|
||||
* \n Attention:
|
||||
* setMinScale() limits zoom out
|
||||
* setMaxScale() limits zoom in
|
||||
*/
|
||||
//@{
|
||||
|
||||
/**
|
||||
* @brief Get pixelSize
|
||||
* @return size of pixel [Meter]
|
||||
*/
|
||||
virtual double pixelSizeMeter() = 0;
|
||||
|
||||
/**
|
||||
* @brief Get pixelSize
|
||||
* @return size of pixel [geographics]
|
||||
*/
|
||||
virtual double pixelSizeGeographic() = 0;
|
||||
|
||||
/**
|
||||
* @brief Set MinScale to limit zoom out
|
||||
* @param minScaleToLimitZoomOut new value, use value '0' to clear.
|
||||
*/
|
||||
virtual void setMinScale(double minScaleToLimitZoomOut) = 0;
|
||||
|
||||
/**
|
||||
* @brief get current minScale
|
||||
* @return minScale
|
||||
*/
|
||||
virtual double minScale() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Set MaxScale to limit zoom in
|
||||
* @param maxScaleToLimitZoomIn new value, use value '0' to clear.
|
||||
*/
|
||||
virtual void setMaxScale(double maxScaleToLimitZoomIn) = 0;
|
||||
|
||||
/**
|
||||
* @brief Get current maxScale
|
||||
* @return maxScale
|
||||
*/
|
||||
virtual double maxScale() const = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Creates a rectangle rubberband to let the user define an area to set the new extent.
|
||||
*/
|
||||
virtual bool scaleByArea() const = 0;
|
||||
|
||||
|
||||
/*! \name 3D */
|
||||
//@{
|
||||
virtual Camera camera() const = 0;
|
||||
virtual void setCamera(const Camera &camera, float durationSeconds = -1.0) = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Coordinate conversions from window to simulation or map world */
|
||||
//@{
|
||||
/**
|
||||
* @brief Converts map coordinate to pixel coordinate of viewport window.
|
||||
* @param mapCoord coordinate
|
||||
* @return pixel coordinate of viewport window
|
||||
*/
|
||||
virtual QPointF mapCoordinateToViewPortWindowPoint(const QPointF &mapCoord) const = 0;
|
||||
|
||||
virtual QPointF mapCoordinateToViewPortWindowPoint3D(const Point3D &mapCoord) const = 0;
|
||||
|
||||
/**
|
||||
* @brief Converts pixel coordinate of viewport window to map coordinate.
|
||||
* @param pixelCoord coordinate of viewport window
|
||||
* @return map coordinate
|
||||
*/
|
||||
virtual QPointF viewPortWindowPointToMapCoordinate(const QPointF &pixelCoord) const = 0;
|
||||
|
||||
/**
|
||||
* @brief Converts pixel coordinate of viewport window to 3D map coordinate.
|
||||
* @param pixelCoord coordinate of viewport window
|
||||
* @return 3D map coordinate (x, y, elevation)
|
||||
*/
|
||||
virtual Point3D viewPortWindowPointToMapCoordinate3D(const QPointF &pixelCoord) const = 0;
|
||||
|
||||
/**
|
||||
* @brief Converts geo coordinate to pixel coordinate of viewport window.
|
||||
* @param geoCoordinate coordinate
|
||||
* @return pixel coordinate of viewport window
|
||||
* @see coordTranslationFunctor, CoordTranslationFunctor
|
||||
*/
|
||||
virtual QPointF geoCoordinateToViewPortWindowPoint(const QPointF &geoCoordinate) const = 0;
|
||||
|
||||
virtual QPointF geoCoordinateToViewPortWindowPoint3D(const Point3D &geoCoordinate) const = 0;
|
||||
|
||||
/**
|
||||
* @brief Converts pixel coordinate of viewport window to geo coordinate.
|
||||
* @param pixelCoord coordinate of viewport window
|
||||
* @return geo coordinate
|
||||
* @see coordTranslationFunctor, CoordTranslationFunctor
|
||||
*/
|
||||
virtual QPointF viewPortWindowPointToGeoCoordinate(const QPointF &pixelCoord) const = 0;
|
||||
|
||||
/**
|
||||
* @brief Converts pixel coordinate of viewport window to 3D geo coordinate.
|
||||
* @param pixelCoord coordinate of viewport window
|
||||
* @return 3D geo coordinate (longitude, latitude, elevation)
|
||||
* @see coordTranslationFunctor, CoordTranslationFunctor
|
||||
*/
|
||||
virtual Point3D viewPortWindowPointToGeoCoordinate3D(const QPointF &pixelCoord) const = 0;
|
||||
//@}
|
||||
|
||||
|
||||
virtual QString geoToMgrsString(const QPointF &geoPos) const = 0;
|
||||
virtual QString mapToMgrsString(const QPointF &mapPos) const = 0;
|
||||
|
||||
/**
|
||||
* @brief Creating of GeometryModelRenderer instances
|
||||
* @param layerName Name of layer to render to.
|
||||
* @param geometryModel Instance of GeometryModel to render
|
||||
* @param parent QObject parent
|
||||
* @see GeometryModel, GeometryModelRenderer
|
||||
*/
|
||||
virtual GeometryModelRenderer *createGeometryModelRenderer(const QString &layerName, GeometryModel *geometryModel, QObject *parent = nullptr) = 0;
|
||||
|
||||
|
||||
/*! \name Rubberbands */
|
||||
//@{
|
||||
/**
|
||||
* @brief Get access to rubberband factory
|
||||
* @return Reference to the RubberbandFactory
|
||||
*/
|
||||
virtual RB::RubberbandFactory &rubberbandFactory() const = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Pick objects by area*/
|
||||
//@{
|
||||
virtual bool pickMapObjectsArea() const = 0;
|
||||
//@}
|
||||
|
||||
|
||||
|
||||
/*! \name EventHandling */
|
||||
//@{
|
||||
/**
|
||||
* @brief Install a class instance to manage drop events
|
||||
*
|
||||
* To Process drop event an instance of class DropEventManager has to be installed. If a drop event has been reached the
|
||||
* manageDrop function is called. It is possible to install multiple drop event manager. The order of calling the manageDrop
|
||||
* function is undefined.
|
||||
*
|
||||
* @param demgr Pointer to class instance of DropEventManager
|
||||
*
|
||||
* see deinstallDropEventManager, DropEventManager
|
||||
*/
|
||||
virtual void installDropEventManager(DropEventManager *demgr) = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Removes installed drop event manager
|
||||
* @param demgr Pointer to class instance of DropEventManager
|
||||
* @see installDropEventManager, DropEventManager
|
||||
*/
|
||||
virtual void deinstallDropEventManager(DropEventManager *demgr) = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name ObjectIndicator */
|
||||
//@{
|
||||
/**
|
||||
* @brief ObjectIndicator
|
||||
*/
|
||||
virtual ObjectIndicator &objectIndicator() = 0;
|
||||
//@}
|
||||
|
||||
/*! \name LocationDisplay */
|
||||
//@{
|
||||
/**
|
||||
* @brief LocationDisplay
|
||||
*/
|
||||
virtual LocationDisplay &locationDisplay() = 0;
|
||||
//@}
|
||||
|
||||
/*! \name PixelBasedTextBox */
|
||||
//@{
|
||||
/**
|
||||
* @brief PixelBasedTextBox
|
||||
*/
|
||||
virtual PixelBasedTextBoxHandler &pixelBasedTextBoxHandler() = 0;
|
||||
//@}
|
||||
|
||||
|
||||
|
||||
/*! \name Rocket */
|
||||
//@{
|
||||
/**
|
||||
* @brief start rocket (zoom out and zoom in to show surrounding area)
|
||||
*/
|
||||
virtual void startRocket() = 0;
|
||||
virtual bool rocketIsRunning() const = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Tools */
|
||||
//@{
|
||||
|
||||
/**
|
||||
* @brief Get access to Measurement
|
||||
* @return Reference to the Measurement
|
||||
*/
|
||||
virtual Measurement &measurement() = 0;
|
||||
|
||||
/**
|
||||
* @brief Get access to TerrainProfile
|
||||
* @return Reference to the TerrainProfile
|
||||
*/
|
||||
virtual TerrainProfile &terrainProfile() = 0;
|
||||
|
||||
/**
|
||||
* @brief Get access to Viewshed
|
||||
* @return Reference to the Viewshed
|
||||
*/
|
||||
virtual Viewshed &viewshed() = 0;
|
||||
//@}
|
||||
|
||||
|
||||
|
||||
/*! \name Symbol scale */
|
||||
//@{
|
||||
/**
|
||||
* @brief Get current symbol scale
|
||||
* @note This may take a while since AbstractMapObject::updateView() has to be called for ALL objects!!!
|
||||
* @return current symbol scale
|
||||
*/
|
||||
virtual double symbolScale() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Set and apply new symbolScale
|
||||
* @param symbolScale to apply
|
||||
*/
|
||||
virtual void setSymbolScale(double symbolScale) = 0;
|
||||
//@}
|
||||
|
||||
|
||||
|
||||
|
||||
/*! \name Screenshot etc. */
|
||||
//@{
|
||||
virtual QImage toImageSync() = 0;
|
||||
virtual QUuid toImage() = 0;
|
||||
|
||||
/*!
|
||||
@brief Stores currently visible content of the map as PDF file
|
||||
The current visible content off the map is written as PDF structure to a file. This process is
|
||||
asynchron. When writing the PDF file has been finished the signal pdfCompleted is emitted.
|
||||
@see pdfCompleted
|
||||
*/
|
||||
virtual bool toPdf(const QString &outputFilename,
|
||||
const QString &title,
|
||||
const QString &footerLeft,
|
||||
const QString &footerCenter,
|
||||
const QString &footerRight,
|
||||
const QColor &textColor = QColor()) = 0;
|
||||
|
||||
//@}
|
||||
|
||||
/*!
|
||||
Is installing an event filter to viewport of view map window.
|
||||
@param eventFilter QObject to filter events.
|
||||
*/
|
||||
virtual void installViewPortEventFilter(QObject *eventFilter) = 0;
|
||||
|
||||
|
||||
/*!
|
||||
Is removing an event filter from viewport of view map window.
|
||||
@param eventFilter QObject to filter events.
|
||||
*/
|
||||
virtual void removeViewPortEventFilter(QObject *eventFilter) = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @brief createMapNotifier to simply connect actions on mapReady and similar.
|
||||
* @return MapNotifier (will be destroyed if map is destroyed)
|
||||
*/
|
||||
virtual QPointer<MapNotifier> createMapNotifier() const = 0;
|
||||
|
||||
signals:
|
||||
/// Signal emits when the spatial reference has been initialized and the Map is ready to receive requests.
|
||||
void mapReady();
|
||||
|
||||
/// Signal emits when the Map is ready AND the associated SymbolDictionary is loaded AND loading of all elevationSources is finished.
|
||||
void mapReadyAndSymbolDictionaryLoaded();
|
||||
|
||||
|
||||
/// Signal emits at the beginning of the destructor (to enable destruction of FunctionDialog and its object first)
|
||||
void beginDestroy();
|
||||
|
||||
/// Signal emits when adding a layer fails.
|
||||
void layerAddError(const QString &layername, const QString &error);
|
||||
|
||||
/// Signal emits when extent of the %Map has changed (e.g. by zoom or scale)
|
||||
void extentChanged(); // extentChanged
|
||||
/// Signal emits when extent of the %Map change finished (and a small timeout has expired)
|
||||
void extentChangedDelayed(); // extentChanged
|
||||
|
||||
/// Signal emits when the Map's bounding rectangle size has changed (e.g. window size changed)
|
||||
void rectChanged();
|
||||
|
||||
/// Signal emits when the partyColors have changed (and a small timeout has expired)
|
||||
void partysChangedDelayed();
|
||||
|
||||
|
||||
/// Signal emits when the Map rotates.
|
||||
void rotationChanged(double absoluteAngleDegrees);
|
||||
|
||||
/// Signal emits when all elevationSource are loaded successfully.
|
||||
void allElevationSourcesLoaded();
|
||||
|
||||
/// Signal emits when baseSurfaceOpacity changes.
|
||||
void navigationConstraintChanged(NavigationConstraint NavigationConstraint);
|
||||
|
||||
/// Signal emits when baseSurfaceOpacity changes.
|
||||
void baseSurfaceOpacityChanged(float opacity);
|
||||
|
||||
/// Signal emits when the layer generation completes.
|
||||
void layerCreateComplete(const QString &layername);
|
||||
|
||||
/// Signal emits when the layer creation fails.
|
||||
void layerCreateError(const QString &layername, const QString &error);
|
||||
|
||||
/// Signal emits when the layer order changes.
|
||||
void layerOrderChanged();
|
||||
|
||||
/// Signal emits when some parameter of a layer changes.
|
||||
void layerParameterChanged(const QString &layername,
|
||||
const LayerParameter &newLayerParameter);
|
||||
|
||||
|
||||
/// Signal emits when at least one VisualComponent changes (to update GUI)
|
||||
void visualComponentChanged(const VisualComponent &visualComponent);
|
||||
|
||||
|
||||
/**
|
||||
* Signal emits when the user clicks on map objects (based on EventMouseNavigator)
|
||||
*
|
||||
* @param idList Reference to a list filled with ids of objects.
|
||||
* @param viewportPosition Position of click in viewport window.
|
||||
*/
|
||||
void mapObjectIdsClicked(const QList<UniqueMapId> &idList, const QPointF &viewportPosition);
|
||||
|
||||
/**
|
||||
* Signal emits when the user clicks on map objects (based on EventMouseNavigator)
|
||||
*
|
||||
* @param mapObjList Reference to a list filled with pointer to map objects.
|
||||
* @param viewportPosition Position of click in viewport window.
|
||||
*/
|
||||
void mapObjectsClicked(const RefPointerMapObjectList &mapObjList, const QPointF &viewportPosition);
|
||||
|
||||
/**
|
||||
* Signal emits when the user calls pickMapObjectsArea
|
||||
* @param idList Reference to a list filled with ids of objects.
|
||||
*/
|
||||
void mapObjectIdsPickedByArea(const QList<UniqueMapId> &idList);
|
||||
|
||||
/**
|
||||
* Signal emits when the user calls pickMapObjectsArea
|
||||
* @param idList Reference to a list filled with pointer to map objects.
|
||||
*/
|
||||
void mapObjectsPickedByArea(const RefPointerMapObjectList &mapObjList);
|
||||
|
||||
|
||||
void escapePressed();
|
||||
|
||||
/**
|
||||
* Signal emits when the user clicks right mouse button (based on EventMouseNavigator). Be carefull because there
|
||||
* are two different signals with this name but with different parameter. To get the right function pointer for
|
||||
* connect a cast has to be used. For example:
|
||||
* \code
|
||||
*
|
||||
* connect( d->m_map
|
||||
* , (void (SituationMap::Map::*)(const QList<SituationMap::UniqueMapId> &&,const QPoint& ))(&SituationMap::Map::contextMenuClicked)
|
||||
* , this
|
||||
* , &SitMap::onMapContextClicked );
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* @param[in] mapObjList Reference to a list filled with pointer to map objects.
|
||||
* @param[in] viewportPosition Position of click in viewport window.
|
||||
*/
|
||||
void contextMenuClicked(const RefPointerMapObjectList &mapObjList, const QPointF &viewportPosition);
|
||||
|
||||
/// Signal emits to indicate mouseMoves (MouseMoveLayer has to be enabled!)
|
||||
// void mouseMovedEvent(const QPointF& screenPos); // MouseMoveLayer has to be enabled!!!
|
||||
|
||||
/*!
|
||||
Signal emits to indicate changes of mouse cursor position.
|
||||
@param x window coordinate in x direction
|
||||
qparam y window coordinate in y direction
|
||||
*/
|
||||
void mouseWindowPositionChanged(int x, int y);
|
||||
|
||||
/*!
|
||||
Signal emits to indicate changes of mouse cursor position in map coordinates.
|
||||
*/
|
||||
void mouseMapPositionChanged(const Point3D &mapPos, bool isValid);
|
||||
|
||||
/*!
|
||||
Signal emits to indicate changes of mouse cursor position in sim coordinates.
|
||||
@see CoordTranslationFunctor
|
||||
*/
|
||||
void mouseGeoPositionChanged(const Point3D &geoPos, bool isValid);
|
||||
|
||||
|
||||
void symbolScaleChanged(double symbolScale);
|
||||
|
||||
void rocketFinished();
|
||||
|
||||
void imageCompleted(const QUuid &taskId, const QImage &image);
|
||||
|
||||
/*!
|
||||
Signal emits to indicate finishing of PDF creation process
|
||||
@see toPdf
|
||||
*/
|
||||
void pdfCompleted(const QString &filePath);
|
||||
|
||||
}; // Map
|
||||
|
||||
|
||||
|
||||
SITUATIONMAP_EXPORT QString toString(const Mode &value);
|
||||
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const Mode &value);
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
|
||||
|
||||
Q_DECLARE_METATYPE(SituationMap::Mode)
|
||||
+1129
File diff suppressed because it is too large.
Load diff
+350
@@ -0,0 +1,350 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* MapInitializer
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "map.h"
|
||||
#include "map_settings.h"
|
||||
#include <Map/viewpoint2D.h>
|
||||
#include <Common/situation_map_logging.h>
|
||||
#include <situation_map_export.h>
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QString>
|
||||
#include <QJsonObject>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
class SITUATIONMAP_EXPORT BaseUrl
|
||||
{
|
||||
public:
|
||||
BaseUrl(const QString &url = QString(),
|
||||
double minScale = -1, double maxScale = -1);
|
||||
|
||||
QString url() const { return m_url; }
|
||||
void setUrl(const QString &url) { m_url = url; }
|
||||
|
||||
QString name() const { return m_name; }
|
||||
void setName(const QString &name) { m_name = name; }
|
||||
|
||||
QString description() const { return m_description; }
|
||||
void setDescription(const QString &description) { m_description = description; }
|
||||
|
||||
BasemapType basemapType() const { return m_basemapType; }
|
||||
void setBasemapType(const BasemapType &basemapType) { m_basemapType = basemapType; }
|
||||
|
||||
double minScale() const { return m_minScale; }
|
||||
void setMinScale(double minScale) { m_minScale = minScale; }
|
||||
double maxScale() const { return m_maxScale; }
|
||||
void setMaxScale(double maxScale) { m_maxScale = maxScale; }
|
||||
|
||||
double altitudeOffset() const { return m_altitudeOffset; }
|
||||
void setAltitudeOffset(double altitudeOffset) { m_altitudeOffset = altitudeOffset; }
|
||||
|
||||
static BaseUrl read(const QJsonObject &json);
|
||||
|
||||
QJsonObject toJsonObject() const;
|
||||
|
||||
|
||||
private:
|
||||
QString m_url;
|
||||
QString m_name;
|
||||
QString m_description;
|
||||
BasemapType m_basemapType = BasemapType::Undefined;
|
||||
double m_minScale = -1;
|
||||
double m_maxScale = -1;
|
||||
double m_altitudeOffset{0.0}; // relevant for slpk (used at AHTC)
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
class SITUATIONMAP_EXPORT MapSettingsJson
|
||||
{
|
||||
public:
|
||||
MapSettingsJson() = default;
|
||||
|
||||
QJsonObject toJsonObject() const;
|
||||
|
||||
bool fromJsonObject(const QJsonObject &json);
|
||||
|
||||
void setMapUrls(const QVector<BaseUrl> &urls) { m_mapUrls = urls; }
|
||||
void setSceneUrls(const QVector<BaseUrl> &urls) { m_sceneUrls = urls; }
|
||||
void setSceneObjectUrls(const QVector<BaseUrl> &urls) { m_sceneObjectUrls = urls; }
|
||||
void setElevationUrls(const QVector<BaseUrl> &urls) { m_elevationUrls = urls; }
|
||||
const QVector<BaseUrl> &getMapUrls() const { return m_mapUrls; }
|
||||
const QVector<BaseUrl> &getSceneUrls() const { return m_sceneUrls; }
|
||||
const QVector<BaseUrl> &getSceneObjectUrls() const { return m_sceneObjectUrls; }
|
||||
const QVector<BaseUrl> &getElevationUrls() const { return m_elevationUrls; }
|
||||
|
||||
private:
|
||||
QVector<BaseUrl> m_mapUrls;
|
||||
QVector<BaseUrl> m_sceneUrls;
|
||||
QVector<BaseUrl> m_sceneObjectUrls;
|
||||
QVector<BaseUrl> m_elevationUrls;
|
||||
};
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//----------------------------------------------------------------------------
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief The MapInitializer class is based on the template method idiom.
|
||||
* <b> It´s designed for easy initializing of a SituationMap::Map. </b>
|
||||
*
|
||||
* Typical usage could look like:
|
||||
*
|
||||
* \code
|
||||
*
|
||||
// Part I: derive from MapInitializer:
|
||||
class myMapInitializer : public SituationMap::MapInitializer
|
||||
{
|
||||
using BaseClass SituationMap::MapInitializer;
|
||||
|
||||
public:
|
||||
explicit myMapInitializer(SituationMap::Map &map
|
||||
, SituationMap::MapSettings &mapSettings
|
||||
, const QString &debugName)
|
||||
:BaseClass(map, mapSettings, debugName) {}
|
||||
|
||||
bool initializeObjectFactory() override
|
||||
{
|
||||
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::MapObjectIndicator), new SituationMap::GenericObjectFactory<SituationMap::MapObjectIndicatorImpl>() );
|
||||
...
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected slots:
|
||||
virtual void onMapReady()
|
||||
{
|
||||
BaseClass::onMapReady();
|
||||
|
||||
// own things should be added here
|
||||
}
|
||||
|
||||
};
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// Part II: Connect Map, MapSetting using MapInitializer:
|
||||
|
||||
d->m_map = SituationMap::Map::create(this);
|
||||
d->m_mainLayout->addWidget(d->m_map, 1, 0);
|
||||
connect(d->m_map, &SituationMap::Map::mapObjectsClicked, this, &SitMap::onMapObjectClicked );
|
||||
|
||||
QString iniFilePath = QCoreApplication::applicationDirPath(); // /../build-product/bin
|
||||
iniFilePath.append(QLatin1String("/situation_map_defaults.ini"));
|
||||
d->m_mapSettings = QSharedPointer<SituationMap::MapSettings> ( new SituationMap::MapSettings(iniFilePath) );
|
||||
|
||||
d->m_mapInitializer = QSharedPointer<myMapInitializer>
|
||||
( new myMapInitializer(*d->m_map, *d->m_mapSettings, QLatin1String("SitMapExample")) );
|
||||
|
||||
if (d->m_mapInitializer->hasErrors())
|
||||
{
|
||||
FATAL_LOG(m_logger) << LOGFUNCTION << " MapInitializer-filename='" << d->m_mapInitializer->filename()
|
||||
<< "'' has following errors: "
|
||||
<< " exists = " << exists()
|
||||
<< " accessError = " << d->m_mapInitializer->accessError()
|
||||
<< " formatError = " << d->m_mapInitializer->formatError();
|
||||
return;
|
||||
} else {
|
||||
if (d->m_mapInitializer->initMap())
|
||||
{
|
||||
INFO_LOG(m_logger) << LOGFUNCTION << " MapInitializer::initMap() ok";
|
||||
} else {
|
||||
ERROR_LOG(m_logger) << LOGFUNCTION << " MapInitializer::initMap() failed";
|
||||
}
|
||||
}
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* If you are using <b>more than on map</b>, you should think about the IdGenerator and ObjectContainer.
|
||||
* \n Sharing \b one IdGenerator by all maps is recommended to avoid misusing a UniqueMapId between different maps.
|
||||
* \n But ist also strongly recommended that every map has it own ObjectContainer.
|
||||
* To achieve this you could write:
|
||||
*
|
||||
* \code
|
||||
* // IdGenerator & ObjectContainer:
|
||||
QSharedPointer<SituationMap::IdGenerator> idGen( new SituationMap::IdGenerator );
|
||||
|
||||
QSharedPointer<SituationMap::ObjectContainerCTC> objectCont1( new SituationMap::ObjectContainerCTC(idGen) );
|
||||
d->m_map1->setObjectContainer( objectCont1 );
|
||||
|
||||
QSharedPointer<SituationMap::ObjectContainerCTC> objectCont2( new SituationMap::ObjectContainerCTC(idGen) );
|
||||
d->m_map2->setObjectContainer( objectCont2 );
|
||||
\endcode
|
||||
* This can be a) prior, b) within or c) after the MapInitializer. It depends on the circumstances.
|
||||
* It seems to be easiest to do prior the MapInitalizer.
|
||||
*
|
||||
*
|
||||
* \section secLifetime Lifetime of the MapInitializer
|
||||
* Unfortunatly the MapInitializer must not be destroyed after call to initMap().
|
||||
* \n The signal mapReady is - what a surprise - fired later. And parameters like centerPoint, scale and so on requires the map to be ready!
|
||||
* Therefore it is forbidden to create the MapInitializer on the stack.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT MapInitializer : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
/*! \name Construction, Destruction */
|
||||
//@{
|
||||
|
||||
protected:
|
||||
/**
|
||||
* @brief MapInitializer must be created on the heap. See \ref secLifetime.
|
||||
* @param map
|
||||
* @param mapSettings
|
||||
* @param debugName
|
||||
* @param parent
|
||||
*/
|
||||
explicit MapInitializer(Map &map
|
||||
, MapSettings &mapSettings
|
||||
, const QString &debugName
|
||||
, QObject *parent = nullptr);
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* @brief set MapSettingsJson haveing priority compared to mapSettings
|
||||
* @param mapSettingJson
|
||||
*/
|
||||
void setMapSettingsJson(const MapSettingsJson &mapSettingJson);
|
||||
|
||||
|
||||
/**
|
||||
* @brief ~MapInitializer destructor
|
||||
*/
|
||||
virtual ~MapInitializer();
|
||||
|
||||
/**
|
||||
* @brief Copy constructor - deleted
|
||||
* @param other
|
||||
*/
|
||||
MapInitializer(const MapInitializer &other) = delete;
|
||||
/**
|
||||
* @brief Assignment constructor - deleted
|
||||
* @param other
|
||||
*/
|
||||
MapInitializer &operator=(const MapInitializer &other) = delete;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Error handling*/
|
||||
//@{
|
||||
QString filename() const;
|
||||
bool hasErrors() const;
|
||||
bool exists() const;
|
||||
bool accessError() const;
|
||||
bool formatError() const;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name 'template method' defining the skeleton of an algorithm. */
|
||||
//@{
|
||||
|
||||
/**
|
||||
* @brief initMap is the 'template method'.
|
||||
* It defines a skeleton of an algorithm, here the initialization of the map.
|
||||
* @param mapMode to be choosen
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool initMap(Mode mapMode = Mode::Mode_2D);
|
||||
//@}
|
||||
|
||||
|
||||
Viewpoint2D viewPoint() const { return m_viewPoint; }
|
||||
void setViewPoint(const Viewpoint2D &viewPoint) { m_viewPoint = viewPoint; }
|
||||
|
||||
protected:
|
||||
/*! \name 'Placeholder' or 'concrete methods' (to be overloaded if necessary)
|
||||
* They are called by the 'template method' (here initMap).
|
||||
*/
|
||||
//@{
|
||||
virtual bool applyLicense();
|
||||
|
||||
virtual bool applyNetworkCache();
|
||||
|
||||
virtual bool setSymbologyType();
|
||||
virtual bool setBasemapLayernamePrefix();
|
||||
virtual bool setParticipantLayername();
|
||||
|
||||
// The following method may be overwritten to ease using a UI element
|
||||
virtual AdvancedSymbology::SymbologyType symbologyType() const;
|
||||
|
||||
virtual bool initalizeLocalMapFile();
|
||||
virtual bool initializeBasemaps(Mode mapMode); // mode to use mapUrls or sceneUrls
|
||||
virtual bool initializeBasemapsQSettings(Mode mapMode); // mode to use mapUrls or sceneUrls
|
||||
virtual bool initializeBasemapsJson(const QVector<BaseUrl> &baseUrls); // use mapUrls or sceneUrls
|
||||
|
||||
virtual bool initializeSceneObjectLayers();
|
||||
virtual bool initializeSceneObjectLayersJson();
|
||||
|
||||
virtual bool initializeElevationSources();
|
||||
virtual bool initializeElevationSourcesQSettings();
|
||||
virtual bool initializeElevationSourcesJson();
|
||||
|
||||
virtual bool initialzeInitialViewpoint();
|
||||
|
||||
virtual bool initializeOperationalLayers();
|
||||
|
||||
virtual bool initializeUniqueValueRendererForCubes();
|
||||
|
||||
virtual bool initializeExtraSymbolDirectory();
|
||||
|
||||
virtual bool initializeAnimations();
|
||||
|
||||
virtual bool initializeGrid();
|
||||
|
||||
virtual bool initializeObjectFactory();
|
||||
|
||||
virtual bool initializeRubberFactory();
|
||||
|
||||
virtual bool setObjectContainer();
|
||||
|
||||
virtual bool initializeCoordTranslationFunctor();
|
||||
|
||||
virtual bool initializeMapWidgets();
|
||||
virtual bool initializeSideBar();
|
||||
|
||||
virtual bool setViewshedUrl();
|
||||
//@}
|
||||
|
||||
|
||||
protected slots:
|
||||
/**
|
||||
* @brief onMapReady is implemented and called if the map fires mapReady.
|
||||
* The implementation is setting centerPoint, scale and min/max scale using the values of MapSettings.
|
||||
*
|
||||
* <b> This method has to be overloaded to make clear the order of this content and the application-specific portion. </b>
|
||||
*/
|
||||
virtual void onMapReady();
|
||||
|
||||
|
||||
protected:
|
||||
Mode m_mapMode = Mode::Undefined;
|
||||
Map &m_map;
|
||||
MapSettingsJson m_mapSettingJson;
|
||||
|
||||
MapSettings &m_mapSettings;
|
||||
QString m_debugName;
|
||||
|
||||
Viewpoint2D m_viewPoint;
|
||||
|
||||
LOGGER_T m_logger; ///< Interface of the Logging-Facility
|
||||
};
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
Executable
+84
@@ -0,0 +1,84 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* MapNotifier
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
|
||||
// Own
|
||||
#include "map_notifier.h"
|
||||
#include "map.h"
|
||||
|
||||
|
||||
// Qt
|
||||
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
QPointer<MapNotifier> MapNotifier::createMapNotifier(Map *map, QObject *parent)
|
||||
{
|
||||
if (!map)
|
||||
return nullptr;
|
||||
if (!parent)
|
||||
return nullptr;
|
||||
|
||||
MapNotifier *ptr = new MapNotifier(parent);
|
||||
ptr->setMap(map);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void MapNotifier::run()
|
||||
{
|
||||
if (m_map.isNull())
|
||||
{
|
||||
qCritical() << "no map";
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// signal mapReady
|
||||
//
|
||||
if (m_map->isReady())
|
||||
onMapReady();
|
||||
else
|
||||
connect(m_map.data(), &SituationMap::Map::mapReady,
|
||||
this, &MapNotifier::onMapReady, Qt::UniqueConnection);
|
||||
|
||||
//
|
||||
// signal mapReadyAndSymbolDictionaryLoaded
|
||||
//
|
||||
if (m_map->isReady() && m_map->isSymbolDictionaryLoaded())
|
||||
onMapReadyAndSymbolDictionaryLoaded();
|
||||
else
|
||||
connect(m_map.data(), &SituationMap::Map::mapReadyAndSymbolDictionaryLoaded,
|
||||
this, &MapNotifier::onMapReadyAndSymbolDictionaryLoaded, Qt::UniqueConnection);
|
||||
}
|
||||
|
||||
|
||||
void MapNotifier::setMap(Map *map)
|
||||
{
|
||||
m_map = map;
|
||||
}
|
||||
|
||||
const QPointer<Map> MapNotifier::map()
|
||||
{
|
||||
return m_map;
|
||||
}
|
||||
|
||||
void MapNotifier::onMapReady()
|
||||
{
|
||||
// qCritical() << "emit mapReady()";
|
||||
emit mapReady();
|
||||
}
|
||||
|
||||
void MapNotifier::onMapReadyAndSymbolDictionaryLoaded()
|
||||
{
|
||||
// qCritical() << "emit mapReadyAndSymbolDictionaryLoaded(), this=" << this;
|
||||
emit mapReadyAndSymbolDictionaryLoaded();
|
||||
}
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
Executable
+60
@@ -0,0 +1,60 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* MapNotifier
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
#include <situation_map_export.h>
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QObject>
|
||||
#include <QPointer>
|
||||
#include <QTimer>
|
||||
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
//forward
|
||||
class Map;
|
||||
|
||||
|
||||
class SITUATIONMAP_EXPORT MapNotifier final : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
using BaseClass = QObject;
|
||||
|
||||
protected:
|
||||
using BaseClass::BaseClass;
|
||||
|
||||
void setMap(Map *map);
|
||||
|
||||
public:
|
||||
static QPointer<MapNotifier> createMapNotifier(Map *map, QObject *parent);
|
||||
void run();
|
||||
const QPointer<Map> map();
|
||||
|
||||
Q_SIGNALS:
|
||||
void mapReady();
|
||||
void mapReadyAndSymbolDictionaryLoaded();
|
||||
|
||||
protected Q_SLOTS:
|
||||
void onMapReady();
|
||||
void onMapReadyAndSymbolDictionaryLoaded();
|
||||
|
||||
private:
|
||||
Q_DISABLE_COPY(MapNotifier)
|
||||
|
||||
QPointer<Map> m_map;
|
||||
};
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
Executable
+498
@@ -0,0 +1,498 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface of AbstractMapObject
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "map_settings.h"
|
||||
#include "situation_map_utils.h" // fromString(GridType...)
|
||||
#include "grid.h"
|
||||
|
||||
|
||||
//Qt
|
||||
#include <QFile>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
MapSettings::MapSettings(const QString &inifile_ABSOLUTE_Path, QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_settings(inifile_ABSOLUTE_Path, QSettings::IniFormat)
|
||||
, m_logger(getLogger("MapSettings"))
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
|
||||
DEBUG_LOG(m_logger) << LOGFUNCTION << " filename='" << m_settings.fileName();
|
||||
|
||||
if (hasErrors())
|
||||
{
|
||||
ERROR_LOG(m_logger) << LOGFUNCTION << " filename='" << m_settings.fileName()
|
||||
<< "'' has following errors: "
|
||||
<< " exists = " << exists()
|
||||
<< " accessError = " << accessError()
|
||||
<< " formatError = " << formatError();
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_LOG(m_logger) << LOGFUNCTION << " filename='" << m_settings.fileName()
|
||||
<< "' has no errors ";
|
||||
|
||||
// set default symbology type
|
||||
AdvancedSymbology::SymbolDictionary::setDefaultSymbologyType(symbologyType());
|
||||
}
|
||||
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
}
|
||||
|
||||
|
||||
MapSettings::~MapSettings()
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
}
|
||||
|
||||
|
||||
QString MapSettings::filename() const { return m_settings.fileName(); }
|
||||
bool MapSettings::hasErrors() const { return !exists() || m_settings.status() != QSettings::Status::NoError; }
|
||||
|
||||
|
||||
bool MapSettings::exists() const
|
||||
{
|
||||
QFile file(filename());
|
||||
return file.exists();
|
||||
}
|
||||
|
||||
|
||||
bool MapSettings::accessError() const { return m_settings.status() == QSettings::Status::AccessError; }
|
||||
bool MapSettings::formatError() const { return m_settings.status() == QSettings::Status::FormatError; }
|
||||
|
||||
|
||||
QString MapSettings::licenseStr() const
|
||||
{
|
||||
return m_settings.value(QLatin1String("license/licenseString")).toString();
|
||||
}
|
||||
|
||||
QStringList MapSettings::licenseExtensions()
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
|
||||
QStringList sl;
|
||||
int size = m_settings.beginReadArray(QLatin1String("license"));
|
||||
|
||||
sl.reserve(size);
|
||||
for (int i = 0; i < size; ++i)
|
||||
{
|
||||
m_settings.setArrayIndex(i);
|
||||
const QString &val = m_settings.value(QLatin1String("extensionString")).toString();
|
||||
sl.append(val);
|
||||
}
|
||||
m_settings.endArray();
|
||||
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return sl;
|
||||
}
|
||||
|
||||
EsriNetworkCacheSettings MapSettings::networkCacheSettings()
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
EsriNetworkCacheSettings encs;
|
||||
|
||||
encs.enabled = m_settings.value(QLatin1String("esriNetworkCache/enabled"), false).toBool();
|
||||
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return encs;
|
||||
}
|
||||
|
||||
QString MapSettings::symbologyTypeStr() const
|
||||
{
|
||||
return m_settings.value(QLatin1String("symbology/type")).toString();
|
||||
}
|
||||
|
||||
AdvancedSymbology::SymbologyType MapSettings::symbologyType() const
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
QString typeStr = symbologyTypeStr();
|
||||
AdvancedSymbology::SymbologyType symType = AdvancedSymbology::SymbologyType::None;
|
||||
AdvancedSymbology::fromString(symType, typeStr);
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return symType;
|
||||
}
|
||||
|
||||
QString MapSettings::extraSymbolDirectory() const
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
|
||||
QString extraDir = m_settings.value(QLatin1String("symbology/extraSymbols")).toString();
|
||||
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END, extraDir='" << extraDir << "'";
|
||||
return extraDir;
|
||||
}
|
||||
|
||||
QString MapSettings::basemapLayernamePrefix()
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
|
||||
QString val = m_settings.value(QLatin1String("mapUrls/basemapLayernamePrefix")).toString();
|
||||
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return val;
|
||||
}
|
||||
QVector<QPair<QString, QString>> MapSettings::mapUrlsWithNames()
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
|
||||
int size = m_settings.beginReadArray(QLatin1String("mapUrls"));
|
||||
QVector<QPair<QString, QString>> mapUrls;
|
||||
mapUrls.reserve(size);
|
||||
|
||||
for (int i = 0; i < size; ++i)
|
||||
{
|
||||
m_settings.setArrayIndex(i);
|
||||
const QString &val = m_settings.value(QLatin1String("url")).toString();
|
||||
const QString &name = m_settings.value(QLatin1String("name")).toString();
|
||||
mapUrls.append(QPair<QString, QString>(val,name));
|
||||
DEBUG_LOG(m_logger) << val << " Name: " << name << " END";
|
||||
}
|
||||
m_settings.endArray();
|
||||
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return mapUrls;
|
||||
}
|
||||
|
||||
QStringList MapSettings::mapUrls()
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
|
||||
QStringList mapUrls;
|
||||
int size = m_settings.beginReadArray(QLatin1String("mapUrls"));
|
||||
|
||||
mapUrls.reserve(size);
|
||||
for (int i = 0; i < size; ++i)
|
||||
{
|
||||
m_settings.setArrayIndex(i);
|
||||
const QString &val = m_settings.value(QLatin1String("url")).toString();
|
||||
mapUrls.append(val);
|
||||
}
|
||||
m_settings.endArray();
|
||||
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return mapUrls;
|
||||
}
|
||||
|
||||
QStringList MapSettings::sceneUrls()
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
|
||||
QStringList sceneUrls;
|
||||
int size = m_settings.beginReadArray(QLatin1String("sceneUrls"));
|
||||
|
||||
sceneUrls.reserve(size);
|
||||
for (int i = 0; i < size; ++i)
|
||||
{
|
||||
m_settings.setArrayIndex(i);
|
||||
const QString &val = m_settings.value(QLatin1String("url")).toString();
|
||||
sceneUrls.append(val);
|
||||
}
|
||||
m_settings.endArray();
|
||||
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return sceneUrls;
|
||||
}
|
||||
|
||||
QVector<QPair<QString, QString>> MapSettings::sceneUrlsWithNames()
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
|
||||
const int size = m_settings.beginReadArray(QLatin1String("sceneUrls"));
|
||||
QVector<QPair<QString, QString>> sceneUrls;
|
||||
sceneUrls.reserve(size);
|
||||
|
||||
for (int i = 0; i < size; ++i)
|
||||
{
|
||||
m_settings.setArrayIndex(i);
|
||||
const QString &val = m_settings.value(QLatin1String("url")).toString();
|
||||
const QString &name = m_settings.value(QLatin1String("name")).toString();
|
||||
sceneUrls.append(QPair<QString, QString>(val,name));
|
||||
}
|
||||
m_settings.endArray();
|
||||
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return sceneUrls;
|
||||
}
|
||||
|
||||
QStringList MapSettings::sceneObjectUrls()
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
|
||||
QStringList sceneUrls;
|
||||
int size = m_settings.beginReadArray(QLatin1String("sceneObjectUrls"));
|
||||
|
||||
sceneUrls.reserve(size);
|
||||
for (int i = 0; i < size; ++i)
|
||||
{
|
||||
m_settings.setArrayIndex(i);
|
||||
const QString &val = m_settings.value(QLatin1String("url")).toString();
|
||||
sceneUrls.append(val);
|
||||
}
|
||||
m_settings.endArray();
|
||||
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return sceneUrls;
|
||||
}
|
||||
|
||||
QStringList MapSettings::elevationUrls()
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
|
||||
QStringList elevationUrls;
|
||||
int size = m_settings.beginReadArray(QLatin1String("elevationUrls"));
|
||||
|
||||
elevationUrls.reserve(size);
|
||||
for (int i = 0; i < size; ++i)
|
||||
{
|
||||
m_settings.setArrayIndex(i);
|
||||
const QString &val = m_settings.value(QLatin1String("url")).toString();
|
||||
elevationUrls.append(val);
|
||||
}
|
||||
m_settings.endArray();
|
||||
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return elevationUrls;
|
||||
}
|
||||
|
||||
QStringList MapSettings::operationalLayers()
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
|
||||
QStringList operationalLayers;
|
||||
int size = m_settings.beginReadArray(QLatin1String("operationalLayer"));
|
||||
|
||||
operationalLayers.reserve(size);
|
||||
for (int i = 0; i < size; ++i)
|
||||
{
|
||||
m_settings.setArrayIndex(i);
|
||||
const QString &val = m_settings.value(QLatin1String("operationalLayer")).toString();
|
||||
operationalLayers.append(val);
|
||||
}
|
||||
m_settings.endArray();
|
||||
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return operationalLayers;
|
||||
}
|
||||
|
||||
QString MapSettings::participantLayername()
|
||||
{
|
||||
return m_settings.value(QLatin1String("operationalLayer/participantLayername")).toString();
|
||||
}
|
||||
|
||||
QString MapSettings::operationalLayerForCubes()
|
||||
{
|
||||
return m_settings.value(QLatin1String("operationalLayer/operationalLayerForCubes")).toString();
|
||||
}
|
||||
|
||||
QString MapSettings::localMapFile()
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
|
||||
QString val = m_settings.value(QLatin1String("mapUrls/localMapFile")).toString().trimmed();
|
||||
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return val;
|
||||
}
|
||||
|
||||
|
||||
QString MapSettings::centerPointMgrs() const
|
||||
{
|
||||
return m_settings.value(QLatin1String("map/center"), QLatin1String("32UMD8000085000")).toString();
|
||||
}
|
||||
|
||||
|
||||
double MapSettings::zoomFactorBase() const
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
|
||||
bool ok = false;
|
||||
double value = m_settings.value(QLatin1String("map/zoomFactorBase")).toDouble(&ok);
|
||||
|
||||
return (ok) ? value : -1;
|
||||
}
|
||||
|
||||
|
||||
double MapSettings::scale() const
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return m_settings.value(QLatin1String("map/initialScale")).toDouble();
|
||||
}
|
||||
|
||||
|
||||
double MapSettings::minScale() const
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return m_settings.value(QLatin1String("map/scaleMin")).toDouble();
|
||||
}
|
||||
|
||||
|
||||
double MapSettings::maxScale() const
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return m_settings.value(QLatin1String("map/scaleMax")).toDouble();
|
||||
}
|
||||
|
||||
double MapSettings::scaleHasVisibility() const
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return m_settings.value(QLatin1String("map/scaleHasVisibility")).toDouble();
|
||||
}
|
||||
|
||||
|
||||
QString MapSettings::gridStr() const
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return m_settings.value(QLatin1String("map/gridType")).toString();
|
||||
}
|
||||
|
||||
|
||||
GridType MapSettings::gridType() const
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
QString gridString = gridStr();
|
||||
GridType gridType = GridType::NoType;
|
||||
fromString(gridType, gridString);
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return gridType;
|
||||
}
|
||||
|
||||
double MapSettings::animationDuration() const
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return m_settings.value(QLatin1String("map/animationDuration")).toDouble();
|
||||
}
|
||||
|
||||
double MapSettings::rocketDuration() const
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return m_settings.value(QLatin1String("map/rocketDuration")).toDouble();
|
||||
}
|
||||
|
||||
bool SituationMap::MapSettings::addMapWidgets() const
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return m_settings.value(QLatin1String("widgets/addMapWidgets"), false).toBool();
|
||||
}
|
||||
|
||||
bool MapSettings::addSideBar() const
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return m_settings.value(QLatin1String("widgets/addSideBar"), false).toBool();
|
||||
}
|
||||
|
||||
|
||||
QString MapSettings::viewshedUrl() const
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
return m_settings.value(QLatin1String("viewshed/viewshedUrl")).toString();
|
||||
}
|
||||
|
||||
|
||||
|
||||
static QColor s2c(const QString &colorString)
|
||||
{
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
* Creating a QColor from string. The string has one of the following formats:
|
||||
*
|
||||
* - #RGB (each of R, G, and B is a single hex digit)
|
||||
* - #RRGGBB
|
||||
* - #AARRGGBB (Since 5.2)
|
||||
* - #RRRGGGBBB
|
||||
* - #RRRRGGGGBBBB
|
||||
* - A name from the list of colors defined in the list of SVG color keyword names provided by the
|
||||
* World Wide Web Consortium; for example, "steelblue" or "gainsboro". These color names work on all platforms.
|
||||
* Note that these color names are not the same as defined by the Qt::GlobalColor enums, e.g. "green" and
|
||||
* Qt::green does not refer to the same color.
|
||||
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
return QColor(colorString);
|
||||
} // s2c( const QString & colorString )
|
||||
|
||||
|
||||
QColor MapSettings::rubberbandDrawColor() const { return s2c(m_settings.value(QLatin1String("rubberband/drawColor"), QLatin1String("black")).toString()); }
|
||||
QColor MapSettings::rubberbandFillColor() const { return s2c(m_settings.value(QLatin1String("rubberband/fillColor"), QLatin1String("#32969696")).toString()); }
|
||||
QColor MapSettings::rubberbandHandleDrawColor() const { return s2c(m_settings.value(QLatin1String("rubberband/handleDrawColor"), QLatin1String("black")).toString()); }
|
||||
QColor MapSettings::rubberbandHandleFillColor() const { return s2c(m_settings.value(QLatin1String("rubberband/handleFillColor"), QLatin1String("yellow")).toString()); }
|
||||
QColor MapSettings::rubberbandSelectionColor() const { return s2c(m_settings.value(QLatin1String("rubberband/selectionColor"), QLatin1String("red")).toString()); }
|
||||
QColor MapSettings::rubberbandFrameColor() const { return s2c(m_settings.value(QLatin1String("rubberband/frameColor"), QLatin1String("black")).toString()); }
|
||||
QColor MapSettings::rubberbandFrameFillColor() const { return s2c(m_settings.value(QLatin1String("rubberband/frameFillColor"), QLatin1String("#32969600")).toString()); }
|
||||
int MapSettings::rubberbandFrameHandleMargin() const { return m_settings.value(QLatin1String("rubberband/frameHandleMargin"), 10).toInt(); }
|
||||
QPoint MapSettings::rubberbandPreviewOffset() const { return m_settings.value(QLatin1String("rubberband/previewOffset"), QPoint(32, 32)).toPoint(); }
|
||||
unsigned int MapSettings::rubberbandPreviewSize() const { return m_settings.value(QLatin1String("rubberband/previewSize"), 32).toUInt(); }
|
||||
unsigned int MapSettings::rubberbandPickingRatio() const { return m_settings.value(QLatin1String("rubberband/pickingRatio"), 0).toUInt(); }
|
||||
unsigned int MapSettings::rubberbandLineHandleWidth() const { return m_settings.value(QLatin1String("rubberband/lineHandleWidth"), 2).toUInt(); }
|
||||
|
||||
|
||||
QString MapSettings::toString() const
|
||||
{
|
||||
MapSettings *THIS = const_cast<MapSettings *>(this);
|
||||
|
||||
std::ostringstream stream;
|
||||
stream << "symbologyTypeStr: " << this->symbologyTypeStr() << std::endl;
|
||||
stream << "symbologyType: " << this->symbologyType() << std::endl;
|
||||
stream << "mapUrls: " << THIS->mapUrls().join(QLatin1String(";")) << std::endl;
|
||||
stream << "operationalLayers: " << THIS->operationalLayers().join(QLatin1String(";")) << std::endl;
|
||||
|
||||
stream << "centerPointMgrs: " << this->centerPointMgrs() << std::endl;
|
||||
|
||||
stream << "scale: " << this->scale() << std::endl;
|
||||
stream << "minSscale: " << this->minScale() << std::endl;
|
||||
stream << "maxScale: " << this->maxScale() << std::endl;
|
||||
|
||||
stream << "zoomFactorBase: " << this->zoomFactorBase() << std::endl;
|
||||
|
||||
stream << "gridStr: " << this->gridStr() << std::endl;
|
||||
stream << "gridType: " << this->gridType() << std::endl;
|
||||
|
||||
stream << "viewShedUrl: " << this->viewshedUrl() << std::endl;
|
||||
|
||||
stream << "rubberbandDrawColor: " << rubberbandDrawColor().name() << std::endl;
|
||||
stream << "rubberbandFillColor: " << rubberbandFillColor().name() << std::endl;
|
||||
stream << "rubberbandHandleDrawColor: " << rubberbandHandleDrawColor().name() << std::endl;
|
||||
stream << "rubberbandHandleFillColor: " << rubberbandHandleFillColor().name() << std::endl;
|
||||
stream << "rubberbandSelectionColor: " << rubberbandSelectionColor().name() << std::endl;
|
||||
stream << "rubberbandFrameColor: " << rubberbandFrameColor().name() << std::endl;
|
||||
stream << "rubberbandFrameFillColor: " << rubberbandFrameFillColor().name() << std::endl;
|
||||
stream << "rubberbandFrameHandleMargin: " << rubberbandFrameHandleMargin() << std::endl;
|
||||
stream << "rubberbandPreviewOffset: " << rubberbandPreviewOffset() << std::endl;
|
||||
stream << "rubberbandPreviewSize: " << rubberbandPreviewSize() << std::endl;
|
||||
stream << "rubberbandLineHandleWidth: " << rubberbandLineHandleWidth() << std::endl;
|
||||
|
||||
return QLatin1String(stream.str().c_str());
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// output operator:
|
||||
//-----------------------------------------------------------------------------
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const MapSettings &value)
|
||||
{
|
||||
stream << value.toString();
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
Executable
+151
@@ -0,0 +1,151 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface of AbstractMapObject
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
#include <Common/situation_map_logging.h>
|
||||
#include <situation_map_export.h>
|
||||
#include <Symbology/symbol_dictionary.h>
|
||||
|
||||
// Qt
|
||||
#include <QString>
|
||||
#include <QSettings>
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
/**
|
||||
* @brief The MapSettings class is reading some values from an ini file using the QSettings.
|
||||
* The main use case is the class MapInitializer.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT MapSettings : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
/*! \name Construction, Destruction */
|
||||
//@{
|
||||
|
||||
/**
|
||||
* @brief Constructor
|
||||
* @param inifile_ABSOLUTE_Path to read
|
||||
*/
|
||||
explicit MapSettings(const QString &inifile_ABSOLUTE_Path, QObject *parent = nullptr);
|
||||
|
||||
/**
|
||||
* @brief ~MapSettings destructor
|
||||
*/
|
||||
virtual ~MapSettings();
|
||||
//@}
|
||||
|
||||
/**
|
||||
* @brief Get filename
|
||||
* @return filename
|
||||
*/
|
||||
QString filename() const;
|
||||
|
||||
/*! \name Functions for error handling */
|
||||
//@{
|
||||
bool hasErrors() const;
|
||||
bool exists() const;
|
||||
bool accessError() const;
|
||||
bool formatError() const;
|
||||
//@}
|
||||
|
||||
/*! \name Get values */
|
||||
//@{
|
||||
QString licenseStr() const;
|
||||
QStringList licenseExtensions();
|
||||
|
||||
EsriNetworkCacheSettings networkCacheSettings();
|
||||
|
||||
QString symbologyTypeStr() const;
|
||||
AdvancedSymbology::SymbologyType symbologyType() const;
|
||||
QString extraSymbolDirectory() const;
|
||||
|
||||
QString basemapLayernamePrefix();
|
||||
QString localMapFile();
|
||||
QVector<QPair<QString, QString>> mapUrlsWithNames();
|
||||
QStringList mapUrls();
|
||||
QStringList sceneUrls();
|
||||
QVector<QPair<QString, QString>> sceneUrlsWithNames();
|
||||
QStringList sceneObjectUrls();
|
||||
QStringList elevationUrls();
|
||||
|
||||
QStringList operationalLayers();
|
||||
QString participantLayername();
|
||||
|
||||
QString operationalLayerForCubes();
|
||||
|
||||
|
||||
QString centerPointMgrs() const;
|
||||
|
||||
double scale() const;
|
||||
double minScale() const;
|
||||
double maxScale() const;
|
||||
double scaleHasVisibility() const;
|
||||
|
||||
double zoomFactorBase() const;
|
||||
|
||||
QString gridStr() const;
|
||||
GridType gridType() const;
|
||||
|
||||
double animationDuration() const;
|
||||
double rocketDuration() const;
|
||||
|
||||
|
||||
|
||||
bool addMapWidgets() const;
|
||||
bool addSideBar() const;
|
||||
|
||||
QString viewshedUrl() const;
|
||||
|
||||
|
||||
QColor rubberbandDrawColor() const;
|
||||
QColor rubberbandFillColor() const;
|
||||
QColor rubberbandHandleDrawColor() const;
|
||||
QColor rubberbandHandleFillColor() const;
|
||||
QColor rubberbandSelectionColor() const;
|
||||
QColor rubberbandFrameColor() const;
|
||||
QColor rubberbandFrameFillColor() const;
|
||||
int rubberbandFrameHandleMargin() const;
|
||||
QPoint rubberbandPreviewOffset() const;
|
||||
unsigned int rubberbandPreviewSize() const;
|
||||
unsigned int rubberbandPickingRatio() const;
|
||||
unsigned int rubberbandLineHandleWidth() const;
|
||||
//@}
|
||||
|
||||
|
||||
QString toString() const;
|
||||
|
||||
protected:
|
||||
QSettings m_settings;
|
||||
|
||||
LOGGER_T m_logger; ///< Interface of the Logging-Facility
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// output operator:
|
||||
//-----------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief Output operator
|
||||
* @param stream used to stream into.
|
||||
* @param value to be streamed.
|
||||
* @return appended stream.
|
||||
*/
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const MapSettings &value);
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
Executable
+44
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface-Implementation of DangerArea
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include <situation_map_export.h>
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QPointF>
|
||||
#include <QString>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @brief The Measurement class.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT Measurement
|
||||
{
|
||||
public:
|
||||
Measurement() = default; ///< Contructor
|
||||
virtual ~Measurement() = default; ///< Destructor
|
||||
|
||||
Measurement(const Measurement &other) = delete;
|
||||
Measurement &operator=(Measurement &other) = delete;
|
||||
|
||||
virtual long measureLength() = 0;
|
||||
virtual void clear() = 0;
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface for Storing of MapObjects
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "object_container.h"
|
||||
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
ObjectContainer::ObjectContainer(const QSharedPointer<IdGenerator> &idGenerator)
|
||||
: m_idGenerator(idGenerator)
|
||||
, m_logger(getLogger("ObjectContainer"))
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
}
|
||||
|
||||
ObjectContainer::~ObjectContainer()
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
}
|
||||
|
||||
QSharedPointer<IdGenerator> ObjectContainer::idGenerator() const
|
||||
{
|
||||
return m_idGenerator;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
IdGenerator::IdGenerator()
|
||||
: m_logger(getLogger("IdGenerator"))
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
}
|
||||
|
||||
IdGenerator::~IdGenerator()
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
+204
@@ -0,0 +1,204 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface for Storing of MapObjects
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
// Own
|
||||
#include "abstract_map_object.h"
|
||||
#include <Common/situation_map_logging.h>
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QMap>
|
||||
#include <QSharedPointer>
|
||||
|
||||
#include <typeindex>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
//forward
|
||||
template<class> class RefPointer;
|
||||
|
||||
|
||||
/**
|
||||
* @brief The IdGenerator class generates a new UniqueMapId in a very simple manner.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT IdGenerator // final
|
||||
{
|
||||
public:
|
||||
static const UniqueMapId INVALID_ID = SituationMap::INVALID_MAP_ID;
|
||||
|
||||
IdGenerator();
|
||||
virtual ~IdGenerator(); // leave virtual to let UnitTestInternal succeed
|
||||
|
||||
IdGenerator(const IdGenerator &other) = delete;
|
||||
IdGenerator &operator=(IdGenerator &other) = delete;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get next UniqueMapId
|
||||
* @return Next UniqueMapId
|
||||
*/
|
||||
UniqueMapId getNextId()
|
||||
{
|
||||
DEBUG_LOG(m_logger) << LOGFUNCTION << " nextId=" << m_counter;
|
||||
return m_counter++;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check validity
|
||||
* @param id to be checked
|
||||
* @return True if id is not equal INVALID_ID
|
||||
* @note Prefer SituationMap::isUniqueMapIdValid() due to runtime aspects.
|
||||
*/
|
||||
static bool idIsValid(const UniqueMapId &id)
|
||||
{
|
||||
return isUniqueMapIdValid(id); // same as ( id != INVALID_ID );
|
||||
}
|
||||
|
||||
UniqueMapId nextFreeId() const { return m_counter; }
|
||||
|
||||
protected:
|
||||
LOGGER_T m_logger; ///< Interface of the Logging-Facility
|
||||
UniqueMapId m_counter = 0;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* @brief The ObjectContainer class maps UniqueMapId to MapObjects.
|
||||
* It uses an external IdGenerator to generate a next UniqueMapId returned
|
||||
* while inserting.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT ObjectContainer
|
||||
{
|
||||
public:
|
||||
using UniqueObjectId = UniqueMapId;
|
||||
using Object = AbstractMapObject;
|
||||
|
||||
/*! \name Construction, Destruction */
|
||||
//@{
|
||||
/**
|
||||
* @brief Constructor of ObjectContainer.
|
||||
* @param idGenerator to be used
|
||||
* (can be shared among different ObjectContainer instances).
|
||||
*/
|
||||
explicit ObjectContainer(const QSharedPointer<IdGenerator> &idGenerator);
|
||||
|
||||
/**
|
||||
* @brief Destructor. Will delete the IdGenerator when it goes
|
||||
* out of scope, if no other QSharedPointer objects are referencing it.
|
||||
*/
|
||||
virtual ~ObjectContainer();
|
||||
|
||||
|
||||
ObjectContainer(const ObjectContainer &other) = delete;
|
||||
ObjectContainer &operator=(ObjectContainer &other) = delete;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get current IdGenerator.
|
||||
* @return Current IdGenerator.
|
||||
*/
|
||||
virtual QSharedPointer<IdGenerator> idGenerator() const;
|
||||
//@}
|
||||
|
||||
/*! \name Insert, Remove, Clear */
|
||||
//@{
|
||||
|
||||
/**
|
||||
* @brief insertObject.
|
||||
* @param object to be inserted.
|
||||
* @return UniqueId of inserted object.
|
||||
*/
|
||||
virtual UniqueObjectId insertObject(Object *object) = 0;
|
||||
|
||||
virtual UniqueObjectId insertObject(ObjectContainer::Object *object, const ObjectContainer::UniqueObjectId &uid) = 0;
|
||||
|
||||
/**
|
||||
* @brief Remove object from the container.
|
||||
* @param id to be removed.
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool removeObject(const UniqueObjectId &id) = 0;
|
||||
|
||||
/**
|
||||
* @brief Clear the container (and remove objects from the view)
|
||||
*/
|
||||
virtual void clear() = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Access */
|
||||
//@{
|
||||
|
||||
/**
|
||||
* @brief getObject.
|
||||
* @param id to access.
|
||||
* @return Object if found, otherwise null.
|
||||
*/
|
||||
virtual Object *getObject(const UniqueObjectId &id) const = 0;
|
||||
|
||||
/**
|
||||
* @brief Retrieves all UniqueIds.
|
||||
* @return Get all UniqueIds.
|
||||
*/
|
||||
virtual QList<UniqueObjectId> getAllKeys() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Get all objects of any type.
|
||||
* @return All objects.
|
||||
*/
|
||||
virtual QList<Object *> getAllObjects() const = 0;
|
||||
|
||||
/**
|
||||
* @brief Get all objects of a certain type.
|
||||
* @param type requested type.
|
||||
* @return All objects fo requested type
|
||||
*/
|
||||
virtual QList<Object *> getAllObjects(const std::type_index &type) const = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get mutable Iterator
|
||||
* @return mutable Iterator
|
||||
*/
|
||||
virtual QMutableMapIterator<UniqueObjectId, RefPointer<Object>> mutableIterator() = 0;
|
||||
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Check */
|
||||
//@{
|
||||
/**
|
||||
* @brief Check existence.
|
||||
* @param id to be checked.
|
||||
* @return True if exists, otherwise false.
|
||||
*/
|
||||
virtual bool containsObject(const UniqueObjectId &id) const = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Count */
|
||||
//@{
|
||||
virtual qint64 countObjects() const = 0;
|
||||
//@}
|
||||
|
||||
protected:
|
||||
QSharedPointer<IdGenerator> m_idGenerator;
|
||||
LOGGER_T m_logger; ///< Interface of the Logging-Facility
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
+222
@@ -0,0 +1,222 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Construction of MapObjects
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "object_factory.h"
|
||||
#include <MapImpl/abstract_map_object_impl.h>
|
||||
#include <MapImpl/map_impl.h>
|
||||
|
||||
|
||||
// ESRI
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QCoreApplication>
|
||||
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
static FactoryMap &factoryMap()
|
||||
{
|
||||
static FactoryMap s_factoryMap;
|
||||
return s_factoryMap;
|
||||
}
|
||||
|
||||
static void cleanupFactoryMap()
|
||||
{
|
||||
// stored objects will be deleted by QSharedPointer:
|
||||
factoryMap().clear();
|
||||
}
|
||||
|
||||
FactoryMap &MapSingleton::getFactoryMap()
|
||||
{
|
||||
if (factoryMap().isEmpty())
|
||||
qAddPostRoutine(cleanupFactoryMap);
|
||||
|
||||
return factoryMap();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void ObjectFactory::setObjectContainer(const QSharedPointer<ObjectContainer> &objectContainer)
|
||||
{
|
||||
m_objectContainer = objectContainer;
|
||||
}
|
||||
|
||||
|
||||
bool ObjectFactory::initMapObject(AbstractMapObject *obj, Map *map, UniqueMapId uid, const QString &logicalLayerName)
|
||||
{
|
||||
bool success = false;
|
||||
if (obj && map)
|
||||
{
|
||||
AbstractMapObjectImpl *objImpl = dynamic_cast<AbstractMapObjectImpl *>(obj);
|
||||
MapImpl *mapImpl = dynamic_cast<MapImpl *>(map);
|
||||
if (objImpl)
|
||||
{
|
||||
success = objImpl->init(mapImpl, logicalLayerName);
|
||||
if (!success)
|
||||
{
|
||||
ERROR_LOG(m_logger) << LOGFUNCTION << " obj->init() failed";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (m_objectContainer)
|
||||
{
|
||||
UniqueMapId uniqueId = m_objectContainer->insertObject(objImpl,uid);
|
||||
objImpl->setUniqueId(uniqueId);
|
||||
DEBUG_LOG(m_logger) << LOGFUNCTION << " insertObject: "
|
||||
<< " uniqueId='" << uniqueId << "'"
|
||||
<< " countObjects=" << m_objectContainer->countObjects()
|
||||
<< " debugInfo='" << obj->debugInfo() << "'"
|
||||
<< " logicalLayerName='" << logicalLayerName << "'";
|
||||
}
|
||||
else
|
||||
ERROR_LOG(m_logger) << LOGFUNCTION << " no objectContainer";
|
||||
|
||||
// apply symbolScale:
|
||||
objImpl->setScale(map->symbolScale());
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
ERROR_LOG(m_logger) << LOGFUNCTION << " initMapObject failed";
|
||||
return success;
|
||||
} // ObjectFactory::initMapObject
|
||||
|
||||
AbstractMapObject *ObjectFactory::idToMapObject(const UniqueMapId &uniqueId) const
|
||||
{
|
||||
if (m_objectContainer)
|
||||
{
|
||||
// if objectContainer stores type 'Referenced':
|
||||
// obj = dynamic_cast<AbstractMapObject*> ( m_objectContainer->getObject(uniqueId) );
|
||||
// or use static_cast to speed up.
|
||||
|
||||
return m_objectContainer->getObject(uniqueId);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
std::type_index ObjectFactory::interfaceToImplementation(const std::type_index &interface_IN, bool *bOk)
|
||||
{
|
||||
// 1. INTERFACE_TYPE -> GenericObjectFactory<IMPL_TYPE> -> type_index(IMPL_TYPE) via getFactoryMap
|
||||
const std::type_index &keyRequestedInterface = interface_IN;
|
||||
const QLatin1String name(interface_IN.name());
|
||||
|
||||
// DEBUG_LOG(m_logger) << LOGFUNCTION << " IFtype=" << name ;
|
||||
|
||||
if (MapSingleton::getFactoryMap().contains(keyRequestedInterface))
|
||||
{
|
||||
if (bOk)
|
||||
*bOk = true;
|
||||
return MapSingleton::getFactoryMap().value(keyRequestedInterface)->getTypeIndexOfImplementation();
|
||||
}
|
||||
return std::type_index(typeid(this)); // at least one parameter is expected :-(
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool ObjectFactory::isUniqueIdValid(const UniqueMapId &uniqueMapId)
|
||||
{
|
||||
return isUniqueMapIdValid(uniqueMapId);
|
||||
} // ObjectFactory::isUniqueIdValid
|
||||
|
||||
qint32 ObjectFactory::count() const
|
||||
{
|
||||
if (m_objectContainer)
|
||||
return m_objectContainer->countObjects();
|
||||
FATAL_LOG(m_logger) << LOGFUNCTION
|
||||
<< " no objectContainer!!!";
|
||||
return -1;
|
||||
}
|
||||
|
||||
QList<RefPointer<AbstractMapObject> > ObjectFactory::getAllObjects() const
|
||||
{
|
||||
if (m_objectContainer)
|
||||
{
|
||||
const QList<ObjectContainer::Object *> objList = m_objectContainer->getAllObjects();
|
||||
|
||||
QList<RefPointer<AbstractMapObject> > refPtrList;
|
||||
refPtrList.reserve(objList.size());
|
||||
for (ObjectContainer::Object *obj : objList)
|
||||
refPtrList.append(RefPointer<AbstractMapObject>(obj));
|
||||
return refPtrList;
|
||||
}
|
||||
ERROR_LOG(m_logger) << LOGFUNCTION
|
||||
<< " no objectContainer!!!";
|
||||
|
||||
return QList<RefPointer<AbstractMapObject> > ();
|
||||
}
|
||||
|
||||
QList<UniqueMapId> ObjectFactory::getAllKeys() const
|
||||
{
|
||||
if (m_objectContainer)
|
||||
return m_objectContainer->getAllKeys();
|
||||
ERROR_LOG(m_logger) << LOGFUNCTION
|
||||
<< " no objectContainer!!!";
|
||||
|
||||
return QList<UniqueMapId> ();
|
||||
}
|
||||
|
||||
bool ObjectFactory::contains(const UniqueMapId &uniqueMapId) const
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START, requested for uniqueMapId=" << uniqueMapId;
|
||||
|
||||
if (m_objectContainer)
|
||||
return m_objectContainer->containsObject(uniqueMapId);
|
||||
ERROR_LOG(m_logger) << LOGFUNCTION << " no objectContainer!!!";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END, requested for uniqueMapId=" << uniqueMapId;
|
||||
return false;
|
||||
} // ObjectFactory::contains
|
||||
|
||||
|
||||
|
||||
RefPointer<AbstractMapObject> ObjectFactory::get(const UniqueMapId &uniqueMapId) const
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " get requested for uniqueMapId=" << uniqueMapId;
|
||||
|
||||
// lookup in internal container:
|
||||
if (m_objectContainer)
|
||||
{
|
||||
AbstractMapObject *mapObj = idToMapObject(uniqueMapId);
|
||||
if (!mapObj)
|
||||
ERROR_LOG(m_logger) << LOGFUNCTION << " Requested object for uniqueMapId=" << uniqueMapId << " doesn't exist.";
|
||||
return RefPointer<AbstractMapObject>(mapObj);
|
||||
}
|
||||
ERROR_LOG(m_logger) << LOGFUNCTION << " no objectContainer!!!";
|
||||
return RefPointer<AbstractMapObject>();
|
||||
}
|
||||
|
||||
void ObjectFactory::clearObjects()
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
|
||||
if (m_objectContainer)
|
||||
m_objectContainer->clear();
|
||||
else
|
||||
ERROR_LOG(m_logger) << LOGFUNCTION << " no objectContainer!!!";
|
||||
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
}
|
||||
|
||||
void ObjectFactory::clearRegister()
|
||||
{
|
||||
// stored objects will be deleted by QSharedPointer:
|
||||
MapSingleton::getFactoryMap().clear();
|
||||
}
|
||||
|
||||
bool ObjectFactory::isMapReady() const
|
||||
{
|
||||
return m_map && m_map->isReady();
|
||||
}
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
Executable
+406
@@ -0,0 +1,406 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Construction of MapObjects
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
// Own
|
||||
#include "generic_object_factory.h"
|
||||
#include "object_container.h"
|
||||
#include "abstract_map_object.h"
|
||||
#include "situation_map_utils.h"
|
||||
#include <Common/ref_pointer.h>
|
||||
#include <situation_map_export.h>
|
||||
#include <Common/situation_map_logging.h>
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QMap>
|
||||
|
||||
#include <typeindex>
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
// forward
|
||||
class Map;
|
||||
|
||||
|
||||
using FactoryMapKey = std::type_index;
|
||||
using FactoryMapData = QSharedPointer<GenericObjectFactoryBase>;
|
||||
using FactoryMap = QMap<FactoryMapKey, FactoryMapData>;
|
||||
|
||||
|
||||
/**
|
||||
* @brief The MapSingleton struct maps between
|
||||
* INTERFACE (type_index) and GenericObjectFactory
|
||||
* It´s a singleton. Therefore this map has to be set only once per process until it is cleared.
|
||||
*/
|
||||
struct SITUATIONMAP_EXPORT MapSingleton
|
||||
{
|
||||
static FactoryMap &getFactoryMap();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @brief The ObjectFactory class is basically responsible for creation of all objects of type AbstractMapObject.
|
||||
* The complete range of tasks includes:
|
||||
* - creates objects of type AbstractMapObject and deriving classes
|
||||
* - initialize (call init() ofAbstractMapObject) and
|
||||
* - store them (within ObjectContainer)
|
||||
* - stores an ObjectContainer (with its IdGenerator)
|
||||
*
|
||||
* <b>Example:
|
||||
*
|
||||
* \code
|
||||
// Pre-condition :
|
||||
// Initialize objectFactory:
|
||||
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::Participant),
|
||||
new SituationMap::GenericObjectFactory<SituationMap::ParticipantImpl>() );
|
||||
// : Pre-condition
|
||||
|
||||
...
|
||||
|
||||
SituationMap::ObjectFactory& objFac = d->m_map->objectFactory();
|
||||
|
||||
// use an LOGICAL layer (not basemap)
|
||||
QString layername("ParticipantLayerName");
|
||||
|
||||
SituationMap::RefPointer<SituationMap::Participant> objPtr;
|
||||
objPtr = objFac.create<SituationMap::Participant>("ParticipantLayerName", // use an LOGICAL layer (not basemap)
|
||||
"ParticipantId1" // debugInfo (may contain SimId)
|
||||
);
|
||||
* \endcode
|
||||
*
|
||||
* \sa Map
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT ObjectFactory
|
||||
{
|
||||
public:
|
||||
/*! \name Construction, Destruction */
|
||||
//@{
|
||||
/**
|
||||
* @brief Contructor.
|
||||
* @param map to be used..
|
||||
*/
|
||||
explicit ObjectFactory(Map *map)
|
||||
: m_logger(getLogger("ObjectFactory"))
|
||||
, m_map(map) {}
|
||||
virtual ~ObjectFactory() = default; ///< Destructor
|
||||
|
||||
ObjectFactory(const ObjectFactory &other) = delete;
|
||||
ObjectFactory &operator=(ObjectFactory &other) = delete;
|
||||
|
||||
/**
|
||||
* @brief Set the ObjectContainer to be used.
|
||||
* @param objectContainer to be used.
|
||||
*/
|
||||
void setObjectContainer(const QSharedPointer<ObjectContainer> &objectContainer);
|
||||
//@}
|
||||
|
||||
/**
|
||||
* @brief Translate uniqueMapId to native AbstractMapObject.
|
||||
* @param uniqueId to get.
|
||||
* @return AbstractMapObject if found, otherwise null.
|
||||
*/
|
||||
AbstractMapObject *idToMapObject(const UniqueMapId &uniqueId) const;
|
||||
|
||||
Map* map() { return m_map; }
|
||||
|
||||
|
||||
protected:
|
||||
/**
|
||||
* @brief Initialize MapObject.
|
||||
* @param obj MapObject to be initialized.
|
||||
* @param map Map to which the mapObject belongs to.
|
||||
* @param logicalLayerName (logical) layer on which the object should be created.
|
||||
* @return True on success; otherwise false.
|
||||
*/
|
||||
bool initMapObject(AbstractMapObject *obj, Map *map, UniqueMapId uid, const QString &logicalLayerName);
|
||||
|
||||
friend class MapImpl; // to support MapImpl::doClickMapObject
|
||||
|
||||
/**
|
||||
* @brief Translate type_index of
|
||||
* the interface class to the corresponding type_index of implementation class.
|
||||
* @param interface_IN Type to be translated.
|
||||
* @param bOk true is found, otherwise false.
|
||||
* @return requested type_index of implementation class.
|
||||
*/
|
||||
std::type_index interfaceToImplementation(const std::type_index &interface_IN, bool *bOk = nullptr);
|
||||
|
||||
public:
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// create by (interface) type
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
/*! \name Create */
|
||||
//@{
|
||||
|
||||
/**
|
||||
* @brief Create MapObject of required type.
|
||||
* @param uniqueMapId Define the uniqueId of MapObject, be careful to use a valid and unused id
|
||||
* @param logicalLayerName (logical) layer on which the object should be created.
|
||||
* @param debugInfo Set debugInfo
|
||||
* @return MapObject of required type on success; otherwise null.
|
||||
*/
|
||||
template<typename INTERFACE_TYPE>
|
||||
RefPointer<INTERFACE_TYPE> create(const UniqueMapId &uniqueMapId,
|
||||
const QString &logicalLayerName, // external: via type
|
||||
const QString &debugInfo = QString())
|
||||
{
|
||||
DEBUG_LOG(m_logger) << LOGFUNCTION << " create requested for ..."
|
||||
<< ", debugInfo='" << debugInfo << "'"
|
||||
<< ", logicalLayerName='" << logicalLayerName << "'";
|
||||
|
||||
if (!isMapReady())
|
||||
{
|
||||
FATAL_LOG(m_logger) << LOGFUNCTION << " create failed"
|
||||
<< ", map not ready yet"
|
||||
<< ", debugInfo='" << debugInfo << "'";
|
||||
return RefPointer<INTERFACE_TYPE>();
|
||||
}
|
||||
|
||||
|
||||
if (logicalLayerName.isEmpty())
|
||||
{
|
||||
FATAL_LOG(m_logger) << LOGFUNCTION << " create failed"
|
||||
<< ", logicalLayerName is empty"
|
||||
<< ", debugInfo='" << debugInfo << "'";
|
||||
return RefPointer<INTERFACE_TYPE>();
|
||||
}
|
||||
|
||||
|
||||
std::type_index key(typeid(INTERFACE_TYPE));
|
||||
const QString &name = QString::fromLatin1(key.name());
|
||||
DEBUG_LOG(m_logger) << LOGFUNCTION << " create requested for ... name='" << name << "'"
|
||||
<< ", debugInfo='" << debugInfo << "'";
|
||||
|
||||
if (MapSingleton::getFactoryMap().contains(key))
|
||||
{
|
||||
RefPointer<INTERFACE_TYPE> obj(MapSingleton::getFactoryMap().value(key)->makeObj(debugInfo));
|
||||
if (obj.valid() && initMapObject(obj.get(), m_map, uniqueMapId, logicalLayerName))
|
||||
{
|
||||
return obj; // the caller will receive the requested type :-)
|
||||
}
|
||||
ERROR_LOG(m_logger) << LOGFUNCTION << " init failed, name='" << name << "'";
|
||||
obj->removeMySelf(); // cleanup
|
||||
return RefPointer<INTERFACE_TYPE>();
|
||||
}
|
||||
FATAL_LOG(m_logger) << LOGFUNCTION << " create failed, name= '" << name << "'"
|
||||
<< ", factoryMap.size() = " << MapSingleton::getFactoryMap().count();
|
||||
return RefPointer<INTERFACE_TYPE>();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Create MapObject of required type.
|
||||
* @param logicalLayerName (logical) layer on which the object should be created.
|
||||
* @param debugInfo Set debugInfo
|
||||
* @return MapObject of required type on success; otherwise null.
|
||||
*/
|
||||
template<typename INTERFACE_TYPE>
|
||||
RefPointer<INTERFACE_TYPE> create(const QString &logicalLayerName, // external: via type
|
||||
const QString &debugInfo = QString())
|
||||
{
|
||||
return create<INTERFACE_TYPE>(SituationMap::INVALID_MAP_ID, logicalLayerName, debugInfo);
|
||||
}
|
||||
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Count */
|
||||
//@{
|
||||
/**
|
||||
* @brief Number of objects.
|
||||
* @return Current number of objects.
|
||||
*/
|
||||
qint32 count() const;
|
||||
//@}
|
||||
|
||||
/*! \name Check */
|
||||
//@{
|
||||
/**
|
||||
* @brief Check uniqueMapId.
|
||||
* @param uniqueMapId to be checked.
|
||||
* @return Returns true if uniqueId is valid; otherwise returns false.
|
||||
* @note Prefer SituationMap::isUniqueMapIdValid() due to runtime aspects.
|
||||
*/
|
||||
static bool isUniqueIdValid(const UniqueMapId &uniqueMapId);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Check the existence <B>not</B> regarding the type.
|
||||
* @param uniqueId to lookup.
|
||||
* @return Returns true if container contains an occurrence; otherwise returns false.
|
||||
*/
|
||||
bool contains(const UniqueMapId &uniqueMapId) const;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Check the existence <B>regarding</B> the type.
|
||||
* @param uniqueMapId to lookup.
|
||||
* @return Returns true if container contains an occurrence; otherwise returns false.
|
||||
*/
|
||||
template<typename INTERFACE_TYPE>
|
||||
bool contains(const UniqueMapId &uniqueMapId)
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " contains requested for uniqueMapId=" << uniqueMapId;
|
||||
|
||||
bool containsId = contains(uniqueMapId);
|
||||
|
||||
if (containsId)
|
||||
{
|
||||
// 1 typeid Interface to typeid Impl:
|
||||
bool bOk = false;
|
||||
std::type_index keyRequestedImpl = interfaceToImplementation(typeid(INTERFACE_TYPE), &bOk);
|
||||
if (bOk)
|
||||
{
|
||||
// 2. retrieve out of internal container:
|
||||
AbstractMapObject *mapObj = idToMapObject(uniqueMapId);
|
||||
|
||||
if (!mapObj)
|
||||
return false;
|
||||
|
||||
// 3. compare retrieved objectTYPE with requested (IMPL)TYPE:
|
||||
// std::type_index(typeid(*baseClass)) == std::type_index(typeid(*subClass))
|
||||
containsId = std::type_index(typeid(*mapObj)) == keyRequestedImpl;
|
||||
}
|
||||
else
|
||||
{
|
||||
FATAL_LOG(m_logger) << LOGFUNCTION << " contains failed, name= '" << typeid(INTERFACE_TYPE).name() << "'"
|
||||
<< " factoryMap.size() = " << MapSingleton::getFactoryMap().count();
|
||||
}
|
||||
}
|
||||
return containsId;
|
||||
|
||||
} // ObjectFactory::contains
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Access */
|
||||
//@{
|
||||
|
||||
/**
|
||||
* @brief Get all UniqueIds.
|
||||
* @return All UniqueIds.
|
||||
*/
|
||||
QList<UniqueMapId> getAllKeys() const;
|
||||
|
||||
/**
|
||||
* @brief Get all Objects.
|
||||
* @return Container with all objects.
|
||||
*/
|
||||
QList < RefPointer<AbstractMapObject> > getAllObjects() const;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get access the object.
|
||||
* @param uniqueId to lookup.
|
||||
* @return Pointer to AbstractMapObject (Base class).
|
||||
*/
|
||||
RefPointer<AbstractMapObject> get(const UniqueMapId &uniqueMapId) const;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get access to object <B>regarding</B> the type.
|
||||
* @param uniqueId to lookup.
|
||||
* @return Pointer to object (adaquate type).
|
||||
*/
|
||||
template<typename INTERFACE_TYPE>
|
||||
RefPointer<INTERFACE_TYPE> get(const UniqueMapId &uniqueMapId) const
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " get requested for uniqueMapId=" << uniqueMapId;
|
||||
|
||||
// lookup in internal container:
|
||||
RefPointer<AbstractMapObject> mapObj = get(uniqueMapId);
|
||||
|
||||
return RefPointer<INTERFACE_TYPE>(mapObj); // implicit dynamic_cast
|
||||
}
|
||||
|
||||
/*! \name Clear */
|
||||
//@{
|
||||
/**
|
||||
* @brief Clear all objects within associated ObjectContainer
|
||||
*/
|
||||
void clearObjects();
|
||||
|
||||
/**
|
||||
* @brief Clear static register of GenericObjectFactory
|
||||
* (created using registerMe())
|
||||
*/
|
||||
static void clearRegister();
|
||||
//@}
|
||||
|
||||
/*! \name Register */
|
||||
//@{
|
||||
|
||||
template <typename IMPL_TYPE>
|
||||
friend class RegisterFactory; // to support 'REGISTER_TYPE'
|
||||
static void registerMe(const std::type_index &key, GenericObjectFactoryBase *factory)
|
||||
{
|
||||
LOGGER_T logger = getLogger("ObjectFactory");
|
||||
DEBUG_LOG(logger) << LOGFUNCTION
|
||||
<< " IF '" << key.name() << "'"
|
||||
<< " to IMPL '" << factory->getTypeIndexOfImplementation().name() << "')";
|
||||
MapSingleton::getFactoryMap()[key] = FactoryMapData(factory);
|
||||
|
||||
}
|
||||
//@}
|
||||
|
||||
|
||||
private:
|
||||
LOGGER_T m_logger; ///< Interface of the Logging-Facility
|
||||
|
||||
Map *m_map = nullptr;
|
||||
QSharedPointer<ObjectContainer> m_objectContainer;
|
||||
|
||||
bool isMapReady() const;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Option for registration
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* @brief The RegisterFactory class for registering the types to be created by ObjectFactory.
|
||||
*/
|
||||
template <typename IMPL_TYPE>
|
||||
class SITUATIONMAP_EXPORT RegisterFactory final
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* @brief Constructor.
|
||||
* @param key type_index to be registered
|
||||
*/
|
||||
explicit RegisterFactory(const std::type_index &key)
|
||||
{
|
||||
GenericObjectFactoryBase *genericFactory = new GenericObjectFactory<IMPL_TYPE>;
|
||||
ObjectFactory::registerMe(key, genericFactory);
|
||||
}
|
||||
|
||||
~RegisterFactory() = default;
|
||||
|
||||
// create by (interface) type
|
||||
// can be used to register by put that macro at the end of the implementation (cpp)
|
||||
#define REGISTER_TYPE(interfaceType, implType) \
|
||||
namespace { \
|
||||
static RegisterFactory<implType> s_factory( typeid(interfaceType) ); \
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface of ObjectIndicator
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
#include <situation_map_export.h>
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QPointF>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
/**
|
||||
* @brief The ObjectIndicator class creating a ObjectIndicator.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT ObjectIndicator
|
||||
{
|
||||
protected:
|
||||
ObjectIndicator() = default; ///< Contructor
|
||||
virtual ~ObjectIndicator() = default; ///< Destructor
|
||||
|
||||
public:
|
||||
ObjectIndicator(const ObjectIndicator &other) = delete;
|
||||
ObjectIndicator &operator=(ObjectIndicator &other) = delete;
|
||||
|
||||
/*! \name Specific data*/
|
||||
//@{
|
||||
|
||||
/**
|
||||
* @brief Get uniqueId of mapObjectToPointTo
|
||||
* @return uniqueId of the object to be pointed to.
|
||||
*/
|
||||
virtual UniqueMapId mapObjectToPointTo() = 0;
|
||||
|
||||
/**
|
||||
* @brief Set uniqueId of object should to be pointed to.
|
||||
* @param uniqueId of the object to be pointed to.
|
||||
*/
|
||||
virtual void setMapObjectToPointTo(const UniqueMapId &uniqueId, bool selected = false, int lifetimeMsec = -1) = 0;
|
||||
|
||||
virtual void setPointToPointTo(const QPointF &targetGeo, int lifetimeMsec = -1) = 0;
|
||||
|
||||
/**
|
||||
* @brief Remove the indicator
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual void remove() = 0;
|
||||
//@}
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
+267
@@ -0,0 +1,267 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Operator Map Settings
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "operator_map_settings.h"
|
||||
|
||||
|
||||
//Qt
|
||||
#include <QListIterator>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonArray>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
bool OperatorMapSettings::isEmpty() const
|
||||
{
|
||||
return mode == Mode::Undefined;
|
||||
}
|
||||
|
||||
bool OperatorMapSettings::getLayerParameter(const QString &layername, LayerParameter& layerParameterOut) const
|
||||
{
|
||||
const QVector<QPair<QString, LayerParameter>>::const_iterator it =
|
||||
std::find_if(orderedLayers.cbegin(), orderedLayers.cend(),
|
||||
[&layername](const QPair<QString, SituationMap::LayerParameter> &pair) { return pair.first == layername; } );
|
||||
|
||||
if (it == orderedLayers.end())
|
||||
return false;
|
||||
|
||||
layerParameterOut = (*it).second;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OperatorMapSettings::updateLayerParameter(const QString &layername, const LayerParameter& layerParameter)
|
||||
{
|
||||
QVector<QPair<QString, LayerParameter>>::iterator it =
|
||||
std::find_if(orderedLayers.begin(), orderedLayers.end(),
|
||||
[&layername](const QPair<QString, SituationMap::LayerParameter> &pair) { return pair.first == layername; } );
|
||||
|
||||
if (it == orderedLayers.end())
|
||||
return false;
|
||||
|
||||
// update
|
||||
(*it).second = layerParameter;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
QJsonObject OperatorMapSettings::toJsonObject() const
|
||||
{
|
||||
QJsonObject obj;
|
||||
|
||||
// mode
|
||||
obj[QLatin1String("mode")] = static_cast<int>(mode);
|
||||
obj[QLatin1String("viewpoint")] = viewpoint.toJsonObject();
|
||||
obj[QLatin1String("camera")] = camera.toJsonObject();
|
||||
|
||||
// below ground:
|
||||
obj[QLatin1String("navigationConstraint")] = static_cast<int>(navigationConstraint);
|
||||
obj[QLatin1String("baseSurfaceOpacity")] = static_cast<double>(baseSurfaceOpacity);
|
||||
|
||||
// orderedLayers
|
||||
{
|
||||
QJsonArray jArray;
|
||||
for (const QPair<QString, LayerParameter> &pair : qAsConst(orderedLayers))
|
||||
{
|
||||
const QString &layername = pair.first;
|
||||
const LayerParameter &lp = pair.second;
|
||||
|
||||
QJsonObject objTemp = lp.toJsonObject();
|
||||
objTemp[QLatin1String("layername")] = layername;
|
||||
jArray.append(objTemp);
|
||||
}
|
||||
obj[QLatin1String("orderedLayers")] = jArray;
|
||||
}
|
||||
|
||||
// orderedOverlays
|
||||
{
|
||||
QJsonArray jArray;
|
||||
for (const int overlayId : orderedOverlays)
|
||||
{
|
||||
QJsonObject objTemp;
|
||||
objTemp[QLatin1String("overlayId")] = overlayId;
|
||||
jArray.append(objTemp);
|
||||
}
|
||||
obj[QLatin1String("orderedOverlays")] = jArray;
|
||||
}
|
||||
|
||||
// MapWidgetSettings
|
||||
obj[QLatin1String("mapWidgetSettings")] = mapWidgetSettings.toJsonObject();
|
||||
|
||||
// symbolScale
|
||||
obj[QLatin1String("symbolScale")] = symbolScale;
|
||||
|
||||
// jumpPoints
|
||||
{
|
||||
QJsonArray jArray;
|
||||
for (const JumpPointData &jpd : jumpPoints)
|
||||
jArray.append(jpd.toJsonObject());
|
||||
obj[QLatin1String("jumpPoints")] = jArray;
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
QByteArray OperatorMapSettings::toJson() const
|
||||
{
|
||||
// final - toJson
|
||||
QJsonDocument jDoc(toJsonObject());
|
||||
return jDoc.toJson();
|
||||
}
|
||||
|
||||
bool OperatorMapSettings::fromJson(const QByteArray &json)
|
||||
{
|
||||
QJsonParseError parseError;
|
||||
QJsonDocument jDoc(QJsonDocument::fromJson(json, &parseError));
|
||||
|
||||
if (parseError.error != QJsonParseError::NoError)
|
||||
{
|
||||
qCritical() << " QJsonParseError->errorString: '" << parseError.errorString() << "'"
|
||||
<< ", offset: " << parseError.offset;
|
||||
return false;
|
||||
}
|
||||
|
||||
return fromJsonObject(jDoc.object());
|
||||
}
|
||||
|
||||
bool OperatorMapSettings::fromJsonObject(const QJsonObject &json)
|
||||
{
|
||||
// mode
|
||||
mode = static_cast<Mode>(json[QLatin1String("mode")].toInt(int(Mode::Undefined)));
|
||||
|
||||
// viewpoint
|
||||
viewpoint = Viewpoint2D::read(json[QLatin1String("viewpoint")].toObject());
|
||||
|
||||
// camera
|
||||
camera = Camera::read(json[QLatin1String("camera")].toObject());
|
||||
|
||||
// below ground:
|
||||
navigationConstraint = static_cast<SituationMap::NavigationConstraint>(json[QLatin1String("navigationConstraint")].toInt(int(SituationMap::NavigationConstraint::Undefined)));
|
||||
baseSurfaceOpacity = static_cast<float>(json[QLatin1String("baseSurfaceOpacity")].toDouble(1.0));
|
||||
|
||||
|
||||
// orderedLayers
|
||||
{
|
||||
const QJsonArray jArray = json[QLatin1String("orderedLayers")].toArray();
|
||||
orderedLayers.clear();
|
||||
orderedLayers.reserve(jArray.size());
|
||||
for (const auto &val : jArray)
|
||||
{
|
||||
const QJsonObject &objTemp = val.toObject();
|
||||
const QString &layername = objTemp[QLatin1String("layername")].toString();
|
||||
if (layername.isEmpty())
|
||||
continue;
|
||||
const LayerParameter &lp = LayerParameter::read(objTemp);
|
||||
orderedLayers.append(QPair<QString, LayerParameter>(layername, lp));
|
||||
} // for
|
||||
}
|
||||
|
||||
// orderedOverlays
|
||||
{
|
||||
const QJsonArray jArray = json[QLatin1String("orderedOverlays")].toArray();
|
||||
orderedOverlays.clear();
|
||||
orderedOverlays.reserve(jArray.size());
|
||||
for (const auto &val : jArray)
|
||||
{
|
||||
const QJsonObject &objTemp = val.toObject();
|
||||
const int overlayId = objTemp[QLatin1String("overlayId")].toInt();
|
||||
orderedOverlays.append(overlayId);
|
||||
} // for
|
||||
}
|
||||
|
||||
// MapWidgetSettings
|
||||
mapWidgetSettings = MapWidgetSettings::read(json[QLatin1String("mapWidgetSettings")].toObject());
|
||||
|
||||
|
||||
// symbolScale
|
||||
symbolScale = json[QLatin1String("symbolScale")].toDouble(1.0);
|
||||
// range symbolScaleMinimum,symbolScaleMaximum is checked later at MapImpl::setSymbolScale()
|
||||
|
||||
// jumpPoints
|
||||
{
|
||||
const QJsonArray jArray = json[QLatin1String("jumpPoints")].toArray();
|
||||
jumpPoints.clear();
|
||||
jumpPoints.reserve(jArray.size());
|
||||
for (const auto &val : jArray)
|
||||
{
|
||||
const QJsonObject &objTemp = val.toObject();
|
||||
const JumpPointData &jpd = JumpPointData::read(objTemp);
|
||||
jumpPoints.append(jpd);
|
||||
} // for
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
// MapWidgetSettings
|
||||
//
|
||||
|
||||
MapWidgetSettings MapWidgetSettings::read(const QJsonObject &json)
|
||||
{
|
||||
MapWidgetSettings mws;
|
||||
if (json.contains(QLatin1String("gridVisibility"))) mws.gridVisibility = json[QLatin1String("gridVisibility")].toBool();
|
||||
if (json.contains(QLatin1String("positionStringVisibility"))) mws.positionStringVisibility = json[QLatin1String("positionStringVisibility")].toBool();
|
||||
if (json.contains(QLatin1String("timeStringVisibility"))) mws.timeStringVisibility = json[QLatin1String("timeStringVisibility")].toBool();
|
||||
// [GUEZE-2921] add missing exerciseTimeString:
|
||||
if (json.contains(QLatin1String("exerciseTimeStringVisibility"))) mws.exerciseTimeStringVisibility = json[QLatin1String("exerciseTimeStringVisibility")].toBool();
|
||||
if (json.contains(QLatin1String("compassVisibility"))) mws.compassVisibility = json[QLatin1String("compassVisibility")].toBool();
|
||||
if (json.contains(QLatin1String("overviewMapVisibility"))) mws.overviewMapVisibility = json[QLatin1String("overviewMapVisibility")].toBool();
|
||||
return mws;
|
||||
}
|
||||
QJsonObject MapWidgetSettings::toJsonObject() const
|
||||
{
|
||||
QJsonObject json;
|
||||
json[QLatin1String("gridVisibility")] = gridVisibility;
|
||||
json[QLatin1String("positionStringVisibility")] = positionStringVisibility;
|
||||
json[QLatin1String("timeStringVisibility")] = timeStringVisibility;
|
||||
json[QLatin1String("exerciseTimeStringVisibility")] = exerciseTimeStringVisibility; // [GUEZE-2921] add missing exerciseTimeString
|
||||
json[QLatin1String("compassVisibility")] = compassVisibility;
|
||||
json[QLatin1String("overviewMapVisibility")] = overviewMapVisibility;
|
||||
return json;
|
||||
}
|
||||
|
||||
//
|
||||
// JumpPointData
|
||||
//
|
||||
JumpPointData JumpPointData::read(const QJsonObject &json)
|
||||
{
|
||||
JumpPointData jpd;
|
||||
|
||||
jpd.key = json[QLatin1String("key")].toString();
|
||||
|
||||
if (json.contains(QLatin1String("originGeoLon")) && json.contains(QLatin1String("originGeoLat")))
|
||||
{
|
||||
jpd.originGeo.setX(json[QLatin1String("originGeoLon")].toDouble());
|
||||
jpd.originGeo.setY(json[QLatin1String("originGeoLat")].toDouble());
|
||||
jpd.originGeo.setZ(json[QLatin1String("originGeoZ")].toDouble());
|
||||
}
|
||||
|
||||
jpd.mapScale = json[QLatin1String("mapScale")].toDouble(jpd.mapScale);
|
||||
|
||||
return jpd;
|
||||
}
|
||||
QJsonObject JumpPointData::toJsonObject() const
|
||||
{
|
||||
return {
|
||||
{QLatin1String("key"), key},
|
||||
{QLatin1String("originGeoLon"), originGeo.x()},
|
||||
{QLatin1String("originGeoLat"), originGeo.y()},
|
||||
{QLatin1String("originGeoZ"), originGeo.z()},
|
||||
{QLatin1String("mapScale"), mapScale}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Operator Map Settings
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
#include <Map/camera.h>
|
||||
#include <Map/layer_parameter.h>
|
||||
#include <Map/viewpoint2D.h>
|
||||
#include <situation_map_export.h>
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QList>
|
||||
#include <QPair>
|
||||
#include <QString>
|
||||
#include <QVector>
|
||||
|
||||
class QJsonObject;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
struct MapWidgetSettings
|
||||
{
|
||||
bool gridVisibility = true;
|
||||
bool positionStringVisibility = true;
|
||||
bool timeStringVisibility = false;
|
||||
bool exerciseTimeStringVisibility = false;
|
||||
bool compassVisibility = true;
|
||||
bool overviewMapVisibility = false;
|
||||
|
||||
static MapWidgetSettings read(const QJsonObject &json);
|
||||
QJsonObject toJsonObject() const;
|
||||
};
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
struct JumpPointData
|
||||
{
|
||||
QString key;
|
||||
Point3D originGeo;
|
||||
double mapScale = 0.0;
|
||||
|
||||
static JumpPointData read(const QJsonObject &json);
|
||||
QJsonObject toJsonObject() const;
|
||||
};
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
struct SITUATIONMAP_EXPORT OperatorMapSettings
|
||||
{
|
||||
Mode mode = Mode::Undefined;
|
||||
Viewpoint2D viewpoint;
|
||||
Camera camera;
|
||||
|
||||
NavigationConstraint navigationConstraint = NavigationConstraint::Undefined; // navigateBelowGround, since V100.5.0
|
||||
float baseSurfaceOpacity = 100.0; // since V100.5.0
|
||||
|
||||
QVector<QPair<QString, LayerParameter>> orderedLayers;
|
||||
|
||||
QList<int> orderedOverlays; // QList due to the usage of keys()
|
||||
|
||||
MapWidgetSettings mapWidgetSettings;
|
||||
double symbolScale = 1.0;
|
||||
// int symbolOpacity = 100; // of all? of participants? of ???
|
||||
|
||||
QVector<JumpPointData> jumpPoints;
|
||||
|
||||
|
||||
// ToDo: add bool buildingOwnership
|
||||
|
||||
|
||||
QJsonObject toJsonObject() const;
|
||||
bool fromJsonObject(const QJsonObject &json);
|
||||
QByteArray toJson() const;
|
||||
bool fromJson(const QByteArray &json);
|
||||
|
||||
bool isEmpty() const;
|
||||
|
||||
// convenience:
|
||||
bool getLayerParameter(const QString &layername, LayerParameter& layerParameterOut) const;
|
||||
bool updateLayerParameter(const QString &layername, const LayerParameter& layerParameter);
|
||||
|
||||
|
||||
|
||||
};
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface of AbstractMapObject
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
// Own
|
||||
#include "situation_map_export.h"
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QMap>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
class Map;
|
||||
|
||||
/**
|
||||
* @brief The OverlayHandler class handles overlays produced by the PlanEditor.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT OverlayHandler
|
||||
{
|
||||
|
||||
public:
|
||||
OverlayHandler() = default; ///< Contructor
|
||||
virtual ~OverlayHandler() = default; ///< Destructor
|
||||
|
||||
static OverlayHandler *create(Map *map);
|
||||
|
||||
/*! \name Adding / Updating */
|
||||
//@{
|
||||
/**
|
||||
* @brief Add an Overlay.
|
||||
* @param key to associate the overlay with. Should not be less than 0.
|
||||
* @param name to use (displayname)
|
||||
* @param overlayContent to insert.
|
||||
* @param isSnapshot to ensure correct layer order.
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool setOverlay(int key, const QString &name, const QByteArray &overlayContent, bool isSnapshot = false) = 0;
|
||||
|
||||
virtual QByteArray content(int key) const = 0;
|
||||
|
||||
virtual double minScale(int key) const = 0;
|
||||
virtual bool setMinScale(int key, double minScale) = 0;
|
||||
|
||||
virtual double maxScale(int key) const = 0;
|
||||
virtual bool setMaxScale(int key, double maxScale) = 0;
|
||||
|
||||
virtual double opacity(int key) const = 0;
|
||||
virtual bool setOpacity(int key, double opacity) = 0;
|
||||
//@}
|
||||
|
||||
virtual bool reorderOverlays(const QVector<int> &orderOfIds) = 0;
|
||||
|
||||
/*! \name Visibility */
|
||||
//@{
|
||||
virtual bool setOverlayVisibility(int key, bool visibility) = 0;
|
||||
virtual bool overlayVisibility(int key) const = 0;
|
||||
//@}
|
||||
|
||||
/*! \name Removing */
|
||||
//@{
|
||||
/**
|
||||
* @brief Remove an Overlay
|
||||
* @param key to be remove()
|
||||
* @return True on success, otherwise false.
|
||||
*/
|
||||
virtual bool removeOverlay(int key) = 0;
|
||||
|
||||
virtual int removeAllOverlays() = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Retrieving */
|
||||
//@{
|
||||
virtual int overlayCount() const = 0;
|
||||
virtual QList<int> overlays() const = 0;
|
||||
virtual bool containsOverlay(int key) const = 0;
|
||||
// QString getOverlay(int key);
|
||||
//@}
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface for OverviewMapHandler
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "layer_factory.h"
|
||||
#include "situation_map_types.h"
|
||||
#include "operator_map_settings.h"
|
||||
|
||||
#include <Common/referenced.h>
|
||||
#include <Common/ref_pointer.h>
|
||||
#include <situation_map_export.h>
|
||||
|
||||
|
||||
// Qt
|
||||
|
||||
|
||||
// forward
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
// forward
|
||||
class Map;
|
||||
|
||||
/**
|
||||
* @brief The OverviewMapHandler class is able to create an OverviewMap.
|
||||
* By now, it´s possible to create an OverviewMap onto the (Main)Map.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT OverviewMapHandler
|
||||
{
|
||||
|
||||
public:
|
||||
/*! \name Construction, Destruction */
|
||||
//@{
|
||||
OverviewMapHandler() = default; ///< Contructor
|
||||
virtual ~OverviewMapHandler() = default; ///< Destructor
|
||||
|
||||
virtual void createBuiltInOverviewMap() = 0;
|
||||
virtual void removeBuiltInOverviewMap() = 0;
|
||||
|
||||
virtual QWidget *builtInOverviewMapWidget() = 0;
|
||||
|
||||
virtual void removeAll() = 0;
|
||||
//@}
|
||||
|
||||
};
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
|
||||
|
||||
+211
@@ -0,0 +1,211 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface-Implementation of Map
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "party_id_to_color_functor.h"
|
||||
|
||||
//Qt
|
||||
#include <qapplication.h>
|
||||
#include <qstyle.h>
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
|
||||
|
||||
PartyIdToColorFunctor::PartyIdToColorFunctor()
|
||||
: QObject()
|
||||
{
|
||||
int lightColorAlpha = 125;
|
||||
QColor col, lightColor;
|
||||
|
||||
col = lightColor = Qt::cyan; lightColor.setAlpha(lightColorAlpha);
|
||||
m_colorMap.insert(1, PartyData(QStringLiteral("Party-Cyan"), AdvancedSymbology::Role::Unknown, col, lightColor));
|
||||
|
||||
// col = lightColor = Qt::blue; lightColor.setAlpha(lightColorAlpha);
|
||||
// m_colorMap.insert(2, PartyData(QStringLiteral("Party-Blue"), AdvancedSymbology::Role::Friend, col, lightColor));
|
||||
|
||||
// col = lightColor = Qt::green; lightColor.setAlpha(lightColorAlpha);
|
||||
// m_colorMap.insert(3, PartyData(QStringLiteral("Party-Green"), AdvancedSymbology::Role::Unknown, col, lightColor));
|
||||
|
||||
// col = lightColor = Qt::red; lightColor.setAlpha(lightColorAlpha);
|
||||
// m_colorMap.insert(4, PartyData(QStringLiteral("Party-Red"), AdvancedSymbology::Role::HostileFaker, col, lightColor));
|
||||
|
||||
// col = lightColor = Qt::yellow; lightColor.setAlpha(lightColorAlpha);
|
||||
// m_colorMap.insert(5, PartyData(QStringLiteral("Party-Yellow"), AdvancedSymbology::Role::Unknown, col, lightColor));
|
||||
|
||||
|
||||
// as fallback:
|
||||
m_invalidPartyData.m_name = QLatin1Char('-');
|
||||
static const int pmSize = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize);
|
||||
QPixmap pm(pmSize, pmSize);
|
||||
pm.fill(Qt::transparent);
|
||||
m_invalidPartyData.m_icon = pm;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void PartyIdToColorFunctor::clear()
|
||||
{
|
||||
m_colorMap.clear();
|
||||
emit partyChanged(-1);
|
||||
}
|
||||
|
||||
void PartyIdToColorFunctor::setParty(int partyId, const PartyData &partyData)
|
||||
{
|
||||
auto &val = m_colorMap[partyId];
|
||||
if (val == partyData)
|
||||
return;
|
||||
val = partyData;
|
||||
|
||||
static const int pmSize = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize);
|
||||
QPixmap pm(pmSize, pmSize);
|
||||
pm.fill(partyData.m_color);
|
||||
val.m_icon = pm;
|
||||
|
||||
emit partyChanged(partyId);
|
||||
}
|
||||
|
||||
void PartyIdToColorFunctor::removeParty(int partyId)
|
||||
{
|
||||
if (!m_colorMap.contains(partyId))
|
||||
return;
|
||||
m_colorMap.remove(partyId);
|
||||
emit partyChanged(partyId);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void PartyIdToColorFunctor::setColorMap(const ColorMap &colorMap)
|
||||
{
|
||||
m_colorMap = colorMap;
|
||||
emit partyChanged(-1);
|
||||
}
|
||||
|
||||
PartyIdToColorFunctor::ColorMap PartyIdToColorFunctor::colorMap() const
|
||||
{
|
||||
return m_colorMap;
|
||||
}
|
||||
|
||||
QVector<int> PartyIdToColorFunctor::partyIds() const
|
||||
{
|
||||
QVector<int> ret;
|
||||
ret.reserve(m_colorMap.size());
|
||||
for (auto it = m_colorMap.begin(); it != m_colorMap.end(); ++it)
|
||||
ret += it.key();
|
||||
return ret;
|
||||
}
|
||||
|
||||
QVector<QColor> PartyIdToColorFunctor::partyColors(bool useLightColor) const
|
||||
{
|
||||
QVector<QColor> colVector;
|
||||
colVector.reserve(m_colorMap.size());
|
||||
for (const auto &item : m_colorMap)
|
||||
colVector.append(useLightColor ? item.m_lightColor : item.m_color);
|
||||
return colVector;
|
||||
}
|
||||
|
||||
PartyIdToColorFunctor::PartyData PartyIdToColorFunctor::partyId(int partyId) const
|
||||
{
|
||||
auto it = m_colorMap.find(partyId);
|
||||
if (it == m_colorMap.end())
|
||||
return m_invalidPartyData; // used at SituationMap::MapObjectModel::data (fill ComboBoxData/LtsWidgets::ComboboxFilterContent)
|
||||
|
||||
return it.value();
|
||||
}
|
||||
|
||||
QString PartyIdToColorFunctor::partyIdToName(int partyId) const
|
||||
{
|
||||
auto it = m_colorMap.find(partyId);
|
||||
if (it == m_colorMap.end())
|
||||
return QString();
|
||||
|
||||
const PartyData &pData = it.value();
|
||||
return pData.m_name;
|
||||
}
|
||||
|
||||
AdvancedSymbology::Role PartyIdToColorFunctor::partyIdToRole(int partyId, bool identityAssumed) const
|
||||
{
|
||||
auto it = m_colorMap.find(partyId);
|
||||
if (it == m_colorMap.end())
|
||||
return AdvancedSymbology::Role::Unknown;
|
||||
|
||||
const PartyData &pData = it.value();
|
||||
|
||||
if (identityAssumed)
|
||||
{
|
||||
switch (pData.m_role)
|
||||
{
|
||||
case AdvancedSymbology::Role::Unknown:
|
||||
return AdvancedSymbology::Role::Pending;
|
||||
case AdvancedSymbology::Role::Friend:
|
||||
return AdvancedSymbology::Role::AssumedFriend;
|
||||
case AdvancedSymbology::Role::HostileFaker:
|
||||
return AdvancedSymbology::Role::SuspectJoker;
|
||||
default:
|
||||
{
|
||||
// empty
|
||||
}
|
||||
} //switch
|
||||
}
|
||||
|
||||
return pData.m_role;
|
||||
}
|
||||
|
||||
QColor PartyIdToColorFunctor::partyIdToColor(int partyId, bool useLightColor) const
|
||||
{
|
||||
auto it = m_colorMap.find(partyId);
|
||||
if (it == m_colorMap.end())
|
||||
return Qt::cyan;
|
||||
|
||||
const PartyData &pData = it.value();
|
||||
return useLightColor ? pData.m_lightColor : pData.m_color;
|
||||
}
|
||||
|
||||
FillPattern PartyIdToColorFunctor::aesStateToPattern(AesEffectState aesState) const
|
||||
{
|
||||
switch (aesState)
|
||||
{
|
||||
case AesEffectState::Unknown:
|
||||
case AesEffectState::Removed:
|
||||
case AesEffectState::Expired:
|
||||
case AesEffectState::Error:
|
||||
return FillPattern::Null;
|
||||
|
||||
case AesEffectState::Paused:
|
||||
case AesEffectState::Created:
|
||||
return FillPattern::Vertical; // |
|
||||
case AesEffectState::Prepared:
|
||||
return FillPattern::BackwardDiagonal; // / BackwardDiagonal
|
||||
case AesEffectState::Activated:
|
||||
return FillPattern::Cross; // + Cross == Horizontal & Vertical
|
||||
|
||||
} // switch
|
||||
return FillPattern::Null;
|
||||
}
|
||||
|
||||
QString PartyIdToColorFunctor::PartyData::toString() const
|
||||
{
|
||||
return QStringLiteral(" name=%1 - role=%2 - m_color[argb]=%3 - lightColor[argb]=%4")
|
||||
.arg(m_name, 20)
|
||||
.arg(AdvancedSymbology::toString(m_role), 15)
|
||||
.arg(m_color.name(QColor::HexArgb), 10)
|
||||
.arg(m_lightColor.name(QColor::HexArgb), 10);
|
||||
}
|
||||
|
||||
void PartyIdToColorFunctor::toString(std::stringstream &stream) const
|
||||
{
|
||||
QMapIterator<int, PartyData> it(m_colorMap);
|
||||
while(it.hasNext())
|
||||
{
|
||||
it.next();
|
||||
stream << " partyId=" << QStringLiteral("%1").arg(it.key(), 2) << " -> " << it.value().toString() << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace SituationMap
|
||||
+143
@@ -0,0 +1,143 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface-Implementation of Map
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "abstract_effect_simulation.h"
|
||||
#include <Symbology/sidc_definitions.h>
|
||||
|
||||
// ESRI
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QColor>
|
||||
#include <QIcon>
|
||||
#include <QTimer>
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
/**
|
||||
* @brief The PartyIdToColorFunctor is a base class mapping from partyId
|
||||
* of the Simulation World to a specific color.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT PartyIdToColorFunctor : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
struct PartyData
|
||||
{
|
||||
explicit PartyData(const QString &name = QString(),
|
||||
const AdvancedSymbology::Role role = AdvancedSymbology::Role::Unknown,
|
||||
const QColor &color = QColor(),
|
||||
const QColor &lightColor = QColor())
|
||||
: m_name(name),
|
||||
m_role(role),
|
||||
m_color(color),
|
||||
m_lightColor(lightColor)
|
||||
{}
|
||||
PartyData(const QColor &color, const QColor &lightColor)
|
||||
: m_role(AdvancedSymbology::Role::Unknown),
|
||||
m_color(color),
|
||||
m_lightColor(lightColor)
|
||||
{}
|
||||
|
||||
bool operator==(const PartyData &o) const
|
||||
{
|
||||
return m_name == o.m_name &&
|
||||
m_role == o.m_role &&
|
||||
m_color == o.m_color &&
|
||||
m_lightColor == o.m_lightColor;
|
||||
}
|
||||
|
||||
QString toString() const;
|
||||
|
||||
|
||||
QString m_name;
|
||||
|
||||
AdvancedSymbology::Role m_role; // aka identity / affiliation
|
||||
|
||||
QColor m_color;
|
||||
QColor m_lightColor;
|
||||
|
||||
QIcon m_icon;
|
||||
|
||||
};
|
||||
|
||||
using ColorMap = QMap<int, PartyData>;
|
||||
|
||||
|
||||
public:
|
||||
/*! \name Construction, Destruction */
|
||||
//@{
|
||||
PartyIdToColorFunctor();
|
||||
virtual ~PartyIdToColorFunctor() = default;
|
||||
//@}
|
||||
|
||||
/*! \name Initialization, Administration*/
|
||||
//@{
|
||||
virtual void clear();
|
||||
virtual void setParty(int partyId, const PartyData &partyData);
|
||||
virtual void removeParty(int partyId);
|
||||
|
||||
|
||||
virtual void setColorMap(const ColorMap &colorMap);
|
||||
virtual ColorMap colorMap() const;
|
||||
|
||||
virtual QVector<int> partyIds() const;
|
||||
virtual QVector<QColor> partyColors(bool useLightColor = false) const;
|
||||
//@}
|
||||
|
||||
|
||||
/*! \name Get structure */
|
||||
//@{
|
||||
virtual PartyData partyId(int partyId) const;
|
||||
//@}
|
||||
|
||||
/*! \name Determine Name */
|
||||
//@{
|
||||
virtual QString partyIdToName(int partyId) const;
|
||||
//@}
|
||||
|
||||
/*! \name Determine Role (aka identity / affiliation) */
|
||||
//@{
|
||||
virtual AdvancedSymbology::Role partyIdToRole(int partyId, bool identityAssumed = false) const;
|
||||
//@}
|
||||
|
||||
/*! \name Determine Color */
|
||||
//@{
|
||||
virtual QColor partyIdToColor(int partyId, bool useLightColor = false) const;
|
||||
//@}
|
||||
|
||||
/*! \name Determine fillPattern */
|
||||
//@{
|
||||
virtual FillPattern aesStateToPattern(AesEffectState aesState) const;
|
||||
//@}
|
||||
|
||||
void toString(std::stringstream &stream) const;
|
||||
|
||||
|
||||
signals:
|
||||
void partyChanged(int partyId); ///< to update all (-1) or only map objects with given party id
|
||||
|
||||
private:
|
||||
ColorMap m_colorMap;
|
||||
|
||||
PartyData m_invalidPartyData;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
+158
@@ -0,0 +1,158 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface of PixelBasedTextBoxHandler
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
#include <GeometryModel/geometry_pixelTextBox.h>
|
||||
#include <situation_map_export.h>
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
#include <QPointF>
|
||||
|
||||
class QTextEdit;
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
static const char *const PBTB_ID_PROPERTY_NAME = "PBTB_ID_PROPERTY";
|
||||
|
||||
//
|
||||
// PBTB_ID - PixelBasedTextBox_Identifier
|
||||
//
|
||||
class SITUATIONMAP_EXPORT PBTB_ID
|
||||
{
|
||||
public:
|
||||
PBTB_ID() = default;
|
||||
~PBTB_ID() = default;
|
||||
|
||||
explicit PBTB_ID(int parentId, long uid = -1)
|
||||
: m_parentId(parentId), m_uid(uid)
|
||||
{}
|
||||
|
||||
void init()
|
||||
{
|
||||
m_parentId = -1; // >0 -> planFileId
|
||||
m_uid = -1;
|
||||
}
|
||||
|
||||
static long getNextId()
|
||||
{
|
||||
static long s_uid{0};
|
||||
++s_uid;
|
||||
return s_uid;
|
||||
}
|
||||
|
||||
bool isValid() const
|
||||
{
|
||||
return (m_uid > 0);
|
||||
}
|
||||
|
||||
QString toString() const
|
||||
{
|
||||
return QString(QStringLiteral("'parentId_%1:uid_%2'")).arg(m_parentId).arg(m_uid);
|
||||
}
|
||||
|
||||
static PBTB_ID fromString(QString str)
|
||||
{
|
||||
str.remove(QStringLiteral("'"));
|
||||
const QStringList &sl = str.split(QStringLiteral(":"));
|
||||
if (sl.size() != 2)
|
||||
return {};
|
||||
|
||||
PBTB_ID idRet;
|
||||
{
|
||||
QString temp = sl.first();
|
||||
QStringList sl2 = temp.split(QStringLiteral("_"));
|
||||
if (sl2.size() == 2)
|
||||
idRet.m_parentId = sl2.last().toInt();
|
||||
}
|
||||
{
|
||||
QString temp = sl.last();
|
||||
QStringList sl3 = temp.split(QStringLiteral("_"));
|
||||
if (sl3.size() == 2)
|
||||
idRet.m_uid = sl3.last().toLong();
|
||||
}
|
||||
return idRet;
|
||||
}
|
||||
|
||||
|
||||
bool operator==(const PBTB_ID &o) const
|
||||
{
|
||||
return m_parentId == o.m_parentId && m_uid == o.m_uid;
|
||||
}
|
||||
bool operator!=(const PBTB_ID &o) const
|
||||
{
|
||||
return !operator==(o);
|
||||
}
|
||||
|
||||
bool operator<(const PBTB_ID &o) const
|
||||
{
|
||||
if (m_parentId != o.m_parentId)
|
||||
return m_parentId < o.m_parentId;
|
||||
return m_uid < o.m_uid;
|
||||
}
|
||||
|
||||
|
||||
int m_parentId{-1} ; // >0 -> planFileId
|
||||
long m_uid{-1};
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @brief The PixelBasedTextBoxHandler class handles the create, modify and remove of pixel-based textboxes on the QGraphicsScene on top ot the ESRI layer.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT PixelBasedTextBoxHandler : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
using BaseClass = QObject;
|
||||
|
||||
public:
|
||||
PixelBasedTextBoxHandler() = default; ///< Contructor
|
||||
virtual ~PixelBasedTextBoxHandler() = default; ///< Destructor
|
||||
|
||||
PixelBasedTextBoxHandler(const PixelBasedTextBoxHandler &other) = delete;
|
||||
PixelBasedTextBoxHandler &operator=(PixelBasedTextBoxHandler &other) = delete;
|
||||
|
||||
virtual QTextEdit *createTextBox(PBTB_ID &pbtbIdRef, const PixelTextBoxData &ptbd, bool enableGeometryModifications = true) = 0;
|
||||
virtual QTextEdit *updateTextBox(const PBTB_ID &pbtbId, const PixelTextBoxData &ptbd) = 0;
|
||||
virtual QTextEdit *getTextBox(const PBTB_ID &pbtbId) = 0;
|
||||
|
||||
virtual QVector<PBTB_ID> getAllIdsOfParent(const PBTB_ID &pbtbId) const = 0;
|
||||
virtual PixelTextBoxData getPixelTextBoxData(const PBTB_ID &pbtbId) const = 0;
|
||||
|
||||
virtual void removeSelection() = 0;
|
||||
virtual bool setSelected(const PBTB_ID &pbtbId) = 0;
|
||||
|
||||
virtual bool removeTextBox(const PBTB_ID &pbtbId) = 0;
|
||||
virtual bool removeAllTextBoxesOfParent(int parentId) = 0;
|
||||
|
||||
Q_SIGNALS:
|
||||
void pixelBasedTextBoxDoubleClickEvent(SituationMap::PBTB_ID pbtbId);
|
||||
void pixelBasedTextBoxGeometryChanged(SituationMap::PBTB_ID pbtbId);
|
||||
void pixelBasedTextBoxRemoveRequestedEvent(SituationMap::PBTB_ID pbtbId);
|
||||
|
||||
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// output operator:
|
||||
//-----------------------------------------------------------------------------
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &, const PBTB_ID &);
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
Executable
+19
@@ -0,0 +1,19 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* point3D
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LtsUtilsCore/qpoint3d.h>
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
using Point3D = LtsUtils::QPoint3D; ///< x = lon ; y = lat , z = elevation/altitude in meters
|
||||
|
||||
} // namespace SituationMap
|
||||
Executable
+158
@@ -0,0 +1,158 @@
|
||||
/**
|
||||
**
|
||||
** @RDE_HEADER@
|
||||
** Definition of transient map objects for use while rubberbanding is done
|
||||
** $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 .........:
|
||||
**
|
||||
** 29.09.2015, JT : First edition for use with Qt5
|
||||
**
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
#include "abstract_map_object.h"
|
||||
|
||||
#include "line_style.h"
|
||||
#include "fill_style.h"
|
||||
|
||||
#include <QString>
|
||||
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
|
||||
|
||||
/**
|
||||
@class SIDC_Symbol SIDC_Symbol.h
|
||||
The class \c SIDC_Symbol creates a tactical symbol due a sidc code. In distinction to the class
|
||||
\c Participant the \c SIDC_Symbol is not limited to point features. The sidc implies the kind of
|
||||
geometry (point, polyline or polygon) of the symbol feature, the number of positions to construct the
|
||||
symbol and the way of interpreting the positions.
|
||||
|
||||
\see Participant
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT SidcSymbol : public virtual AbstractMapObject
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
@name Construction & Destruction
|
||||
@{
|
||||
*/
|
||||
SidcSymbol() : AbstractMapObject() {} // Workaround VS2015 bug "= default;" --> gives a crash here
|
||||
virtual ~SidcSymbol() = default;
|
||||
|
||||
SidcSymbol(const SidcSymbol &other) = delete;
|
||||
SidcSymbol &operator=(SidcSymbol &other) = delete;
|
||||
/** @} */
|
||||
|
||||
/** \name Positions
|
||||
* Set positions of the object. Could be either a single and multi point feature.
|
||||
*/
|
||||
//@{
|
||||
virtual PositionCont positions() const = 0;
|
||||
virtual void setPositions(const PositionCont &posCont) = 0;
|
||||
//@}
|
||||
|
||||
/** \name LineStyle
|
||||
* See AbstractMapObject for details.
|
||||
*/
|
||||
//@{
|
||||
virtual LineStyle lineStyle() const = 0;
|
||||
virtual LineStyle &rLineStyle() = 0;
|
||||
virtual void setLineStyle(const LineStyle &lineStyle) = 0;
|
||||
//@}
|
||||
|
||||
|
||||
/** \name FillStyle
|
||||
* See AbstractMapObject for details.
|
||||
*/
|
||||
//@{
|
||||
virtual FillStyle fillStyle() const = 0;
|
||||
virtual FillStyle &rFillStyle() = 0;
|
||||
virtual void setFillStyle(const FillStyle &FillStyle) = 0;
|
||||
//@}
|
||||
|
||||
/**
|
||||
* @name sidc
|
||||
* Returns the code of the symbol
|
||||
*/
|
||||
virtual const QString &sidc() const = 0;
|
||||
|
||||
/**
|
||||
* @name setSidc
|
||||
* Defines the code of the symbol. Alternatively the \c AbstractObject::symbol and \c AbstractObject::setSymbol functions can be used.
|
||||
* @see defineSymbol, AbstractObject::symbol, AbstractObject::setSymbol, SymbolData
|
||||
*/
|
||||
virtual void setSidc(const QString &) = 0;
|
||||
|
||||
/**
|
||||
* @name color
|
||||
* Provides the color of the symbol if set with \c setColor. Default is QColor(0,0,0,0)
|
||||
* @attention In current release using user defined colors for symbols are not implemented.
|
||||
* @see setColor
|
||||
*/
|
||||
virtual const QColor &color() const = 0;
|
||||
|
||||
/**
|
||||
* @name setColor
|
||||
* @brief Overrides the color setting of the symbol.
|
||||
* Generally the color setting is defined by sidc. With \c setColor this definition will be overwritten. Valid color values
|
||||
* have an alpha value greater than 0. Otherwise the sidc definition will be used. The default is QColor(0,0,0,0)
|
||||
* @attention In current release using user defined colors for symbols are not implemented.
|
||||
* @see color
|
||||
*/
|
||||
virtual void setColor(const QColor &color = QColor(0, 0, 0, 0)) = 0;
|
||||
|
||||
/**
|
||||
* @name attributeMap
|
||||
* Returns the attribute map of the symbol.
|
||||
*/
|
||||
virtual const QMap<QString, QVariant> &attributeMap() const = 0;
|
||||
|
||||
/**
|
||||
* @name setAttributeMap
|
||||
* Defines the attribute map of the symbol to support additional drawing attributes. An attribute is a pair of name and value.
|
||||
* Attributes are used to specify additional properties like width of a corridor or radius of a circle.
|
||||
* Alternatively the \c AbstractObject::symbol and \c AbstractObject::setSymbol functions can be used.
|
||||
* @see defineSymbol, AbstractObject::symbol, AbstractObject::setSymbol, SymbolData
|
||||
*/
|
||||
virtual void setAttributeMap(const QMap<QString, QVariant> &attrMap) = 0;
|
||||
|
||||
/**
|
||||
* @name defineSymbol
|
||||
* Convenience function to define a symbol
|
||||
* @attention In current release using user defined colors for symbols are not implemented. The color parameter is for further use only.
|
||||
* @see setSidc, setAttributeMap, setColor, AbstractObject::symbol, AbstractObject::setSymbol, SymbolData
|
||||
*/
|
||||
virtual void defineSymbol(const QString &sidc,
|
||||
const PositionCont &posCont,
|
||||
const QMap<QString, QVariant> &attrMap,
|
||||
const QColor &color = QColor(0, 0, 0, 0)) = 0;
|
||||
|
||||
}; /* SidcSymbol */
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
Executable
+109
@@ -0,0 +1,109 @@
|
||||
/*
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
**
|
||||
** @RDE_HEADER@
|
||||
** Implementation of base class for 2D rubberbands
|
||||
** $Id$
|
||||
** $HeadURL$
|
||||
** $Author$
|
||||
**
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
**
|
||||
** Hardware-Environment: Intel-PC
|
||||
** Software-Environment: Windows 7, Qt 5.x. ArcGISRuntimeQt 100.2
|
||||
**
|
||||
** Language ........: C++ 11
|
||||
**
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
**
|
||||
** Autor ...........: Nikolaus Hanekamp, SEDG, Tel. 2906
|
||||
** Jörg Turla, SPDG, Tel. 3132
|
||||
**
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
**
|
||||
** Notices .........:
|
||||
**
|
||||
** 01.02.2005, NH : Urversion
|
||||
** 15.05.2018, JT : adapting GeISiR source to SituationMap
|
||||
**
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <Map/abstract_map_object.h>
|
||||
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
class ElevationMap; // Forward declaration
|
||||
|
||||
|
||||
|
||||
class SITUATIONMAP_EXPORT SightFan: public virtual AbstractMapObject
|
||||
{
|
||||
public:
|
||||
|
||||
SightFan(const SightFan &) = delete; // copy constructor
|
||||
SightFan & operator = (const SightFan &) = delete; // assignment operator
|
||||
|
||||
SightFan() : AbstractMapObject() {;}
|
||||
|
||||
virtual ~SightFan() = default;
|
||||
|
||||
virtual void initFan( const QPointF ¢er
|
||||
, double centHat
|
||||
, double objHat
|
||||
, double radius
|
||||
, double innerRadius
|
||||
, double startAngle
|
||||
, double dAngle
|
||||
, unsigned int nrFans
|
||||
, double alpha ) = 0;
|
||||
|
||||
virtual void initFan( const Point3D ¢er
|
||||
, double objHat
|
||||
, double radius
|
||||
, double innerRadius
|
||||
, double startAngle
|
||||
, double dAngle
|
||||
, unsigned int nrFans
|
||||
, double alpha ) = 0;
|
||||
|
||||
virtual void setCenter(const QPointF ¢er) = 0;
|
||||
virtual void setCenter(const Point3D ¢er) = 0;
|
||||
virtual void setCenter(const QPointF ¢er, double centerHat ) = 0;
|
||||
|
||||
virtual void setCenterHat(double centerHat) = 0;
|
||||
virtual void setObjectHat(double objHat) = 0;
|
||||
|
||||
virtual void setRadius(double radius) = 0;
|
||||
virtual void setInnerRadius(double radius) = 0;
|
||||
virtual void setStartAngle(double startAngle) = 0;
|
||||
virtual void setdeltaAngle(double dAngle) = 0;
|
||||
virtual void setNoOfFans(double noFans) = 0;
|
||||
virtual void setAlpha(double alpha) = 0;
|
||||
|
||||
virtual QPointF center() const = 0;
|
||||
virtual double centerHat() const = 0;
|
||||
virtual double objectHat() const = 0;
|
||||
virtual double innerRadius() const = 0;
|
||||
virtual double radius() const = 0;
|
||||
virtual double startAngle() const = 0;
|
||||
virtual double dAngle() const = 0;
|
||||
virtual double alpha() const = 0;
|
||||
virtual unsigned int noOfFans() const = 0;
|
||||
|
||||
virtual void move(const QPointF ¢er) = 0;
|
||||
|
||||
virtual void move(const QPointF ¢er, double centHat, double objHat) = 0;
|
||||
|
||||
virtual void show() = 0;
|
||||
virtual void setFanColor(const QColor & visible, const QColor &invisible, const QColor &undefined) = 0;
|
||||
virtual void setFanColorMark(float colMult) = 0;
|
||||
|
||||
}; // SightFan
|
||||
|
||||
} // SituationMap
|
||||
|
||||
+163
@@ -0,0 +1,163 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
[license]
|
||||
licenseString = "runtimestandard,1000,rud000004959,none,7RC63PJPXJPH003AD234" ;# Bayanat Helpdesk, 21.07.2019
|
||||
|
||||
1\extensionString = "Exten1"
|
||||
size=0
|
||||
|
||||
[esriNetworkCache]
|
||||
enabled = 1 ;# enabled: 1=on ; 0=off, since V100.7.0
|
||||
|
||||
[symbology]
|
||||
type = "MIL2525D" ;# None | MIL2525D | MIL2525C | APP6B
|
||||
extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
# EXCGEO01 (192.168.133.90) -> CCSAWS01
|
||||
# 1\url = "URL[#<minScale>:<maxScale>]"
|
||||
#Example: >>> 1\url = "http://HOSTNAME_FQDN/arcgis/rest/services/Folder/Svcname/MapServer#minScale:maxScale" <<<
|
||||
#
|
||||
#if the projection matches, tpk file and/or tile cache folder (win only) are supported:
|
||||
#1\url = "file:Topographic.tpk#-1:125" ;# -> /usr/share/arcgis/resources/Topographic.tpk
|
||||
#2\url = "file:///usr/share/arcgis/resources/World_Topo_Map.tpk#-1:125"
|
||||
# WINDOWS 1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#
|
||||
#For factory
|
||||
1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/AHTC/AlHamra_Aerial_1m00_32639/MapServer#-1:125" ;# Since 2019-04-05
|
||||
1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/AHTC/AlHamra_Aerial_0m21_PreDelivery_32639/MapServer#-1:125" ;# Since 2019-05-08
|
||||
|
||||
|
||||
#For on-site
|
||||
#1\url = "http://EXCGEO02/arcgis/rest/services/AHTC/2019_06_17_AHTC_CTC_Topo_2016_32639/MapServer#-1:125" ;# Since 2019-06
|
||||
#2\url = "http://EXCGEO02/arcgis/rest/services/AHTC/2019_06_17_AHTC_CTC_Aerial_2016_32639/MapServer#-1:125" ;# Since 2019-06
|
||||
#3\url = "http://EXCGEO02/arcgis/rest/services/AHTC/AlHamra_Aerial_0m21_PreDelivery_32639/MapServer#-1:125" ;# Since 2019-06
|
||||
|
||||
#TileCacheFolder
|
||||
1\url = "file:TileCacheFolder/AHTC/AHTC_2019_06_17_AHTC_CTC_Topo_2016_32639/AHTC_CTC_Topogaphic#-1:125"
|
||||
2\url = "file:TileCacheFolder/AHTC/AHTC_2019_06_17_AHTC_CTC_Aerial_2016_32639/AHTC_CTC_Aerial#-1:125"
|
||||
3\url = "file:TileCacheFolder/AHTC/AHTC_AlHamra_Aerial_0m21_PreDelivery_32639/Al Hamra Aerial 0m21#-1:125"
|
||||
|
||||
#For on-site - windows
|
||||
# todo
|
||||
|
||||
size=3
|
||||
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk')
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
#For factory
|
||||
1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/AHTC/AlHamra_Aerial_1m00_WebMerc/MapServer#-1:25" ;# Since 2019-04-05
|
||||
1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/AHTC/AlHamra_Aerial_0m21_PreDelivery_WebMerc/MapServer#-1:25" ;# Since 2019-05-08
|
||||
|
||||
#For on-site
|
||||
#1\url = "http://EXCGEO02/arcgis/rest/services/AHTC/2019_06_17_AHTC_CTC_Topo_2016_WebMerc/MapServer#-1:125" ;# Since 2019-06
|
||||
#2\url = "http://EXCGEO02/arcgis/rest/services/AHTC/2019_06_17_AHTC_CTC_Aerial_2016_WebMerc/MapServer#-1:125" ;# Since 2019-06
|
||||
#3\url = "http://EXCGEO02/arcgis/rest/services/AHTC/AlHamra_Aerial_0m21_PreDelivery_WebMerc/MapServer#-1:125" ;# Since 2019-06
|
||||
|
||||
#For on-site - windows
|
||||
# todo
|
||||
|
||||
#TileCacheFolder
|
||||
1\url = "file:TileCacheFolder/AHTC/AHTC_2019_06_17_AHTC_CTC_Topo_2016_WebMerc/AHTC_CTC_Topogaphic#-1:125"
|
||||
2\url = "file:TileCacheFolder/AHTC/AHTC_2019_06_17_AHTC_CTC_Aerial_2016_WebMerc/AHTC_CTC_Aerial#-1:125"
|
||||
3\url = "file:TileCacheFolder/AHTC/AHTC_AlHamra_Aerial_0m21_PreDelivery_WebMerc/Al Hamra Aerial 0m21#-1:125"
|
||||
4\url = "file:slpk/2022-05-23_AHTC-Bridges_ret_geotifcp-alex.tif#-1:125" ;# according SPD-slpk with bridges
|
||||
size=4
|
||||
|
||||
|
||||
[sceneObjectUrls]
|
||||
# 1\url = "URL[#<altitudeOffset>]"
|
||||
#Example: >>> 1\url = "file:AHTC_LOW.slpk#0.3" <<<
|
||||
1\url = "file:AHTC_LOW.slpk#0.5"
|
||||
size=1
|
||||
|
||||
[elevationUrls]
|
||||
# LZW-Compression is ok for Esri-Scene & ElevationMap
|
||||
#Example: >>> 1\url = "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" <<<
|
||||
#Example: >>> 1\url = "file:srtm_38_02.tif" <<< -> /usr/share/arcgis/resources/elevation/srtm_38_02.tif
|
||||
#Example: >>> 1\url = "file:///shd/CTC/TOOLS/Bremen_Elevation/srtm_38_02.tif" <<<
|
||||
|
||||
#1\url = "file:alhamra-dtm-PreDelivery.tif" ;# preDelivery - 2019-05-28
|
||||
|
||||
1\url = "file:Elevation.tif" ;# BFE, ~30m
|
||||
2\url = "file:AHTC_utm_dgm_surface_wgs84.tif" ;# Z&M, XY converted to WGS84 (ArcGIS Pro)
|
||||
size=2
|
||||
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Relative"
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Dynamic:Draped"
|
||||
7\operationalLayer = "Participants:Dynamic:Relative"
|
||||
8\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=12
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
center = "39RXG4400060000" ;# AHTC
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 30000 ;# 90000 -> Bremen ; 7000000 -> NorthGermany
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 70000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
[license]
|
||||
licenseString = "runtimestandard,1000,rud000004959,none,7RC63PJPXJPH003AD234" ;# Bayanat Helpdesk, 21.07.2019
|
||||
|
||||
1\extensionString = ""
|
||||
size=0
|
||||
|
||||
[esriNetworkCache]
|
||||
enabled = 1 ;# enabled: 1=on ; 0=off, since V100.7.0
|
||||
|
||||
[symbology]
|
||||
type = "APP6D" ;# None | MIL2525D | MIL2525C | APP6B | APP6D
|
||||
extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
#For on-site - windows
|
||||
1\url = "file:AHTC_2019_06_17_AHTC_CTC_Topo_2016_32639/AHTC_CTC_Topogaphic#-1:125"
|
||||
1\name = "AHTC Topographic"
|
||||
2\url ="file:AHTC_2019_06_17_AHTC_CTC_Aerial_2016_32639/AHTC_CTC_Aerial#-1:125"
|
||||
2\name = "AHTC Aerial"
|
||||
3\url = "file:AHTC_AlHamra_Aerial_0m21_PreDelivery_32639/Al Hamra Aerial 0m21#-1:125"
|
||||
3\name = "AlHamra Aerial"
|
||||
size=3
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk')
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
#For on-site - windows
|
||||
1\url = "file:AHTC_2019_06_17_AHTC_CTC_Topo_2016_WebMerc/AHTC_CTC_Topogaphic#-1:125"
|
||||
1\name = "AHTC Topographic"
|
||||
2\url = "file:AHTC_2019_06_17_AHTC_CTC_Aerial_2016_WebMerc/AHTC_CTC_Aerial#-1:125"
|
||||
2\name = "AHTC Aerial"
|
||||
3\url = "file:AHTC_AlHamra_Aerial_0m21_PreDelivery_WebMerc/Al Hamra Aerial 0m21#-1:125"
|
||||
3\name = "AlHamra Aerial"
|
||||
4\url = "file:2022-05-23_AHTC-Bridges_ret_geotifcp-alex.tif#-1:125" ;# according SPD-slpk with bridges
|
||||
4\name = "AlHamra Aerial NoBridges"
|
||||
size=4
|
||||
|
||||
[sceneObjectUrls]
|
||||
# 1\url = "URL[#<altitudeOffset>]"
|
||||
#Example: >>> 1\url = "file:AHTC_LOW.slpk#0.3" <<<
|
||||
1\url = "file:AHTC_LOW.slpk#0.5"
|
||||
size=1
|
||||
|
||||
[elevationUrls]
|
||||
1\url = "file:Elevation.tif" ;# BFE, ~30m
|
||||
2\url = "file:AHTC_utm_dgm_surface_wgs84.tif" ;# Z&M, XY converted to WGS84 (ArcGIS Pro)
|
||||
size=2
|
||||
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Relative" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget)
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Dynamic:Draped"
|
||||
7\operationalLayer = "Participants:Dynamic:Relative"
|
||||
8\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=12
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
#center = "32UMD9307078331" ;#QPointF(93070, 78331) -> BT56 - Bremen
|
||||
center = "32UPD7671618433" ;#QPointF(76716, 18433) -> BT39 (Schulgebaeude2b) - Schnoeggersburg
|
||||
center = "39RXG4344459777"
|
||||
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 4000 ;# 90000 -> Bremen ; 7000000 -> NorthGermany
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 70000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
+177
@@ -0,0 +1,177 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
[license]
|
||||
licenseString = "runtimestandard,1000,rud000189203,none,FAYRMD17J18S6HAZ4078" ;# 14.03.19, Fr. Jonischkeit: Aus 25er Pack für RME, bis Febr; also für Demo etc.
|
||||
|
||||
1\extensionString = "Exten1"
|
||||
size=0
|
||||
|
||||
[esriNetworkCache]
|
||||
enabled = 1 ;# enabled: 1=on ; 0=off, since V100.7.0
|
||||
|
||||
[symbology]
|
||||
type = "APP6D" ;# None MIL2525D MIL2525C APP6B APP6D
|
||||
extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
# EXCGEO01 (192.168.133.90) -> CCSAWS01
|
||||
# 1\url = "URL[#<minScale>:<maxScale>]"
|
||||
#Example: >>> 1\url = "http://HOSTNAME_FQDN/arcgis/rest/services/Folder/Svcname/MapServer#minScale:maxScale" <<<
|
||||
#
|
||||
#if the projection matches, tpk file and/or tile cache folder (win only) are supported:
|
||||
#1\url = "file:Topographic.tpk#-1:125" ;# -> /usr/share/arcgis/resources/Topographic.tpk
|
||||
#2\url = "file:///usr/share/arcgis/resources/World_Topo_Map.tpk#-1:125"
|
||||
# WINDOWS 1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#
|
||||
|
||||
1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Norddeutschland/Norddeutschland_32632/MapServer#-1:125" ;# Since 2017-08-25
|
||||
2\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/Hemelingen_TIF_32632/MapServer" ;# Since 2017-08-25
|
||||
2\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenHemelingenAerialGeoAmt_32632/MapServer#-1:125" ;# Since 2017-12-12
|
||||
3\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenWerkAerialDrone_32632/MapServer#-1:125" ;# Since 2017-12-12
|
||||
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/AHTC/AHTC_32639/MapServer"
|
||||
|
||||
#1\url = "http://EXCGEO01:9090/geoserver/gwc/service/tms/1.0.0/workspace1:Norddeutschland_UTM@EPSG:32632@png"
|
||||
#2\url = "http://EXCGEO01:6080/arcgis/rest/services/HemelingenRDE/MapServer"
|
||||
#3\url = "http://excgeo01:9090/geoserver/gwc/service/tms/1.0.0/Salchau%3ASalchau_overview@EPSG%3A32632@png"
|
||||
#4\url = "http://excgeo01:9090/geoserver/gwc/service/tms/1.0.0/Salchau%3ASalchau@EPSG%3A32632@png"
|
||||
|
||||
#3\url = "http://EXCGEO02/arcgis/rest/services/SampleWorldCities/MapServer" ;# 'SampleWorldCities' = EsriBuiltIn-Service (->ArcGISMapImageLayer)
|
||||
|
||||
### arcgisonline
|
||||
#1\url = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer" ;# == Basemap::topographic
|
||||
#2\url = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"
|
||||
#3\url = "http://server.arcgisonline.com/arcgis/rest/services/Ocean_Basemap/MapServer"
|
||||
|
||||
1\url = "file:TilePackage/Bremen/Norddeutschland_osm_32632.tpk#-1:125"
|
||||
size=1
|
||||
|
||||
# Consulting:
|
||||
# http://192.168.133.88:6080/arcgis/rest/services/Norddeutschland_Osm/MapServer
|
||||
# ^^
|
||||
# http://192.168.133.90:6080/arcgis/rest/services/BremenGeoTiffUTM/MapServer
|
||||
#
|
||||
# http://192.168.133.90:9090/geoserver/gwc/service/tms/1.0.0/workspace1:Norddeutschland_UTM@EPSG:32632@png
|
||||
# http://192.168.133.90:9090/geoserver/gwc/service/tms/1.0.0/Bremen:Topo_Bremen@EPSG:32632@png
|
||||
# http://192.168.133.90:9090/geoserver/gwc/service/tms/1.0.0/Bremen:Aerial_Hemelingen@EPSG:32632@png
|
||||
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk', 'Bremen_RME_32632.tpk')
|
||||
#localMapFile = "World_Topo_Map.tpk"
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/Hemelingen_TIF_WebMerc/MapServer"
|
||||
|
||||
1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Norddeutschland/Norddeutschland_WebMerc/MapServer#0:125" ;# Since 2017-08-25
|
||||
2\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/Hemelingen_TIF_WebMerc/MapServer#0:125" ;# Since 2017-08-25
|
||||
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/AHTC/AHTC_WebMerc_2/MapServer"
|
||||
#1\url = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"
|
||||
#1\url = "https://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer" ;# == Basemap::topographic
|
||||
|
||||
1\url = "file:TilePackage/Bremen/Norddeutschland_osm_WebMerc17.tpk#0:125"
|
||||
size=1
|
||||
|
||||
|
||||
[sceneObjectUrls]
|
||||
# 1\url = "URL[#<altitudeOffset>]"
|
||||
#Example: >>> 1\url = "file:AHTC_LOW.slpk#0.3" <<<
|
||||
#Brest
|
||||
#1\url = "http://scene.arcgis.com/arcgis/rest/services/Hosted/Buildings_Brest/SceneServer/layers/0" ;# Brest/France
|
||||
#1\url = "http://scene.arcgis.com/arcgis/rest/services/Hosted/Buildings_Brest/SceneServer/layers" ;# Brest/France
|
||||
#1\url = "http://tiles.arcgis.com/tiles/P3ePLMYs2RVChkJx/arcgis/rest/services/Buildings_Brest/SceneServer/layers/0" ;# Brest/France from Luke, no textures?
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Hosted/BT_56_11/SceneServer"
|
||||
1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Hosted/BT56_rev576/SceneServer" ;# Since 2017-08-25
|
||||
1\url = "file:BT_56_UTM_EPSG_25832.slpk"
|
||||
1\url = "file:GUEZ_EPSG3857.slpk" ;# Since 2019-03-26
|
||||
size=1
|
||||
|
||||
[elevationUrls]
|
||||
#Example: >>> 1\url = "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" <<<
|
||||
#Example: >>> 1\url = "file:srtm_38_02.tif" <<< -> /usr/share/arcgis/resources/elevation/srtm_38_02.tif
|
||||
#Example: >>> 1\url = "file:///shd/CTC/TOOLS/Bremen_Elevation/srtm_38_02.tif" <<<
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenElevation/ImageServer"
|
||||
1\url = "file:srtm_38_02.tif" ;# srtm_38_02.tif -> Bremen, 50m
|
||||
size=1
|
||||
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Draped" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget), draped for fillPattern
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Static:Draped" ;# switch to Static (NLDEVCTRL-692 'Beheben des Speicher(-leck) Problems')
|
||||
7\operationalLayer = "AESCentral:Dynamic:Draped" ;# 3D-AreaEffectSimulation, draped, SubLayer 'GraphicsLayer_3D_Absolute' is absolute
|
||||
8\operationalLayer = "Participants:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
13\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=13
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
center = "32UMD9307078331" ;#QPointF(93070, 78331) -> BT56 - Bremen
|
||||
#center = "32UMD9275080525" ;#QPointF(92750, 80525) -> Rennplatz - Bremen
|
||||
#center = "39RXG4400060000" ;# AHTC
|
||||
#center = "30UUU8935659700" ;# 30UUU9100060500 -> Brest, Chateau
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 90000 ;# 90000 -> Bremen ; 7000000 -> NorthGermany
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 70000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
#viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
viewshedUrl = "" ;# // SightFan -> not necessary
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
@@ -0,0 +1,155 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
[license]
|
||||
licenseString = "runtimestandard,1000,rud000189203,none,FAYRMD17J18S6HAZ4078" ;# 14.03.19, Fr. Jonischkeit: Aus 25er Pack für RME, bis Febr; also für Demo etc.
|
||||
|
||||
1\extensionString = "Exten1"
|
||||
size=0
|
||||
|
||||
[esriNetworkCache]
|
||||
enabled = 1 ;# enabled: 1=on ; 0=off, since V100.7.0
|
||||
|
||||
[symbology]
|
||||
type = "APP6D" ;# None MIL2525D MIL2525C APP6B APP6D
|
||||
extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
# EXCGEO01 (192.168.133.90) -> CCSAWS01
|
||||
# 1\url = "URL[#<minScale>:<maxScale>]"
|
||||
#Example: >>> 1\url = "http://HOSTNAME_FQDN/arcgis/rest/services/Folder/Svcname/MapServer#minScale:maxScale" <<<
|
||||
#
|
||||
#if the projection matches, tpk file and/or tile cache folder (win only) are supported:
|
||||
#1\url = "file:Topographic.tpk#-1:125" ;# -> /usr/share/arcgis/resources/Topographic.tpk
|
||||
#2\url = "file:///usr/share/arcgis/resources/World_Topo_Map.tpk#-1:125"
|
||||
# WINDOWS 1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#
|
||||
|
||||
1\url = "file:TilePackage/Finland/2025-03-04_Finland_Pohjankagas_Topo_1m_32634.tpk#-1:125"
|
||||
2\url = "file:TilePackage/Finland/2025-03-04_Finland_Pohjankagas_Aerial_0m5_32634.tpk#-1:125"
|
||||
size=2
|
||||
|
||||
# Consulting:
|
||||
# http://192.168.133.88:6080/arcgis/rest/services/Norddeutschland_Osm/MapServer
|
||||
# ^^
|
||||
# http://192.168.133.90:6080/arcgis/rest/services/BremenGeoTiffUTM/MapServer
|
||||
#
|
||||
# http://192.168.133.90:9090/geoserver/gwc/service/tms/1.0.0/workspace1:Norddeutschland_UTM@EPSG:32632@png
|
||||
# http://192.168.133.90:9090/geoserver/gwc/service/tms/1.0.0/Bremen:Topo_Bremen@EPSG:32632@png
|
||||
# http://192.168.133.90:9090/geoserver/gwc/service/tms/1.0.0/Bremen:Aerial_Hemelingen@EPSG:32632@png
|
||||
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk', 'Bremen_RME_32632.tpk')
|
||||
#localMapFile = "World_Topo_Map.tpk"
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/Hemelingen_TIF_WebMerc/MapServer"
|
||||
|
||||
1\url = "file:TilePackage/Finland/2025-03-04_Finland_Pohjankagas_Topo_1m_WebMerc.tpk#-1:125"
|
||||
2\url = "file:TilePackage/Finland/2025-03-04_Finland_Pohjankagas_Aerial_0m5_WebMerc.tpk#-1:125"
|
||||
size=2
|
||||
|
||||
[sceneObjectUrls]
|
||||
# 1\url = "URL[#<altitudeOffset>]"
|
||||
#Example: >>> 1\url = "file:AHTC_LOW.slpk#0.3" <<<
|
||||
#Brest
|
||||
#1\url = "http://scene.arcgis.com/arcgis/rest/services/Hosted/Buildings_Brest/SceneServer/layers/0" ;# Brest/France
|
||||
#1\url = "http://scene.arcgis.com/arcgis/rest/services/Hosted/Buildings_Brest/SceneServer/layers" ;# Brest/France
|
||||
#1\url = "http://tiles.arcgis.com/tiles/P3ePLMYs2RVChkJx/arcgis/rest/services/Buildings_Brest/SceneServer/layers/0" ;# Brest/France from Luke, no textures?
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Hosted/BT_56_11/SceneServer"
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Hosted/BT56_rev576/SceneServer" ;# Since 2017-08-25
|
||||
#1\url = "file:BT_56_UTM_EPSG_25832.slpk"
|
||||
#1\url = "file:GUEZ_EPSG3857.slpk" ;# Since 2019-03-26
|
||||
size=0
|
||||
|
||||
[elevationUrls]
|
||||
#Example: >>> 1\url = "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" <<<
|
||||
#Example: >>> 1\url = "file:srtm_38_02.tif" <<< -> /usr/share/arcgis/resources/elevation/srtm_38_02.tif
|
||||
#Example: >>> 1\url = "file:///shd/CTC/TOOLS/Bremen_Elevation/srtm_38_02.tif" <<<
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenElevation/ImageServer"
|
||||
1\url = "file:2025-03-06_Finland-Pohjankagas_elevation.tif"
|
||||
size=1
|
||||
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Draped" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget), draped for fillPattern
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Static:Draped" ;# switch to Static (NLDEVCTRL-692 'Beheben des Speicher(-leck) Problems')
|
||||
7\operationalLayer = "AESCentral:Dynamic:Draped" ;# 3D-AreaEffectSimulation, draped, SubLayer 'GraphicsLayer_3D_Absolute' is absolute
|
||||
8\operationalLayer = "Participants:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
13\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=13
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
center = "32UMD9307078331" ;#QPointF(93070, 78331) -> BT56 - Bremen
|
||||
center = "34VEP7780067500" ;#34 V EP 68500 55000 -> 2025 Finland Pohjankagas
|
||||
|
||||
|
||||
#center = "32UMD9275080525" ;#QPointF(92750, 80525) -> Rennplatz - Bremen
|
||||
#center = "39RXG4400060000" ;# AHTC
|
||||
#center = "30UUU8935659700" ;# 30UUU9100060500 -> Brest, Chateau
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 90000 ;# 90000 -> Bremen ; 7000000 -> NorthGermany
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 70000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
#viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
viewshedUrl = "" ;# // SightFan -> not necessary
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
@@ -0,0 +1,158 @@
|
||||
# $Id: situation_map_finland_pohjankagas.ini 64630 2025-03-07 08:12:36Z thoden $
|
||||
# $HeadURL: svn://slssvn/TDS/branches/product/devel/trunk/Lts/Viewer/SituationMap/Map/situation_map_finland_pohjankagas.ini $
|
||||
# $Author: thoden $
|
||||
|
||||
[license]
|
||||
licenseString = "runtimestandard,1000,rud000189203,none,FAYRMD17J18S6HAZ4078" ;# 14.03.19, Fr. Jonischkeit: Aus 25er Pack für RME, bis Febr; also für Demo etc.
|
||||
|
||||
1\extensionString = "Exten1"
|
||||
size=0
|
||||
|
||||
[esriNetworkCache]
|
||||
enabled = 1 ;# enabled: 1=on ; 0=off, since V100.7.0
|
||||
|
||||
[symbology]
|
||||
type = "APP6D" ;# None MIL2525D MIL2525C APP6B APP6D
|
||||
extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
# EXCGEO01 (192.168.133.90) -> CCSAWS01
|
||||
# 1\url = "URL[#<minScale>:<maxScale>]"
|
||||
#Example: >>> 1\url = "http://HOSTNAME_FQDN/arcgis/rest/services/Folder/Svcname/MapServer#minScale:maxScale" <<<
|
||||
#
|
||||
#if the projection matches, tpk file and/or tile cache folder (win only) are supported:
|
||||
#1\url = "file:Topographic.tpk#-1:125" ;# -> /usr/share/arcgis/resources/Topographic.tpk
|
||||
#2\url = "file:///usr/share/arcgis/resources/World_Topo_Map.tpk#-1:125"
|
||||
# WINDOWS 1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#
|
||||
|
||||
1\url = "file:TilePackage/Finland/2025-04-04_Finland_Pohjankagas_overview_BW_Aerial_2m_32634.tpk#-1:125"
|
||||
2\url = "file:TilePackage/Finland/2025-04-04_Finland_Pohjankagas_BW_Topo_1m_32634.tpk#-1:125"
|
||||
3\url = "file:TilePackage/Finland/2025-04-04_Finland_Pohjankagas_BW_Aerial_1m_32634.tpk#-1:125"
|
||||
size=3
|
||||
|
||||
|
||||
# Consulting:
|
||||
# http://192.168.133.88:6080/arcgis/rest/services/Norddeutschland_Osm/MapServer
|
||||
# ^^
|
||||
# http://192.168.133.90:6080/arcgis/rest/services/BremenGeoTiffUTM/MapServer
|
||||
#
|
||||
# http://192.168.133.90:9090/geoserver/gwc/service/tms/1.0.0/workspace1:Norddeutschland_UTM@EPSG:32632@png
|
||||
# http://192.168.133.90:9090/geoserver/gwc/service/tms/1.0.0/Bremen:Topo_Bremen@EPSG:32632@png
|
||||
# http://192.168.133.90:9090/geoserver/gwc/service/tms/1.0.0/Bremen:Aerial_Hemelingen@EPSG:32632@png
|
||||
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk', 'Bremen_RME_32632.tpk')
|
||||
#localMapFile = "World_Topo_Map.tpk"
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/Hemelingen_TIF_WebMerc/MapServer"
|
||||
|
||||
1\url = "file:TilePackage/Finland/2025-04-04_Finland_Pohjankagas_overview_BW_Aerial_2m_WebMerc.tpk#-1:125"
|
||||
2\url = "file:TilePackage/Finland/2025-04-04_Finland_Pohjankagas_BW_Topo_1m_WebMerc.tpk#-1:125"
|
||||
3\url = "file:TilePackage/Finland/2025-04-04_Finland_Pohjankagas_BW_Aerial_1m_WebMerc.tpk#-1:125"
|
||||
size=3
|
||||
|
||||
[sceneObjectUrls]
|
||||
# 1\url = "URL[#<altitudeOffset>]"
|
||||
#Example: >>> 1\url = "file:AHTC_LOW.slpk#0.3" <<<
|
||||
#Brest
|
||||
#1\url = "http://scene.arcgis.com/arcgis/rest/services/Hosted/Buildings_Brest/SceneServer/layers/0" ;# Brest/France
|
||||
#1\url = "http://scene.arcgis.com/arcgis/rest/services/Hosted/Buildings_Brest/SceneServer/layers" ;# Brest/France
|
||||
#1\url = "http://tiles.arcgis.com/tiles/P3ePLMYs2RVChkJx/arcgis/rest/services/Buildings_Brest/SceneServer/layers/0" ;# Brest/France from Luke, no textures?
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Hosted/BT_56_11/SceneServer"
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Hosted/BT56_rev576/SceneServer" ;# Since 2017-08-25
|
||||
#1\url = "file:BT_56_UTM_EPSG_25832.slpk"
|
||||
#1\url = "file:GUEZ_EPSG3857.slpk" ;# Since 2019-03-26
|
||||
size=0
|
||||
|
||||
[elevationUrls]
|
||||
#Example: >>> 1\url = "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" <<<
|
||||
#Example: >>> 1\url = "file:srtm_38_02.tif" <<< -> /usr/share/arcgis/resources/elevation/srtm_38_02.tif
|
||||
#Example: >>> 1\url = "file:///shd/CTC/TOOLS/Bremen_Elevation/srtm_38_02.tif" <<<
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenElevation/ImageServer"
|
||||
1\url = "file:2025-03-06_Finland-Pohjankagas_elevation.tif"
|
||||
size=1
|
||||
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Draped" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget), draped for fillPattern
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Static:Draped" ;# switch to Static (NLDEVCTRL-692 'Beheben des Speicher(-leck) Problems')
|
||||
7\operationalLayer = "AESCentral:Dynamic:Draped" ;# 3D-AreaEffectSimulation, draped, SubLayer 'GraphicsLayer_3D_Absolute' is absolute
|
||||
8\operationalLayer = "Participants:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
13\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=13
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
center = "32UMD9307078331" ;#QPointF(93070, 78331) -> BT56 - Bremen
|
||||
center = "34VEP7780067500" ;#34 V EP 68500 55000 -> 2025 Finland Pohjankagas
|
||||
|
||||
|
||||
#center = "32UMD9275080525" ;#QPointF(92750, 80525) -> Rennplatz - Bremen
|
||||
#center = "39RXG4400060000" ;# AHTC
|
||||
#center = "30UUU8935659700" ;# 30UUU9100060500 -> Brest, Chateau
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 90000 ;# 90000 -> Bremen ; 7000000 -> NorthGermany
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 70000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
#viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
viewshedUrl = "" ;# // SightFan -> not necessary
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
+160
@@ -0,0 +1,160 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
[license]
|
||||
licenseString = "runtimestandard,1000,rud000189203,none,A3C63PJPXMLDLMZ59123" ;# ESRI-BOS-Service, 05.11.2018
|
||||
|
||||
1\extensionString = ""
|
||||
size=0
|
||||
|
||||
[esriNetworkCache]
|
||||
enabled = 1 ;# enabled: 1=on ; 0=off, since V100.7.0
|
||||
|
||||
[symbology]
|
||||
type = "APP6D" ;# None | MIL2525D | MIL2525C | APP6B | APP6D
|
||||
extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
# 1\url = "URL[#<minScale>:<maxScale>]"
|
||||
#Example: >>> 1\url = "http://HOSTNAME_FQDN/arcgis/rest/services/Folder/Svcname/MapServer#minScale:maxScale" <<<
|
||||
#
|
||||
#if the projection matches, tpk file and/or tile cache folder (win only) are supported:
|
||||
#1\url = "file:Topographic.tpk#-1:125" ;# -> /usr/share/arcgis/resources/Topographic.tpk
|
||||
#2\url = "file:///usr/share/arcgis/resources/World_Topo_Map.tpk#-1:125"
|
||||
# WINDOWS 1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#
|
||||
#For factory
|
||||
#1\url = "http://ecvmgeo02/arcgis/rest/services/Norddeutschland/Norddeutschland_32632/MapServer#-1:125" ;# Since 2017-08-29
|
||||
#2\url = "http://ecvmgeo02/arcgis/rest/services/Bremen/Hemelingen_TIF_32632/MapServer#-1:125" ;# Since 2017-08-29
|
||||
|
||||
#For on-site
|
||||
1\url = "http://ecvmgeo02/arcgis/rest/services/Altmark/Altmark_Topo_2m5_32632_2018/MapServer#-1:125" ;# Since 2019-09-24
|
||||
2\url = "http://ecvmgeo02/arcgis/rest/services/Altmark/Altmark_Aerial_32632_2017/MapServer#-1:125" ;# Since 2019-09-24
|
||||
|
||||
1\url = "file:TilePackage/Altmark/2020-07-13_Altmark_topographic2015_32632.tpk#-1:125" ;# Since 2020-07-31
|
||||
2\url = "file:TilePackage/Altmark/2020-07-13_Altmark_aerial2017_32632.tpk#-1:125" ;# Since 2020-07-31
|
||||
3\url = "file:TilePackage/Altmark/2022-08-23_Altmark_Schnoeggersburg_Drone_32632_Lvl11.tpk#-1:125" ;# Since 2022-08-23
|
||||
|
||||
#For on-site - windows
|
||||
#1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#2\url = "file:///C:/EXTFW/resources/Guez_Aerial_32632_Guez_Aerial_32632/Guez Aerial#-1:125"
|
||||
size=3
|
||||
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk')
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
#For factory
|
||||
#1\url = "http://ecvmgeo02/arcgis/rest/services/Norddeutschland/Norddeutschland_WebMerc/MapServer" ;# Since 2017-08-29
|
||||
#2\url = "http://ecvmgeo02/arcgis/rest/services/Bremen/Hemelingen_TIF_WebMerc/MapServer" ;# Since 2017-08-29
|
||||
|
||||
#For on-site
|
||||
1\url = "http://ecvmgeo02/arcgis/rest/services/Altmark/Altmark_Topo_2m5_WebMerc_2018/MapServer#0:125" ;# Since 2019-09-24
|
||||
2\url = "http://ecvmgeo02/arcgis/rest/services/Altmark/Altmark_Aerial_WebMerc_2017/MapServer#0:125" ;# Since 2019-09-24
|
||||
|
||||
1\url = "file:TilePackage/Altmark/2020-07-13_Altmark_topographic2015_WebMerc.tpk#-1:125" ;# Since 2020-07-31
|
||||
2\url = "file:TilePackage/Altmark/2020-07-13_Altmark_aerial2017_WebMerc.tpk#-1:125" ;# Since 2020-07-31
|
||||
3\url = "file:TilePackage/Altmark/2022-08-23_Altmark_Schnoeggersburg_Drone_WebMerc_Lvl21.tpk#-1:125" ;# Since 2022-08-23
|
||||
|
||||
#For on-site - windows
|
||||
#1\url = "file:///C:/EXTFW/resources/Guez_Topo_WebMerc_Guez_Topo_WebMerc/Guez Topographic#-1:125"
|
||||
#2\url = "file:///C:/EXTFW/resources/Guez_Aerial_WebMerc_Guez_Aerial_WebMerc/Guez Aerial#-1:125"
|
||||
size=3
|
||||
|
||||
|
||||
[sceneObjectUrls]
|
||||
#1\url = "http://ecvmgeo02/arcgis/rest/services/Hosted/BT56_rev576/SceneServer" ;# Since 2017-08-29 (not working yet)
|
||||
1\url = "file:GUEZ_EPSG3857.slpk" ;# Since 2019-03-26
|
||||
size=1
|
||||
|
||||
[elevationUrls]
|
||||
#Example: >>> 1\url = "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" <<<
|
||||
#Example: >>> 1\url = "file:srtm_38_02.tif" <<< -> /usr/share/arcgis/resources/elevation/srtm_38_02.tif
|
||||
#Example: >>> 1\url = "file:///shd/CTC/TOOLS/Bremen_Elevation/srtm_38_02.tif" <<<
|
||||
#Elevation (rough_to_fine)
|
||||
#1\url = "http://ecvmgeo02/arcgis/rest/services/Bremen/BremenElevation/ImageServer" ;# Since 2017-08-29
|
||||
#1\url = "file:srtm_38_02.tif" ;# srtm_38_02.tif -> Bremen, 50m
|
||||
#1\url = "file:n52_e011_1arc_v3.tif" ;# n52_e011_1arc_v3.tif -> Letzlingen, ??m
|
||||
1\url = "file:Altmark_dt1.tif" ;# Altmark.dt1 -> Letzlingen, ~15m (0.000138)
|
||||
2\url = "file:2022-08-02_Schnoeggersburg_3D-18-A317_DGM_EPSG4326_float32.tif" ;# Since 2022-08, aus Drohnebefliegung
|
||||
size=2
|
||||
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Draped" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget), draped for fillPattern
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
#6\operationalLayer = "AES:Static:Draped" ;# switch to Static (NLDEVCTRL-692 'Beheben des Speicher(-leck) Problems')
|
||||
6\operationalLayer = "AES:Static:Draped" ;# for SubLayer '.._3DExtrusion' SurfacePlaement::Relative is enforced
|
||||
7\operationalLayer = "AESCentral:Dynamic:Draped" ;# 3D-AreaEffectSimulation, draped, SubLayer 'GraphicsLayer_3D_Absolute' is absolute
|
||||
8\operationalLayer = "Participants:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
13\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=13
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
#center = "32UMD9307078331" ;#QPointF(93070, 78331) -> BT56 - Bremen
|
||||
center = "32UPD7671618433" ;#QPointF(76716, 18433) -> BT39 (Schulgebaeude2b) - Schnoeggersburg
|
||||
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 90000 ;# 90000 -> Bremen ; 7000000 -> NorthGermany
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 70000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
+136
@@ -0,0 +1,136 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
[license]
|
||||
licenseString = "runtimestandard,1000,rud000189203,none,FAYRMD17J18S6HAZ4078" ;# V100.2.1, provided by Mr. Steinicke (ESRI), 23.03.2018
|
||||
|
||||
1\extensionString = "Exten1"
|
||||
size=0
|
||||
|
||||
[esriNetworkCache]
|
||||
enabled = 1 ;# enabled: 1=on ; 0=off, since V100.7.0
|
||||
|
||||
[symbology]
|
||||
type = "APP6D" ;# None MIL2525D MIL2525C APP6B APP6D
|
||||
extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
|
||||
[mapUrls]
|
||||
#For on-site - windows
|
||||
1\url = "file:Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
1\name = "Guez Topographic"
|
||||
2\url = "file:Guez_Aerial_32632_Guez_Aerial_32632/Guez Aerial#-1:125"
|
||||
2\name = "Guez Aerial"
|
||||
3\url = "file:Guez_HotSpots_Salchau_Aerial_0m20_2017_32632#-1:125"
|
||||
3\name = "HotSpots Salchau Aerial"
|
||||
4\url = "file:Guez_HotSpots_Schnoeggersburg_Aerial_0m20_2017_32632#-1:125"
|
||||
4\name = "HotSpots Schnoeggersburg Aerial"
|
||||
size=4
|
||||
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk')
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
|
||||
#For on-site - windows
|
||||
1\url = "file:Guez_Topo_WebMerc_Guez_Topo_WebMerc/Guez Topographic#-1:125"
|
||||
1\name = "Guez Topographic"
|
||||
2\url = "file:Guez_Aerial_WebMerc_Guez_Aerial_WebMerc/Guez Aerial#-1:125"
|
||||
2\name = "Guez Aerial"
|
||||
3\url = "file:Guez_HotSpots_Salchau_Aerial_0m20_2017_WebMerc#-1:125"
|
||||
3\name = "HotSpots Salchau Aerial"
|
||||
4\url = "file:Guez_HotSpots_Schnoeggersburg_Aerial_0m20_2017_WebMerc#-1:125"
|
||||
4\name = "HotSpots Schnoeggersburg Aerial"
|
||||
size=4
|
||||
|
||||
|
||||
[sceneObjectUrls]
|
||||
1\url = "file:GUEZ_BA1_EPSG3857_20181106.slpk"
|
||||
size=1
|
||||
|
||||
[elevationUrls]
|
||||
1\url = "file:Altmark_dt1.tif" ;# Altmark.dt1 -> Letzlingen, ??m
|
||||
size=1
|
||||
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Relative" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget)
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Dynamic:Draped"
|
||||
7\operationalLayer = "AESCentral:Dynamic:Draped" ;# 3D-AreaEffectSimulation, draped, SubLayer 'GraphicsLayer_3D_Absolute' is absolute
|
||||
8\operationalLayer = "Participants:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
13\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=13
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
center = "32UPD7400013000" ;#QPointF(93070, 78331) -> BT56 - Bremen
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 90000 ;# 90000 -> Bremen ; 7000000 -> NorthGermany
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 70000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
#viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
viewshedUrl = "" ;# // SightFan -> not necessary
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,179 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
[license]
|
||||
licenseString = "runtimestandard,1000,rud000189203,none,FAYRMD17J18S6HAZ4078" ;# 14.03.19, Fr. Jonischkeit: Aus 25er Pack für RME, bis Febr; also für Demo etc.
|
||||
|
||||
1\extensionString = "Exten1"
|
||||
size=0
|
||||
|
||||
[esriNetworkCache]
|
||||
enabled = 1 ;# enabled: 1=on ; 0=off, since V100.7.0
|
||||
|
||||
[symbology]
|
||||
type = "APP6D" ;# None MIL2525D MIL2525C APP6B APP6D
|
||||
extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
# EXCGEO01 (192.168.133.90) -> CCSAWS01
|
||||
# 1\url = "URL[#<minScale>:<maxScale>]"
|
||||
#Example: >>> 1\url = "http://HOSTNAME_FQDN/arcgis/rest/services/Folder/Svcname/MapServer#minScale:maxScale" <<<
|
||||
#
|
||||
#if the projection matches, tpk file and/or tile cache folder (win only) are supported:
|
||||
#1\url = "file:Topographic.tpk#-1:125" ;# -> /usr/share/arcgis/resources/Topographic.tpk
|
||||
#2\url = "file:///usr/share/arcgis/resources/World_Topo_Map.tpk#-1:125"
|
||||
# WINDOWS 1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#
|
||||
|
||||
1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Norddeutschland/Norddeutschland_32632/MapServer#-1:125" ;# Since 2017-08-25
|
||||
2\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/Hemelingen_TIF_32632/MapServer" ;# Since 2017-08-25
|
||||
2\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenHemelingenAerialGeoAmt_32632/MapServer#-1:125" ;# Since 2017-12-12
|
||||
3\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenWerkAerialDrone_32632/MapServer#-1:125" ;# Since 2017-12-12
|
||||
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/AHTC/AHTC_32639/MapServer"
|
||||
|
||||
#1\url = "http://EXCGEO01:9090/geoserver/gwc/service/tms/1.0.0/workspace1:Norddeutschland_UTM@EPSG:32632@png"
|
||||
#2\url = "http://EXCGEO01:6080/arcgis/rest/services/HemelingenRDE/MapServer"
|
||||
#3\url = "http://excgeo01:9090/geoserver/gwc/service/tms/1.0.0/Salchau%3ASalchau_overview@EPSG%3A32632@png"
|
||||
#4\url = "http://excgeo01:9090/geoserver/gwc/service/tms/1.0.0/Salchau%3ASalchau@EPSG%3A32632@png"
|
||||
|
||||
#3\url = "http://EXCGEO02/arcgis/rest/services/SampleWorldCities/MapServer" ;# 'SampleWorldCities' = EsriBuiltIn-Service (->ArcGISMapImageLayer)
|
||||
|
||||
### arcgisonline
|
||||
#1\url = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer" ;# == Basemap::topographic
|
||||
#2\url = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"
|
||||
#3\url = "http://server.arcgisonline.com/arcgis/rest/services/Ocean_Basemap/MapServer"
|
||||
|
||||
1\url = "file:TilePackage/Hungary/2024-07-30_Hungary_Varpalota_topographic_32634.tpk#-1:125"
|
||||
2\url = "file:TilePackage/Hungary/2024-07-29_Hungary_Varpalota_aerial_32634.tpk#-1:125"
|
||||
size=2
|
||||
|
||||
# Consulting:
|
||||
# http://192.168.133.88:6080/arcgis/rest/services/Norddeutschland_Osm/MapServer
|
||||
# ^^
|
||||
# http://192.168.133.90:6080/arcgis/rest/services/BremenGeoTiffUTM/MapServer
|
||||
#
|
||||
# http://192.168.133.90:9090/geoserver/gwc/service/tms/1.0.0/workspace1:Norddeutschland_UTM@EPSG:32632@png
|
||||
# http://192.168.133.90:9090/geoserver/gwc/service/tms/1.0.0/Bremen:Topo_Bremen@EPSG:32632@png
|
||||
# http://192.168.133.90:9090/geoserver/gwc/service/tms/1.0.0/Bremen:Aerial_Hemelingen@EPSG:32632@png
|
||||
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk', 'Bremen_RME_32632.tpk')
|
||||
#localMapFile = "World_Topo_Map.tpk"
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/Hemelingen_TIF_WebMerc/MapServer"
|
||||
|
||||
1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Norddeutschland/Norddeutschland_WebMerc/MapServer#0:125" ;# Since 2017-08-25
|
||||
2\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/Hemelingen_TIF_WebMerc/MapServer#0:125" ;# Since 2017-08-25
|
||||
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/AHTC/AHTC_WebMerc_2/MapServer"
|
||||
#1\url = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"
|
||||
#1\url = "https://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer" ;# == Basemap::topographic
|
||||
|
||||
1\url = "file:TilePackage/Hungary/2024-07-30_Hungary_Varpalota_topographic_WebMerc.tpk#-1:125"
|
||||
2\url = "file:TilePackage/Hungary/2024-07-29_Hungary_Varpalota_aerial_WebMerc.tpk#-1:125"
|
||||
size=2
|
||||
|
||||
|
||||
[sceneObjectUrls]
|
||||
# 1\url = "URL[#<altitudeOffset>]"
|
||||
#Example: >>> 1\url = "file:AHTC_LOW.slpk#0.3" <<<
|
||||
#Brest
|
||||
#1\url = "http://scene.arcgis.com/arcgis/rest/services/Hosted/Buildings_Brest/SceneServer/layers/0" ;# Brest/France
|
||||
#1\url = "http://scene.arcgis.com/arcgis/rest/services/Hosted/Buildings_Brest/SceneServer/layers" ;# Brest/France
|
||||
#1\url = "http://tiles.arcgis.com/tiles/P3ePLMYs2RVChkJx/arcgis/rest/services/Buildings_Brest/SceneServer/layers/0" ;# Brest/France from Luke, no textures?
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Hosted/BT_56_11/SceneServer"
|
||||
1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Hosted/BT56_rev576/SceneServer" ;# Since 2017-08-25
|
||||
1\url = "file:BT_56_UTM_EPSG_25832.slpk"
|
||||
1\url = "file:GUEZ_EPSG3857.slpk" ;# Since 2019-03-26
|
||||
size=0
|
||||
|
||||
[elevationUrls]
|
||||
#Example: >>> 1\url = "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" <<<
|
||||
#Example: >>> 1\url = "file:srtm_38_02.tif" <<< -> /usr/share/arcgis/resources/elevation/srtm_38_02.tif
|
||||
#Example: >>> 1\url = "file:///shd/CTC/TOOLS/Bremen_Elevation/srtm_38_02.tif" <<<
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenElevation/ImageServer"
|
||||
1\url = "file:2024-07-30_Hungary_Varpalota_DDM10_WGS84.tif"
|
||||
size=1
|
||||
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Draped" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget), draped for fillPattern
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Static:Draped" ;# switch to Static (NLDEVCTRL-692 'Beheben des Speicher(-leck) Problems')
|
||||
7\operationalLayer = "AESCentral:Dynamic:Draped" ;# 3D-AreaEffectSimulation, draped, SubLayer 'GraphicsLayer_3D_Absolute' is absolute
|
||||
8\operationalLayer = "Participants:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
13\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=13
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
center = "34 TBT 74750 25500" ;#QPointF(32000, 04000) -> Hungary, Varpalota
|
||||
#center = "32UMD9275080525" ;#QPointF(92750, 80525) -> Rennplatz - Bremen
|
||||
#center = "39RXG4400060000" ;# AHTC
|
||||
#center = "30UUU8935659700" ;# 30UUU9100060500 -> Brest, Chateau
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 10000 ;# 90000 -> Bremen ; 7000000 -> NorthGermany
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 70000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
#viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
viewshedUrl = "" ;# // SightFan -> not necessary
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
@@ -0,0 +1,122 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
[license]
|
||||
licenseString = "runtimeadvanced,1000,rud000500932,none,5H7LMD17J12GEBZNR016" ;# Mail David Eastman, 20.02.2019
|
||||
|
||||
1\extensionString = "runtimeanalysis,1000,rud000500932,none,YYPH5AZAMAG0E3CPR073" ;# Mail David Eastman, 20.02.2019
|
||||
size=1
|
||||
|
||||
|
||||
[symbology]
|
||||
type = "APP6D" ;# None MIL2525D MIL2525C APP6B APP6D
|
||||
#extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
# EXCGEO01 (192.168.133.90) -> CCSAWS01
|
||||
# 1\url = "URL[#<minScale>:<maxScale>]"
|
||||
#Example: >>> 1\url = "http://HOSTNAME_FQDN/arcgis/rest/services/Folder/Svcname/MapServer#minScale:maxScale" <<<
|
||||
#
|
||||
#if the projection matches, tpk file and/or tile cache folder (win only) are supported:
|
||||
#1\url = "file:Topographic.tpk#-1:125" ;# -> /usr/share/arcgis/resources/Topographic.tpk
|
||||
#2\url = "file:///usr/share/arcgis/resources/World_Topo_Map.tpk#-1:125"
|
||||
# WINDOWS 1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#
|
||||
|
||||
1\url = "file:TilePackage/L400/2020-03-02_Cultana_aerial_0m50_32653.tpk"
|
||||
size=1
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk', 'Bremen_RME_32632.tpk')
|
||||
#localMapFile = "World_Topo_Map.tpk"
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
size=0
|
||||
|
||||
|
||||
[sceneObjectUrls]
|
||||
size=0
|
||||
|
||||
[elevationUrls]
|
||||
#Example: >>> 1\url = "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" <<<
|
||||
#Example: >>> 1\url = "file:srtm_38_02.tif" <<< -> /usr/share/arcgis/resources/elevation/srtm_38_02.tif
|
||||
#Example: >>> 1\url = "file:///shd/CTC/TOOLS/Bremen_Elevation/srtm_38_02.tif" <<<
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenElevation/ImageServer"
|
||||
1\url = "file:L400/Cultana_e137s33_TFRM.dt2" ;# 2020-03-Cultana_e137s33_TFRM.dt2 -> 25m
|
||||
size=1
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Relative" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget)
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Dynamic:Draped"
|
||||
7\operationalLayer = "Participants:Dynamic:Relative"
|
||||
8\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=12
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
center = "53HQD3500071000"
|
||||
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 200000 ;# 90000 -> Bremen ; 7000000 -> NorthGermany
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 70000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
#viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
viewshedUrl = "" ;# // SightFan -> not necessary
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
@@ -0,0 +1,122 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
[license]
|
||||
licenseString = "runtimeadvanced,1000,rud000500932,none,5H7LMD17J12GEBZNR016" ;# Mail David Eastman, 20.02.2019
|
||||
|
||||
1\extensionString = "runtimeanalysis,1000,rud000500932,none,YYPH5AZAMAG0E3CPR073" ;# Mail David Eastman, 20.02.2019
|
||||
size=1
|
||||
|
||||
|
||||
[symbology]
|
||||
type = "APP6D" ;# None MIL2525D MIL2525C APP6B APP6D
|
||||
#extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
# EXCGEO01 (192.168.133.90) -> CCSAWS01
|
||||
# 1\url = "URL[#<minScale>:<maxScale>]"
|
||||
#Example: >>> 1\url = "http://HOSTNAME_FQDN/arcgis/rest/services/Folder/Svcname/MapServer#minScale:maxScale" <<<
|
||||
#
|
||||
#if the projection matches, tpk file and/or tile cache folder (win only) are supported:
|
||||
#1\url = "file:Topographic.tpk#-1:125" ;# -> /usr/share/arcgis/resources/Topographic.tpk
|
||||
#2\url = "file:///usr/share/arcgis/resources/World_Topo_Map.tpk#-1:125"
|
||||
# WINDOWS 1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#
|
||||
|
||||
1\url = "file:TilePackage/L400/2020-03-02_Puckapunyal_aerial_0m20_32655.tpk"
|
||||
size=1
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk', 'Bremen_RME_32632.tpk')
|
||||
#localMapFile = "World_Topo_Map.tpk"
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
size=0
|
||||
|
||||
|
||||
[sceneObjectUrls]
|
||||
size=0
|
||||
|
||||
[elevationUrls]
|
||||
#Example: >>> 1\url = "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" <<<
|
||||
#Example: >>> 1\url = "file:srtm_38_02.tif" <<< -> /usr/share/arcgis/resources/elevation/srtm_38_02.tif
|
||||
#Example: >>> 1\url = "file:///shd/CTC/TOOLS/Bremen_Elevation/srtm_38_02.tif" <<<
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenElevation/ImageServer"
|
||||
1\url = "file:L400/2020-03-03_Puckapunyal.tif" ;# 2020-03-03_Puckapunyal.tif -> 25m
|
||||
size=1
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Relative" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget)
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Dynamic:Draped"
|
||||
7\operationalLayer = "Participants:Dynamic:Relative"
|
||||
8\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=12
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
center = "55HCV2000012000"
|
||||
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 200000 ;# 90000 -> Bremen ; 7000000 -> NorthGermany
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 70000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
#viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
viewshedUrl = "" ;# // SightFan -> not necessary
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
[license]
|
||||
licenseString = "runtimeadvanced,1000,rud000500932,none,5H7LMD17J12GEBZNR016" ;# Mail David Eastman, 20.02.2019
|
||||
|
||||
1\extensionString = "runtimeanalysis,1000,rud000500932,none,YYPH5AZAMAG0E3CPR073" ;# Mail David Eastman, 20.02.2019
|
||||
size=1
|
||||
|
||||
|
||||
[symbology]
|
||||
type = "APP6D" ;# None MIL2525D MIL2525C APP6B APP6D
|
||||
#extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
# EXCGEO01 (192.168.133.90) -> CCSAWS01
|
||||
# 1\url = "URL[#<minScale>:<maxScale>]"
|
||||
#Example: >>> 1\url = "http://HOSTNAME_FQDN/arcgis/rest/services/Folder/Svcname/MapServer#minScale:maxScale" <<<
|
||||
#
|
||||
#if the projection matches, tpk file and/or tile cache folder (win only) are supported:
|
||||
#1\url = "file:Topographic.tpk#-1:125" ;# -> /usr/share/arcgis/resources/Topographic.tpk
|
||||
#2\url = "file:///usr/share/arcgis/resources/World_Topo_Map.tpk#-1:125"
|
||||
# WINDOWS 1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#
|
||||
|
||||
1\url = "file:TilePackage/L400/2020-03-02_SWBTA_aerial_0m20_32656.tpk"
|
||||
size=1
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk', 'Bremen_RME_32632.tpk')
|
||||
#localMapFile = "World_Topo_Map.tpk"
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
size=0
|
||||
|
||||
|
||||
[sceneObjectUrls]
|
||||
size=0
|
||||
|
||||
[elevationUrls]
|
||||
#Example: >>> 1\url = "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" <<<
|
||||
#Example: >>> 1\url = "file:srtm_38_02.tif" <<< -> /usr/share/arcgis/resources/elevation/srtm_38_02.tif
|
||||
#Example: >>> 1\url = "file:///shd/CTC/TOOLS/Bremen_Elevation/srtm_38_02.tif" <<<
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenElevation/ImageServer"
|
||||
1\url = "file:L400/SWBTA_e150s23_TFRM.dt2" ;# SWBTA_e150s23_TFRM.dt2 -> 25m
|
||||
size=1
|
||||
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Relative" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget)
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Dynamic:Draped"
|
||||
7\operationalLayer = "Participants:Dynamic:Relative"
|
||||
8\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=12
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
center = "56KKA2000000001"
|
||||
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 200000
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 70000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
#viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
viewshedUrl = "" ;# // SightFan -> not necessary
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
+122
@@ -0,0 +1,122 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
[license]
|
||||
licenseString = "runtimeadvanced,1000,rud000500932,none,5H7LMD17J12GEBZNR016" ;# Mail David Eastman, 20.02.2019
|
||||
|
||||
1\extensionString = "runtimeanalysis,1000,rud000500932,none,YYPH5AZAMAG0E3CPR073" ;# Mail David Eastman, 20.02.2019
|
||||
size=1
|
||||
|
||||
|
||||
[symbology]
|
||||
type = "APP6D" ;# None MIL2525D MIL2525C APP6B APP6D
|
||||
#extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
# EXCGEO01 (192.168.133.90) -> CCSAWS01
|
||||
# 1\url = "URL[#<minScale>:<maxScale>]"
|
||||
#Example: >>> 1\url = "http://HOSTNAME_FQDN/arcgis/rest/services/Folder/Svcname/MapServer#minScale:maxScale" <<<
|
||||
#
|
||||
#if the projection matches, tpk file and/or tile cache folder (win only) are supported:
|
||||
#1\url = "file:Topographic.tpk#-1:125" ;# -> /usr/share/arcgis/resources/Topographic.tpk
|
||||
#2\url = "file:///usr/share/arcgis/resources/World_Topo_Map.tpk#-1:125"
|
||||
# WINDOWS 1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#
|
||||
|
||||
1\url = "file:TilePackage/L400/2020-03-02_TFTA_aerial_0m50_32655.tpk"
|
||||
size=1
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk', 'Bremen_RME_32632.tpk')
|
||||
#localMapFile = "World_Topo_Map.tpk"
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
size=0
|
||||
|
||||
|
||||
[sceneObjectUrls]
|
||||
size=0
|
||||
|
||||
[elevationUrls]
|
||||
#Example: >>> 1\url = "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" <<<
|
||||
#Example: >>> 1\url = "file:srtm_38_02.tif" <<< -> /usr/share/arcgis/resources/elevation/srtm_38_02.tif
|
||||
#Example: >>> 1\url = "file:///shd/CTC/TOOLS/Bremen_Elevation/srtm_38_02.tif" <<<
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenElevation/ImageServer"
|
||||
1\url = "file:L400/TFTA_e146s20_TFRM.dt2" ;# 2020-03-TFTA_e146s20_TFRM.dt2 -> 25m
|
||||
size=1
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Relative" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget)
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Dynamic:Draped"
|
||||
7\operationalLayer = "Participants:Dynamic:Relative"
|
||||
8\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=12
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
center = "55KDU3800034000"
|
||||
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 200000 ;# 90000 -> Bremen ; 7000000 -> NorthGermany
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 70000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
#viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
viewshedUrl = "" ;# // SightFan -> not necessary
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
+152
@@ -0,0 +1,152 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
[license]
|
||||
licenseString = "runtimeadvanced,1000,rud000500932,none,5H7LMD17J12GEBZNR016" ;# Mail David Eastman, 20.02.2019
|
||||
|
||||
1\extensionString = "runtimeanalysis,1000,rud000500932,none,YYPH5AZAMAG0E3CPR073" ;# Mail David Eastman, 20.02.2019
|
||||
size=1
|
||||
|
||||
[esriNetworkCache]
|
||||
enabled = 0 ;# enabled: 1=on ; 0 =off, since V100.7.0
|
||||
|
||||
[symbology]
|
||||
type = "MIL2525D" ;# None | MIL2525D | MIL2525C | APP6B
|
||||
extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
# EXCGEO01 (192.168.133.90) -> CCSAWS01
|
||||
# 1\url = "URL[#<minScale>:<maxScale>]"
|
||||
#Example: >>> 1\url = "http://HOSTNAME_FQDN/arcgis/rest/services/Folder/Svcname/MapServer#minScale:maxScale" <<<
|
||||
#
|
||||
#if the projection matches, tpk file and/or tile cache folder (win only) are supported:
|
||||
#1\url = "file:Topographic.tpk#-1:125" ;# -> /usr/share/arcgis/resources/Topographic.tpk
|
||||
#2\url = "file:///usr/share/arcgis/resources/World_Topo_Map.tpk#-1:125"
|
||||
# WINDOWS 1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#
|
||||
#For factory
|
||||
1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/AHTC/AHTC_32639/MapServer"
|
||||
|
||||
#For on-site
|
||||
#1\url = "http://e-vm-geo-2.ahtc.live/arcgis/rest/services/UAE/UaeTopographic_32639/MapServer" ;# Since 2017-11-30
|
||||
#2\url = "http://e-vm-geo-2.ahtc.live/arcgis/rest/services/UAE/UaeAerial_32639/MapServer" ;# Since 2017-11-30
|
||||
|
||||
#For on-site - windows
|
||||
# todo
|
||||
|
||||
size=1
|
||||
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk')
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
#For factory
|
||||
1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/AHTC/AHTC_WebMerc_2/MapServer"
|
||||
|
||||
#For on-site
|
||||
#1\url = "http://e-vm-geo-2.ahtc.live/arcgis/rest/services/UAE/UaeTopographic_WebMerc/MapServer" ;# Since 2017-11-30
|
||||
#2\url = "http://e-vm-geo-2.ahtc.live/arcgis/rest/services/UAE/UaeAerial_WebMerc/MapServer" ;# Since 2017-11-30
|
||||
|
||||
#For on-site - windows
|
||||
# todo
|
||||
|
||||
size=1
|
||||
|
||||
|
||||
[sceneObjectUrls]
|
||||
#1\url = "http://e-vm-geo-2.ahtc.live/arcgis/rest/services/Hosted/AHTC_LOW_15_11_2017/SceneServer" ;# Since 2017-11-30
|
||||
|
||||
1\url = "file:///tmp/AHTC_2017-12-18_21_0_AHTC_LOW_2017_12_18_v7.slpk"
|
||||
#1\url = "file:///tmp/AHTC_2018-01-30/AHTC_2018_01_29_featureclass_per_building_gdb.slpk"
|
||||
#1\url = "file:///tmp/AHTC_2018-01-30/AHTC_2018_01_29_one_featureclass_gdb.slpk"
|
||||
1\url = "file:AHTC_0_AHTC_LOW_2018_10_17.slpk"
|
||||
1\url = "file:AHTC_LOW_2018_10_29.slpk"
|
||||
1\url = "file:AHTC_LOW_2018_10_30.slpk"
|
||||
1\url = "file:AHTC_LOW_2019_01_17.slpk"
|
||||
1\url = "file:AHTC_LOW.slpk"
|
||||
size=1
|
||||
|
||||
[elevationUrls]
|
||||
#Example: >>> 1\url = "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" <<<
|
||||
#Example: >>> 1\url = "file:srtm_38_02.tif" <<< -> /usr/share/arcgis/resources/elevation/srtm_38_02.tif
|
||||
#Example: >>> 1\url = "file:///shd/CTC/TOOLS/Bremen_Elevation/srtm_38_02.tif" <<<
|
||||
#1\url = "http://ecvmgeo02/arcgis/rest/services/Bremen/BremenElevation/ImageServer" ;# Since 2017-08-29
|
||||
1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/ZM2/AHTC_UTM_dgm/ImageServer" ;# Z&M Testlauf03 ; 2018-02-14
|
||||
1\url = "file:AHTC_utm_dgm_surface.tif" ;# Z&M
|
||||
size=1
|
||||
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Relative" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget)
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Dynamic:Draped"
|
||||
7\operationalLayer = "Participants:Dynamic:Relative"
|
||||
8\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=12
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
center = "39RXG4400060000" ;# AHTC
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 90000 ;# 90000 -> Bremen ; 7000000 -> NorthGermany
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 70000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
+177
@@ -0,0 +1,177 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
[license]
|
||||
licenseString = "runtimestandard,1000,rud000189203,none,FAYRMD17J18S6HAZ4078" ;# 14.03.19, Fr. Jonischkeit: Aus 25er Pack für RME, bis Febr; also für Demo etc.
|
||||
|
||||
1\extensionString = "Exten1"
|
||||
size=0
|
||||
|
||||
[esriNetworkCache]
|
||||
enabled = 1 ;# enabled: 1=on ; 0=off, since V100.7.0
|
||||
|
||||
[symbology]
|
||||
type = "APP6D" ;# None MIL2525D MIL2525C APP6B APP6D
|
||||
extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
# EXCGEO01 (192.168.133.90) -> CCSAWS01
|
||||
# 1\url = "URL[#<minScale>:<maxScale>]"
|
||||
#Example: >>> 1\url = "http://HOSTNAME_FQDN/arcgis/rest/services/Folder/Svcname/MapServer#minScale:maxScale" <<<
|
||||
#
|
||||
#if the projection matches, tpk file and/or tile cache folder (win only) are supported:
|
||||
#1\url = "file:Topographic.tpk#-1:125" ;# -> /usr/share/arcgis/resources/Topographic.tpk
|
||||
#2\url = "file:///usr/share/arcgis/resources/World_Topo_Map.tpk#-1:125"
|
||||
# WINDOWS 1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#
|
||||
|
||||
1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Norddeutschland/Norddeutschland_32632/MapServer#-1:125" ;# Since 2017-08-25
|
||||
2\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/Hemelingen_TIF_32632/MapServer" ;# Since 2017-08-25
|
||||
2\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenHemelingenAerialGeoAmt_32632/MapServer#-1:125" ;# Since 2017-12-12
|
||||
3\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenWerkAerialDrone_32632/MapServer#-1:125" ;# Since 2017-12-12
|
||||
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/AHTC/AHTC_32639/MapServer"
|
||||
|
||||
#1\url = "http://EXCGEO01:9090/geoserver/gwc/service/tms/1.0.0/workspace1:Norddeutschland_UTM@EPSG:32632@png"
|
||||
#2\url = "http://EXCGEO01:6080/arcgis/rest/services/HemelingenRDE/MapServer"
|
||||
#3\url = "http://excgeo01:9090/geoserver/gwc/service/tms/1.0.0/Salchau%3ASalchau_overview@EPSG%3A32632@png"
|
||||
#4\url = "http://excgeo01:9090/geoserver/gwc/service/tms/1.0.0/Salchau%3ASalchau@EPSG%3A32632@png"
|
||||
|
||||
#3\url = "http://EXCGEO02/arcgis/rest/services/SampleWorldCities/MapServer" ;# 'SampleWorldCities' = EsriBuiltIn-Service (->ArcGISMapImageLayer)
|
||||
|
||||
### arcgisonline
|
||||
#1\url = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer" ;# == Basemap::topographic
|
||||
#2\url = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"
|
||||
#3\url = "http://server.arcgisonline.com/arcgis/rest/services/Ocean_Basemap/MapServer"
|
||||
|
||||
1\url = "file:TilePackage/Lithuania_Rukla/2024-07-03-Lith_Rukla_aerial_0m5_32635.tpk#-1:125"
|
||||
size=1
|
||||
|
||||
# Consulting:
|
||||
# http://192.168.133.88:6080/arcgis/rest/services/Norddeutschland_Osm/MapServer
|
||||
# ^^
|
||||
# http://192.168.133.90:6080/arcgis/rest/services/BremenGeoTiffUTM/MapServer
|
||||
#
|
||||
# http://192.168.133.90:9090/geoserver/gwc/service/tms/1.0.0/workspace1:Norddeutschland_UTM@EPSG:32632@png
|
||||
# http://192.168.133.90:9090/geoserver/gwc/service/tms/1.0.0/Bremen:Topo_Bremen@EPSG:32632@png
|
||||
# http://192.168.133.90:9090/geoserver/gwc/service/tms/1.0.0/Bremen:Aerial_Hemelingen@EPSG:32632@png
|
||||
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk', 'Bremen_RME_32632.tpk')
|
||||
#localMapFile = "World_Topo_Map.tpk"
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/Hemelingen_TIF_WebMerc/MapServer"
|
||||
|
||||
1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Norddeutschland/Norddeutschland_WebMerc/MapServer#0:125" ;# Since 2017-08-25
|
||||
2\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/Hemelingen_TIF_WebMerc/MapServer#0:125" ;# Since 2017-08-25
|
||||
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/AHTC/AHTC_WebMerc_2/MapServer"
|
||||
#1\url = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"
|
||||
#1\url = "https://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer" ;# == Basemap::topographic
|
||||
|
||||
1\url = "file:TilePackage/Lithuania_Rukla/2024-07-03-Lith_Rukla_aerial_0m5_WebMerc.tpk#-1:125"
|
||||
size=1
|
||||
|
||||
|
||||
[sceneObjectUrls]
|
||||
# 1\url = "URL[#<altitudeOffset>]"
|
||||
#Example: >>> 1\url = "file:AHTC_LOW.slpk#0.3" <<<
|
||||
#Brest
|
||||
#1\url = "http://scene.arcgis.com/arcgis/rest/services/Hosted/Buildings_Brest/SceneServer/layers/0" ;# Brest/France
|
||||
#1\url = "http://scene.arcgis.com/arcgis/rest/services/Hosted/Buildings_Brest/SceneServer/layers" ;# Brest/France
|
||||
#1\url = "http://tiles.arcgis.com/tiles/P3ePLMYs2RVChkJx/arcgis/rest/services/Buildings_Brest/SceneServer/layers/0" ;# Brest/France from Luke, no textures?
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Hosted/BT_56_11/SceneServer"
|
||||
1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Hosted/BT56_rev576/SceneServer" ;# Since 2017-08-25
|
||||
1\url = "file:BT_56_UTM_EPSG_25832.slpk"
|
||||
1\url = "file:GUEZ_EPSG3857.slpk" ;# Since 2019-03-26
|
||||
size=0
|
||||
|
||||
[elevationUrls]
|
||||
#Example: >>> 1\url = "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" <<<
|
||||
#Example: >>> 1\url = "file:srtm_38_02.tif" <<< -> /usr/share/arcgis/resources/elevation/srtm_38_02.tif
|
||||
#Example: >>> 1\url = "file:///shd/CTC/TOOLS/Bremen_Elevation/srtm_38_02.tif" <<<
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenElevation/ImageServer"
|
||||
1\url = "file:2024-07-03_Lith_Rukla_elevation.tif" ;# 2024-07-03_Lith_Rukla_elevation.tif -> Litauen Rukla
|
||||
size=1
|
||||
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Draped" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget), draped for fillPattern
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Static:Draped" ;# switch to Static (NLDEVCTRL-692 'Beheben des Speicher(-leck) Problems')
|
||||
7\operationalLayer = "AESCentral:Dynamic:Draped" ;# 3D-AreaEffectSimulation, draped, SubLayer 'GraphicsLayer_3D_Absolute' is absolute
|
||||
8\operationalLayer = "Participants:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
13\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=13
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
center = "35 ULB 32000 04000" ;#QPointF(32000, 04000) -> Rukla
|
||||
#center = "32UMD9275080525" ;#QPointF(92750, 80525) -> Rennplatz - Bremen
|
||||
#center = "39RXG4400060000" ;# AHTC
|
||||
#center = "30UUU8935659700" ;# 30UUU9100060500 -> Brest, Chateau
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 28000 ;# 90000 -> Bremen ; 7000000 -> NorthGermany
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 70000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
#viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
viewshedUrl = "" ;# // SightFan -> not necessary
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
+130
@@ -0,0 +1,130 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
[license]
|
||||
licenseString = "runtimestandard,1000,rud000189203,none,FAYRMD17J18S6HAZ4078" ;# 14.03.19, Fr. Jonischkeit: Aus 25er Pack für RME, bis Febr; also für Demo etc.
|
||||
|
||||
1\extensionString = "Exten1"
|
||||
size=0
|
||||
|
||||
[esriNetworkCache]
|
||||
enabled = 1 ;# enabled: 1=on ; 0=off, since V100.7.0
|
||||
|
||||
[symbology]
|
||||
type = "APP6D" ;# None MIL2525D MIL2525C APP6B APP6D
|
||||
extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
# 1\url = "URL[#<minScale>:<maxScale>]"
|
||||
#Example: >>> 1\url = "http://HOSTNAME_FQDN/arcgis/rest/services/Folder/Svcname/MapServer#minScale:maxScale" <<<
|
||||
#
|
||||
#if the projection matches, tpk file and/or tile cache folder (win only) are supported:
|
||||
#1\url = "file:Topographic.tpk#-1:125" ;# -> /usr/share/arcgis/resources/Topographic.tpk
|
||||
#2\url = "file:///usr/share/arcgis/resources/World_Topo_Map.tpk#-1:125"
|
||||
# WINDOWS 1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#
|
||||
|
||||
1\url = "file:TilePackage/Luxemburg/2023-07-10_Luxemburg_Aerial_0m1_2169_Lvl_10.tpk#-1:125" ;# 16GB
|
||||
size=1
|
||||
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk', 'Bremen_RME_32632.tpk')
|
||||
#localMapFile = "World_Topo_Map.tpk"
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
1\url = "file:Topographic.tpk#-1:125" ;# 7,8GB
|
||||
size=1
|
||||
|
||||
|
||||
[sceneObjectUrls]
|
||||
# 1\url = "URL[#<altitudeOffset>]"
|
||||
#Example: >>> 1\url = "file:AHTC_LOW.slpk#0.3" <<<
|
||||
#Brest
|
||||
1\url = "file:BT_56_UTM_EPSG_25832.slpk"
|
||||
size=0
|
||||
|
||||
[elevationUrls]
|
||||
#Example: >>> 1\url = "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" <<<
|
||||
#Example: >>> 1\url = "file:srtm_38_02.tif" <<< -> /usr/share/arcgis/resources/elevation/srtm_38_02.tif
|
||||
#Example: >>> 1\url = "file:///shd/CTC/TOOLS/Bremen_Elevation/srtm_38_02.tif" <<<
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenElevation/ImageServer"
|
||||
1\url = "file:2023-07-11_elevationLuxemburg.tif"
|
||||
size=1
|
||||
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Relative" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget)
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Static:Draped" ;# switch to Static (NLDEVCTRL-692 'Beheben des Speicher(-leck) Problems')
|
||||
7\operationalLayer = "Participants:Dynamic:Relative"
|
||||
8\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=12
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
center = "32UKV9284699203" ;#QPointF(92846, 99203) -> Luxemburg
|
||||
center = "32UKA9000022000" ;# -> complete Luxemburg
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 300000 ;# 90000 -> Bremen ; 300000 -> Luxemburg
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 70000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
#viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
viewshedUrl = "" ;# // SightFan -> not necessary
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
@@ -0,0 +1,130 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
[license]
|
||||
licenseString = "runtimestandard,1000,rud000189203,none,FAYRMD17J18S6HAZ4078" ;# 14.03.19, Fr. Jonischkeit: Aus 25er Pack für RME, bis Febr; also für Demo etc.
|
||||
|
||||
1\extensionString = "Exten1"
|
||||
size=0
|
||||
|
||||
[esriNetworkCache]
|
||||
enabled = 1 ;# enabled: 1=on ; 0=off, since V100.7.0
|
||||
|
||||
[symbology]
|
||||
type = "APP6D" ;# None MIL2525D MIL2525C APP6B APP6D
|
||||
extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
# 1\url = "URL[#<minScale>:<maxScale>]"
|
||||
#Example: >>> 1\url = "http://HOSTNAME_FQDN/arcgis/rest/services/Folder/Svcname/MapServer#minScale:maxScale" <<<
|
||||
#
|
||||
#if the projection matches, tpk file and/or tile cache folder (win only) are supported:
|
||||
#1\url = "file:Topographic.tpk#-1:125" ;# -> /usr/share/arcgis/resources/Topographic.tpk
|
||||
#2\url = "file:///usr/share/arcgis/resources/World_Topo_Map.tpk#-1:125"
|
||||
# WINDOWS 1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#
|
||||
|
||||
1\url = "file:TilePackage/Luxemburg/2023-07-10_Luxemburg_Aerial_0m1_2169_Lvl_10.tpk#-1:125" ;# 16GB
|
||||
size=1
|
||||
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk', 'Bremen_RME_32632.tpk')
|
||||
#localMapFile = "World_Topo_Map.tpk"
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
1\url = "file:Topographic.tpk#-1:125" ;# 7,8GB
|
||||
size=1
|
||||
|
||||
|
||||
[sceneObjectUrls]
|
||||
# 1\url = "URL[#<altitudeOffset>]"
|
||||
#Example: >>> 1\url = "file:AHTC_LOW.slpk#0.3" <<<
|
||||
#Brest
|
||||
1\url = "file:BT_56_UTM_EPSG_25832.slpk"
|
||||
size=0
|
||||
|
||||
[elevationUrls]
|
||||
#Example: >>> 1\url = "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" <<<
|
||||
#Example: >>> 1\url = "file:srtm_38_02.tif" <<< -> /usr/share/arcgis/resources/elevation/srtm_38_02.tif
|
||||
#Example: >>> 1\url = "file:///shd/CTC/TOOLS/Bremen_Elevation/srtm_38_02.tif" <<<
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenElevation/ImageServer"
|
||||
1\url = "file:2023-07-11_elevationLuxemburg.tif"
|
||||
size=1
|
||||
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Relative" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget)
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Static:Draped" ;# switch to Static (NLDEVCTRL-692 'Beheben des Speicher(-leck) Problems')
|
||||
7\operationalLayer = "Participants:Dynamic:Relative"
|
||||
8\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=12
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
center = "32UKV9284699203" ;#QPointF(92846, 99203) -> Luxemburg
|
||||
center = "32UKA9000022000" ;# -> complete Luxemburg
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 300000 ;# 90000 -> Bremen ; 300000 -> Luxemburg
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 70000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
#viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
viewshedUrl = "" ;# // SightFan -> not necessary
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
+144
@@ -0,0 +1,144 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
[license]
|
||||
licenseString = "runtimestandard,1000,rud000189203,none,FAYRMD17J18S6HAZ4078" ;# 14.03.19, Fr. Jonischkeit: Aus 25er Pack für RME, bis Febr; also für Demo etc.
|
||||
|
||||
1\extensionString = "Exten1"
|
||||
size=0
|
||||
|
||||
[esriNetworkCache]
|
||||
enabled = 1 ;# enabled: 1=on ; 0=off, since V100.7.0
|
||||
|
||||
[symbology]
|
||||
type = "APP6D" ;# None MIL2525D MIL2525C APP6B APP6D
|
||||
extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
# EXCGEO01 (192.168.133.90) -> CCSAWS01
|
||||
# 1\url = "URL[#<minScale>:<maxScale>]"
|
||||
#Example: >>> 1\url = "http://HOSTNAME_FQDN/arcgis/rest/services/Folder/Svcname/MapServer#minScale:maxScale" <<<
|
||||
#
|
||||
#if the projection matches, tpk file and/or tile cache folder (win only) are supported:
|
||||
#1\url = "file:Topographic.tpk#-1:125" ;# -> /usr/share/arcgis/resources/Topographic.tpk
|
||||
#2\url = "file:///usr/share/arcgis/resources/World_Topo_Map.tpk#-1:125"
|
||||
# WINDOWS 1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#
|
||||
|
||||
1\url = "file:TilePackage/Qatar/2022-06-23_Qatar_OSM_32639.vtpk#-1:125" ;# Since Since 2022
|
||||
|
||||
2\url = "file:TilePackage/Qatar/Qatar_Aerial_32639.tpk#-1:125" ;# Since Since 2022
|
||||
3\url = "file:TilePackage/Qatar/Qatar_Aerial_Islands_32639.tpk#-1:125" ;# Since Since 2022
|
||||
|
||||
4\url = "file:TilePackage/Qatar/2021-12-09_Qatar_Doha_Aerial_50cm_32639_Lvl8.tpk#-1:125" ;# Since Since 2022
|
||||
5\url = "file:TilePackage/Qatar/Qatar_NSA_BarzanCamp_Aerial_32639.tpk#-1:125" ;# Since Since 2022
|
||||
6\url = "file:TilePackage/Qatar/2021-12-16_Qatar_ABMMC_Aerial_50cm_32639_Lvl8.tpk#-1:125" ;# Since Since 2022
|
||||
|
||||
size=6
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk', 'Bremen_RME_32632.tpk')
|
||||
#localMapFile = "World_Topo_Map.tpk"
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
# !!! 2022-07: vtpk at 3d scene are support since 100.13!!!
|
||||
1\url = "file:TilePackage/Qatar/2022-07-12_Qatar_OSM_WebMercator_Raster_Lvl16.tpk#-1:125" ;# Since Since 2022
|
||||
|
||||
2\url = "file:TilePackage/Qatar/Qatar_Aerial_WebMerc.tpk#-1:125" ;# Since Since 2022
|
||||
3\url = "file:TilePackage/Qatar/Qatar_Aerial_Islands_WebMerc.tpk#-1:125" ;# Since Since 2022
|
||||
|
||||
4\url = "file:TilePackage/Qatar/2021-12-09_Qatar_Doha_Aerial_50cm_WebMerc_Lvl18.tpk#-1:125" ;# Since Since 2022
|
||||
5\url = "file:TilePackage/Qatar/Qatar_NSA_BarzanCamp_Aerial_WebMerc.tpk#-1:125" ;# Since Since 2022
|
||||
6\url = "file:TilePackage/Qatar/2021-12-16_Qatar_ABMMC_Aerial_50cm_WebMerc_Lvl18.tpk#-1:125" ;# Since Since 2022
|
||||
|
||||
size=6
|
||||
|
||||
|
||||
[sceneObjectUrls]
|
||||
1\url = "file:BT_56_UTM_EPSG_25832.slpk"
|
||||
size=0
|
||||
|
||||
[elevationUrls]
|
||||
#Example: >>> 1\url = "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" <<<
|
||||
#Example: >>> 1\url = "file:srtm_38_02.tif" <<< -> /usr/share/arcgis/resources/elevation/srtm_38_02.tif
|
||||
#Example: >>> 1\url = "file:///shd/CTC/TOOLS/Bremen_Elevation/srtm_38_02.tif" <<<
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenElevation/ImageServer"
|
||||
1\url = "file:srtm_38_02.tif" ;# srtm_38_02.tif -> Bremen, 50m
|
||||
1\url = "file:2022-07-12_Qatar_DEM_float32.tif" ;# 2022-07-12_Qatar_DEM_float32.tif -> ~30m
|
||||
size=1
|
||||
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Relative" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget)
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Dynamic:Draped"
|
||||
7\operationalLayer = "Participants:Dynamic:Relative"
|
||||
8\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=12
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
center = "39RWJ3650000500" ;#QPointF(36500, 15500) -> Qatar Bldg
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 750000 ;# 90000 -> Bremen ; 7000000 -> NorthGermany
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 40000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
#viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
viewshedUrl = "" ;# // SightFan -> not necessary
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
+144
@@ -0,0 +1,144 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
[license]
|
||||
licenseString = "runtimestandard,1000,rud000189203,none,FAYRMD17J18S6HAZ4078" ;# 14.03.19, Fr. Jonischkeit: Aus 25er Pack für RME, bis Febr; also für Demo etc.
|
||||
|
||||
1\extensionString = "Exten1"
|
||||
size=0
|
||||
|
||||
[esriNetworkCache]
|
||||
enabled = 1 ;# enabled: 1=on ; 0=off, since V100.7.0
|
||||
|
||||
[symbology]
|
||||
type = "APP6D" ;# None MIL2525D MIL2525C APP6B APP6D
|
||||
extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
# EXCGEO01 (192.168.133.90) -> CCSAWS01
|
||||
# 1\url = "URL[#<minScale>:<maxScale>]"
|
||||
#Example: >>> 1\url = "http://HOSTNAME_FQDN/arcgis/rest/services/Folder/Svcname/MapServer#minScale:maxScale" <<<
|
||||
#
|
||||
#if the projection matches, tpk file and/or tile cache folder (win only) are supported:
|
||||
#1\url = "file:Topographic.tpk#-1:125" ;# -> /usr/share/arcgis/resources/Topographic.tpk
|
||||
#2\url = "file:///usr/share/arcgis/resources/World_Topo_Map.tpk#-1:125"
|
||||
# WINDOWS 1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#
|
||||
|
||||
1\url = "file:TilePackage/Qatar/2022-06-23_Qatar_OSM_32639.vtpk#-1:125" ;# Since Since 2022
|
||||
|
||||
2\url = "file:TilePackage/Qatar/Qatar_Aerial_32639.tpk#-1:125" ;# Since Since 2022
|
||||
3\url = "file:TilePackage/Qatar/Qatar_Aerial_Islands_32639.tpk#-1:125" ;# Since Since 2022
|
||||
|
||||
4\url = "file:TilePackage/Qatar/2021-12-09_Qatar_Doha_Aerial_50cm_32639_Lvl8.tpk#-1:125" ;# Since Since 2022
|
||||
5\url = "file:TilePackage/Qatar/Qatar_NSA_BarzanCamp_Aerial_32639.tpk#-1:125" ;# Since Since 2022
|
||||
6\url = "file:TilePackage/Qatar/2021-12-16_Qatar_ABMMC_Aerial_50cm_32639_Lvl8.tpk#-1:125" ;# Since Since 2022
|
||||
|
||||
size=6
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk', 'Bremen_RME_32632.tpk')
|
||||
#localMapFile = "World_Topo_Map.tpk"
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
# !!! 2022-07: vtpk at 3d scene are support since 100.13!!!
|
||||
1\url = "file:TilePackage/Qatar/2022-07-12_Qatar_OSM_WebMercator_Raster_Lvl16.tpk#-1:125" ;# Since Since 2022
|
||||
|
||||
2\url = "file:TilePackage/Qatar/Qatar_Aerial_WebMerc.tpk#-1:125" ;# Since Since 2022
|
||||
3\url = "file:TilePackage/Qatar/Qatar_Aerial_Islands_WebMerc.tpk#-1:125" ;# Since Since 2022
|
||||
|
||||
4\url = "file:TilePackage/Qatar/2021-12-09_Qatar_Doha_Aerial_50cm_WebMerc_Lvl18.tpk#-1:125" ;# Since Since 2022
|
||||
5\url = "file:TilePackage/Qatar/Qatar_NSA_BarzanCamp_Aerial_WebMerc.tpk#-1:125" ;# Since Since 2022
|
||||
6\url = "file:TilePackage/Qatar/2021-12-16_Qatar_ABMMC_Aerial_50cm_WebMerc_Lvl18.tpk#-1:125" ;# Since Since 2022
|
||||
|
||||
size=6
|
||||
|
||||
|
||||
[sceneObjectUrls]
|
||||
1\url = "file:BT_56_UTM_EPSG_25832.slpk"
|
||||
size=0
|
||||
|
||||
[elevationUrls]
|
||||
#Example: >>> 1\url = "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" <<<
|
||||
#Example: >>> 1\url = "file:srtm_38_02.tif" <<< -> /usr/share/arcgis/resources/elevation/srtm_38_02.tif
|
||||
#Example: >>> 1\url = "file:///shd/CTC/TOOLS/Bremen_Elevation/srtm_38_02.tif" <<<
|
||||
#1\url = "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/BremenElevation/ImageServer"
|
||||
1\url = "file:srtm_38_02.tif" ;# srtm_38_02.tif -> Bremen, 50m
|
||||
1\url = "file:2022-07-12_Qatar_DEM_float32.tif" ;# 2022-07-12_Qatar_DEM_float32.tif -> ~30m
|
||||
size=1
|
||||
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Relative" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget)
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Dynamic:Draped"
|
||||
7\operationalLayer = "Participants:Dynamic:Relative"
|
||||
8\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=12
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
center = "39RWJ3650000500" ;#QPointF(36500, 15500) -> Qatar Bldg
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 750000 ;# 90000 -> Bremen ; 7000000 -> NorthGermany
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 40000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
#viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
viewshedUrl = "" ;# // SightFan -> not necessary
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
+416
@@ -0,0 +1,416 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Commom base types
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include <situation_map_export.h>
|
||||
#include "point3D.h"
|
||||
#include <Symbology/symbol_dictionary.h>
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QString>
|
||||
#include <QColor>
|
||||
#include <QList>
|
||||
#include <QPointF>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
const char UniqueMapIdAttribute[] = "UniqueSituationMapId";
|
||||
const char IsPickableAttribute[] = "MapObjectIsPickable";
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief UniqueMapId define the uniqueMapId used within SituationMap to distinguish AbstractMapObject.
|
||||
*/
|
||||
using UniqueMapId = quint32; // see UniqueMapId @ id_handler.h
|
||||
|
||||
/**
|
||||
* @brief INVALID_MAP_ID defines an invalid uniqueMapId.
|
||||
*/
|
||||
static const UniqueMapId INVALID_MAP_ID = static_cast<SituationMap::UniqueMapId>(-1);
|
||||
|
||||
/**
|
||||
* @brief isUniqueMapIdValid to check the validity of the uniqueMapId
|
||||
* @param uniqueMapId to check
|
||||
* @return True if valid, otherwise false
|
||||
*/
|
||||
inline bool isUniqueMapIdValid(const UniqueMapId &uniqueMapId) { return uniqueMapId != INVALID_MAP_ID; }
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
// 'takeover' into our namespace :
|
||||
using AdditionalSymbolType = AdvancedSymbology::AdditionalSymbolType;
|
||||
using AdditionalSymbolTypeCont = AdvancedSymbology::AdditionalSymbolTypeCont;
|
||||
|
||||
using Injury = AdvancedSymbology::Injury;
|
||||
|
||||
using SymbolImage = AdvancedSymbology::SymbolImage;
|
||||
|
||||
using SymbolDataToRender = AdvancedSymbology::SymbolDataToRender;
|
||||
using Role = AdvancedSymbology::Role;
|
||||
// : 'takeover' into our namespace
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
class EsriNetworkCacheSettings
|
||||
{
|
||||
public:
|
||||
bool enabled = false;
|
||||
// some parameter will be added with V100.8
|
||||
|
||||
// for convenience:
|
||||
QString toString() const
|
||||
{
|
||||
QString str (QStringLiteral("enabled='%1'").arg(enabled));
|
||||
return str;
|
||||
}
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
enum class Mode
|
||||
{
|
||||
Undefined = 0,
|
||||
Mode_2D = 1,
|
||||
Mode_3D = 2
|
||||
};
|
||||
|
||||
enum class NavigationConstraint
|
||||
{
|
||||
Undefined = -1,
|
||||
None = 0,
|
||||
StayAbove = 1
|
||||
};
|
||||
|
||||
|
||||
|
||||
inline bool isValid(const Mode curMode)
|
||||
{
|
||||
return curMode != Mode::Undefined;
|
||||
}
|
||||
|
||||
inline Mode toggleMode(const Mode curMode)
|
||||
{
|
||||
switch (curMode)
|
||||
{
|
||||
case Mode::Undefined:
|
||||
return Mode::Mode_2D;
|
||||
break;
|
||||
case Mode::Mode_2D:
|
||||
return Mode::Mode_3D;
|
||||
break;
|
||||
case Mode::Mode_3D:
|
||||
return Mode::Mode_2D;
|
||||
break;
|
||||
}
|
||||
return Mode::Mode_2D;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief The DrawStatus enum to indicate the drawStatus of the 3D scene
|
||||
*/
|
||||
enum class DrawStatus
|
||||
{
|
||||
InProgress = 0,
|
||||
Completed = 1
|
||||
};
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief The ObjectAppearance enum differentiates between the
|
||||
* technical and the tactical appearance of an AbstractMapObject.
|
||||
*/
|
||||
enum class ObjectAppearance
|
||||
{
|
||||
Technical,
|
||||
Tactical
|
||||
};
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief The GridType enum differentiates different grids.
|
||||
*/
|
||||
enum class GridType
|
||||
{
|
||||
NoType, ///< No grid
|
||||
LatLon, ///< grid of type LatitudeLongitude
|
||||
MGRS, ///< grid of type MGRS
|
||||
UTM, ///< grid of type UTM
|
||||
USGN ///< grid of type USGN
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief The LayerType enum differentiates the layer purpose.
|
||||
* \sa \ref LayerTypeOverview
|
||||
*/
|
||||
enum class LayerType
|
||||
{
|
||||
Undefined, ///< Undefined
|
||||
Basemap, ///< Contains a basemap.
|
||||
JumpPoint, ///< Contains JumpPoints
|
||||
SnapshotOverlay, ///< Contains overlay of snapshot
|
||||
Overlay, ///< Contains overlays, e.g. of Overlay-/PlanEditor, direct on top on Basemap layer
|
||||
Operational, ///< Contains operational objects like AbstractMapObjects.
|
||||
Tools, ///< Contains tools like Viewshed etc.
|
||||
Rubberband, ///< Contains Rubberband(s)
|
||||
EmergencyCall ///< Contains EmergencyCall(s)
|
||||
};
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief The RenderingMode enum to specify the GraphicsRenderingMode
|
||||
*/
|
||||
enum class RenderingMode
|
||||
{
|
||||
Dynamic, ///< Dynamic (0)
|
||||
Static ///< Static (1)
|
||||
};
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
enum class SurfacePlacement
|
||||
{
|
||||
Draped, ///< Draped (0)
|
||||
Absolute, ///< Absolute (1)
|
||||
Relative ///< Relative (2)
|
||||
};
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief The BasemapType enum differentiates the basemap layer purpose.
|
||||
* \sa \ref LayerTypeOverview
|
||||
*/
|
||||
enum class BasemapType
|
||||
{
|
||||
Undefined, ///< Undefined
|
||||
Aerial, ///< Aerial basemap.
|
||||
Topographic, ///< Topographic basemap
|
||||
};
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* @brief SymbolSizeLdefault defines the default size 'L' of a symbol in pixel.
|
||||
* 'L' describes a symbol reference size (see MIL2525 and APP6).
|
||||
*/
|
||||
const int SymbolSizeLdefault = 30;
|
||||
|
||||
const double symbolScaleMinimum = 0.1; ///< 10%
|
||||
const double symbolScaleMaximum = 4.0; ///< 200*
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief The SymbolData struct contains parameter of a logical symbol
|
||||
* like sidc, color and size.
|
||||
* (To render a symbol the struct SymbolDataToRender have to be used.)
|
||||
*
|
||||
*/
|
||||
struct SymbolData
|
||||
{
|
||||
QString sidc;
|
||||
QColor color = Qt::magenta;
|
||||
float size = 1.0;
|
||||
bool useAlwaysDictionaryRenderer = false;
|
||||
QVariantMap attributeMap;
|
||||
|
||||
/**
|
||||
* @brief Get an default structure to render this symbol using AdvancedSymbology.
|
||||
* @return
|
||||
*/
|
||||
SymbolDataToRender getDefaultRenderData() const
|
||||
{
|
||||
SymbolDataToRender renderData;
|
||||
|
||||
renderData.sidc = sidc;
|
||||
// renderData.sizeL should stay on default, size is not really adequate
|
||||
|
||||
// assume filled symbols:
|
||||
// renderData.m_lineColor = ; // stay default (black)
|
||||
renderData.fillColor = color;
|
||||
|
||||
return renderData;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief operator== Compare two objects
|
||||
* @param other to be compared with
|
||||
* @return true if identical, otherwise false.
|
||||
*/
|
||||
bool operator==(const SymbolData &other) const
|
||||
{
|
||||
return ((this->sidc == other.sidc) &&
|
||||
(this->color == other.color) &&
|
||||
(this->size == other.size) &&
|
||||
(this->useAlwaysDictionaryRenderer == other.useAlwaysDictionaryRenderer) &&
|
||||
(this->attributeMap == other.attributeMap)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief operator!= Compare two objects
|
||||
* @param other to be compared with
|
||||
* @return true if NOT identical, otherwise false.
|
||||
*/
|
||||
bool operator!=(const SymbolData &other) const
|
||||
{
|
||||
return !(*this == other);
|
||||
}
|
||||
|
||||
|
||||
QString toString() const
|
||||
{
|
||||
QString str;
|
||||
|
||||
str = QStringLiteral("sidc='%1'").arg(sidc);
|
||||
str += QStringLiteral(" color='%1'").arg(color.name(QColor::HexArgb));
|
||||
str += QStringLiteral(" size='%1'").arg(size);
|
||||
str += QStringLiteral(" useAlwaysDictionaryRenderer='%1'").arg(useAlwaysDictionaryRenderer ? QStringLiteral("true") : QStringLiteral("false"));
|
||||
|
||||
for (auto it = attributeMap.begin(); it != attributeMap.end(); ++it)
|
||||
str += QStringLiteral("attribute[%1]='%2'").arg(it.key(), it.value().toString());
|
||||
// str +=
|
||||
// str += QStringLiteral(" SymChanged="); // ToDo: to clarify what's the meaning of this
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
|
||||
/**
|
||||
* @brief PositionCont defines container of coordinates.
|
||||
*/
|
||||
using PositionCont = QVector<Point3D>;
|
||||
|
||||
inline PositionCont convert2D3D(const QList<QPointF> &lst)
|
||||
{
|
||||
PositionCont posCont;
|
||||
posCont.reserve(lst.size());
|
||||
for (auto i : qAsConst(lst) )
|
||||
posCont.append(Point3D::fromQPointF(i));
|
||||
return posCont;
|
||||
}
|
||||
|
||||
inline PositionCont convert2D3D(const QVector<QPointF> &vec)
|
||||
{
|
||||
PositionCont posCont;
|
||||
posCont.reserve(vec.size());
|
||||
for (auto i : qAsConst(vec) )
|
||||
posCont.append(Point3D::fromQPointF(i));
|
||||
return posCont;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
/*!
|
||||
\brief Define different Marker.
|
||||
*/
|
||||
enum class MarkerSymbolType
|
||||
{
|
||||
Undefined,
|
||||
// provided by ESRI
|
||||
Circle, /*!< provided by ESRI. */
|
||||
Cross, /*!< provided by ESRI. */
|
||||
Diamond, /*!< provided by ESRI. */
|
||||
Square, /*!< provided by ESRI. */
|
||||
X, /*!< provided by ESRI. */
|
||||
Triangle, /*!< provided by ESRI. */
|
||||
|
||||
// provided by our own (see directory 'Resources'):
|
||||
PushPin2D /*!< Realized on out own, see 'Resources'.*/
|
||||
};
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
/*!
|
||||
\brief Define different line pattern.
|
||||
*/
|
||||
enum class LinePattern
|
||||
{
|
||||
Dash,
|
||||
DashDot,
|
||||
DashDotDot,
|
||||
Dot,
|
||||
Null,
|
||||
Solid
|
||||
};
|
||||
|
||||
|
||||
/*!
|
||||
\brief Define different fill pattern.
|
||||
*/
|
||||
enum class FillPattern
|
||||
{
|
||||
BackwardDiagonal, // /
|
||||
Cross,
|
||||
DiagonalCross,
|
||||
ForwardDiagonal, // '\'
|
||||
Horizontal,
|
||||
Null,
|
||||
Solid,
|
||||
Vertical
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
/*!
|
||||
* \brief Define some second-tier visual components. The user should be informed if one of them changes.
|
||||
*/
|
||||
enum class VisualComponent
|
||||
{
|
||||
Grid,
|
||||
PosititionString,
|
||||
TimeString,
|
||||
CompassRose,
|
||||
OverviewMap,
|
||||
TacticalAppearance,
|
||||
ExerciseTimeString
|
||||
};
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* Angle in degree, geographic (orientation is north and mathematical negative)
|
||||
* a(0)
|
||||
* |
|
||||
* a(270) --O-- a(90)
|
||||
* |
|
||||
* a(180)
|
||||
*/
|
||||
|
||||
} // namespace SituationMap
|
||||
+161
@@ -0,0 +1,161 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
|
||||
|
||||
|
||||
#-- bottom_left: 30 U WB 56700 58000 = lon, lat: -2.190721 , 51.070713 (-0.03823529444, 0.891352093191)
|
||||
#-- Salisbury England
|
||||
#INSERT INTO asm.asm_training_area(id, name, bottom_left_x, bottom_left_y, height, width)
|
||||
# VALUES (XXX, 'Salisbury', -0.03823529444, 0.891352093191, 30000, 30000);
|
||||
|
||||
#-- 2D
|
||||
#INSERT INTO asm.asm_map_description (id, name, description, training_area_id, map_description_type_id, map_type_id, obj_order, url, min_scale, max_scale)
|
||||
# VALUES (XXX6, 'Salisbury (OSM)', 'Salisbury (OSM)', 30, 1, 1, 0, 'file:TilePackage/Salisbury/2021-09-01_Salisbury_32630.tpk', -1, 125);
|
||||
|
||||
|
||||
|
||||
[license]
|
||||
licenseString = "runtimestandard,1000,rud000189203,none,A3C63PJPXMLDLMZ59123" ;# ESRI-BOS-Service, 05.11.2018
|
||||
|
||||
1\extensionString = ""
|
||||
size=0
|
||||
|
||||
[esriNetworkCache]
|
||||
enabled = 1 ;# enabled: 1=on ; 0=off, since V100.7.0
|
||||
|
||||
[symbology]
|
||||
type = "APP6D" ;# None | MIL2525D | MIL2525C | APP6B | APP6D
|
||||
extraSymbols = ":/advancedSymbology/CivilSymbols" ;# ':/advancedSymbology/CivilSymbols'
|
||||
|
||||
[mapUrls]
|
||||
# 1\url = "URL[#<minScale>:<maxScale>]"
|
||||
#Example: >>> 1\url = "http://HOSTNAME_FQDN/arcgis/rest/services/Folder/Svcname/MapServer#minScale:maxScale" <<<
|
||||
#
|
||||
#if the projection matches, tpk file and/or tile cache folder (win only) are supported:
|
||||
#1\url = "file:Topographic.tpk#-1:125" ;# -> /usr/share/arcgis/resources/Topographic.tpk
|
||||
#2\url = "file:///usr/share/arcgis/resources/World_Topo_Map.tpk#-1:125"
|
||||
# WINDOWS 1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#
|
||||
#For factory
|
||||
#1\url = "http://ecvmgeo02/arcgis/rest/services/Norddeutschland/Norddeutschland_32632/MapServer#-1:125" ;# Since 2017-08-29
|
||||
#2\url = "http://ecvmgeo02/arcgis/rest/services/Bremen/Hemelingen_TIF_32632/MapServer#-1:125" ;# Since 2017-08-29
|
||||
|
||||
#For on-site
|
||||
1\url = "file:TilePackage/Unterluess/2021-10-14_Unterluess_Aerial_32632.tpk" ;# Since 2021-10-15
|
||||
|
||||
#For on-site - windows
|
||||
#1\url = "file:///C:/EXTFW/resources/Guez_Topo_32632_guez_topo_32632/Guez Topographic#-1:125"
|
||||
#2\url = "file:///C:/EXTFW/resources/Guez_Aerial_32632_Guez_Aerial_32632/Guez Aerial#-1:125"
|
||||
size=1
|
||||
|
||||
|
||||
basemapLayernamePrefix = "" ;# default: "ArcGISTiledLayer_URL_"
|
||||
|
||||
# For debugging only:
|
||||
# an non-empty value will overwrite/skip the mapUrls:
|
||||
#localMapFile = "Topographic.tpk" ;# empty (if so, try 'Topographic.tpk')
|
||||
# : For debugging only
|
||||
|
||||
|
||||
|
||||
[sceneUrls]
|
||||
#For factory
|
||||
#1\url = "http://ecvmgeo02/arcgis/rest/services/Norddeutschland/Norddeutschland_WebMerc/MapServer" ;# Since 2017-08-29
|
||||
#2\url = "http://ecvmgeo02/arcgis/rest/services/Bremen/Hemelingen_TIF_WebMerc/MapServer" ;# Since 2017-08-29
|
||||
|
||||
#For on-site
|
||||
|
||||
#For on-site - windows
|
||||
#1\url = "file:///C:/EXTFW/resources/Guez_Topo_WebMerc_Guez_Topo_WebMerc/Guez Topographic#-1:125"
|
||||
#2\url = "file:///C:/EXTFW/resources/Guez_Aerial_WebMerc_Guez_Aerial_WebMerc/Guez Aerial#-1:125"
|
||||
|
||||
1\url = "file:Topographic.tpk#-1:125"
|
||||
size=1
|
||||
|
||||
|
||||
[sceneObjectUrls]
|
||||
#1\url = "http://ecvmgeo02/arcgis/rest/services/Hosted/BT56_rev576/SceneServer" ;# Since 2017-08-29 (not working yet)
|
||||
1\url = "file:GUEZ_EPSG3857.slpk" ;# Since 2019-03-26
|
||||
2\url = "file:GUEZ_EPSG3857.slpk" ;# Since 2019-03-26
|
||||
size=0
|
||||
|
||||
[elevationUrls]
|
||||
#Example: >>> 1\url = "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" <<<
|
||||
#Example: >>> 1\url = "file:srtm_38_02.tif" <<< -> /usr/share/arcgis/resources/elevation/srtm_38_02.tif
|
||||
#Example: >>> 1\url = "file:///shd/CTC/TOOLS/Bremen_Elevation/srtm_38_02.tif" <<<
|
||||
#1\url = "http://ecvmgeo02/arcgis/rest/services/Bremen/BremenElevation/ImageServer" ;# Since 2017-08-29
|
||||
#1\url = "file:srtm_38_02.tif" ;# srtm_38_02.tif -> Bremen, 50m
|
||||
#1\url = "file:n52_e011_1arc_v3.tif" ;# n52_e011_1arc_v3.tif -> Letzlingen, ??m
|
||||
1\url = "file:e010n52_TFRM.dt2" ;# e010n52_TFRM.dt2.dt1 -> Unterlüß/Unterluess, ??m
|
||||
size=1
|
||||
|
||||
|
||||
[operationalLayer]
|
||||
# "<Layername>:<Static|Dynamic>:<Draped|Absolute|Relative>"
|
||||
1\operationalLayer = "Buildings:Dynamic:Relative" ;# Dynamic to avoid flicker at 3D if selection changes (MapObjectSelectionWidget)
|
||||
2\operationalLayer = "TechnicalAreas:Dynamic:Draped" ;# TechnicalArea@AES (MOUTArea), TrainingArea, ShootBackArea
|
||||
3\operationalLayer = "MountingPoints:Dynamic:Absolute"
|
||||
4\operationalLayer = "IEDs:Dynamic:Relative"
|
||||
5\operationalLayer = "BuildingOwnership:Dynamic:Relative" ;# keep ExtrusionMode (AbsoluteHeight) in mind
|
||||
6\operationalLayer = "AES:Static:Draped" ;# switch to Static (NLDEVCTRL-692 'Beheben des Speicher(-leck) Problems')
|
||||
7\operationalLayer = "Participants:Dynamic:Relative"
|
||||
8\operationalLayer = "Participants_1:Dynamic:Relative"
|
||||
9\operationalLayer = "Participants_2:Dynamic:Relative"
|
||||
10\operationalLayer = "Participants_3:Dynamic:Relative"
|
||||
11\operationalLayer = "Participants_4:Dynamic:Relative"
|
||||
12\operationalLayer = "Participants_5:Dynamic:Relative"
|
||||
size=12
|
||||
|
||||
participantLayername = "Participants:Dynamic:Relative" ;# default: "Participants:Dynamic:Relative"
|
||||
|
||||
operationalLayerForCubes = "BuildingOwnership" ;# must match with an operationalLayer
|
||||
|
||||
|
||||
[map]
|
||||
|
||||
# full mgrs coordinate
|
||||
# East;North
|
||||
#center = "32UMD9307078331" ;#QPointF(93070, 78331) -> BT56 - Bremen
|
||||
center = "32UND 86500 58100" ;#QPointF(86500, 58100) -> Unterlüß/Unterluess
|
||||
|
||||
zoomFactorBase = 1.0015 ;# to configure mouse wheel for zooming, only values greater 1 and lower 1.1 will be accepted
|
||||
|
||||
initialScale = 40000 ;# 90000 -> Bremen ; 7000000 -> NorthGermany
|
||||
|
||||
# scaleMin and scaleMax (of map!) may be overwritten, if a layer is loaded manually -> to rethink
|
||||
scaleMin = -1 ;# big value (e.g. 10000000) limiting zoomOut 1:10000000 -> 0.0000001
|
||||
scaleMax = -1 ;# small value (e.g. 1000) limiting zoomIn 1:1000 -> 0.001
|
||||
|
||||
scaleHasVisibility = 70000 ;# zoom out -> some objects disappear to not overload the map
|
||||
|
||||
gridType = "MGRS" ;# Grid: NoType, MGRS, UTM, USGN, LatLon
|
||||
|
||||
animationDuration = 0.5 ;# default -> 0.5 (0< 0 -> off)
|
||||
rocketDuration = 2.0 ;# default -> 2.0
|
||||
|
||||
|
||||
[widgets]
|
||||
addMapWidgets = 1
|
||||
addSideBar = 1
|
||||
|
||||
[viewshed]
|
||||
# // arcgisonline -> only demo (keep proxy in mind!)
|
||||
viewshedUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed" ;# // only demo!!!
|
||||
|
||||
|
||||
[rubberband]
|
||||
drawColor = "#00406e" ;# Color settings of rubberband
|
||||
fillColor = "#007eC0"
|
||||
handleDrawColor = "#00406e" ;# Outline color of handles
|
||||
handleFillColor = "#00406e" ;# fill color of handles
|
||||
selectionColor = "red" ;# fill or draw color if handle is selected
|
||||
frameColor = "#00406e" ;# outline color of frame handle (bounding box)
|
||||
frameFillColor = "#5043b0e0" ;# fill color of frame handle (bounding box)
|
||||
frameHandleMargin = 0 ;# Margin of frame handle in pixel
|
||||
previewOffset = @Point(32 32) ;# Offset of preview icon to mouse position
|
||||
previewSize = 32 ;# Size of preview icon
|
||||
pickingRatio = 8 ;# Size of rubberband point handles
|
||||
lineHandleWidth = 4 ;# Size of rubberband line handles
|
||||
|
||||
# to be continued
|
||||
+751
@@ -0,0 +1,751 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Utilities for SituationMap
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "situation_map_utils.h"
|
||||
#include "abstract_effect_simulation.h"
|
||||
|
||||
|
||||
// Esri
|
||||
#include <arcgis/CoreTypes.h> // for LicenseStatus
|
||||
#include <arcgis/MapTypes.h>
|
||||
#include <arcgis/Viewpoint.h>
|
||||
#include <arcgis/Camera.h>
|
||||
|
||||
|
||||
#include <arcgis/arcgisversion.h> // This file is created by RME, not ESRI
|
||||
|
||||
#if ACRGIS_VERSION >= 0x640600 // 100.6.0 / Update 6
|
||||
#define HAS_SURFACEPLACEMENT_RELATIVETOSCENE
|
||||
#endif
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QString>
|
||||
#include <QPointF>
|
||||
#include <QRect>
|
||||
|
||||
#include <sstream>
|
||||
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::PositionCont &value)
|
||||
{
|
||||
stream << "PosCont(" << value.size() << "): ";
|
||||
for (const SituationMap::Point3D &item : value)
|
||||
stream << item << ";";
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
//std::ostream& operator<< (std::ostream& stream,
|
||||
// const QRect& value)
|
||||
//{
|
||||
// stream << "QRect(topLeft=" << value.topLeft()
|
||||
// << " bottomRight=" << value.bottomRight()
|
||||
// << " width=" << value.width()
|
||||
// << " height=" << value.height()
|
||||
// << " center=" << value.center()
|
||||
// << " bottom=" << value.bottom()
|
||||
// << " left=" << value.left()
|
||||
// << ")";
|
||||
// return stream;
|
||||
//}
|
||||
|
||||
QString toString(const QRectF &value)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
stream << "QRect(topLeft=" << value.topLeft()
|
||||
<< " bottomRight=" << value.bottomRight()
|
||||
<< " width=" << value.width()
|
||||
<< " height=" << value.height()
|
||||
<< " center=" << value.center()
|
||||
<< " bottom=" << value.bottom()
|
||||
<< " left=" << value.left()
|
||||
<< ")";
|
||||
return QString::fromStdString(stream.str());
|
||||
}
|
||||
|
||||
|
||||
std::ostream &operator<<(std::ostream &stream, const QColor &value)
|
||||
{
|
||||
stream << "QColor("
|
||||
<< value.name(QColor::HexArgb).toUtf8().data()
|
||||
<< ")";
|
||||
return stream;
|
||||
}
|
||||
|
||||
QString toString(const QColor &value)
|
||||
{
|
||||
return value.name(QColor::HexArgb);
|
||||
}
|
||||
|
||||
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
QString toString(const AesEffectState value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case AesEffectState::Removed:
|
||||
return QStringLiteral("AesRemoved");
|
||||
case AesEffectState::Expired:
|
||||
return QStringLiteral("AesExpired");
|
||||
case AesEffectState::Error:
|
||||
return QStringLiteral("AesError");
|
||||
case AesEffectState::Paused:
|
||||
return QStringLiteral("AesPaused");
|
||||
case AesEffectState::Prepared:
|
||||
return QStringLiteral("AesExpired");
|
||||
case AesEffectState::Created:
|
||||
return QStringLiteral("AesCreated");
|
||||
case AesEffectState::Activated:
|
||||
return QStringLiteral("AesActivated");
|
||||
case AesEffectState::Unknown:
|
||||
return QStringLiteral("AesUnknown");
|
||||
} // switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("AesEffectStateERROR");
|
||||
}
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const AesEffectState &value)
|
||||
{
|
||||
stream << toString(value).data();
|
||||
return stream;
|
||||
}
|
||||
|
||||
QString toString(DrawStatus value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case SituationMap::DrawStatus::InProgress:
|
||||
return QStringLiteral("DSInProgress");
|
||||
case SituationMap::DrawStatus::Completed:
|
||||
return QStringLiteral("DSCompleted");
|
||||
} // switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("DrawStatusERROR");
|
||||
}
|
||||
|
||||
|
||||
QString toString(GridType value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case GridType::NoType:
|
||||
return QStringLiteral("NoType");
|
||||
case GridType::LatLon:
|
||||
return QStringLiteral("LatLon");
|
||||
case GridType::MGRS:
|
||||
return QStringLiteral("MGRS");
|
||||
case GridType::USGN:
|
||||
return QStringLiteral("USGN");
|
||||
case GridType::UTM:
|
||||
return QStringLiteral("UTM");
|
||||
} // switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("GridTypeERROR");
|
||||
}
|
||||
|
||||
QString toString(LayerType value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case LayerType::Undefined:
|
||||
return QStringLiteral("LTUndefined");
|
||||
case LayerType::Basemap:
|
||||
return QStringLiteral("LTBasemap");
|
||||
case LayerType::JumpPoint:
|
||||
return QStringLiteral("LTJumpPoint");
|
||||
case LayerType::SnapshotOverlay:
|
||||
return QStringLiteral("LTSnapshotOverlay");
|
||||
case LayerType::Overlay:
|
||||
return QStringLiteral("LTOverlay");
|
||||
case LayerType::Operational:
|
||||
return QStringLiteral("LTOperational");
|
||||
case LayerType::Tools:
|
||||
return QStringLiteral("LTTools");
|
||||
case LayerType::Rubberband:
|
||||
return QStringLiteral("LTRubberband");
|
||||
case LayerType::EmergencyCall:
|
||||
return QStringLiteral("LTEmergencyCall");
|
||||
} // switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("LayerTypeERROR");
|
||||
}
|
||||
|
||||
QString toString(BasemapType value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case BasemapType::Undefined:
|
||||
return QStringLiteral("BMTUndefined");
|
||||
case BasemapType::Aerial:
|
||||
return QStringLiteral("BMTAerial");
|
||||
case BasemapType::Topographic:
|
||||
return QStringLiteral("BMTTopographic");
|
||||
} // switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("BasemapTypeERROR");
|
||||
}
|
||||
|
||||
QString toString(SituationMap::RenderingMode value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case RenderingMode::Dynamic:
|
||||
return QStringLiteral("Dynamic");
|
||||
case RenderingMode::Static:
|
||||
return QStringLiteral("Static");
|
||||
} // switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("RenderingModeERROR");
|
||||
}
|
||||
bool fromString(RenderingMode &renderingMode, const QString &str)
|
||||
{
|
||||
if (str.compare(QStringLiteral("Dynamic")) == 0)
|
||||
{
|
||||
renderingMode = RenderingMode::Dynamic;
|
||||
return true;
|
||||
}
|
||||
if (str.compare(QStringLiteral("Static")) == 0)
|
||||
{
|
||||
renderingMode = RenderingMode::Static;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
QString toString(SurfacePlacement value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case SurfacePlacement::Draped:
|
||||
return QStringLiteral("Draped");
|
||||
case SurfacePlacement::Absolute:
|
||||
return QStringLiteral("Absolute");
|
||||
case SurfacePlacement::Relative:
|
||||
return QStringLiteral("Relative");
|
||||
} // switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("SurfacePlacementERROR");
|
||||
}
|
||||
|
||||
bool fromString(SituationMap::SurfacePlacement &surfacePlacement, const QString &str)
|
||||
{
|
||||
if (str.compare(QStringLiteral("Draped")) == 0)
|
||||
{
|
||||
surfacePlacement = SurfacePlacement::Draped;
|
||||
return true;
|
||||
}
|
||||
if (str.compare(QStringLiteral("Absolute")) == 0)
|
||||
{
|
||||
surfacePlacement = SurfacePlacement::Absolute;
|
||||
return true;
|
||||
}
|
||||
if (str.compare(QStringLiteral("Relative")) == 0)
|
||||
{
|
||||
surfacePlacement = SurfacePlacement::Relative;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
QString toDisplayString(BasemapType value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case BasemapType::Undefined:
|
||||
return QStringLiteral("TUndefined");
|
||||
case BasemapType::Aerial:
|
||||
return QStringLiteral("Aerial");
|
||||
case BasemapType::Topographic:
|
||||
return QStringLiteral("Topographic");
|
||||
} // switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("BasemapTypeERROR");
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool fromString(GridType &gridType, const QString &str)
|
||||
{
|
||||
if (str.compare(QStringLiteral("NoType")) == 0)
|
||||
{
|
||||
gridType = GridType::NoType;
|
||||
return true;
|
||||
}
|
||||
if (str.compare(QStringLiteral("MGRS"), Qt::CaseInsensitive) == 0)
|
||||
{
|
||||
gridType = GridType::MGRS;
|
||||
return true;
|
||||
}
|
||||
if (str.compare(QStringLiteral("UTM"), Qt::CaseInsensitive) == 0)
|
||||
{
|
||||
gridType = GridType::UTM;
|
||||
return true;
|
||||
}
|
||||
if (str.compare(QStringLiteral("USGN"), Qt::CaseInsensitive) == 0)
|
||||
{
|
||||
gridType = GridType::USGN;
|
||||
return true;
|
||||
}
|
||||
if (str.compare(QStringLiteral("LatLon"), Qt::CaseInsensitive) == 0)
|
||||
{
|
||||
gridType = GridType::LatLon;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const DrawStatus value)
|
||||
{
|
||||
stream << toString(value).data();
|
||||
return stream;
|
||||
}
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const GridType value)
|
||||
{
|
||||
stream << toString(value).data();
|
||||
return stream;
|
||||
}
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::LayerType value)
|
||||
{
|
||||
stream << toString(value).data();
|
||||
return stream;
|
||||
}
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::BasemapType value)
|
||||
{
|
||||
stream << toString(value).data();
|
||||
return stream;
|
||||
}
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::RenderingMode value)
|
||||
{
|
||||
stream << toString(value).data();
|
||||
return stream;
|
||||
}
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::SurfacePlacement value)
|
||||
{
|
||||
stream << toString(value).data();
|
||||
return stream;
|
||||
}
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::EsriNetworkCacheSettings value)
|
||||
{
|
||||
stream << "EsriNetworkCacheSettings: ";
|
||||
stream << value.toString();
|
||||
return stream;
|
||||
}
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// namespace Esri::ArcGISRuntime
|
||||
namespace Esri
|
||||
{
|
||||
namespace ArcGISRuntime
|
||||
{
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::Error &value)
|
||||
{
|
||||
stream << toString(value);
|
||||
return stream;
|
||||
}
|
||||
|
||||
QString toString(const Error &value)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
stream << "Esri::ArcGISRuntime::Error: "
|
||||
<< " code=" << value.code()
|
||||
<< ", domain=" << (int)value.domain()
|
||||
<< ", extendedErrorType=" << (int)value.extendedErrorType()
|
||||
<< ", message='" << value.message() << "'"
|
||||
<< ", additionalMessage='" << value.additionalMessage() << "'";
|
||||
return QString::fromStdString(stream.str());
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::LicenseStatus value)
|
||||
{
|
||||
stream << "EsriLicenseStatus(" << toString(value)
|
||||
<< ")";
|
||||
return stream;
|
||||
}
|
||||
|
||||
QString toString(const Esri::ArcGISRuntime::LicenseStatus value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case Esri::ArcGISRuntime::LicenseStatus::Invalid:
|
||||
return QStringLiteral("Invalid");
|
||||
case Esri::ArcGISRuntime::LicenseStatus::Expired:
|
||||
return QStringLiteral("Expired");
|
||||
case Esri::ArcGISRuntime::LicenseStatus::LoginRequired:
|
||||
return QStringLiteral("LoginRequired");
|
||||
case Esri::ArcGISRuntime::LicenseStatus::Valid:
|
||||
return QStringLiteral("Valid");
|
||||
} // switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("Esri-LicenseStatusERROR");
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
#if ACRGIS_VERSION >= 0x640800 // 100.8.0 / Update 8
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::NetworkCachePolicy value)
|
||||
{
|
||||
stream << "EsriNCP(" << toString(value)
|
||||
<< ")";
|
||||
return stream;
|
||||
}
|
||||
QString toString(const NetworkCachePolicy value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case Esri::ArcGISRuntime::NetworkCachePolicy::AlwaysCache:
|
||||
return QStringLiteral("AlwaysCache");
|
||||
case Esri::ArcGISRuntime::NetworkCachePolicy::AlwaysNetwork:
|
||||
return QStringLiteral("AlwaysNetwork");
|
||||
case Esri::ArcGISRuntime::NetworkCachePolicy::PreferCache:
|
||||
return QStringLiteral("PreferCache");
|
||||
case Esri::ArcGISRuntime::NetworkCachePolicy::PreferNetwork:
|
||||
return QStringLiteral("PreferNetwork");
|
||||
} // switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("Esri-NetworkCachePolicyERROR");
|
||||
}
|
||||
#endif // ACRGIS_VERSION
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::LoadStatus value)
|
||||
{
|
||||
stream << "EsriLS(" << toString(value)
|
||||
<< ")";
|
||||
return stream;
|
||||
}
|
||||
|
||||
QString toString(const Esri::ArcGISRuntime::LoadStatus value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case Esri::ArcGISRuntime::LoadStatus::Loaded:
|
||||
return QStringLiteral("Loaded");
|
||||
case Esri::ArcGISRuntime::LoadStatus::Loading:
|
||||
return QStringLiteral("Loading");
|
||||
case Esri::ArcGISRuntime::LoadStatus::FailedToLoad:
|
||||
return QStringLiteral("FailedToLoad");
|
||||
case Esri::ArcGISRuntime::LoadStatus::NotLoaded:
|
||||
return QStringLiteral("NotLoaded");
|
||||
case Esri::ArcGISRuntime::LoadStatus::Unknown:
|
||||
return QStringLiteral("Unknown");
|
||||
} // switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("Esri-LoadStatusERROR");
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::LayerType value)
|
||||
{
|
||||
stream << "EsriLT(" << toString(value)
|
||||
<< ")";
|
||||
return stream;
|
||||
}
|
||||
|
||||
QString toString(const Esri::ArcGISRuntime::LayerType value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case Esri::ArcGISRuntime::LayerType::ImageTiledLayer:
|
||||
return QStringLiteral("ImageTiledLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::ServiceImageTiledLayer:
|
||||
return QStringLiteral("ServiceImageTiledLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::ArcGISMapImageLayer:
|
||||
return QStringLiteral("ArcGISMapImageLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::ArcGISTiledLayer:
|
||||
return QStringLiteral("ArcGISTiledLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::FeatureCollectionLayer:
|
||||
return QStringLiteral("FeatureCollectionLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::FeatureLayer:
|
||||
return QStringLiteral("FeatureLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::KMLLayer:
|
||||
return QStringLiteral("KMLLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::BingMapLayer:
|
||||
return QStringLiteral("BingMapLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::RasterLayer:
|
||||
return QStringLiteral("RasterLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::UnsupportedLayer:
|
||||
return QStringLiteral("UnsupportedLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::MobileBasemapLayer:
|
||||
return QStringLiteral("MobileBasemapLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::ArcGISVectorTiledLayer:
|
||||
return QStringLiteral("ArcGISVectorTiledLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::ArcGISSceneLayer:
|
||||
return QStringLiteral("ArcGISSceneLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::WmtsLayer:
|
||||
return QStringLiteral("WmtsLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::OpenStreetMapLayer:
|
||||
return QStringLiteral("OpenStreetMapLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::BingMapsLayer:
|
||||
return QStringLiteral("BingMapsLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::WebTiledLayer:
|
||||
return QStringLiteral("WebTiledLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::EncLayer:
|
||||
return QStringLiteral("EncLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::WmsLayer:
|
||||
return QStringLiteral("WmsLayer");
|
||||
|
||||
#if ACRGIS_VERSION >= 0x640500 // 100.5.0 / Update 5
|
||||
case Esri::ArcGISRuntime::LayerType::IntegratedMeshLayer:
|
||||
return QStringLiteral("IntegratedMeshLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::PointCloudLayer:
|
||||
return QStringLiteral("PointCloudLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::GroupLayer:
|
||||
return QStringLiteral("GroupLayer");
|
||||
case Esri::ArcGISRuntime::LayerType::AnnotationLayer:
|
||||
return QStringLiteral("AnnotationLayer");
|
||||
#endif // ACRGIS_VERSION
|
||||
|
||||
#if ACRGIS_VERSION >= 0x640700 // 100.7.0 / Update 7
|
||||
case Esri::ArcGISRuntime::LayerType::SubtypeFeatureLayer:
|
||||
return QStringLiteral("SubtypeFeatureLayer");
|
||||
#endif // ACRGIS_VERSION
|
||||
|
||||
#if ACRGIS_VERSION >= 0x640D00 // 100.13.0
|
||||
case Esri::ArcGISRuntime::LayerType::DimensionLayer:
|
||||
return QStringLiteral("SubtypeFeatureLayer");
|
||||
#endif // ACRGIS_VERSION
|
||||
|
||||
case Esri::ArcGISRuntime::LayerType::UnknownLayer:
|
||||
return QStringLiteral("UnknownLayer");
|
||||
|
||||
} // switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("Esri-LayerTypeERROR");
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::ElevationSourceType value)
|
||||
{
|
||||
stream << "EsriEST(" << toString(value)
|
||||
<< ")";
|
||||
return stream;
|
||||
}
|
||||
|
||||
QString toString(const Esri::ArcGISRuntime::ElevationSourceType value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case Esri::ArcGISRuntime::ElevationSourceType::Unknown:
|
||||
return QStringLiteral("Unknown");
|
||||
case Esri::ArcGISRuntime::ElevationSourceType::ArcGISTiledElevationSource:
|
||||
return QStringLiteral("ArcGISTiledElevationSource");
|
||||
case Esri::ArcGISRuntime::ElevationSourceType::RasterElevationSource:
|
||||
return QStringLiteral("RasterElevationSource");
|
||||
} // switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("Esri-ElevationSourceTypeERROR");
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::GraphicsRenderingMode value)
|
||||
{
|
||||
stream << "EsriGRM(" << toString(value)
|
||||
<< ")";
|
||||
return stream;
|
||||
}
|
||||
|
||||
QString toString(const Esri::ArcGISRuntime::GraphicsRenderingMode value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case Esri::ArcGISRuntime::GraphicsRenderingMode::Dynamic:
|
||||
return QStringLiteral("Dynamic");
|
||||
case Esri::ArcGISRuntime::GraphicsRenderingMode::Static:
|
||||
return QStringLiteral("Static");
|
||||
} // switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("Esri-GraphicsRenderingModeERROR");
|
||||
}
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::GeometryType value)
|
||||
{
|
||||
stream << "EsriGT(" << toString(value) << ")";
|
||||
return stream;
|
||||
}
|
||||
|
||||
QString toString(const Esri::ArcGISRuntime::GeometryType value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case Esri::ArcGISRuntime::GeometryType::Unknown:
|
||||
return QStringLiteral("Unknown");
|
||||
case Esri::ArcGISRuntime::GeometryType::Point:
|
||||
return QStringLiteral("Point");
|
||||
case Esri::ArcGISRuntime::GeometryType::Envelope:
|
||||
return QStringLiteral("Envelope");
|
||||
case Esri::ArcGISRuntime::GeometryType::Polyline:
|
||||
return QStringLiteral("Polyline");
|
||||
case Esri::ArcGISRuntime::GeometryType::Polygon:
|
||||
return QStringLiteral("Polygon");
|
||||
case Esri::ArcGISRuntime::GeometryType::Multipoint:
|
||||
return QStringLiteral("Multipoint");
|
||||
} // switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("Esri-GeometryTypeERROR");
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::ViewpointType value)
|
||||
{
|
||||
stream << "EsriVPT(" << toString(value) << ")";
|
||||
return stream;
|
||||
}
|
||||
|
||||
QString toString(const Esri::ArcGISRuntime::ViewpointType value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case Esri::ArcGISRuntime::ViewpointType::Unknown:
|
||||
return QStringLiteral("Unknown");
|
||||
case Esri::ArcGISRuntime::ViewpointType::CenterAndScale:
|
||||
return QStringLiteral("CenterAndScale");
|
||||
case Esri::ArcGISRuntime::ViewpointType::BoundingGeometry:
|
||||
return QStringLiteral("BoundingGeometry");
|
||||
}// switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("Esri-ViewpointTypeERROR");
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::SceneLocationVisibility value)
|
||||
{
|
||||
stream << "EsriSLV(" << toString(value) << ")";
|
||||
return stream;
|
||||
}
|
||||
|
||||
QString toString(const Esri::ArcGISRuntime::SceneLocationVisibility value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case Esri::ArcGISRuntime::SceneLocationVisibility::Visible:
|
||||
return QStringLiteral("Visible");
|
||||
case Esri::ArcGISRuntime::SceneLocationVisibility::HiddenByBaseSurface:
|
||||
return QStringLiteral("HiddenByBaseSurface");
|
||||
case Esri::ArcGISRuntime::SceneLocationVisibility::HiddenByEarth:
|
||||
return QStringLiteral("HiddenByEarth");
|
||||
case Esri::ArcGISRuntime::SceneLocationVisibility::HiddenByElevation:
|
||||
return QStringLiteral("HiddenByElevation");
|
||||
case Esri::ArcGISRuntime::SceneLocationVisibility::NotOnScreen:
|
||||
return QStringLiteral("NotOnScreen");
|
||||
}// switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("Esri-SceneLocationVisibilityERROR");
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::SurfacePlacement value)
|
||||
{
|
||||
stream << "EsriSP(" << toString(value) << ")";
|
||||
return stream;
|
||||
}
|
||||
|
||||
QString toString(Esri::ArcGISRuntime::SurfacePlacement value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case Esri::ArcGISRuntime::SurfacePlacement::Draped:
|
||||
return QStringLiteral("Draped");
|
||||
case Esri::ArcGISRuntime::SurfacePlacement::Absolute:
|
||||
return QStringLiteral("Absolute");
|
||||
case Esri::ArcGISRuntime::SurfacePlacement::Relative:
|
||||
return QStringLiteral("Relative");
|
||||
|
||||
#ifdef HAS_SURFACEPLACEMENT_RELATIVETOSCENE
|
||||
case Esri::ArcGISRuntime::SurfacePlacement::RelativeToScene:
|
||||
return QStringLiteral("RelativeToScene");
|
||||
#endif // HAS_SURFACEPLACEMENT_RELATIVETOSCENE
|
||||
|
||||
#if ACRGIS_VERSION >= 0x640700 // 100.7.0 / Update 7
|
||||
case Esri::ArcGISRuntime::SurfacePlacement::DrapedFlat:
|
||||
return QStringLiteral("DrapedFlat");
|
||||
#endif // ACRGIS_VERSION
|
||||
|
||||
}// switch
|
||||
Q_ASSERT(false);
|
||||
return QStringLiteral("Esri-SurfacePlacementERROR");
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::Viewpoint &value)
|
||||
{
|
||||
stream << "EsriVP:"
|
||||
<< " targetGeometryType=" << value.targetGeometry().geometryType();
|
||||
if (value.targetGeometry().geometryType() == Esri::ArcGISRuntime::GeometryType::Point)
|
||||
{
|
||||
const Esri::ArcGISRuntime::Point center(value.targetGeometry());
|
||||
stream << " center: x=" << center.x() << " - y=" << center.y() << " - z=" << center.z();
|
||||
}
|
||||
stream << " rotation=" << value.rotation()
|
||||
<< " targetScale=" << value.targetScale();
|
||||
return stream;
|
||||
}
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::Camera &value)
|
||||
{
|
||||
const Esri::ArcGISRuntime::Point &location = value.location();
|
||||
stream << "EsriCam:"
|
||||
<< " location: xLon=" << location.x() << " - yLat=" << location.y() << " - z=" << location.z()
|
||||
<< " ; h=" << value.heading() << " p=" << value.pitch() << " r=" << value.roll();
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
} // namespace Esri::ArcGISRuntime
|
||||
+154
@@ -0,0 +1,154 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Utilities for SituationMap
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
|
||||
|
||||
// arcgis
|
||||
#include <arcgis/SceneViewTypes.h> // SurfacePlacement
|
||||
#include <arcgis/Error.h>
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QPointF>
|
||||
#include <QSize>
|
||||
#include <QRectF>
|
||||
|
||||
|
||||
#include <iosfwd>
|
||||
|
||||
// Forward:
|
||||
namespace Esri
|
||||
{
|
||||
namespace ArcGISRuntime
|
||||
{
|
||||
enum class GraphicsRenderingMode;
|
||||
enum class ElevationSourceType;
|
||||
enum class LayerType;
|
||||
enum class LicenseStatus;
|
||||
enum class LoadStatus;
|
||||
enum class NetworkCachePolicy;
|
||||
enum class SceneLocationVisibility;
|
||||
enum class ViewpointType;
|
||||
enum class GeometryType;
|
||||
class Viewpoint;
|
||||
class Camera;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::PositionCont &value);
|
||||
|
||||
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const QColor &value);
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::DrawStatus value);
|
||||
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::GridType value);
|
||||
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::LayerType value);
|
||||
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::BasemapType value);
|
||||
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::RenderingMode value);
|
||||
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::SurfacePlacement value);
|
||||
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::EsriNetworkCacheSettings value);
|
||||
|
||||
}
|
||||
|
||||
SITUATIONMAP_EXPORT QString toString(const QRectF &value);
|
||||
SITUATIONMAP_EXPORT QString toString(const QColor &value);
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
SITUATIONMAP_EXPORT QString toString(SituationMap::DrawStatus value);
|
||||
|
||||
SITUATIONMAP_EXPORT QString toString(SituationMap::GridType value);
|
||||
SITUATIONMAP_EXPORT bool fromString(SituationMap::GridType &gridType, const QString &str);
|
||||
|
||||
SITUATIONMAP_EXPORT QString toString(SituationMap::LayerType value);
|
||||
SITUATIONMAP_EXPORT QString toString(SituationMap::BasemapType value);
|
||||
|
||||
SITUATIONMAP_EXPORT QString toString(SituationMap::RenderingMode value);
|
||||
SITUATIONMAP_EXPORT bool fromString(SituationMap::RenderingMode &renderingMode, const QString &str);
|
||||
|
||||
SITUATIONMAP_EXPORT QString toString(SituationMap::SurfacePlacement value);
|
||||
SITUATIONMAP_EXPORT bool fromString(SituationMap::SurfacePlacement &surfacePlacement, const QString &str);
|
||||
|
||||
SITUATIONMAP_EXPORT QString toDisplayString(SituationMap::BasemapType value);
|
||||
|
||||
}
|
||||
|
||||
namespace Esri
|
||||
{
|
||||
namespace ArcGISRuntime
|
||||
{
|
||||
SITUATIONMAP_EXPORT QString toString(const Esri::ArcGISRuntime::Error &value);
|
||||
|
||||
SITUATIONMAP_EXPORT QString toString(const Esri::ArcGISRuntime::ElevationSourceType value);
|
||||
SITUATIONMAP_EXPORT QString toString(const Esri::ArcGISRuntime::GraphicsRenderingMode value);
|
||||
SITUATIONMAP_EXPORT QString toString(const Esri::ArcGISRuntime::GeometryType value);
|
||||
SITUATIONMAP_EXPORT QString toString(const Esri::ArcGISRuntime::LayerType value);
|
||||
SITUATIONMAP_EXPORT QString toString(const Esri::ArcGISRuntime::LicenseStatus value);
|
||||
SITUATIONMAP_EXPORT QString toString(const Esri::ArcGISRuntime::LoadStatus value);
|
||||
#if ACRGIS_VERSION >= 0x640700 // 100.8.0 / Update 8
|
||||
SITUATIONMAP_EXPORT QString toString(const Esri::ArcGISRuntime::NetworkCachePolicy value);
|
||||
#endif // ACRGIS_VERSION
|
||||
SITUATIONMAP_EXPORT QString toString(const Esri::ArcGISRuntime::SceneLocationVisibility value);
|
||||
SITUATIONMAP_EXPORT QString toString(const Esri::ArcGISRuntime::SurfacePlacement value);
|
||||
SITUATIONMAP_EXPORT QString toString(const Esri::ArcGISRuntime::ViewpointType value);
|
||||
|
||||
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::Error &value);
|
||||
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::ElevationSourceType value);
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::GraphicsRenderingMode value);
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::GeometryType value);
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::LayerType value);
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::LicenseStatus value);
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::LoadStatus value);
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::NetworkCachePolicy value);
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::SceneLocationVisibility value);
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::SurfacePlacement value);
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::ViewpointType value);
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::Viewpoint &value);
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const Esri::ArcGISRuntime::Camera &value);
|
||||
}
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface of TerrainProfile
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
#include "terrain_profile_parameter.h"
|
||||
#include <situation_map_export.h>
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QString>
|
||||
#include <QPointF>
|
||||
|
||||
|
||||
#include <functional>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
class TerrainProfileDialog;
|
||||
|
||||
/**
|
||||
* @brief The TerrainProfile class creating a TerrainProfile.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT TerrainProfile
|
||||
{
|
||||
public:
|
||||
TerrainProfile() = default; ///< Contructor
|
||||
virtual ~TerrainProfile() = default; ///< Destructor
|
||||
|
||||
TerrainProfile(const TerrainProfile &other) = delete;
|
||||
TerrainProfile &operator=(TerrainProfile &other) = delete;
|
||||
|
||||
/**
|
||||
* @brief setFinishedCallback to display the result if calculation is finished
|
||||
* @param finishedCallback
|
||||
*/
|
||||
virtual void setFinishedCallback(const std::function< bool(long id, const QVector<QPair<QPointF, double>> &)> &finishedCallback) = 0;
|
||||
|
||||
virtual void setTerrainProfileDialog(long id, QPointer<SituationMap::TerrainProfileDialog> &terrainProfileDialog) = 0;
|
||||
|
||||
|
||||
virtual bool create() = 0; // will start a rubberband
|
||||
virtual long create(const TerrainProfileParameter &terrainProfileParameter) = 0;
|
||||
|
||||
virtual void remove(long terrainProfileId = -1) = 0;
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* TerrainProfileParameter
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "terrain_profile_parameter.h"
|
||||
#include "situation_map_utils.h"
|
||||
|
||||
|
||||
//Qt
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonArray>
|
||||
|
||||
#include <sstream>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
QString TerrainProfileParameter::toString() const
|
||||
{
|
||||
std::ostringstream stream;
|
||||
stream << " m_coordinates = " << m_coordinates;
|
||||
return QString::fromLatin1(stream.str().c_str());
|
||||
}
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::TerrainProfileParameter &value)
|
||||
{
|
||||
return stream << value.toString();
|
||||
}
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* TerrainProfileParameter
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
#include <situation_map_export.h>
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QString>
|
||||
#include <QPointF>
|
||||
|
||||
class QJsonObject;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
/*!
|
||||
* \brief Define parameter for TerrainProfile.
|
||||
*/
|
||||
class TerrainProfileParameter
|
||||
{
|
||||
public:
|
||||
explicit TerrainProfileParameter() = default;
|
||||
|
||||
PositionCont m_coordinates;
|
||||
|
||||
double m_length = 0.0;
|
||||
|
||||
QString toString() const;
|
||||
|
||||
// static MapWidgetSettings read(const QJsonObject &json);
|
||||
// QJsonObject toJsonObject() const;
|
||||
};
|
||||
|
||||
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::TerrainProfileParameter &value);
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
Executable
+198
@@ -0,0 +1,198 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* TextStyle
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "text_style.h"
|
||||
|
||||
|
||||
// ESRI
|
||||
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
TextStyle::TextStyle(const QColor &textColor, float size)
|
||||
: m_textColor(textColor)
|
||||
, m_size(size)
|
||||
{}
|
||||
|
||||
TextStyle::TextStyle(const QColor &textColor)
|
||||
: m_textColor(textColor)
|
||||
{}
|
||||
|
||||
|
||||
QColor TextStyle::textColor() const
|
||||
{
|
||||
return m_textColor;
|
||||
}
|
||||
|
||||
void TextStyle::setTextColor(const QColor &textColor)
|
||||
{
|
||||
m_textColor = textColor;
|
||||
}
|
||||
float TextStyle::size() const
|
||||
{
|
||||
return m_size;
|
||||
}
|
||||
|
||||
void TextStyle::setSize(float size)
|
||||
{
|
||||
m_size = size;
|
||||
}
|
||||
bool TextStyle::bold() const
|
||||
{
|
||||
return m_bold;
|
||||
}
|
||||
|
||||
void TextStyle::setBold(bool bold)
|
||||
{
|
||||
m_bold = bold;
|
||||
}
|
||||
bool TextStyle::italic() const
|
||||
{
|
||||
return m_italic;
|
||||
}
|
||||
|
||||
void TextStyle::setItalic(bool italic)
|
||||
{
|
||||
m_italic = italic;
|
||||
}
|
||||
bool TextStyle::underline() const
|
||||
{
|
||||
return m_underline;
|
||||
}
|
||||
|
||||
void TextStyle::setUnderline(bool underline)
|
||||
{
|
||||
m_underline = underline;
|
||||
}
|
||||
bool TextStyle::strikeThrough() const
|
||||
{
|
||||
return m_strikeThrough;
|
||||
}
|
||||
|
||||
void TextStyle::setStrikeThrough(bool strikeThrough)
|
||||
{
|
||||
m_strikeThrough = strikeThrough;
|
||||
}
|
||||
float TextStyle::textOutlineWidth() const
|
||||
{
|
||||
return m_textOutlineWidth;
|
||||
}
|
||||
|
||||
void TextStyle::setTextOutlineWidth(float textOutlineWidth)
|
||||
{
|
||||
m_textOutlineWidth = textOutlineWidth;
|
||||
}
|
||||
QColor TextStyle::textOutlineColor() const
|
||||
{
|
||||
return m_textOutlineColor;
|
||||
}
|
||||
|
||||
void TextStyle::setTextOutlineColor(const QColor &textOutlineColor)
|
||||
{
|
||||
m_textOutlineColor = textOutlineColor;
|
||||
}
|
||||
QColor TextStyle::backgroundColor() const
|
||||
{
|
||||
return m_backgroundColor;
|
||||
}
|
||||
|
||||
void TextStyle::setBackgroundColor(const QColor &backgroundColor)
|
||||
{
|
||||
m_backgroundColor = backgroundColor;
|
||||
}
|
||||
bool TextStyle::antiAliased() const
|
||||
{
|
||||
return m_antiAliased;
|
||||
}
|
||||
|
||||
void TextStyle::setAntiAliased(bool antiAliased)
|
||||
{
|
||||
m_antiAliased = antiAliased;
|
||||
}
|
||||
HorizontalAlignment TextStyle::horizontalAlignment() const
|
||||
{
|
||||
return m_horizontalAlignment;
|
||||
}
|
||||
|
||||
void TextStyle::setHorizontalAlignment(const HorizontalAlignment &horizontalAlignment)
|
||||
{
|
||||
m_horizontalAlignment = horizontalAlignment;
|
||||
}
|
||||
VerticalAlignment TextStyle::verticalAlignment() const
|
||||
{
|
||||
return m_verticalAlignment;
|
||||
}
|
||||
|
||||
void TextStyle::setVerticalAlignment(const VerticalAlignment &verticalAlignment)
|
||||
{
|
||||
m_verticalAlignment = verticalAlignment;
|
||||
}
|
||||
|
||||
|
||||
float TextStyle::angle() const
|
||||
{
|
||||
return m_angle;
|
||||
}
|
||||
|
||||
void TextStyle::setAngle(float angleDegree)
|
||||
{
|
||||
m_angle = angleDegree;
|
||||
}
|
||||
|
||||
const QString &TextStyle::fontFamily() const
|
||||
{
|
||||
return m_fontFamily;
|
||||
}
|
||||
|
||||
void SituationMap::TextStyle::setFontFamily(const QString &fontFamily)
|
||||
{
|
||||
m_fontFamily = fontFamily;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// output operator:
|
||||
//-----------------------------------------------------------------------------
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const TextStyle &value)
|
||||
{
|
||||
QString str;
|
||||
str.append(QStringLiteral(" textColor='%1'").arg(value.textColor().name(QColor::HexArgb)));
|
||||
str.append(QStringLiteral(" size=%1").arg(value.size()));
|
||||
str.append(QStringLiteral(" angle=%1").arg(value.angle()));
|
||||
|
||||
str.append(QStringLiteral(" fontFamily='%1'").arg(value.fontFamily()));
|
||||
|
||||
str.append(QStringLiteral(" bold=%1").arg(value.bold()));
|
||||
str.append(QStringLiteral(" italic=%1").arg(value.italic()));
|
||||
str.append(QStringLiteral(" underline=%1").arg(value.underline()));
|
||||
str.append(QStringLiteral(" strikeThrough=%1").arg(value.strikeThrough()));
|
||||
|
||||
|
||||
str.append(QStringLiteral(" textOutlineWidth=%1").arg(value.textOutlineWidth()));
|
||||
str.append(QStringLiteral(" textOutlineColor=%1").arg(value.textOutlineColor().name(QColor::HexArgb)));
|
||||
|
||||
str.append(QStringLiteral(" backgroundColor=%1").arg(value.backgroundColor().name(QColor::HexArgb)));
|
||||
|
||||
str.append(QStringLiteral(" horizontalAlignment=%1").arg(static_cast<int>(value.horizontalAlignment())));
|
||||
str.append(QStringLiteral(" verticalAlignment=%1").arg(static_cast<int>(value.verticalAlignment())));
|
||||
|
||||
str.append(QStringLiteral(" antiAliased=%1").arg(value.antiAliased()));
|
||||
|
||||
stream << str.toStdString();
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
Executable
+204
@@ -0,0 +1,204 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* TextStyle
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
#include <situation_map_export.h>
|
||||
|
||||
// Qt
|
||||
#include <QColor>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
/*!
|
||||
\brief Horizontal alignment for text.
|
||||
*/
|
||||
enum class HorizontalAlignment
|
||||
{
|
||||
Left,
|
||||
Center,
|
||||
Right,
|
||||
Justify // ???
|
||||
};
|
||||
|
||||
/*!
|
||||
\brief Vertical alignment for text.
|
||||
*/
|
||||
enum class VerticalAlignment
|
||||
{
|
||||
Bottom,
|
||||
Middle,
|
||||
Top,
|
||||
BaseLine
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @brief The TextStyle class contains text parameter like color, size, font....
|
||||
*
|
||||
* The default TextSymbol size is 15.0.
|
||||
* The default TextSymbol color is black.
|
||||
* The default TextSymbol horizontal alignment is left.
|
||||
* The default TextSymbol vertical alignment is bottom.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT TextStyle final
|
||||
{
|
||||
public:
|
||||
|
||||
/*! \name Construction, Destruction */
|
||||
//@{
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
TextStyle() = default;
|
||||
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
explicit TextStyle(const QColor &textColor);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
TextStyle(const QColor &textColor, float size);
|
||||
|
||||
/**
|
||||
* @brief Destructor
|
||||
*/
|
||||
~TextStyle() = default;
|
||||
//@}
|
||||
|
||||
|
||||
/** \name Parameters
|
||||
* Set and get methods for the different parameters.
|
||||
*/
|
||||
//@{
|
||||
QColor textColor() const;
|
||||
void setTextColor(const QColor &textColor);
|
||||
|
||||
float size() const;
|
||||
void setSize(float size);
|
||||
|
||||
float angle() const;
|
||||
void setAngle(float angleDegree);
|
||||
|
||||
const QString &fontFamily() const;
|
||||
void setFontFamily(const QString &fontFamily);
|
||||
|
||||
bool bold() const;
|
||||
void setBold(bool bold);
|
||||
|
||||
bool italic() const;
|
||||
void setItalic(bool italic);
|
||||
|
||||
bool underline() const;
|
||||
void setUnderline(bool underline);
|
||||
|
||||
bool strikeThrough() const;
|
||||
void setStrikeThrough(bool strikeThrough);
|
||||
|
||||
float textOutlineWidth() const;
|
||||
void setTextOutlineWidth(float textOutlineWidth);
|
||||
|
||||
QColor textOutlineColor() const;
|
||||
void setTextOutlineColor(const QColor &textOutlineColor);
|
||||
|
||||
QColor backgroundColor() const;
|
||||
void setBackgroundColor(const QColor &backgroundColor);
|
||||
|
||||
HorizontalAlignment horizontalAlignment() const;
|
||||
void setHorizontalAlignment(const HorizontalAlignment &horizontalAlignment);
|
||||
|
||||
VerticalAlignment verticalAlignment() const;
|
||||
void setVerticalAlignment(const VerticalAlignment &verticalAlignment);
|
||||
|
||||
bool antiAliased() const;
|
||||
void setAntiAliased(bool antiAliased);
|
||||
//@}
|
||||
|
||||
|
||||
/**
|
||||
* @brief operator== Compare two objects
|
||||
* @param other to be compared with
|
||||
* @return true if identical, otherwise false.
|
||||
*/
|
||||
bool operator==(const TextStyle &other) const
|
||||
{
|
||||
return ((this->m_textColor == other.m_textColor) &&
|
||||
(this->m_size == other.m_size) &&
|
||||
(this->m_angle == other.m_angle) &&
|
||||
|
||||
(this->m_fontFamily == other.m_fontFamily) &&
|
||||
|
||||
(this->m_bold == other.m_bold) &&
|
||||
(this->m_italic == other.m_italic) &&
|
||||
(this->m_underline == other.m_underline) &&
|
||||
(this->m_strikeThrough == other.m_strikeThrough) &&
|
||||
|
||||
(this->m_textOutlineWidth == other.m_textOutlineWidth) &&
|
||||
(this->m_textOutlineColor == other.m_textOutlineColor) &&
|
||||
|
||||
(this->m_backgroundColor == other.m_backgroundColor) &&
|
||||
|
||||
(this->m_horizontalAlignment == other.m_horizontalAlignment) &&
|
||||
(this->m_verticalAlignment == other.m_verticalAlignment) &&
|
||||
|
||||
(this->m_antiAliased == other.m_antiAliased)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief operator!= Compare two objects
|
||||
* @param other to be compared with
|
||||
* @return true if NOT identical, otherwise false.
|
||||
*/
|
||||
bool operator!=(const TextStyle &other) const
|
||||
{
|
||||
return !(*this == other);
|
||||
}
|
||||
|
||||
private:
|
||||
QColor m_textColor = Qt::black;
|
||||
float m_size = 15.0;
|
||||
float m_angle = 0.0; // degree
|
||||
|
||||
QString m_fontFamily;
|
||||
bool m_bold = false;
|
||||
bool m_italic = false;
|
||||
bool m_underline = false;
|
||||
bool m_strikeThrough = false;
|
||||
|
||||
float m_textOutlineWidth = -1;
|
||||
QColor m_textOutlineColor;
|
||||
|
||||
QColor m_backgroundColor; // Invalid is intended
|
||||
|
||||
// Alignment
|
||||
HorizontalAlignment m_horizontalAlignment = HorizontalAlignment::Left;
|
||||
VerticalAlignment m_verticalAlignment = VerticalAlignment::Bottom;
|
||||
|
||||
bool m_antiAliased = true; // Esri 10.2.5: antiAlias = true
|
||||
};
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// output operator:
|
||||
//-----------------------------------------------------------------------------
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const TextStyle &value);
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
Executable
+113
@@ -0,0 +1,113 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Class Viewpoint2D
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "viewpoint2D.h"
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QJsonObject>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
Viewpoint2D::Viewpoint2D(const QPointF ¢erGeo, double scale, double rotation)
|
||||
: m_centerGeo(centerGeo), m_scale(scale), m_rotation(rotation)
|
||||
{
|
||||
// Q_ASSERT(scale > 0);
|
||||
}
|
||||
|
||||
bool Viewpoint2D::isNull() const
|
||||
{
|
||||
return m_centerGeo.isNull() && qFuzzyCompare(m_scale, defaultScale) && qFuzzyIsNull(m_rotation);
|
||||
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
}
|
||||
|
||||
void Viewpoint2D::resetViewpoint()
|
||||
{
|
||||
m_centerGeo = QPointF();
|
||||
m_scale = defaultScale;
|
||||
m_rotation = 0;
|
||||
}
|
||||
|
||||
QPointF Viewpoint2D::centerGeo() const
|
||||
{
|
||||
return m_centerGeo;
|
||||
}
|
||||
void Viewpoint2D::setCenterGeo(const QPointF ¢erGeo)
|
||||
{
|
||||
m_centerGeo = centerGeo;
|
||||
}
|
||||
|
||||
double Viewpoint2D::scale() const
|
||||
{
|
||||
return m_scale;
|
||||
}
|
||||
void Viewpoint2D::setScale(double scale)
|
||||
{
|
||||
m_scale = scale;
|
||||
}
|
||||
|
||||
double Viewpoint2D::rotation() const
|
||||
{
|
||||
return m_rotation;
|
||||
}
|
||||
void Viewpoint2D::setRotation(double rotation)
|
||||
{
|
||||
m_rotation = rotation;
|
||||
}
|
||||
|
||||
Viewpoint2D Viewpoint2D::read(const QJsonObject &json)
|
||||
{
|
||||
Viewpoint2D vp;
|
||||
if (json.contains(QLatin1String("centerLon")) && json.contains(QLatin1String("centerLat")))
|
||||
{
|
||||
QPointF centerGeo;
|
||||
centerGeo.rx() = json[QLatin1String("centerLon")].toDouble();
|
||||
centerGeo.ry() = json[QLatin1String("centerLat")].toDouble();
|
||||
vp.setCenterGeo(centerGeo);
|
||||
}
|
||||
if (json.contains(QLatin1String("scale")))
|
||||
vp.setScale(json[QLatin1String("scale")].toDouble());
|
||||
|
||||
if (json.contains(QLatin1String("rotation")))
|
||||
vp.setRotation(json[QLatin1String("rotation")].toDouble());
|
||||
return vp;
|
||||
}
|
||||
|
||||
QJsonObject Viewpoint2D::toJsonObject() const
|
||||
{
|
||||
QJsonObject json;
|
||||
json[QLatin1String("centerLon")] = m_centerGeo.x();
|
||||
json[QLatin1String("centerLat")] = m_centerGeo.y();
|
||||
json[QLatin1String("scale")] = m_scale;
|
||||
json[QLatin1String("rotation")] = m_rotation;
|
||||
return json;
|
||||
}
|
||||
|
||||
QString Viewpoint2D::toString() const
|
||||
{
|
||||
QString asString = QStringLiteral("center %1;%2[rad] %3;%4[deg], scale=%5, rotation=%6")
|
||||
.arg(m_centerGeo.x()).arg(m_centerGeo.y())
|
||||
.arg(m_centerGeo.x()*180.0/M_PI).arg(m_centerGeo.y()*180.0/M_PI)
|
||||
.arg(m_scale).arg(m_rotation);
|
||||
return asString;
|
||||
}
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::Viewpoint2D &value)
|
||||
{
|
||||
stream << "Viewpoint2D(" << value.toString() << "): ";
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
Executable
+65
@@ -0,0 +1,65 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Class Viewpoint2D
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
#include <Common/situation_map_logging.h>
|
||||
#include <situation_map_export.h>
|
||||
|
||||
// Qt
|
||||
#include <QString>
|
||||
|
||||
class QJsonObject;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// for 2D:
|
||||
class SITUATIONMAP_EXPORT Viewpoint2D
|
||||
{
|
||||
public:
|
||||
static constexpr double defaultScale = 999999.9;
|
||||
|
||||
Viewpoint2D(const QPointF ¢erGeo = QPointF(), double scale = defaultScale, double rotation = 0);
|
||||
|
||||
bool isNull() const;
|
||||
|
||||
void resetViewpoint();
|
||||
|
||||
QPointF centerGeo() const;
|
||||
void setCenterGeo(const QPointF ¢erGeo);
|
||||
|
||||
double scale() const;
|
||||
void setScale(double scale);
|
||||
|
||||
double rotation() const;
|
||||
void setRotation(double rotation);
|
||||
|
||||
static Viewpoint2D read(const QJsonObject &json);
|
||||
QJsonObject toJsonObject() const;
|
||||
|
||||
QString toString() const;
|
||||
|
||||
protected:
|
||||
QPointF m_centerGeo; ///< lon, lat
|
||||
double m_scale = defaultScale; // '0' may lead to an ESRI exception. Try to avoid and use another value
|
||||
double m_rotation = 0; ///< absoluteAngleDegrees
|
||||
};
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::Viewpoint2D &value);
|
||||
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
Executable
+110
@@ -0,0 +1,110 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface of Viewshed
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include "situation_map_types.h"
|
||||
#include "viewshed_parameter.h"
|
||||
#include <situation_map_export.h>
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
#include <QPointF>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
/**
|
||||
* @brief The Viewshed class creating a viewshed.
|
||||
*/
|
||||
class SITUATIONMAP_EXPORT Viewshed : public QObject
|
||||
{
|
||||
using BaseClass = QObject;
|
||||
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Viewshed() = default; ///< Contructor
|
||||
virtual ~Viewshed() = default; ///< Destructor
|
||||
|
||||
Viewshed(const Viewshed &other) = delete;
|
||||
Viewshed &operator=(Viewshed &other) = delete;
|
||||
|
||||
/**
|
||||
* Defines URL to elevation data service or file with elevation data
|
||||
*
|
||||
*/
|
||||
virtual void setViewshedUrl(const QString &viewshedServiceUrl) = 0;
|
||||
|
||||
/**
|
||||
* Creates ESRI based viewshed and starts a rubberband to define the area to analyse. On success the return value is true.
|
||||
*/
|
||||
virtual bool create() = 0;
|
||||
|
||||
/**
|
||||
* Creates a GeISiR fan of sight and starts a rubberband to define the area (center point and radius) to analyse.
|
||||
*
|
||||
* @param alpha Alpha value to apply to predefined colors SightFan.
|
||||
* @param innerRadius Distance from center point to start the analyse.
|
||||
* @param observerHeight Height of center point above terrain.
|
||||
* @param targetHeight Height of visible objects or targets.
|
||||
* @param beamAngle Beam width in degree of a single scan line.
|
||||
*
|
||||
* @return true on success
|
||||
*/
|
||||
virtual bool create(double alpha, double innerRadius, double observerHeight, double targetHeight, double beamAngle) = 0; // will start a rubberband to create a fan of sight
|
||||
|
||||
/**
|
||||
* Create a viewshed from existing parameter settings.
|
||||
*
|
||||
* @return true on success
|
||||
*/
|
||||
virtual long create(const ViewshedParameter &viewshedParameter) = 0;
|
||||
|
||||
/**
|
||||
* In case of using GeSiR fan of sight for analysing modify the parameter settings.
|
||||
*
|
||||
* @param viewshedId Id of viewshed. In case of viewshedId is "-1" the current viwshed (last created) will be modified
|
||||
* @param alpha Alpha value to apply to predefined colors SightFan.
|
||||
* @param innerRadius Distance from center point to start the analyse.
|
||||
* @param observerHeight Height of center point above terrain.
|
||||
* @param targetHeight Height of visible objects or targets.
|
||||
* @param beamAngle Beam width in degree of a single scan line.
|
||||
*
|
||||
* @return true on success
|
||||
*/
|
||||
virtual bool modify(long viewshedId, double alpha, double innerRadius, double observerHeight, double targetHeight, double beamAngle) = 0;
|
||||
|
||||
/**
|
||||
* Remove a viewshed. In case of viewshedId is "-1" all viewsheds will be removed.
|
||||
* @param vieweshedId Id of viewshed or "-1"
|
||||
*/
|
||||
virtual void remove(long viewshedId = -1) = 0;
|
||||
|
||||
/**
|
||||
* Get parameter of a viewshed. In case of viewshedId is "-1" the current viwshed (last created) will be used
|
||||
* @param vieweshedId Id of viewshed or "-1"
|
||||
* @param ok Pointer bool variable set to true on success.
|
||||
*
|
||||
* @return Struct with viewshed parameters.
|
||||
*/
|
||||
virtual ViewshedParameter getViewshedParameter(long viewshedId = -1, bool *ok = nullptr) const = 0;
|
||||
|
||||
Q_SIGNALS:
|
||||
void viewshedFinished(long viewshedId);
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* ViewshedParameter
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "viewshed_parameter.h"
|
||||
#include "situation_map_utils.h"
|
||||
|
||||
|
||||
//Qt
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonArray>
|
||||
|
||||
#include <sstream>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
QString ViewshedParameter::toString() const
|
||||
{
|
||||
std::ostringstream stream;
|
||||
stream << " viewshedOrigin_latLon = " << viewshedOrigin_latLon;
|
||||
stream << "; innerRadius = " << innerRadius;
|
||||
stream << "; outerRadius = " << outerRadius;
|
||||
stream << "; observerOffset = " << observerHeight;
|
||||
stream << "; targetOffset = " << targetHeight;
|
||||
stream << "; startArngle = " << startAngle;
|
||||
stream << "; dAngle = " << dAngle;
|
||||
stream << "; noBeams = " << noBeams;
|
||||
stream << "; alpha = " << alpha;
|
||||
return QString::fromLatin1(stream.str().c_str());
|
||||
}
|
||||
|
||||
std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::ViewshedParameter &value)
|
||||
{
|
||||
return stream << value.toString();
|
||||
}
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* ViewshedParameter
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Own
|
||||
#include <situation_map_export.h>
|
||||
|
||||
#include <MathUtils/math_const.h>
|
||||
|
||||
// Qt
|
||||
#include <QString>
|
||||
#include <QPointF>
|
||||
|
||||
class QJsonObject;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
/*!
|
||||
* \brief Define parameter for viewshed.
|
||||
*/
|
||||
class ViewshedParameter
|
||||
{
|
||||
public:
|
||||
explicit ViewshedParameter() = default;
|
||||
|
||||
QPointF viewshedOrigin_latLon; // geo coordinates in rad
|
||||
double innerRadius = 10.0; // inner radius for use with sight fan only
|
||||
double outerRadius = 100.0; // radius for both sight fan and ESRI viewshed
|
||||
double observerHeight = 2.0; // observer height for both sight fan and ESRI viewshed
|
||||
double targetHeight = 2.0; // object or target height for use with sight fan
|
||||
double startAngle = 0.0; // start angle of sight fan in rad
|
||||
double dAngle = 2.0 / 180.0*MathConst::pi; // angle of single sight fan beam in rad
|
||||
unsigned int noBeams = 180; // count of sight fan beams
|
||||
double alpha = 1.0; // transparency [0..1];
|
||||
|
||||
QString toString() const;
|
||||
|
||||
// static MapWidgetSettings read(const QJsonObject &json);
|
||||
// QJsonObject toJsonObject() const;
|
||||
};
|
||||
|
||||
|
||||
SITUATIONMAP_EXPORT std::ostream &operator<< (std::ostream &stream,
|
||||
const SituationMap::ViewshedParameter &value);
|
||||
|
||||
} // namespace SituationMap
|
||||
|
||||
Reference in new issue
Block a user