提交 9c047f72 编写于 作者: A archosm

Add functions to enable rubble-rect selection in geomarker.

上级 4aa10942
......@@ -26,6 +26,7 @@ qtvplugin_geomarker::qtvplugin_geomarker(QWidget *parent) :
QWidget(parent),
ui(new Ui::qtvplugin_geomarker),
m_currentTools(qtvplugin_geomarker::TOOLS_DISPLAY_ONLY),
m_lastTools(qtvplugin_geomarker::TOOLS_DISPLAY_ONLY),
m_sel_ptStart_World(0,0),
m_sel_ptEnd_World(0,0)
{
......@@ -105,6 +106,11 @@ qtvplugin_geomarker::qtvplugin_geomarker(QWidget *parent) :
m_nTimerID_refreshUI = startTimer(2000);
m_nTimerID_refreshMap = startTimer(100);
ui->radioButton_QTV_display->setChecked(true);
m_sel_lla.push_back(0);
m_sel_lla.push_back(0);
m_sel_lla.push_back(0);
m_sel_lla.push_back(0);
}
qtvplugin_geomarker::~qtvplugin_geomarker()
......@@ -271,6 +277,7 @@ void qtvplugin_geomarker::cb_paintEvent( QPainter * pImage )
switch (m_currentTools)
{
case qtvplugin_geomarker::TOOLS_RECT_SELECTION:
case qtvplugin_geomarker::TOOLS_RECT_MARK:
{
QPen pen_sel(QColor(128,64,0,128));
pen_sel.setWidth(3);
......@@ -330,8 +337,16 @@ void qtvplugin_geomarker::set_active(bool ab)
{
if (m_currentTools==qtvplugin_geomarker::TOOLS_DISPLAY_ONLY)
{
ui->radioButton_QTV_rect_selection->setChecked(true);
m_currentTools = qtvplugin_geomarker::TOOLS_RECT_SELECTION;
if (m_lastTools==qtvplugin_geomarker::TOOLS_RECT_SELECTION)
{
ui->radioButton_QTV_rect_selection->setChecked(true);
m_currentTools = qtvplugin_geomarker::TOOLS_RECT_SELECTION;
}
else
{
ui->radioButton_QTV_rect_Mark->setChecked(true);
m_currentTools = qtvplugin_geomarker::TOOLS_RECT_MARK;
}
}
}
else
......@@ -370,7 +385,9 @@ QRectF qtvplugin_geomarker::CV_RectWrold2Mkt(QRectF world)
QRectF qtvplugin_geomarker::current_sel_RectWorld()
{
if (!m_pVi) return QRectF();
if (m_currentTools!=qtvplugin_geomarker::TOOLS_RECT_SELECTION)
if (m_currentTools!=qtvplugin_geomarker::TOOLS_RECT_SELECTION
&&
m_currentTools!=qtvplugin_geomarker::TOOLS_RECT_MARK)
return QRectF();
if (m_sel_ptEnd_World.isNull() || m_sel_ptStart_World.isNull())
return QRectF();
......@@ -597,6 +614,7 @@ bool qtvplugin_geomarker::cb_mousePressEvent(QMouseEvent * e)
switch (m_currentTools)
{
case qtvplugin_geomarker::TOOLS_RECT_SELECTION:
case qtvplugin_geomarker::TOOLS_RECT_MARK:
{
if (e->button()==Qt::LeftButton)
{
......@@ -651,6 +669,7 @@ bool qtvplugin_geomarker::cb_mouseMoveEvent ( QMouseEvent * e )
switch (m_currentTools)
{
case qtvplugin_geomarker::TOOLS_RECT_SELECTION:
case qtvplugin_geomarker::TOOLS_RECT_MARK:
{
if (e->buttons()==Qt::LeftButton)
{
......@@ -691,12 +710,26 @@ bool qtvplugin_geomarker::cb_mouseReleaseEvent ( QMouseEvent * e )
{
m_sel_ptEnd_World = QPointF(wx,wy);
QRectF rectSel = current_sel_RectWorld();
m_pVi->CV_World2LLA(rectSel.left(),rectSel.top(),m_sel_lla.data(),m_sel_lla.data()+1);
m_pVi->CV_World2LLA(rectSel.right(),rectSel.bottom(),m_sel_lla.data()+2,m_sel_lla.data()+3);
m_sel_ptStart_World = m_sel_ptEnd_World = QPointF();
addSelection(rectSel);
scheduleUpdateMap();
}
}
break;
case qtvplugin_geomarker::TOOLS_RECT_MARK:
{
if (e->button()==Qt::LeftButton)
{
m_sel_ptEnd_World = QPointF(wx,wy);
QRectF rectSel = current_sel_RectWorld();
m_pVi->CV_World2LLA(rectSel.left(),rectSel.top(),m_sel_lla.data(),m_sel_lla.data()+1);
m_pVi->CV_World2LLA(rectSel.right(),rectSel.bottom(),m_sel_lla.data()+2,m_sel_lla.data()+3);
scheduleUpdateMap();
}
}
break;
default:
break;
}
......@@ -1171,3 +1204,4 @@ bool qtvplugin_geomarker::cmd_load (QString cmdFile)
}
return res;
}
......@@ -72,7 +72,8 @@ private:
//Enum tools
enum enum_tools_selection{
TOOLS_DISPLAY_ONLY = 0,
TOOLS_RECT_SELECTION = 1
TOOLS_RECT_SELECTION = 1,
TOOLS_RECT_MARK = 2
};
public:
qtvplugin_geomarker(QWidget *parent = 0);
......@@ -98,9 +99,11 @@ private:
private:
//current tools here
enum_tools_selection m_currentTools;
enum_tools_selection m_lastTools;
//selection tool
QPointF m_sel_ptStart_World;
QPointF m_sel_ptEnd_World;
QVector<double> m_sel_lla;
QSet<QString> m_set_itemNameSelected;
QRectF CV_RectWrold2Mkt(QRectF world);
QRectF current_sel_RectWorld();
......@@ -199,6 +202,7 @@ private:
//selection methods
QMap<QString, QVariant> func_selection_clear(const QMap<QString, QVariant> &);
QMap<QString, QVariant> func_selection_delete(const QMap<QString, QVariant> &);
QMap<QString, QVariant> func_selected_rect (const QMap<QString, QVariant> &);
QMap<QString, QVariant> func_selected_items (const QMap<QString, QVariant> &);
//style setting
QMap<QString, QVariant> func_set_default_style(const QMap<QString, QVariant> &);
......@@ -253,6 +257,7 @@ protected slots:
void on_pushButton_QTV_collaps_all_clicked();
void on_radioButton_QTV_display_clicked();
void on_radioButton_QTV_rect_selection_clicked();
void on_radioButton_QTV_rect_Mark_clicked();
void on_pushButton_QTV_sel_clear_clicked();
void on_pushButton_QTV_sel_delselected_clicked();
void on_pushButton_QTV_style_default_save_clicked();
......
......@@ -128,6 +128,13 @@
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_QTV_rect_Mark">
<property name="text">
<string>Rect Mark</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_QTV_hoverEvt_AutoLabel">
<property name="text">
......@@ -202,7 +209,7 @@
<x>0</x>
<y>0</y>
<width>187</width>
<height>177</height>
<height>151</height>
</rect>
</property>
<attribute name="icon">
......
......@@ -84,6 +84,7 @@ void qtvplugin_geomarker::initialBindPluginFuntions()
m_map_pluginFunctions["selection_clear"]= std::bind(&qtvplugin_geomarker::func_selection_clear, this,std::placeholders::_1);
m_map_pluginFunctions["selection_delete"]=std::bind(&qtvplugin_geomarker::func_selection_delete,this,std::placeholders::_1);
m_map_pluginFunctions["selected_items"] = std::bind(&qtvplugin_geomarker::func_selected_items, this,std::placeholders::_1);
m_map_pluginFunctions["selected_rect"] = std::bind(&qtvplugin_geomarker::func_selected_rect, this,std::placeholders::_1);
m_map_pluginFunctions["set_default_style"]=std::bind(&qtvplugin_geomarker::func_set_default_style,this,std::placeholders::_1);
m_map_pluginFunctions["default_style"] = std::bind(&qtvplugin_geomarker::func_default_style, this,std::placeholders::_1);
}
......@@ -1473,7 +1474,7 @@ QMap<QString, QVariant> qtvplugin_geomarker::func_set_mod (const QMap<QString
ui->radioButton_QTV_display->setChecked(true);
ui->toolBox_QTV_marks->setCurrentIndex(0);
m_sel_ptStart_World = m_sel_ptEnd_World = QPointF();
m_currentTools = qtvplugin_geomarker::TOOLS_DISPLAY_ONLY;
m_lastTools = m_currentTools = qtvplugin_geomarker::TOOLS_DISPLAY_ONLY;
layer_interface * pOSM = m_pVi->layer("OSM");
if (pOSM)
{
......@@ -1487,7 +1488,17 @@ QMap<QString, QVariant> qtvplugin_geomarker::func_set_mod (const QMap<QString
{
ui->radioButton_QTV_rect_selection->setChecked(true);
ui->toolBox_QTV_marks->setCurrentIndex(1);
m_currentTools = qtvplugin_geomarker::TOOLS_RECT_SELECTION;
m_lastTools = m_currentTools = qtvplugin_geomarker::TOOLS_RECT_SELECTION;
m_sel_ptStart_World = m_sel_ptEnd_World = QPointF();
m_pVi->adjust_layers(this);
m_pVi->UpdateWindow();
m_pVi->updateLayerGridView();
}
else if (mod==2)
{
ui->radioButton_QTV_rect_Mark->setChecked(true);
ui->toolBox_QTV_marks->setCurrentIndex(1);
m_lastTools = m_currentTools = qtvplugin_geomarker::TOOLS_RECT_MARK;
m_sel_ptStart_World = m_sel_ptEnd_World = QPointF();
m_pVi->adjust_layers(this);
m_pVi->UpdateWindow();
......@@ -1532,7 +1543,34 @@ QMap<QString, QVariant> qtvplugin_geomarker::func_selection_delete(const QMap<
return /*std::move*/(res);
}
/**
* @brief func_set_mod is a internal function for plugin call_func "selected_items"
* @brief func_selected_rect is a internal function for plugin call_func "func_selected_rect"
*
* the paraments used by paras is listed below.
* function=func_selected_rect;
* @param paras The key-value style paraments.
* @return QMap<QString, QVariant> if error happens, a property called "error" will store the most possible reason.
* the return value is stored in lat,lon, lat0=??;lat1=??;lon0=??;lon1=??;;
*/
QMap<QString, QVariant> qtvplugin_geomarker::func_selected_rect (const QMap<QString, QVariant> & paras)
{
QMap<QString, QVariant> res;
if (m_sel_lla.size()==4)
{
res["lat0"] = m_sel_lla[0];
res["lon0"] = m_sel_lla[1];
res["lat1"] = m_sel_lla[2];
res["lon1"] = m_sel_lla[3];
}
else
res["error"] = "NULL area!";
//! the mark names will be stored in key-value pairs, with
//! name0=??;name1=??;name2=??...namen-1=??
return /*std::move*/(res);
}
/**
* @brief func_selected_items is a internal function for plugin call_func "func_selected_items"
*
* the paraments used by paras is listed below.
* function=selected_items;
......
......@@ -803,12 +803,12 @@ void qtvplugin_geomarker::on_pushButton_QTV_save_clicked()
{
if (newfm.right(3).toUpper()=="XML")
{
if (true==xml_save(newfm))
{
if (true==xml_save(newfm))
{
settings.setValue("history/last_save_xml_dir",newfm);
//QMessageBox::information(this,tr("succeed"),tr("Successfully saved XML file") + newfm);
}
else
}
else
QMessageBox::warning(this,tr("failed"),tr("Save XML file") + newfm + tr(" Failed"));
}
else
......@@ -835,12 +835,12 @@ void qtvplugin_geomarker::on_pushButton_QTV_load_clicked()
{
if (newfm.right(3).toUpper()=="XML")
{
if (true==xml_load(newfm))
{
if (true==xml_load(newfm))
{
settings.setValue("history/last_open_xml_dir",newfm);
//QMessageBox::information(this,tr("succeed"),tr("Successfully load XML file") + newfm);
}
else
}
else
QMessageBox::warning(this,tr("failed"),tr("Load XML file") + newfm + tr(" Failed"));
}
else
......@@ -930,7 +930,7 @@ void qtvplugin_geomarker::on_radioButton_QTV_display_clicked()
{
if (!m_pVi) return ;
m_sel_ptStart_World = m_sel_ptEnd_World = QPointF();
m_currentTools = qtvplugin_geomarker::TOOLS_DISPLAY_ONLY;
m_lastTools = m_currentTools = qtvplugin_geomarker::TOOLS_DISPLAY_ONLY;
layer_interface * pOSM = m_pVi->layer("OSM");
if (pOSM)
{
......@@ -946,13 +946,26 @@ void qtvplugin_geomarker::on_radioButton_QTV_display_clicked()
void qtvplugin_geomarker::on_radioButton_QTV_rect_selection_clicked()
{
if (!m_pVi) return ;
m_currentTools = qtvplugin_geomarker::TOOLS_RECT_SELECTION;
m_lastTools = m_currentTools = qtvplugin_geomarker::TOOLS_RECT_SELECTION;
m_sel_ptStart_World = m_sel_ptEnd_World = QPointF();
m_pVi->adjust_layers(this);
m_pVi->UpdateWindow();
m_pVi->updateLayerGridView();
ui->toolBox_QTV_marks->setCurrentIndex(1);
}
void qtvplugin_geomarker::on_radioButton_QTV_rect_Mark_clicked()
{
if (!m_pVi) return ;
m_lastTools = m_currentTools = qtvplugin_geomarker::TOOLS_RECT_MARK;
m_sel_ptStart_World = m_sel_ptEnd_World = QPointF();
m_pVi->adjust_layers(this);
m_pVi->UpdateWindow();
m_pVi->updateLayerGridView();
ui->toolBox_QTV_marks->setCurrentIndex(1);
}
void qtvplugin_geomarker::on_pushButton_QTV_sel_clear_clicked()
{
clearSelection();
......
......@@ -450,5 +450,9 @@
<source>Load CMD file</source>
<translation>加载绘图指令文件</translation>
</message>
<message>
<source>Rect Mark</source>
<translation>仅获取选择矩形</translation>
</message>
</context>
</TS>
......@@ -609,3 +609,5 @@ void testcontainer::on_pushButton_QTV_test_10000_clicked()
}
}
......@@ -46,6 +46,9 @@ protected slots:
void on_pushButton_QTV_default_style_clicked();
void on_osmmap_map_event(QMap<QString, QVariant> p);
void on_pushButton_QTV_test_10000_clicked();
private slots:
void on_pushButton_QTV_test_geo_markMod_clicked();
void on_pushButton_QTV_test_geo_selectd_rect_clicked();
};
#endif // TESTCONTAINER_H
......@@ -514,7 +514,20 @@ void testcontainer::on_pushButton_QTV_test_geo_selectionMod_clicked()
if (res.contains("error"))
QMessageBox::information(this,"geomarker::set_mod",res);
}
void testcontainer::on_pushButton_QTV_test_geo_markMod_clicked()
{
QString res = ui->osmmap->osm_layer_call_function("geomarker"/*m_str_markerLayerName*/,
"function=set_mod;mod=2;");
if (res.contains("error"))
QMessageBox::information(this,"geomarker::set_mod",res);
}
void testcontainer::on_pushButton_QTV_test_geo_selectd_rect_clicked()
{
QString res = ui->osmmap->osm_layer_call_function("geomarker"/*m_str_markerLayerName*/,
"function=selected_rect;");
QMessageBox::information(this,"geomarker::selected_rect",res);
}
void testcontainer::on_pushButton_QTV_test_geo_selected_marks_clicked()
{
QString res = ui->osmmap->osm_layer_call_function("geomarker"/*m_str_markerLayerName*/,
......
......@@ -23,19 +23,18 @@
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_QTV_3">
<property name="text">
<string>Layer control</string>
<item row="20" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item row="16" column="1">
<widget class="QPushButton" name="pushButton_QTV_test_geo_clear_sel">
<property name="text">
<string>clear selection</string>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</widget>
</spacer>
</item>
<item row="14" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_resource">
......@@ -44,59 +43,66 @@
</property>
</widget>
</item>
<item row="15" column="1">
<widget class="QPushButton" name="pushButton_QTV_test_geo_selectionMod">
<item row="3" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_cache">
<property name="text">
<string>selection mod</string>
<string>cache Folder</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="pushButton_QTV_test_autodl">
<item row="7" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_layers">
<property name="text">
<string>connect</string>
<string>enum layers</string>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QLabel" name="label_QTV_5">
<item row="7" column="1">
<widget class="QPushButton" name="pushButton_QTV_test_layer_move">
<property name="text">
<string>Grid measure</string>
<string>order a layer</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QLabel" name="label_QTV_7">
<item row="11" column="1">
<widget class="QPushButton" name="pushButton_QTV_test_line">
<property name="text">
<string>geo marker</string>
<string>add a line</string>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_QTV_6">
<item row="5" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_navigate">
<property name="text">
<string>Plugin test:</string>
<string>navigate</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QPushButton" name="pushButton_QTV_test_layer_move">
<item row="9" column="1">
<widget class="QPushButton" name="pushButton_QTV_test_grid_getPolygon">
<property name="text">
<string>order a layer</string>
<string>get polygon</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_adds">
<item row="18" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_geo_del_sel">
<property name="text">
<string>address</string>
<string>delete selection</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_layers">
<item row="0" column="0">
<widget class="QLabel" name="label_qtv">
<property name="text">
<string>enum layers</string>
<string>background osm conn</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_QTV_3">
<property name="text">
<string>Layer control</string>
</property>
</widget>
</item>
......@@ -107,31 +113,45 @@
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QPushButton" name="pushButton_QTV_test_line">
<item row="15" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_geo_displayMod">
<property name="text">
<string>add a line</string>
<string>display mod</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_navigate">
<item row="18" column="1">
<widget class="QPushButton" name="pushButton_QTV_default_style">
<property name="text">
<string>navigate</string>
<string>default_style</string>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QPushButton" name="pushButton_QTV_test_grid_getPolygon">
<item row="15" column="1">
<widget class="QPushButton" name="pushButton_QTV_test_geo_selectionMod">
<property name="text">
<string>get polygon</string>
<string>selection mod</string>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_grid_enable">
<item row="8" column="0">
<widget class="QLabel" name="label_QTV_4">
<property name="text">
<string>measure on/off</string>
<string>Plugin test:</string>
</property>
</widget>
</item>
<item row="17" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_geo_selected_marks">
<property name="text">
<string>selected_marks</string>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QLabel" name="label_QTV_5">
<property name="text">
<string>Grid measure</string>
</property>
</widget>
</item>
......@@ -142,86 +162,80 @@
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_mark">
<item row="17" column="1">
<widget class="QPushButton" name="pushButton_QTV_test_geo_clear_sel">
<property name="text">
<string>add marks</string>
<string>clear selection</string>
</property>
</widget>
</item>
<item row="15" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_geo_displayMod">
<item row="1" column="1">
<widget class="QPushButton" name="pushButton_QTV_test_autodl">
<property name="text">
<string>display mod</string>
<string>connect</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_QTV_4">
<item row="9" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_grid_enable">
<property name="text">
<string>Plugin test:</string>
<string>measure on/off</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_QTV_2">
<item row="1" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_adds">
<property name="text">
<string>Navigate</string>
<string>address</string>
</property>
</widget>
</item>
<item row="17" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_geo_del_sel">
<item row="10" column="1">
<widget class="QLabel" name="label_QTV_7">
<property name="text">
<string>delete selection</string>
<string>geo marker</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_qtv">
<item row="4" column="0">
<widget class="QLabel" name="label_QTV_2">
<property name="text">
<string>background osm conn</string>
<string>Navigate</string>
</property>
</widget>
</item>
<item row="19" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
<item row="10" column="0">
<widget class="QLabel" name="label_QTV_6">
<property name="text">
<string>Plugin test:</string>
</property>
</spacer>
</widget>
</item>
<item row="17" column="1">
<widget class="QPushButton" name="pushButton_QTV_default_style">
<item row="11" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_mark">
<property name="text">
<string>default_style</string>
<string>add marks</string>
</property>
</widget>
</item>
<item row="16" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_geo_selected_marks">
<item row="19" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_10000">
<property name="text">
<string>selected_marks</string>
<string>10000 makrs</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_cache">
<item row="16" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_geo_markMod">
<property name="text">
<string>cache Folder</string>
<string>Rect Mark mod</string>
</property>
</widget>
</item>
<item row="18" column="0">
<widget class="QPushButton" name="pushButton_QTV_test_10000">
<item row="16" column="1">
<widget class="QPushButton" name="pushButton_QTV_test_geo_selectd_rect">
<property name="text">
<string>10000 makrs</string>
<string>selected_rect</string>
</property>
</widget>
</item>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册