自定义标绘之六 - 鼠标双击编辑几何体

137 篇文章 45 订阅

在地图上绘制出几何体之后,用户往往会对不满意的几何体进行编辑,最常见的操作就是通过鼠标移动选中需要绘制的几何体,然后鼠标双击左键进行编辑或者拖动。
在这里插入图片描述

//重新绘制基类 - 主要是传递当前需要重新绘制的几何数据

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wb175208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值