提交 9551e849 编写于 作者: 丁劲犇's avatar 丁劲犇 😸

1. Unique geo set func name to setGeo for all types of graphics items.

2. Add a pixmap geo graphics item, for future new features.
上级 d7b57a6f
......@@ -53,7 +53,7 @@ namespace QTVP_GEOMARKER{
adjustLabelPos();
}
void geoGraphicsEllipseItem::setCenter(qreal cent_lat,qreal cent_lon)
void geoGraphicsEllipseItem::setGeo(qreal cent_lat,qreal cent_lon)
{
m_lat = cent_lat;
m_lon = cent_lon;
......
......@@ -26,7 +26,7 @@ namespace QTVP_GEOMARKER{
qreal width() const {return m_width;}
qreal height() const {return m_height;}
void setSize(qreal pxwidth,qreal pxheight);
void setCenter(qreal cent_lat,qreal cent_lon);
void setGeo(qreal cent_lat,qreal cent_lon);
void adjust_coords(int nNewLevel);
QPointF label_pos();
};
......
......@@ -135,7 +135,7 @@ namespace QTVP_GEOMARKER{
(line().y1() + line().y2())/2 );
}
void geoGraphicsLineItem::setGeoLine(qreal lat1, qreal lon1, qreal lat2, qreal lon2)
void geoGraphicsLineItem::setGeo(qreal lat1, qreal lon1, qreal lat2, qreal lon2)
{
m_lat1 = lat1; m_lon1 = lon1;
m_lat2 = lat2; m_lon2 = lon2;
......
......@@ -28,7 +28,7 @@ namespace QTVP_GEOMARKER{
qreal lon1() const {return m_lon1;}
qreal lat2() const {return m_lat2;}
qreal lon2() const {return m_lon2;}
void setGeoLine(qreal lat1, qreal lon1, qreal lat2, qreal lon2);
void setGeo(qreal lat1, qreal lon1, qreal lat2, qreal lon2);
void adjust_coords(int nNewLevel);
QPointF label_pos();
};
......
#include "geographicspixmapitem.h"
#include "../qtviewer_planetosm/osmtiles/viewer_interface.h"
#include <assert.h>
#include <math.h>
#include <QGraphicsSceneMouseEvent>
#include <QMessageBox>
#include "geographicsscene.h"
#include "qtvplugin_geomarker.h"
namespace QTVP_GEOMARKER{
geoGraphicsPixmapItem::geoGraphicsPixmapItem(
QString name,
QTVOSM::viewer_interface * pVi,
qreal lat,
qreal lon,
qreal center_offsetx,
qreal center_offsety)
:QGraphicsPixmapItem (0)
,geoItemBase(name,ITEAMTYPE_PIXMAP,pVi)
,m_lat(lat)
,m_lon(lon)
,m_center_offsetx(center_offsetx)
,m_center_offsety(center_offsety)
{
assert(vi()!=0);
double px,py;
vi()->CV_LLA2World(m_lat,m_lon,&px,&py);
setOffset(px - m_center_offsetx, py - m_center_offsety);
}
void geoGraphicsPixmapItem::adjust_coords(int ncurrLevel)
{
if (vi() && ncurrLevel != level())
{
/** Since the map is zooming from level() to current level,
* the map size zoom ratio can be calculated using pow below.
* We can get new coord for current zoom level by multiplicative.
*/
double ratio = pow(2.0,(ncurrLevel - level()));
QPointF offset = this->offset();
setOffset(offset.x()*ratio, offset.y()*ratio);
}
}
void geoGraphicsPixmapItem::setCenterOffset(qreal center_offsetx,qreal center_offsety)
{
double px,py;
vi()->CV_LLA2World(m_lat,m_lon,&px,&py);
m_center_offsetx = center_offsetx;
m_center_offsety = center_offsety;
setOffset(px - m_center_offsetx, py - m_center_offsety);
}
void geoGraphicsPixmapItem::setGeo(qreal cent_lat,qreal cent_lon)
{
m_lat = cent_lat;
m_lon = cent_lon;
double px,py;
vi()->CV_LLA2World(cent_lat,cent_lon,&px,&py);
setOffset(px - m_center_offsetx, py - m_center_offsety);
adjustLabelPos();
}
void geoGraphicsPixmapItem::mousePressEvent(QGraphicsSceneMouseEvent * event)
{
QGraphicsPixmapItem ::mousePressEvent(event);
bool bshow = this->props_visible();
this->show_props(!bshow);
//post enent
QMap<QString, QVariant > map_evt;
geoGraphicsScene * pscene = dynamic_cast<geoGraphicsScene *>(this->scene());
if (pscene)
{
QObject * pPlg = pscene->parent();
if (pPlg)
{
qtvplugin_geomarker * pMarker = dynamic_cast<qtvplugin_geomarker *>(pPlg) ;
if (pMarker)
{
map_evt["source"] = pMarker->get_name();
map_evt["destin"] = "ALL";
if (event->buttons() & Qt::LeftButton)
map_evt["name"] = "ITEM_LBUTTON_CLICKED";
else if (event->buttons() & Qt::RightButton)
map_evt["name"] = "ITEM_RBUTTON_CLICKED";
else if (event->buttons() & Qt::MidButton)
map_evt["name"] = "ITEM_MBUTTON_CLICKED";
else
map_evt["name"] = "ITEM_BUTTON_CLICKED";
map_evt["id"] = this->item_name();
vi()->post_event(map_evt);
}
}
}
}
void geoGraphicsPixmapItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent * event)
{
QGraphicsPixmapItem ::mouseDoubleClickEvent(event);
//post enent
QMap<QString, QVariant > map_evt;
geoGraphicsScene * pscene = dynamic_cast<geoGraphicsScene *>(this->scene());
if (pscene)
{
QObject * pPlg = pscene->parent();
if (pPlg)
{
qtvplugin_geomarker * pMarker = dynamic_cast<qtvplugin_geomarker *>(pPlg) ;
if (pMarker)
{
map_evt["source"] = pMarker->get_name();
map_evt["destin"] = "ALL";
if (event->buttons() & Qt::LeftButton)
map_evt["name"] = "ITEM_LBUTTON_DBLCLICKED";
else if (event->buttons() & Qt::RightButton)
map_evt["name"] = "ITEM_RBUTTON_DBLCLICKED";
else if (event->buttons() & Qt::MidButton)
map_evt["name"] = "ITEM_MBUTTON_DBLCLICKED";
else
map_evt["name"] = "ITEM_BUTTON_DBLCLICKED";
map_evt["id"] = this->item_name();
vi()->post_event(map_evt);
}
}
}
}
QPointF geoGraphicsPixmapItem::label_pos()
{
return QPointF(offset().x()+this->boundingRect().width(),offset().y()-8);
}
}
#ifndef GEOGRAPHICSRECTITEM_H
#define GEOGRAPHICSRECTITEM_H
#include <QGraphicsPixmapItem>
#include "geoitembase.h"
namespace QTVP_GEOMARKER{
class geoGraphicsPixmapItem : public QGraphicsPixmapItem , public geoItemBase
{
protected:
qreal m_lat;
qreal m_lon;
qreal m_center_offsetx;
qreal m_center_offsety;
protected:
void mousePressEvent(QGraphicsSceneMouseEvent * event);
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent * event);
public:
explicit geoGraphicsPixmapItem(QString name,QTVOSM::viewer_interface * pVi,
qreal cent_lat = 90,
qreal cent_lon = 0,
qreal center_offsetx = 0,
qreal center_offsety = 0);
public:
qreal lat() const {return m_lat;}
qreal lon() const {return m_lon;}
qreal centerx() const {return m_center_offsetx;}
qreal centery() const {return m_center_offsety;}
void setCenterOffset(qreal center_offsetx,qreal center_offsety);
void setGeo(qreal cent_lat,qreal cent_lon);
void adjust_coords(int ncurrLevel);
QPointF label_pos();
};
}
#endif // GEOGRAPHICSELLIPSEITEM_H
......@@ -153,7 +153,7 @@ namespace QTVP_GEOMARKER{
return QPointF(x,y);
}
void geoGraphicsPolygonItem::setGeoPolygon(const QPolygonF & lla_polygon)
void geoGraphicsPolygonItem::setGeo(const QPolygonF & lla_polygon)
{
m_llap = lla_polygon;
unwarrp();
......
......@@ -20,7 +20,7 @@ namespace QTVP_GEOMARKER{
);
public:
QPolygonF llas() const {return m_llap;}
void setGeoPolygon(const QPolygonF & lla_polygon);
void setGeo(const QPolygonF & lla_polygon);
void adjust_coords(int nNewLevel);
QPointF label_pos();
};
......
......@@ -54,7 +54,7 @@ namespace QTVP_GEOMARKER{
setRect(px - pxwidth/2, py - pxheight/2, pxwidth, pxheight);
}
void geoGraphicsRectItem::setCenter(qreal cent_lat,qreal cent_lon)
void geoGraphicsRectItem::setGeo(qreal cent_lat,qreal cent_lon)
{
m_lat = cent_lat;
m_lon = cent_lon;
......
......@@ -27,7 +27,7 @@ namespace QTVP_GEOMARKER{
qreal width() const {return m_width;}
qreal height() const {return m_height;}
void setSize(qreal pxwidth,qreal pxheight);
void setCenter(qreal cent_lat,qreal cent_lon);
void setGeo(qreal cent_lat,qreal cent_lon);
void adjust_coords(int ncurrLevel);
QPointF label_pos();
};
......
......@@ -17,7 +17,8 @@ namespace QTVP_GEOMARKER{
ITEAMTYPE_ELLIPSE_POINT = 1,
ITEAMTYPE_RECT_POINT = 2,
ITEAMTYPE_LINE = 3,
ITEAMTYPE_POLYGON = 4
ITEAMTYPE_POLYGON = 4,
ITEAMTYPE_PIXMAP = 5
};
inline const QString & item_name_by_enum(geo_item_type tp)
{
......
......@@ -433,7 +433,7 @@ QTVP_GEOMARKER::geoItemBase * qtvplugin_geomarker::update_line(const QString &
if (base == pitem)
{
pitem->setGeoLine(lat1,lon1,lat2,lon2);
pitem->setGeo(lat1,lon1,lat2,lon2);
res = pitem;
}
else if (false==this->m_pScene->addItem(pitem,0))
......@@ -480,7 +480,7 @@ QTVP_GEOMARKER::geoItemBase * qtvplugin_geomarker::update_polygon (const QStr
pitem->setBrush(brush);
if (base == pitem)
{
pitem->setGeoPolygon(latlons);
pitem->setGeo(latlons);
res = pitem;
}
else if (false==this->m_pScene->addItem(pitem,0))
......
......@@ -159,6 +159,7 @@ protected slots:
void on_radioButton_tool_point_toggled(bool);
void on_radioButton_tool_line_toggled(bool);
void on_radioButton_tool_polygon_toggled(bool);
void on_radioButton_tool_bitmaps_toggled(bool);
void on_toolButton_selColorPen_clicked();
void on_toolButton_selColorFill_clicked();
void on_toolButton_selColorText_clicked();
......@@ -199,7 +200,7 @@ QTVP_GEOMARKER::geoItemBase * qtvplugin_geomarker::update_point(const QString &
if (base == pitem)
{
pitem->setCenter(lat,lon);
pitem->setGeo(lat,lon);
pitem->setSize(width,height);
res = pitem;
}
......
......@@ -22,7 +22,8 @@ SOURCES += \
geographicslineitem.cpp \
geographicspolygonitem.cpp \
qtvplugin_geomarker_func.cpp \
qtvplugin_geomarker_xml.cpp
qtvplugin_geomarker_xml.cpp \
geographicspixmapitem.cpp
HEADERS +=\
../qtviewer_planetosm/osmtiles/layer_interface.h \
......@@ -33,7 +34,8 @@ HEADERS +=\
geographicsscene.h \
geographicsrectitem.h \
geographicslineitem.h \
geographicspolygonitem.h
geographicspolygonitem.h \
geographicspixmapitem.h
FORMS += \
qtvplugin_geomarker.ui
......
......@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>446</width>
<height>457</height>
<height>426</height>
</rect>
</property>
<property name="windowTitle">
......@@ -88,6 +88,13 @@
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_tool_bitmaps">
<property name="text">
<string>bitmaps</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
......@@ -146,6 +153,9 @@
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_8">
<property name="spacing">
<number>1</number>
</property>
<item>
<widget class="QStackedWidget" name="stackedWidget_marks">
<property name="sizePolicy">
......@@ -168,8 +178,26 @@
</property>
<widget class="QWidget" name="page_points">
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>1</number>
</property>
<property name="leftMargin">
<number>1</number>
</property>
<property name="topMargin">
<number>1</number>
</property>
<property name="rightMargin">
<number>1</number>
</property>
<property name="bottomMargin">
<number>1</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_7">
<property name="spacing">
<number>1</number>
</property>
<item>
<widget class="QLabel" name="label_4">
<property name="text">
......@@ -194,6 +222,9 @@
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="spacing">
<number>1</number>
</property>
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
......@@ -351,6 +382,21 @@
</widget>
<widget class="QWidget" name="page_polygon">
<layout class="QVBoxLayout" name="verticalLayout_4">
<property name="spacing">
<number>1</number>
</property>
<property name="leftMargin">
<number>1</number>
</property>
<property name="topMargin">
<number>1</number>
</property>
<property name="rightMargin">
<number>1</number>
</property>
<property name="bottomMargin">
<number>1</number>
</property>
<item>
<widget class="QLabel" name="label_13">
<property name="text">
......@@ -391,6 +437,7 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="page_bitmap"/>
</widget>
</item>
<item>
......
......@@ -93,6 +93,10 @@ void qtvplugin_geomarker::on_radioButton_tool_polygon_toggled(bool b)
{
if (b) ui->stackedWidget_marks->setCurrentIndex(2);
}
void qtvplugin_geomarker::on_radioButton_tool_bitmaps_toggled(bool b )
{
if (b) ui->stackedWidget_marks->setCurrentIndex(3);
}
void qtvplugin_geomarker::on_toolButton_selColorPen_clicked()
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册