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

@@ -0,0 +1,269 @@
/**
* @RDE_HEADER@
* Interface-Implementation of BuildingOutline
* $Id$
* $HeadURL$
* $Author$
*/
// Own
#include "building_outline_impl.h"
#include <MapImpl/map_impl.h>
#include <GraphicalObjects/graphical_object_path.h>
#include <Map/bounding_box.h>
#include "Map/object_factory.h"
#include<Symbology/sidc_codec.h>
// ESRI
// Qt
namespace SituationMap
{
//-----------------------------------------------------------------------------
// class BuildingOutlineImpl
//-----------------------------------------------------------------------------
BuildingOutlineImpl::BuildingOutlineImpl(const QString &debugInfo)
: BuildingOutline() // Interface
, BaseClass(debugInfo) // Implementation
, m_logger(getLogger("BuildingOutlineImpl"))
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
m_markerOrigin.setMapObjectImpl(this);
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
BuildingOutlineImpl::~BuildingOutlineImpl()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
delete m_marker;
delete m_modelSceneMarker;
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
PositionCont BuildingOutlineImpl::positions() const
{
return BaseClass::positions();
}
bool BuildingOutlineImpl::setPositions(const PositionCont &posCont)
{
return BaseClass::setPositions(posCont);
}
QColor BuildingOutlineImpl::majorColor() const
{
if (m_forcedMajorColor.isValid())
return m_forcedMajorColor;
// use fillColor here:
return (m_mainGraphicalObject) ? m_mainGraphicalObject->fillStyle().fillColor() : BaseClass::majorColor();
}
LineStyle BuildingOutlineImpl::lineStyle() const
{
return BaseClass::lineStyle();
}
LineStyle &BuildingOutlineImpl::rLineStyle()
{
return BaseClass::rLineStyle();
}
void BuildingOutlineImpl::setLineStyle(const LineStyle &lineStyle)
{
BaseClass::setLineStyle(lineStyle);
}
FillStyle BuildingOutlineImpl::fillStyle() const
{
return BaseClass::fillStyle();
}
FillStyle &BuildingOutlineImpl::rFillStyle()
{
return BaseClass::rFillStyle();
}
void BuildingOutlineImpl::setFillStyle(const FillStyle &fillStyle)
{
BaseClass::setFillStyle(fillStyle);
}
void BuildingOutlineImpl::setMarker(const Point3D &markerOrigin)
{
m_markerOrigin.setOrigin(markerOrigin);
}
BuildingOutline::ModelSceneSymbolData BuildingOutlineImpl::getModelSceneSymbolData()
{
return m_modelSceneSymolData;
}
void BuildingOutlineImpl::setModelSceneSymbolData(const BuildingOutline::ModelSceneSymbolData &modelSceneSymbolData)
{
m_modelSceneSymolData = modelSceneSymbolData;
}
bool BuildingOutlineImpl::updateViewImpl()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START"
<< " visibility=" << m_visibility
<< " visiTechn=" << m_visibilityTechnical
<< " visiTact=" << m_visibilityTactical
<< " scale=" << m_mainGraphicalObject->scale()
<< " posCont=" << m_positions.positions()
<< " url=" << m_modelSceneSymolData.url.toString()
<< " scale=" << m_modelSceneSymolData.scale
<< " m_heading=" << m_modelSceneSymolData.heading;
bool success = BaseClass::updateViewImpl();
updateViewImplMarker();
if (m_mapImpl->mode() == Mode::Mode_3D)
updateModelSceneSymbol();
if (!success)
ERROR_LOG(m_logger) << LOGFUNCTION << " updateViewImpl failed";
TRACE_LOG(m_logger) << LOGFUNCTION << " END, success=" << success;
return success;
}
bool BuildingOutlineImpl::updateViewImplMarker()
{
if (m_markerOrigin.isEmpty())
{
delete m_marker;
m_marker = nullptr;
}
else
{
if (!m_marker)
{
m_marker = new GraphicalObjectPictureMarker(m_mapImpl->getEsriGeoView(),
m_graphicsLayer,
m_debugInfo + QLatin1String("#Marker"),
m_uniqueMapId);
}
const float scale = m_mainGraphicalObject->scale() * m_mainGraphicalObject->lineStyle().lineWidth() * 0.5f;
m_marker->setMarkerSymbol(MarkerSymbolType::Triangle, qRound(5.0f * scale), m_mainGraphicalObject->rLineStyle().lineColor());
m_marker->setPickable(m_mainGraphicalObject->pickable());
m_marker->setDrawOrder(m_internalDrawOrder+1);
m_marker->setOrigin(m_markerOrigin.originTranslated());
m_marker->setVisibility(m_visibility && m_visibilityTechnical);
if (!m_marker->updateView())
ERROR_LOG(m_logger) << LOGFUNCTION << " debugInfo='" << m_debugInfo << "'"
<< " updateView failed";
}
return true;
}
bool BuildingOutlineImpl::updateModelSceneSymbol()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START"
<< " debugInfo='" << m_debugInfo << "'"
<< " url=" << m_modelSceneSymolData.url.toString()
<< " scale=" << m_modelSceneSymolData.scale
<< " m_heading=" << m_modelSceneSymolData.heading;
bool success = false;
if (m_markerOrigin.isEmpty())
{
ERROR_LOG(m_logger) << LOGFUNCTION << " no markerOrigin"
<< " debugInfo='" << m_debugInfo << "'";
return false;
}
if (m_modelSceneSymolData.url.isEmpty())
{
delete m_modelSceneMarker;
m_modelSceneMarker= nullptr;
} else {
if (!m_modelSceneMarker)
m_modelSceneMarker = new GraphicalObjectModelSceneMarker(m_mapImpl->getEsriGeoView(),
m_graphicsLayer,
m_debugInfo + QLatin1String("#ModelSceneMarker"),
m_uniqueMapId);
// Symbol:
m_modelSceneMarker->setUrl(m_modelSceneSymolData.url);
m_modelSceneMarker->setOrigin(m_markerOrigin.originTranslated());
m_modelSceneMarker->setHeading(m_modelSceneSymolData.heading);
m_modelSceneMarker->setScale(m_modelSceneSymolData.scale); // use scale of m_modelSceneSymolData, not of m_mainGraphicalObject
m_modelSceneMarker->setVisibility(m_visibility && m_visibilityTechnical);
success = m_modelSceneMarker->updateView();
if (!success)
ERROR_LOG(m_logger) << LOGFUNCTION << " updateView failed"
<< " debugInfo='" << m_debugInfo << "'";
}
TRACE_LOG(m_logger) << LOGFUNCTION << " END"
<< " debugInfo='" << m_debugInfo << "'";
return success;
}
bool BuildingOutlineImpl::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(), "10042500002701000000"); // SymbolSet = 25 270100
break;
case AdvancedSymbology::SymbologyType::MIL2525C:
m_symbol.refValue().sidc = AdvancedSymbology::SidcCodec::encodeComplete(mapImpl->symbologyType(), "G*MPOGZ---****X");
break;
case AdvancedSymbology::SymbologyType::APP6B:
m_symbol.refValue().sidc = AdvancedSymbology::SidcCodec::encodeComplete(mapImpl->symbologyType(), "GFCPBOGB--"); // APP6B: 3845: GFCPBOGB-- -> Polygon
break;
case AdvancedSymbology::SymbologyType::None:
// empty
break;
} // switch
} // if (mapImpl)
bool success = BaseClass::init(mapImpl, logicalLayerName, GraphicalObjectPathType::Polygon);
setLineStyle(LineStyle(Qt::black, 2));
if (!success)
ERROR_LOG(m_logger) << LOGFUNCTION << " init failed";
TRACE_LOG(m_logger) << LOGFUNCTION << " END, success=" << success;
return success;
}
void BuildingOutlineImpl::updateIdentifierPosition()
{
if (m_positions.isEmpty())
return;
BoundingBox bbox;
this->boundingBox(bbox);
if (!bbox.isValid())
return BaseClass::updateIdentifierPosition();
OriginTranslated objCenterPoint;
objCenterPoint.setMapObjectImpl(this);
objCenterPoint.setOrigin(bbox.center());
m_identifierPositionCandidateTranslated = objCenterPoint.originTranslated();
}
} // namespace SituationMap