在地图上绘制出几何体之后,用户往往会对不满意的几何体进行编辑,最常见的操作就是通过鼠标移动选中需要绘制的几何体,然后鼠标双击左键进行编辑或者拖动。
//重新绘制基类 - 主要是传递当前需要重新绘制的几何数据
class BaseGeo;
class IResumeDraw {
public:
IResumeDraw();
~IResumeDraw();
//鼠标双击的位置
virtual void mouseDoubleClickPos(QPoint doublePos);
//设置需要重新绘制的几何图形
virtual void setCurrentDrawGeo(BaseGeo* resumeDrawGeo);
USER_DRAW_TYPE getDrawType();
protected:
USER_DRAW_TYPE _resumeDrawGeoType = USER_DRAW_NULL;
};
IResumeDraw::IResumeDraw() {
}
IResumeDraw::~IResumeDraw() {
}
void IResumeDraw::mouseDoubleClickPos(QPoint doublePos) {
}
void IResumeDraw::setCurrentDrawGeo(BaseGeo* resumeDrawGeo) {
}
USER_DRAW_TYPE IResumeDraw::getDrawType() {
return _resumeDrawGeoType;
}
双击线进行编辑:
//选中的线重新绘制
class ResumeDrawLine :public DrawGeoLine, public IResumeDraw {
public:
ResumeDrawLine();
~ResumeDrawLine();
void mouseDoubleClickPos(QPoint doublePos)override;
void setCurrentDrawGeo(BaseGeo* resumeDrawGeo)override;
private:
QPoint _doubleClickPos;
};
ResumeDrawLine::ResumeDrawLine() {
_resumeDrawGeoType = USER_DRAW_LINE;
}
ResumeDrawLine::~ResumeDrawLine() {
}
void ResumeDrawLine::mouseDoubleClickPos(QPoint doublePos) {
_doubleClickPos = doublePos;
}
void ResumeDrawLine::setCurrentDrawGeo(BaseGeo* resumeDrawGeo) {
LineGeo* currentLine = dynamic_cast<LineGeo*>(resumeDrawGeo);
if (currentLine == nullptr) {
return;
}
//首先清空原来的数据
_ptList.clear();
_useElastic = true;
QVector<UserGeoPoint>&ptList = currentLine->getPoints();
int num = ptList.size();
for (int i = 0; i < num;i++){
UserGeoPoint onePt = ptList.at(i);
_ptList.push_back(QPointF(onePt.lon, onePt.lat));
}
//设置弹簧线
_elasticEnd = _doubleClickPos;
QPointF ptLast = _ptList.at(_ptList.size() - 1);
CoordInst()->lonlat2Screen(ptLast.x(), ptLast.y(), _elasticStart);
}
aaa