提交 2b33ba4d 编写于 作者: 丁劲犇's avatar 丁劲犇 😸

Add scale and rotate feature for icons.

上级 2afc4fb0
......@@ -24,6 +24,8 @@ namespace QTVP_GEOMARKER{
vi()->CV_LLA2World(m_lat,m_lon,&px,&py);
setOffset(px - m_pIcon->centerx, py - m_pIcon->centery);
QGraphicsPixmapItem::setPixmap(m_pIcon->icon);
QGraphicsPixmapItem::setTransformOriginPoint(px,py);
QGraphicsPixmapItem::setTransformationMode(Qt::FastTransformation );
}
void geoGraphicsPixmapItem::adjust_coords(int ncurrLevel)
{
......@@ -38,6 +40,7 @@ namespace QTVP_GEOMARKER{
double oldlefttop_x = offset.x() + m_pIcon->centerx;
double oldlefttop_y = offset.y() + m_pIcon->centery;
setOffset(oldlefttop_x*ratio - m_pIcon->centerx, oldlefttop_y*ratio - m_pIcon->centery);
QGraphicsPixmapItem::setTransformOriginPoint(oldlefttop_x*ratio, oldlefttop_y*ratio );
}
}
......@@ -49,7 +52,7 @@ namespace QTVP_GEOMARKER{
double px,py;
vi()->CV_LLA2World(m_lat,m_lon,&px,&py);
setOffset(px - m_pIcon->centerx, py - m_pIcon->centery);
QGraphicsPixmapItem::setTransformOriginPoint(px, py);
}
void geoGraphicsPixmapItem::setGeo(qreal cent_lat,qreal cent_lon)
......@@ -59,6 +62,7 @@ namespace QTVP_GEOMARKER{
double px,py;
vi()->CV_LLA2World(cent_lat,cent_lon,&px,&py);
setOffset(px - m_pIcon->centerx, py - m_pIcon->centery);
QGraphicsPixmapItem::setTransformOriginPoint(px, py);
adjustLabelPos();
}
void geoGraphicsPixmapItem::mousePressEvent(QGraphicsSceneMouseEvent * event)
......
......@@ -228,6 +228,7 @@ void qtvplugin_geomarker::cb_levelChanged(int level)
return ;
//Adjust new Scene rect
QRectF rect(0,0,256*(1<<level),256*(1<<level));
m_pScene->setSceneRect(QRectF(0,0,1,1));
m_pScene->adjust_item_coords(level);
m_pScene->setSceneRect(rect);
}
......@@ -285,10 +286,13 @@ bool qtvplugin_geomarker::cb_mouseDoubleClickEvent(QMouseEvent * e)
double mlat, mlon;
m_pVi->CV_DP2World(mouse_view_pt.x(),mouse_view_pt.y(),&wx,&wy);
m_pVi->CV_DP2LLA(mouse_view_pt.x(),mouse_view_pt.y(),&mlat,&mlon);
ui->lineEdit_point_lat->setText(QString("%1").arg(mlat,0,'f',7));
ui->lineEdit_point_lon->setText(QString("%1").arg(mlon,0,'f',7));
ui->lineEdit_icon_lat->setText(QString("%1").arg(mlat,0,'f',7));
ui->lineEdit_icon_lon->setText(QString("%1").arg(mlon,0,'f',7));
if (e->button()==Qt::RightButton)
{
ui->lineEdit_point_lat->setText(QString("%1").arg(mlat,0,'f',7));
ui->lineEdit_point_lon->setText(QString("%1").arg(mlon,0,'f',7));
ui->lineEdit_icon_lat->setText(QString("%1").arg(mlat,0,'f',7));
ui->lineEdit_icon_lon->setText(QString("%1").arg(mlon,0,'f',7));
}
//Warp
while (wx < 0) wx += winsz;
while (wx > winsz-1) wx -= winsz;
......@@ -518,7 +522,7 @@ QTVP_GEOMARKER::geoItemBase * qtvplugin_geomarker::update_polygon (const QStr
}
return res;
}
QTVP_GEOMARKER::geoItemBase * qtvplugin_geomarker::update_icon(const QString & name,double lat, double lon, QString id)
QTVP_GEOMARKER::geoItemBase * qtvplugin_geomarker::update_icon(const QString & name,double lat, double lon,qreal scale, qreal rotate,int smooth, QString id)
{
QTVP_GEOMARKER::geoItemBase * res = 0;
//Get raw Item by name
......@@ -571,5 +575,14 @@ QTVP_GEOMARKER::geoItemBase * qtvplugin_geomarker::update_icon(const QString & n
}
res = pitem;
}
if (pitem)
{
pitem->setScale(scale);
pitem->setRotation(rotate);
if (smooth)
pitem->setTransformationMode(Qt::SmoothTransformation);
else
pitem->setTransformationMode(Qt::FastTransformation);
}
return res;
}
......@@ -120,7 +120,7 @@ private:
QTVP_GEOMARKER::geoItemBase * update_point (const QString & name,double lat, double lon, int width, int height, QPen pen, QBrush brush);
QTVP_GEOMARKER::geoItemBase * update_line (const QString & name,double lat1, double lon1,double lat2, double lon2, QPen pen);
QTVP_GEOMARKER::geoItemBase * update_polygon (const QString & name,const QPolygonF latlons, QPen pen, QBrush brush);
QTVP_GEOMARKER::geoItemBase * update_icon (const QString & name,double lat, double lon, QString id);
QTVP_GEOMARKER::geoItemBase * update_icon (const QString & name,double lat, double lon,qreal scale, qreal rotate,int smooth, QString id);
//update method for XML
bool xml_update_mark (tag_xml_mark & mark);
//update method for plugin function calls
......
......@@ -451,6 +451,13 @@
<item>
<widget class="QComboBox" name="comboBox_icons"/>
</item>
<item>
<widget class="QCheckBox" name="checkBox_icon_smooth">
<property name="text">
<string>smooth</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_import_icon">
<property name="text">
......@@ -460,6 +467,30 @@
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_19">
<item>
<widget class="QLabel" name="label_26">
<property name="text">
<string>scale ratio</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_icon_scale"/>
</item>
<item>
<widget class="QLabel" name="label_18">
<property name="text">
<string>rotate</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_icon_rotate"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_17">
<item>
......
......@@ -177,6 +177,8 @@ void qtvplugin_geomarker::ini_save()
settings.setValue("ui/spinBox_fontSize",ui->spinBox_fontSize->value());
settings.setValue("ui/lineEdit_icon_lat",ui->lineEdit_icon_lat->text());
settings.setValue("ui/lineEdit_icon_lon",ui->lineEdit_icon_lon->text());
settings.setValue("ui/lineEdit_icon_rotate",ui->lineEdit_icon_rotate->text());
settings.setValue("ui/lineEdit_icon_scale",ui->lineEdit_icon_scale->text());
}
void qtvplugin_geomarker::ini_load()
......@@ -264,6 +266,11 @@ void qtvplugin_geomarker::ini_load()
ui->lineEdit_icon_lat->setText(lineEdit_icon_lat);
QString lineEdit_icon_lon = settings.value("ui/lineEdit_icon_lon","0").toString();
ui->lineEdit_icon_lon->setText(lineEdit_icon_lon);
QString lineEdit_icon_scale = settings.value("ui/lineEdit_icon_scale","1.0").toString();
ui->lineEdit_icon_scale->setText(lineEdit_icon_scale);
QString lineEdit_icon_rotate = settings.value("ui/lineEdit_icon_rotate","1.0").toString();
ui->lineEdit_icon_rotate->setText(lineEdit_icon_rotate);
}
void qtvplugin_geomarker::on_pushButton_update_clicked()
{
......@@ -370,8 +377,11 @@ void qtvplugin_geomarker::on_pushButton_update_clicked()
{
double lat = ui->lineEdit_icon_lat->text().toDouble();
double lon = ui->lineEdit_icon_lon->text().toDouble();
qreal scale = ui->lineEdit_icon_scale->text().toFloat();
qreal rotate = ui->lineEdit_icon_rotate->text().toFloat();
QString iconname = ui->comboBox_icons->currentText();
newitem = update_icon(name,lat,lon,iconname);
int smooth = ui->checkBox_icon_smooth->isChecked()?1:0;
newitem = update_icon(name,lat,lon,scale,rotate,smooth,iconname);
}
else
return;
......@@ -562,6 +572,20 @@ void qtvplugin_geomarker::refreshItemUI(QString markname)
ui->radioButton_tool_polygon->setChecked(true);
}
break;
case QTVP_GEOMARKER::ITEAMTYPE_PIXMAP:
{
QTVP_GEOMARKER::geoGraphicsPixmapItem * pitem = dynamic_cast<QTVP_GEOMARKER::geoGraphicsPixmapItem *>(item);
if (!pitem)
break;
ui->lineEdit_icon_lat->setText(QString("%1").arg(pitem->lat(),0,'f',7));
ui->lineEdit_icon_lon->setText(QString("%1").arg(pitem->lon(),0,'f',7));
ui->radioButton_tool_bitmaps->setChecked(true);
ui->lineEdit_icon_rotate->setText(QString("%1").arg(pitem->rotation()));
ui->lineEdit_icon_scale->setText(QString("%1").arg(pitem->scale()));
QString nameicon = pitem->icon()->name;
ui->comboBox_icons->setCurrentText(nameicon);
}
break;
default:
break;
......
......@@ -141,6 +141,9 @@ bool qtvplugin_geomarker::xml_save(QString xml)
//1.2 style
stream.writeStartElement("style");
stream.writeTextElement("icon",QString("%1").arg(pU->icon()->name));
stream.writeTextElement("scale",QString("%1").arg(pU->scale()));
stream.writeTextElement("rotate",QString("%1").arg(pU->rotation()));
stream.writeTextElement("smooth",QString("%1").arg(pU->transformationMode()==Qt::SmoothTransformation?1:0));
}
}
break;
......@@ -431,7 +434,10 @@ bool qtvplugin_geomarker::xml_update_mark(tag_xml_mark & mark)
double lat = mark.geoPoints.first().y();
double lon = mark.geoPoints.first().x();
QString iconName = mark.styles["icon"];
newitem = update_icon(name,lat,lon,iconName);
qreal scale = mark.styles["scale"].toFloat();
qreal rotate = mark.styles["rotate"].toFloat();
int smooth = mark.styles["smooth"].toInt();
newitem = update_icon(name,lat,lon,scale,rotate,smooth,iconName);
}
else
return false;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册