Initial commit

This commit is contained in:
torsten committed 2026-08-13 18:33:10 +02:00
commit b7d90b9afe
16245 files changed
+3396666

No files matched your search

+49
View File
@@ -0,0 +1,49 @@
#
# $Id$
# $HeadURL$
# $Author$
#
SET(SRCS_TEST1
situation_map_test_main.cpp
sit_map.cpp
log4cxxSituationMapModuleTests.props
)
SET(HDRS_TEST1
situation_map_test_main.h
sit_map.h
)
IF(BUILD_TESTING AND TARGET situationMap)
ADD_EXECUTABLE(situationMapModuleTest ${SRCS_TEST1} ${HDRS_TEST1})
TARGET_LINK_LIBRARIES(situationMapModuleTest
NGLLogger
nglapplication
LtsCoordTrans
advancedSymbology_static
situationMapObjects
situationMap_static
situationMapFunctionDialog
ArcGIS::ArcGIS
Qt5::Core
Qt5::Test
)
ADD_TEST(NAME situationMapModuleTest_NONE COMMAND $<TARGET_FILE:situationMapModuleTest> none)
ADD_TEST(NAME situationMapModuleTest_MIL2525D COMMAND $<TARGET_FILE:situationMapModuleTest> mil2525d)
SET(LOG4CXX_PROPS_FILE log4cxxSituationMapModuleTests.props)
ADD_CUSTOM_COMMAND(TARGET situationMapModuleTest POST_BUILD
COMMAND ${CMAKE_COMMAND}
ARGS -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/${LOG4CXX_PROPS_FILE} $<TARGET_FILE_DIR:situationMapModuleTest>/${LOG4CXX_PROPS_FILE}
)
IF(MSVC)
# Configure the template file
SET(VS_USER_FILE situationMapTest.vcxproj.user)
configure_file( ../SituationMap.vcxproj.user.in ${CMAKE_CURRENT_BINARY_DIR}/${VS_USER_FILE} @ONLY)
ENDIF(MSVC)
ENDIF()
@@ -0,0 +1,159 @@
log4j.reset=true
log4j.rootLogger=WARN, file
# SitMap
###########################################################
#log4j.logger.SituationMap.SituationMapTestsMain=DEBUG
#log4j.logger.SituationMap.SitMap=WARN
# AdvancedSymbology (AdvSymbology)
###########################################################
#log4j.logger.AdvSymbology.SymbolDictionary=INFO
#log4j.logger.AdvSymbology.SymbolDictionaryImpl=INFO
#log4j.logger.AdvSymbology.Sidc2525Delta=INFO
# SituationMap
###########################################################
#log4j.logger.SituationMap.INFO
#log4j.logger.SituationMap.MapImpl=FATAL
#log4j.logger.SituationMap.MapSettings=FATAL
#log4j.logger.SituationMap.MapInitializer=FATAL
#log4j.logger.SituationMap.LayerFactoryImpl=FATAL
#log4j.logger.SituationMap.LayerControl=FATAL
#log4j.logger.SituationMap.CoordTranslationFunctorImpl=FATAL
#log4j.logger.SituationMap.CoordTranslationThread=FATAL
#log4j.logger.SituationMap.PositionsTranslated=FATAL
#log4j.logger.SituationMap.GridImpl=FATAL
#log4j.logger.SituationMap.ObjectFactory=FATAL
#log4j.logger.SituationMap.IdGenerator=FATAL
#log4j.logger.SituationMap.ObjectContainer=FATAL
#log4j.logger.SituationMap.ObjectContainerCTC=FATAL
#log4j.logger.SituationMap.OverlayHandlerImpl=FATAL
#log4j.logger.SituationMap.ViewshedImpl=FATAL
#log4j.logger.SituationMap.ViewshedBase=FATAL
#log4j.logger.SituationMap.AbstractMapObjectImpl=FATAL
#log4j.logger.SituationMap.AbstractEffectSimulationImpl=FATAL
#log4j.logger.SituationMap.OriginTranslated=FATAL
#log4j.logger.SituationMap.PositionsTranslated=FATAL
#log4j.logger.SituationMap.AbstractMultiPointMapObjectImpl=FATAL
#log4j.logger.SituationMap.AbstractSinglePointMapObjectImpl=FATAL
#log4j.logger.SituationMap.BasicPathObjectImpl=FATAL
#log4j.logger.SituationMap.IndicationContainer=FATAL
#log4j.logger.SituationMap.PolygonImpl=FATAL
#log4j.logger.SituationMap.PolylineImpl=FATAL
#log4j.logger.SituationMap.TextImpl=FATAL
#log4j.logger.SituationMap.AreaFireImpl=FATAL
#log4j.logger.SituationMap.BiologicalAgentImpl=FATAL
#log4j.logger.SituationMap.BuildingOutlineImpl=FATAL
#log4j.logger.SituationMap.ChemicalAgentImpl=FATAL
#log4j.logger.SituationMap.DangerAreaImpl=FATAL
#log4j.logger.SituationMap.FunctionalAreaImpl=FATAL
#log4j.logger.SituationMap.HitLineImpl=FATAL
#log4j.logger.SituationMap.MapObjectIndicatorImpl=FATAL
#log4j.logger.SituationMap.MineImpl=FATAL
#log4j.logger.SituationMap.MineFieldImpl=FATAL
#log4j.logger.SituationMap.NuclearAgentImpl=FATAL
#log4j.logger.SituationMap.ParticipantImpl=FATAL
#log4j.logger.SituationMap.SingleFireImpl=FATAL
#log4j.logger.SituationMap.AbstractGraphicalObject=FATAL
#log4j.logger.SituationMap.GraphicalObjectEllipse=FATAL
#log4j.logger.SituationMap.GraphicalObjectPath=FATAL
#log4j.logger.SituationMap.GraphicalObjectMultiPath=FATAL
#log4j.logger.SituationMap.GraphicalObjectPictureMarker=FATAL
#log4j.logger.SituationMap.GraphicalObjectRange=FATAL
#log4j.logger.SituationMap.GraphicalObjectText=FATAL
#log4j.logger.SituationMap.TacticalAppearance=FATAL
#log4j.logger.SituationMap.MessageBase=FATAL
#log4j.logger.SituationMap.EventDispatcher=FATAL
#log4j.logger.SituationMap.Rubberband=FATAL
#log4j.logger.SituationMap.RubberbandRectangle=FATAL
#log4j.logger.SituationMap.RubberbandDrawablesAndHandles=FATAL
#log4j.logger.SituationMap.RubberbandFrameHandle=FATAL
#log4j.logger.SituationMap.RubberbandPointHandle=FATAL
#log4j.logger.SituationMap.RubberbandStateSelect=FATAL
# SituationMap-SideBar
###########################################################
#log4j.logger.SituationMap.SideBar=FATAL
#log4j.logger.SituationMap.SideBarItem=FATAL
#log4j.logger.SituationMap.SideBarModel=FATAL
# Appnd_File
###########################################################
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=9
log4j.appender.file.file=${LOG4QT_LOGDIR}/${LOG4QT_USER}_SituationMap.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %-5p %c |#| %m (%.50F:%L) %n
# Appnd_Console
###########################################################
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %d %-5p %c{1} |#| %m (%-.30F:%L) %n
#log4j.appender.stdout.layout.ConversionPattern= %d %-5p %-30c |#| %m (%-.30F:%L) %n
# Appnd_Syslog
###########################################################
log4j.appender.syslog=org.apache.log4j.SyslogAppender
log4j.appender.syslog.Threshold=ERROR
log4j.appender.syslog.SysLogHost=localhost
log4j.appender.syslog.Facility=LOCAL7
log4j.appender.syslog.layout=org.apache.log4j.PatternLayout
log4j.appender.syslog.layout.ConversionPattern= %-4r %-5p %c %x - %m
log4j.appender.syslog.LevelRangeFilter.AcceptOnMatch=true
log4j.appender.syslog.LevelRangeFilter.LevelMin=INFO
log4j.appender.syslog.LevelRangeFilter.LevelMax=FATAL
###########################################################
###########################################################
###########################################################
# 1) Available Levels in LOG4CXX Version 0.10.0:
# TRACE,
# DEBUG,
# INFO,
# WARN,
# ERROR
# FATAL
#
# d = date/time
# p = priority (Level)
# c = category/channel
# m = message
# F = file
# L = line
# n = platform dependent line separator character or characters.
# ....
#
# Examples for console:
# a)
# %d %p %c #%m# (%.50F:%L)%n
# date/time
# priority
# category/channel
# #message#
# (Maximal 50Character des Filename von rechts:Line)
# line separator
#
# b)
# %d (%.15F:%L) %-5p %c |#| %m%n
# date/time
# (Maximal 15Character des Filename von rechts:Line)
# priority, Right pad with spaces if the priority name is less than 5 characters long.
# category/channel
# message
# line separator
#
+347
View File
@@ -0,0 +1,347 @@
/**
* @RDE_HEADER@
* Moduletest
* $Id$
* $HeadURL$
* $Author$
*/
// Own
#include "sit_map.h"
#include <ngltools/ngltools_filesystem.h>
#include <Map/map.h>
//#include <Map/layer_factory.h>
#include <Map/grid.h>
#include <Map/map_initializer.h>
#include <Map/situation_map_utils.h>
#include <Symbology/symbol_dictionary.h>
#include <Map/object_factory.h>
#include <MapObjectsImpl/polygon_impl.h>
#include <MapObjectsImpl/polyline_impl.h>
#include <MapObjectsImpl/text_impl.h>
#include <MapObjectsImpl/area_fire_impl.h>
#include <MapObjectsImpl/biological_agent_impl.h>
#include <MapObjectsImpl/chemical_agent_impl.h>
#include <MapObjectsImpl/cube_impl.h>
#include <MapObjectsImpl/building_outline_impl.h>
#include <MapObjectsImpl/danger_area_impl.h>
#include <MapObjectsImpl/functional_area_impl.h>
#include <MapObjectsImpl/geo_image_impl.h>
#include <MapObjectsImpl/hit_line_impl.h>
#include <MapObjectsImpl/map_object_indicator_impl.h>
#include <MapObjectsImpl/mine_impl.h>
#include <MapObjectsImpl/mine_field_impl.h>
#include <MapObjectsImpl/nine_liner_impl.h>
#include <MapObjectsImpl/nuclear_agent_impl.h>
#include <MapObjectsImpl/participant_impl.h>
#include <MapImpl/sidc_symbol_impl.h>
#include <MapObjectsImpl/single_fire_impl.h>
//#include <MapObjectsImpl/single_fire_central_impl.h>
#include <FunctionDialog/function_dialog.h>
// Qt
#include <QApplication>
#include <QTimer>
#include <QPushButton>
#include <QGridLayout>
class myMapInitializer : public SituationMap::MapInitializer
{
Q_OBJECT
using BaseClass = SituationMap::MapInitializer;
public:
explicit myMapInitializer(SituationMap::Map &map
, SituationMap::MapSettings &mapSettings
, const QString &debugName
, QObject *parent = nullptr)
: BaseClass(map, mapSettings, debugName, parent) {}
bool initializeObjectFactory() override
{
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::MapObjectIndicator), new SituationMap::GenericObjectFactory<SituationMap::MapObjectIndicatorImpl>());
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::Cube), new SituationMap::GenericObjectFactory<SituationMap::CubeImpl>());
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>());
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::ChemicalAgent), new SituationMap::GenericObjectFactory<SituationMap::ChemicalAgentImpl>());
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::BuildingOutline), new SituationMap::GenericObjectFactory<SituationMap::BuildingOutlineImpl>());
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::DangerArea), new SituationMap::GenericObjectFactory<SituationMap::DangerAreaImpl>());
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::FunctionalArea), new SituationMap::GenericObjectFactory<SituationMap::FunctionalAreaImpl>());
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::GeoImage), new SituationMap::GenericObjectFactory<SituationMap::GeoImageImpl>());
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::HitLine), new SituationMap::GenericObjectFactory<SituationMap::HitLineImpl>());
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::Mine), new SituationMap::GenericObjectFactory<SituationMap::MineImpl>());
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::MineField), new SituationMap::GenericObjectFactory<SituationMap::MineFieldImpl>());
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::NineLiner), new SituationMap::GenericObjectFactory<SituationMap::NineLinerImpl>());
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::NuclearAgent), new SituationMap::GenericObjectFactory<SituationMap::NuclearAgentImpl>());
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::SingleFire), new SituationMap::GenericObjectFactory<SituationMap::SingleFireImpl>());
// SituationMap::ObjectFactory::registerMe(typeid(SituationMap::SingleFireCentral), new SituationMap::GenericObjectFactory<SituationMap::SingleFireCentralImpl>());
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::SidcSymbol), new SituationMap::GenericObjectFactory<SituationMap::SidcSymbolImpl>());
return true;
} // initializeObjectFactory()
// overload to support tpk-Files/BasemapBuiltIn
bool initializeCoordTranslationFunctor() override
{
if (m_map.layerFactory().isUsingBaseMapBuiltIn())
{
int wkid = 102100;
NOTICE_LOG(m_logger) << LOGFUNCTION << "\e[31m !!! using BaseMapBuiltIn -> wkId=" << wkid << "\e[0m";
m_map.initCoordTranslationFunctor();
return true;
}
return BaseClass::initializeCoordTranslationFunctor();
}
AdvancedSymbology::SymbologyType symbologyType() const override
{
return m_symbologyType;
} // symbologyType
void setSymbologyType(AdvancedSymbology::SymbologyType symbologyType)
{
m_symbologyType = symbologyType;
}
protected slots:
void onMapReady() override
{
// using center and scale:
m_map.setCenterPoint(QPointF(92750, 80525)); // QPointF(92750, 80525) -> Rennplatz - Bremen
m_map.setScale(3000000); // 3000000 -> Lower Saxony
// instead of "center and scale" it is possible to set an extent
// double xmin, double ymin, double xmax, double ymax
// m_map.setExtent(-200000, -200000, 300000, 300000);
// minMaxScale is optional:
// m_map.setMinScale(10000000);
// m_map.setMaxScale(100);
}
protected:
AdvancedSymbology::SymbologyType m_symbologyType = AdvancedSymbology::SymbologyType::APP6B;
}; // myMapInitializer
using namespace SituationMap;
class SitMap::Private
{
public:
Private() = default;
~Private() = default;
// map
AdvancedSymbology::SymbologyType m_symbologyType;
SituationMap::Map *m_map = nullptr;
// admin
QGridLayout *m_mainLayout = nullptr;
QPushButton *m_pbDestroyMap = nullptr;
QPushButton *m_pbQuit = nullptr;
QTimer *m_getRotationTimer = nullptr;
}; // class SitMap::Private
//-----------------------------------------------------------------------------
SitMap::SitMap(AdvancedSymbology::SymbologyType symbologyType, QWidget *parent)
: QDialog(parent)
, m_logger(SituationMap::getLogger("SitMap"))
, d(new Private)
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
this->setObjectName(QLatin1String("SitMap-Widget"));
d->m_symbologyType = symbologyType;
d->m_mainLayout = new QGridLayout(this);
d->m_mainLayout->setObjectName(QLatin1String("layout"));
//-----------------------------------
// Buttons
//-----------------------------------
d->m_pbDestroyMap = new QPushButton(QLatin1String("Destroy Map"));
d->m_mainLayout->addWidget(d->m_pbDestroyMap, 0, 0);
connect(d->m_pbDestroyMap, &QPushButton::clicked, this, &SitMap::onCreateDestroyClicked);
//-----------------------------------
// Map
//-----------------------------------
createMap();
{
QGridLayout *bottomLayout = new QGridLayout();
bottomLayout->setObjectName(QLatin1String("bottomLayout"));
d->m_mainLayout->addLayout(bottomLayout, 2, 0);
d->m_pbQuit = new QPushButton(QLatin1String("Quit"));
connect(d->m_pbQuit, &QPushButton::clicked, [ = ]()
{
QCoreApplication::quit();
});
bottomLayout->addWidget(d->m_pbQuit, 0, 0);
// tbc
}
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
SitMap::~SitMap()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
delete d->m_map;
delete d;
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
bool SitMap::isReady()
{
return d->m_map->isReady();
}
SituationMap::Map *SitMap::map()
{
return d->m_map;
}
void SitMap::onCreateDestroyClicked()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
static bool destroy = false;
destroy = !destroy;
if (destroy)
{
d->m_pbDestroyMap->setText(QLatin1String("Create Map"));
d->m_getRotationTimer->stop(); // to avoid slot being called
d->m_map->deleteLater();
}
else
{
d->m_pbDestroyMap->setText(QLatin1String("Destroy Map"));
createMap();
}
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
void SitMap::createMap()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
// 1. Map
d->m_map = SituationMap::Map::create(this);
connect(d->m_map, &SituationMap::Map::mapReady, this, [this]()
{
this->update(); // to fix redraw problem
DEBUG_LOG(m_logger) << " ===== emitting mapReady";
emit mapReady();
// Timer
d->m_getRotationTimer = new QTimer(this);
connect(d->m_getRotationTimer, &QTimer::timeout, this, [this]()
{
DEBUG_LOG(m_logger) << " get rotationDegree of=" << d->m_map->rotation();
});
d->m_getRotationTimer->setSingleShot(true);
d->m_getRotationTimer->start(2000);
});
connect(d->m_map, &SituationMap::Map::mapReadyAndSymbolDictionaryLoaded, this, [this]()
{
DEBUG_LOG(m_logger) << " ===== emitting mapReadyAndSymbolDictionaryLoaded";
emit mapReadyAndSymbolDictionaryLoaded();
});
// e.g. TDS-build/share/Lts/situation_map/situation_map_defaults.ini
QString initFilePath = NGL::findFile(NGL::FileType::ConfigFile, QStringLiteral("situation_map_defaults.ini"));
if (initFilePath.isEmpty())
{
FATAL_LOG(m_logger) << " initFilePath " << initFilePath;
abort();
}
SituationMap::MapSettings *mapSettings = new SituationMap::MapSettings(initFilePath, d->m_map);
myMapInitializer *mapInitializer = new myMapInitializer(*d->m_map, *mapSettings, QLatin1String("ModuleTest"), d->m_map);
// Take SymbologyType from argv not from ini file:
AdvancedSymbology::SymbologyType symbologyTypeArgv = d->m_symbologyType;
mapInitializer->setSymbologyType(symbologyTypeArgv);
if (mapInitializer->hasErrors())
{
FATAL_LOG(m_logger) << LOGFUNCTION << " MapInitializer-filename='" << mapInitializer->filename()
<< "'' has following errors: "
<< " exists = " << mapInitializer->exists()
<< " accessError = " << mapInitializer->accessError()
<< " formatError = " << mapInitializer->formatError();
return;
}
else
{
if (mapInitializer->initMap())
{
INFO_LOG(m_logger) << LOGFUNCTION << " MapInitializer::initMap() ok";
}
else
{
ERROR_LOG(m_logger) << LOGFUNCTION << " MapInitializer::initMap() failed";
}
}
DEBUG_LOG(m_logger) << LOGFUNCTION << " GridLevelCount=" << d->m_map->grid().levelCount();
// BasePoint, extent, rotation
connect(d->m_map, &SituationMap::Map::extentChanged, this, [ = ]()
{
DEBUG_LOG(m_logger) << LOGFUNCTION << " extent changed: ";
});
// Add widget
d->m_mainLayout->addWidget(d->m_map, 1, 0);
// 50. turn over to application (if required):
// Create FunctionDialog:
SituationMap::FunctionDialog::addButtonToMap(d->m_map);
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
#include "sit_map.moc"
+58
View File
@@ -0,0 +1,58 @@
/**
* @RDE_HEADER@
* Moduletest
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
// Qwn
#include <Common/situation_map_logging.h>
namespace SituationMap
{
class Map;
}
namespace AdvancedSymbology
{
enum class SymbologyType;
}
// Qt
#include <QDialog>
class SitMap : public QDialog
{
Q_OBJECT
public:
SitMap(AdvancedSymbology::SymbologyType symbologyType, QWidget *parent = nullptr);
virtual ~SitMap();
virtual bool isReady();
SituationMap::Map *map();
signals:
void mapReady();
void mapReadyAndSymbolDictionaryLoaded();
public slots:
void onCreateDestroyClicked();
void createMap();
private:
SituationMap::LOGGER_T m_logger; ///< Interface of the Logging-Facility
class Private;
Private *d = nullptr;
};
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,118 @@
/**
* @RDE_HEADER@
* Moduletest
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
#include <QCoreApplication>
#include <QtTest/QTest>
#include <QDialog>
#include <Common/situation_map_logging.h>
namespace AdvancedSymbology
{
enum class SymbologyType;
}
class SituationMapTestsMain : public QObject
{
Q_OBJECT
public:
SituationMapTestsMain(AdvancedSymbology::SymbologyType symbologyType);
virtual ~SituationMapTestsMain();
private Q_SLOTS:
void initTestCase();
void checkMapReady();
void checkMapNotifier();
void checkCenter();
void checkExtent();
void checkMapIsUTM();
// void convertMgrsBasePoint(); // not supported by QuartztBeta1
void convertUTMBasePoint();
void checkOriginTranslated();
void checkPositionsTranslated();
void checkPositionAngles();
void measureProject();
void measurceLocationToElevationBulk();
void checkMapObjectProperties();
void checkObjectFactoryContainer(); // contains, get etc.
void checkObjectAndLayerFactory(); // checks layerOnDemand
void checkOverlayHandler1();
void checkOverlayHandler2();
void checkOverlayHandler3();
// void checkRubberbandFactory();
void measureCoordTranslationFunctor();
void checkCoordinateConversion();
#ifndef Q_OS_WIN
# define CrashUnderWindows
#endif
#ifdef CrashUnderWindows
void checkCreationAndRemoveMySelf();
void checkGraphicalObject();
#endif
void checkGraphicalObjectEllipse();
void checkGraphicalObjectPath();
void checkGraphicalObjectPictureMarker1();
void checkGraphicalObjectPictureMarker2();
void checkGraphicalObjectPictureMarker3();
void checkGraphicalObjectRange();
void checkGraphicalObjectText();
void checkGraphicalObjectTacticalAppearance();
void checkBasicPathObjectImpl();
void checkChemicalAgent();
void checkParticipant();
void checkEventDispatcher();
void checkRubberbandMultiPointFeature();
void checkRubberbandRectangle();
void checkRubberbandRectangleIndex();
void checkRubberbandCorridor();
void checkRubberCoordinateProjection();
void cleanupTestCase();
protected:
void reInitTestCaseUntilSetCenter();
template<class RubberbandClass> void checkRubberband(const char *className);
template<class RubberbandClass> void checkRubberbandProjection(const char *className);
private:
SituationMap::LOGGER_T m_logger;
class Private;
Private *d = nullptr;
};