Initial commit
This commit is contained in:
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
|
||||
|
||||
|
||||
Reference in new issue
Block a user