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

+177
View File
@@ -0,0 +1,177 @@
/**
* @RDE_HEADER@
* Interface-Implementation of HitLine
* $Id$
* $HeadURL$
* $Author$
*/
// Own
#include "hit_line_impl.h"
#include <MapImpl/map_impl.h>
#include <GraphicalObjects/graphical_object_path.h>
#include <GraphicalObjects/graphical_object_text.h>
#include <Symbology/sidc_codec.h>
// ESRI
// Qt
#include <cassert>
namespace SituationMap
{
//-----------------------------------------------------------------------------
// class HitLineImpl
//-----------------------------------------------------------------------------
HitLineImpl::HitLineImpl(const QString &debugInfo)
: HitLine() // Interface
, BaseClass(debugInfo) // Implementation
, m_logger(getLogger("HitLineImpl"))
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START, debugInfo=" << m_debugInfo;
setArrowHeadStart(true);
TRACE_LOG(m_logger) << LOGFUNCTION << " END, debugInfo=" << m_debugInfo;
}
HitLineImpl::~HitLineImpl()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START, debugInfo=" << m_debugInfo;
TRACE_LOG(m_logger) << LOGFUNCTION << " END, debugInfo=" << m_debugInfo;
}
QString HitLineImpl::identifier() const
{
return this->textOnSegment(0);
}
void HitLineImpl::setIdentifier(const QString &identifier)
{
this->setTextOnSegment(0, identifier);
}
Point3D HitLineImpl::startPoint() const
{
// !!! see setStartAndEndPoint() !!!
const PositionCont &pos = m_positions.positions();
if (pos.size() < 2)
return Point3D();
else
return pos[1]; // !!! see setStartAndEndPoint() !!!
}
Point3D HitLineImpl::endPoint() const
{
// !!! see setStartAndEndPoint() !!!
const PositionCont &pos = m_positions.positions();
if (pos.size() < 2)
return Point3D();
else
return pos[0]; // !!! see setStartAndEndPoint() !!!
}
void HitLineImpl::setStartAndEndPoint(const Point3D &start, const Point3D &end)
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START"
<< " start=" << start
<< " end=" << end
<< ", debugInfo=" << m_debugInfo;
// According MIL2525 a line (like attack) starts with an arrow.
// But in this context (HitLine)
// start == shooter -> no arrowHead
// end == target -> with arrowHead
// Therefore we have to add the 'end'/target point first:
m_positions.setPositions(PositionCont() << end << start);
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
bool HitLineImpl::updateViewImpl()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START"
<< " symbol=" << m_symbol.value().sidc
<< " visibility=" << m_visibility
<< " visiTechn=" << m_visibilityTechnical
<< " visiTact=" << m_visibilityTactical
<< ", debugInfo=" << m_debugInfo;
setArrowHeadsSelected(m_selected);
bool success = BaseClass::updateViewImpl();
if (!success)
ERROR_LOG(m_logger) << LOGFUNCTION << " updateViewImpl failed";
TRACE_LOG(m_logger) << LOGFUNCTION << " END, success=" << success;
return success;
}
bool HitLineImpl::init(MapImpl *mapImpl, const QString &logicalLayerName)
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
if (mapImpl)
{
switch (mapImpl->symbologyType())
{
case AdvancedSymbology::SymbologyType::APP6D:
case AdvancedSymbology::SymbologyType::MIL2525D:
m_symbol.refValue().sidc = AdvancedSymbology::SidcCodec::encodeComplete(mapImpl->symbologyType(), "10032500001406030000"); // SymbolSet = 25 140602
// ^^ ^^^^^^
break;
case AdvancedSymbology::SymbologyType::MIL2525C:
m_symbol.refValue().sidc = AdvancedSymbology::SidcCodec::encodeComplete(mapImpl->symbologyType(), "GFGPOLKGS-"); // 1047 - Direction Of Attack Ground Supporting Attack F
// m_symbol.refValue().sidc = AdvancedSymbology::SidcCodec::encodeComplete(mapImpl->symbologyType(),"GHGPOLKA--"); //
// m_symbol.refValue().sidc = AdvancedSymbology::SidcCodec::encodeComplete(mapImpl->symbologyType(),"GHGPOLKGM-"); //
break;
case AdvancedSymbology::SymbologyType::APP6B:
m_symbol.refValue().sidc = AdvancedSymbology::SidcCodec::encodeComplete(mapImpl->symbologyType(), "GFCPMOLDS-"); // APP6B-3733 GFCPMOLDS- -> Direction Of Attack Ground Supporting Attack F
break;
case AdvancedSymbology::SymbologyType::None:
// empty
break;
} // switch
} // if (mapImpl)
double maxSegmentLength = -1; // -> GeometryEngine::densifyGeodetic
if (mapImpl && (mapImpl->mode() == Mode::Mode_3D))
maxSegmentLength = 10; // -> GeometryEngine::densifyGeodetic
bool success = BaseClass::init(mapImpl, logicalLayerName, GraphicalObjectPathType::Polyline, maxSegmentLength);
if (!success)
ERROR_LOG(m_logger) << LOGFUNCTION << " init failed";
m_mainGraphicalObject->rLineStyle().setLinePattern(LinePattern::Dash);
TRACE_LOG(m_logger) << LOGFUNCTION << " END, success=" << success;
return success;
}
bool HitLineImpl::setPositions(const PositionCont &)
{
FATAL_LOG(m_logger) << LOGFUNCTION << " DO NOT CALL!!!";
assert(false);
return false;
}
} // namespace SituationMap