You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWATI/Src/nmNum/nmPlot/nmObjLineTool.cpp

166 lines
4.0 KiB
C++

#include <QPainter>
#include "nmObjLine.h"
#include "nmObjLineTool.h"
nmObjLineTool::nmObjLineTool() : nmObjPointTool()
{
setText(tr("nObjPointTool"));
m_oNot = NOT_Line;
}
bool nmObjLineTool::onLeftDown(const QPointF& pt)
{
if (NULL == m_pObj)
{
m_ptStart = pt;
m_bTracking = true;
return true;
}
return nmObjPointTool::onLeftDown(pt);
}
bool nmObjLineTool::onMouseMove(const QPointF& pt)
{
if (NULL == m_pObj)
{
m_ptMove = pt;
// Qt::CursorShape o = getCursorBy(0, 0);
// changeCursor(o);
if (m_bTracking)
{
m_rtTracker = getView()->adjustRectFitViewAspect(getTrackRect());
updateLastMoveArea(true);
}
return true;
}
return nmObjPointTool::onMouseMove(pt);
}
bool nmObjLineTool::onLeftUp(const QPointF& pt)
{
if (NULL == m_pObj)
{
getView()->setSnapshotMode(false);
if (m_bTracking)
{
m_bTracking = false;
}
QVector<QPointF> vec;
vec << m_ptStart << pt;
emit sigPtsFinished(vec);
return true;
}
return nmObjPointTool::onLeftUp(pt);
}
bool nmObjLineTool::onMouseWheel(const QPointF& pt, int delta)
{
return nmObjPointTool::onMouseWheel(pt, delta);
}
bool nmObjLineTool::onLeftDoubleClick(const QPointF& pt)
{
return nmObjPointTool::onLeftDoubleClick(pt);
}
void nmObjLineTool::onPaint(QPainter* painter, const ZxPaintParam& param)
{
nmObjLine* pObj = dynamic_cast<nmObjLine*>(m_pObj);
if (pObj == NULL)
{
Qt::CursorShape o = Qt::CrossCursor;
if (m_bTracking)
{
painter->save();
QPen focus(Qt::DashLine);
painter->setPen(focus);
painter->drawLine(m_ptStart, getCurrentPos());
changeCursor(o);
painter->restore();
}
else
{
changeCursor(o);
}
}
else
{
if (m_bTracking)
{
painter->save();
Qt::CursorShape o = getCursorBy((int)m_oHitOption, pObj->m_nHitIndex);
QVector<QPointF> vec = pObj->getAllPos();
if (m_oHitOption == OHO_Point &&
pObj->m_nHitIndex == 0)
{
QPen focus(Qt::DashLine);
QPointF endPoint = vec[1];
painter->drawPoint(endPoint);
painter->drawPoint(getCurrentPos());
painter->setPen(focus);
painter->drawLine(endPoint,getCurrentPos());
}
else if (m_oHitOption == OHO_Point &&
pObj->m_nHitIndex == 1)
{
QPen focus(Qt::DashLine);
QPointF startPoint = vec[0];
painter->drawPoint(startPoint);
painter->drawPoint(getCurrentPos());
painter->setPen(focus);
painter->drawLine(startPoint,getCurrentPos());
}
else if (m_oHitOption == OHO_Bound)
{
QPen focus(Qt::DashLine);
QPointF pt1 = vec[0];
QPointF pt2 = vec[1];
QPointF ptOld = m_ptStart;
QPointF ptNew = getCurrentPos();
pt1 = pObj->offsetPoint(pt1, ptOld, ptNew);
pt2 = pObj->offsetPoint(pt2, ptOld, ptNew);
painter->drawPoint(pt1);
painter->drawPoint(pt2);
painter->setPen(focus);
painter->drawLine(pt1, pt2);
}
changeCursor(o);
painter->restore();
}
}
}
Qt::CursorShape nmObjLineTool::getCursorBy(const int& nOption,
const int& nSubIndex)
{
if (nOption < 0)
{
return Qt::ArrowCursor;
}
ObjHitOption oHitOption = (ObjHitOption)nOption;
if (oHitOption == OHO_Point)
{
return (Qt::CrossCursor);
}
else if (oHitOption == OHO_Bound)
{
return (Qt::SizeAllCursor);
}
return Qt::ArrowCursor;
}