Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
+241
@@ -0,0 +1,241 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Interface-Implementation of Mine
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
// Own
|
||||
#include "mine_impl.h"
|
||||
#include <MapImpl/map_impl.h>
|
||||
#include <Map/party_id_to_color_functor.h>
|
||||
#include <GraphicalObjects/graphical_object_ellipse.h>
|
||||
#include <GraphicalObjects/graphical_object_picture_marker.h>
|
||||
#include <GraphicalObjects/tactical_appearance.h>
|
||||
|
||||
#include <Symbology/sidc_codec.h>
|
||||
|
||||
// ESRI
|
||||
|
||||
|
||||
// Qt
|
||||
#include <QPainter>
|
||||
#include <QPen>
|
||||
|
||||
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// constants
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Utils:
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class MineImpl
|
||||
//-----------------------------------------------------------------------------
|
||||
MineImpl::MineImpl(const QString &debugInfo)
|
||||
: Mine() // Interface
|
||||
, BaseClass(debugInfo) // Implementation
|
||||
// , AbstractEffectSimulationImpl() // Secondary implementation
|
||||
, m_logger(getLogger("MineImpl"))
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
}
|
||||
|
||||
MineImpl::~MineImpl()
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
||||
}
|
||||
|
||||
|
||||
QString MineImpl::toString() const
|
||||
{
|
||||
QString str;
|
||||
str.append(BaseClass::toString());
|
||||
// str.append( AbstractEffectSimulationImpl::toString() );
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
bool MineImpl::state() const
|
||||
{
|
||||
return m_state.value();
|
||||
}
|
||||
void MineImpl::setState(bool state)
|
||||
{
|
||||
m_state = state;
|
||||
}
|
||||
|
||||
SymbolImage MineImpl::symbolImage() const
|
||||
{
|
||||
SymbolImage symImage;
|
||||
GraphicalObjectPictureMarker *pMarker = static_cast<GraphicalObjectPictureMarker *>(m_mainGraphicalObject);
|
||||
if (pMarker)
|
||||
{
|
||||
symImage.setImage(pMarker->image());
|
||||
symImage.setValid(!symImage.image().isNull());
|
||||
}
|
||||
return symImage;
|
||||
}
|
||||
|
||||
|
||||
bool MineImpl::updateViewImpl()
|
||||
{
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " START"
|
||||
<< " origin =" << this->origin() //.x() << ", " << this->origin().y()
|
||||
<< " radius =" << this->radius()
|
||||
<< " visibility=" << m_visibility
|
||||
<< " visiTechn=" << m_visibilityTechnical
|
||||
<< " visiTact=" << m_visibilityTactical;
|
||||
|
||||
if (!m_graphicsLayer)
|
||||
{
|
||||
ERROR_LOG(m_logger) << LOGFUNCTION << " no graphicsLayer";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (nullptr == m_mainGraphicalObject)
|
||||
{
|
||||
ERROR_LOG(m_logger) << LOGFUNCTION << " no m_mainGraphicalObject";
|
||||
return false;
|
||||
}
|
||||
|
||||
// image:
|
||||
GraphicalObjectPictureMarker *pMarker = static_cast<GraphicalObjectPictureMarker *>(m_mainGraphicalObject);
|
||||
if (m_state.changed())
|
||||
{
|
||||
const QImage &img = renderMineSymbol(partyColor(),
|
||||
20,
|
||||
m_state.value());
|
||||
pMarker->setImage(img);
|
||||
}
|
||||
pMarker->setOrigin(this->originTranslated());
|
||||
|
||||
|
||||
// tacticalAppearance:
|
||||
if (m_tacticalAppearance)
|
||||
{
|
||||
if (partyChanged())
|
||||
m_symbol.refValue().color = partyColor();
|
||||
|
||||
m_tacticalAppearance->setOrigin(this->originTranslated());
|
||||
}
|
||||
|
||||
bool success = BaseClass::updateViewImpl();
|
||||
|
||||
// reset changed:
|
||||
m_state.reset();
|
||||
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END, success=" << success;
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool MineImpl::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(), "10011500002102000000"); // SymbolSet = 15 210100 ; 280000 -> Crash on Click
|
||||
break;
|
||||
case AdvancedSymbology::SymbologyType::MIL2525C:
|
||||
// m_symbol.refValue().sidc = AdvancedSymbology::SidcCodec::encodeComplete(mapImpl->symbologyType(),"GHMPOB----"); // 0754 GHMPOMP--- (Antipersonnel (AP) Mines H) -> Point
|
||||
m_symbol.refValue().sidc = AdvancedSymbology::SidcCodec::encodeComplete(mapImpl->symbologyType(), "GHMPOB----"); // 0760 GHMPOB---- (Booby Trap H) -> Point
|
||||
break;
|
||||
case AdvancedSymbology::SymbologyType::APP6B:
|
||||
m_symbol.refValue().sidc = AdvancedSymbology::SidcCodec::encodeComplete(mapImpl->symbologyType(), "GUOPVY----"); // APP6B: 2549 GUOPVY---- (Booby Trap U) -> Point
|
||||
break;
|
||||
case AdvancedSymbology::SymbologyType::None:
|
||||
// empty
|
||||
break;
|
||||
} // switch
|
||||
|
||||
} // if (mapImpl)
|
||||
|
||||
bool success = BaseClass::init(mapImpl, logicalLayerName);
|
||||
|
||||
if (success)
|
||||
{
|
||||
// create underlying object (to save most attributes only there)
|
||||
if (!m_mainGraphicalObject)
|
||||
m_mainGraphicalObject = new GraphicalObjectPictureMarker(m_mapImpl->getEsriGeoView(),
|
||||
m_graphicsLayer,
|
||||
m_debugInfo + QStringLiteral("#Image"),
|
||||
m_uniqueMapId);
|
||||
|
||||
}
|
||||
else
|
||||
ERROR_LOG(m_logger) << LOGFUNCTION << " init failed";
|
||||
|
||||
TRACE_LOG(m_logger) << LOGFUNCTION << " END, success=" << success;
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
QImage MineImpl::renderMineSymbol(const QColor &color, int size, bool filled)
|
||||
{
|
||||
QImage image(size, size, QImage::Format_ARGB32);
|
||||
image.fill(Qt::transparent);
|
||||
|
||||
QPainter painter(&image);
|
||||
|
||||
QPen pen(color);
|
||||
pen.setWidth(2); // filled == deactivated == triggered
|
||||
if (!filled)
|
||||
pen.setWidth(1); // !filled == active == still armed
|
||||
painter.setPen(pen);
|
||||
|
||||
const int sizeHalf = size / 2.0;
|
||||
|
||||
QPointF center(sizeHalf, sizeHalf);
|
||||
|
||||
// circle
|
||||
if (filled)
|
||||
painter.setBrush(color);
|
||||
painter.drawEllipse(center, sizeHalf * 0.5, sizeHalf * 0.5);
|
||||
|
||||
// lines
|
||||
QLine newLine(0, sizeHalf, size / 4.0, sizeHalf);
|
||||
painter.drawLine(newLine);
|
||||
|
||||
QTransform trans;
|
||||
trans.translate(sizeHalf, sizeHalf);
|
||||
trans.rotate(90);
|
||||
trans.translate(-sizeHalf, -sizeHalf);
|
||||
|
||||
newLine = trans.map(newLine);
|
||||
painter.drawLine(newLine);
|
||||
|
||||
newLine = trans.map(newLine);
|
||||
painter.drawLine(newLine);
|
||||
|
||||
newLine = trans.map(newLine);
|
||||
painter.drawLine(newLine);
|
||||
|
||||
painter.end();
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
|
||||
} // namespace SituationMap
|
||||
Reference in new issue
Block a user