diff --git a/Src/nmNum/nmPlot/nmObjLineCrackTool.cpp b/Src/nmNum/nmPlot/nmObjLineCrackTool.cpp index b783dff..495f4cb 100644 --- a/Src/nmNum/nmPlot/nmObjLineCrackTool.cpp +++ b/Src/nmNum/nmPlot/nmObjLineCrackTool.cpp @@ -1,4 +1,4 @@ -#include +#include #include "ZxBaseUtil.h" #include "ZxObjBase.h" @@ -113,9 +113,14 @@ bool nmObjLineCrackTool::onLeftDoubleClick(const QPointF& pt) { if (NULL == m_pObj) // 绘图对象尚未创建(鼠标选点ing) { + // 点数不足时吞掉双击,避免误结束创建流程。 + if (m_vecPoints.count() < 2) { + return true; + } + changeCursor(Qt::ArrowCursor); emit sigPtsFinished(m_vecPoints); - //m_vecPoints.clear(); + m_vecPoints.clear(); //m_vecCurAllPts.clear(); if (m_bTracking) diff --git a/Src/nmNum/nmPlot/nmObjLineFaultTool.cpp b/Src/nmNum/nmPlot/nmObjLineFaultTool.cpp index 870a2bc..042eb46 100644 --- a/Src/nmNum/nmPlot/nmObjLineFaultTool.cpp +++ b/Src/nmNum/nmPlot/nmObjLineFaultTool.cpp @@ -1,4 +1,4 @@ -#include +#include #include "ZxBaseUtil.h" #include "ZxObjBase.h" @@ -103,9 +103,14 @@ bool nmObjLineFaultTool::onLeftDoubleClick(const QPointF& pt) { nmObjLineFault* pObj = dynamic_cast(m_pObj); if(NULL == pObj) { // 绘图对象尚未创建(鼠标选点ing) + // 点数不足时吞掉双击,避免误结束创建流程。 + if (m_vecPoints.count() < 2) { + return true; + } + changeCursor(Qt::ArrowCursor); emit sigPtsFinished(m_vecPoints); - //m_vecPoints.clear(); + m_vecPoints.clear(); //m_vecCurAllPts.clear(); if(m_bTracking) { diff --git a/Src/nmNum/nmPlot/nmObjPolygonTool.cpp b/Src/nmNum/nmPlot/nmObjPolygonTool.cpp index a4008e8..11451ef 100644 --- a/Src/nmNum/nmPlot/nmObjPolygonTool.cpp +++ b/Src/nmNum/nmPlot/nmObjPolygonTool.cpp @@ -92,8 +92,9 @@ bool nmObjPolygonTool::onLeftDoubleClick(const QPointF& pt) { if (nullptr == m_pObj) //绘图对象尚未创建(鼠标选点ing) { - if (m_vecPoints.count() < 2) { - return nmObjToolBase::onLeftDoubleClick(pt); + // 多边形至少需要 3 个点才能闭合成有效面,点数不足时吞掉双击。 + if (m_vecPoints.count() < 3) { + return true; } changeCursor(Qt::ArrowCursor); diff --git a/Src/nmNum/nmPlot/nmObjRectTool.cpp b/Src/nmNum/nmPlot/nmObjRectTool.cpp index f0bce64..da78615 100644 --- a/Src/nmNum/nmPlot/nmObjRectTool.cpp +++ b/Src/nmNum/nmPlot/nmObjRectTool.cpp @@ -81,6 +81,15 @@ bool nmObjRectTool::onLeftUp(const QPointF& pt) getView()->setCursorKeeping(false); changeCursor(Qt::ArrowCursor); + // 矩形依赖拖拽成形,起点和终点过近时取消本次创建,避免双击或误点生成零尺寸图元。 + double dDistance = 2.2f; + if ((qAbs(m_ptStart.x() - pt.x()) < dDistance) && + (qAbs(m_ptStart.y() - pt.y()) < dDistance)) { + m_vecPoints.clear(); + m_bTracking = false; + return true; + } + // 保存其余三个点的坐标 m_ptMove = pt; QPointF m_ptOne(m_ptMove.x(), m_ptStart.y()), @@ -126,7 +135,8 @@ bool nmObjRectTool::onLeftDoubleClick(const QPointF& pt) { nmObjRect* pObj = dynamic_cast(m_pObj); if(NULL == pObj) { // 绘图对象尚未创建(鼠标选点ing) - return false; + // 矩形创建不依赖双击收尾,创建态直接吞掉双击事件。 + return true; } else { // 已绑定绘图对象 // 双击内部,取消选中状态 diff --git a/Src/nmNum/nmPlot/nmObjRegionTool.cpp b/Src/nmNum/nmPlot/nmObjRegionTool.cpp index e5bb5ac..5dc98c5 100644 --- a/Src/nmNum/nmPlot/nmObjRegionTool.cpp +++ b/Src/nmNum/nmPlot/nmObjRegionTool.cpp @@ -95,16 +95,24 @@ bool nmObjRegionTool::onLeftUp(const QPointF& pt) bool nmObjRegionTool::onLeftDoubleClick(const QPointF& pt) { if(NULL == m_pObj) { + // 区域至少需要 3 个点才能闭合成有效面,点数不足时吞掉双击。 + if (m_vecPoints.count() < 3) + { + return true; + } + changeCursor(Qt::ArrowCursor); emit sigPtsFinished(m_vecPoints); m_vecPoints.clear(); - if(m_bTracking) { + if(m_bTracking) + { m_bTracking = false; } - return false; + // 双击已完成本工具的处理,这里直接消费事件。 + return true; } else { return nmObjToolBase::onLeftDoubleClick(pt); } diff --git a/Src/nmNum/nmPlot/nmObjRoundTool.cpp b/Src/nmNum/nmPlot/nmObjRoundTool.cpp index 5a455a6..9bf0c58 100644 --- a/Src/nmNum/nmPlot/nmObjRoundTool.cpp +++ b/Src/nmNum/nmPlot/nmObjRoundTool.cpp @@ -60,6 +60,15 @@ bool nmObjRoundTool::onLeftUp(const QPointF& pt) getView()->setCursorKeeping(false); changeCursor(Qt::ArrowCursor); + // 圆形依赖拖拽成形,起点和终点过近时取消本次创建,避免双击或误点生成零尺寸图元。 + double dDistance = 2.2f; + if ((qAbs(m_ptStart.x() - pt.x()) < dDistance) && + (qAbs(m_ptStart.y() - pt.y()) < dDistance)) { + m_vecPoints.clear(); + m_bTracking = false; + return true; + } + // 计算圆心的位置 m_ptMove = pt; QPointF m_ptCenter((m_ptStart.x() + m_ptMove.x()) / 2,(m_ptStart.y() + m_ptMove.y()) / 2); @@ -103,7 +112,8 @@ bool nmObjRoundTool::onLeftUp(const QPointF& pt) bool nmObjRoundTool::onLeftDoubleClick(const QPointF& pt) { if(NULL == m_pObj) { // 绘图对象尚未创建(鼠标选点ing) - return false; + // 圆形创建不依赖双击收尾,创建态直接吞掉双击事件。 + return true; } else { // 已绑定绘图对象 // 双击内部,取消选中状态