add locking stroke functionality in cutter tool
This commit is contained in:
parent
a6289ae9fa
commit
86e7f36817
1 changed files with 32 additions and 4 deletions
|
@ -164,6 +164,8 @@ public:
|
|||
int m_cursorId;
|
||||
double m_pW;
|
||||
|
||||
int m_lockedStrokeIndex;
|
||||
|
||||
TPropertyGroup m_prop;
|
||||
TBoolProperty m_snapAtIntersection;
|
||||
|
||||
|
@ -300,7 +302,7 @@ public:
|
|||
return w;
|
||||
}
|
||||
|
||||
void leftButtonDown(const TPointD &pos, const TMouseEvent &) override {
|
||||
void leftButtonDown(const TPointD &pos, const TMouseEvent &e) override {
|
||||
if (getViewer() && getViewer()->getGuidedStrokePickerMode()) {
|
||||
getViewer()->doPickGuideStroke(pos);
|
||||
return;
|
||||
|
@ -315,8 +317,9 @@ public:
|
|||
|
||||
TStroke *strokeRef;
|
||||
|
||||
if (vi->getNearestStroke(pos, pW, strokeIndex, dist) && pW >= 0 &&
|
||||
pW <= 1) {
|
||||
if (getNearestStrokeWithLock(pos, pW, strokeIndex, dist,
|
||||
e.isCtrlPressed()) &&
|
||||
pW >= 0 && pW <= 1) {
|
||||
double w;
|
||||
|
||||
strokeRef = vi->getStroke(strokeIndex);
|
||||
|
@ -408,7 +411,7 @@ public:
|
|||
double dist, pW;
|
||||
UINT stroke;
|
||||
|
||||
if (vi->getNearestStroke(pos, pW, stroke, dist)) {
|
||||
if (getNearestStrokeWithLock(pos, pW, stroke, dist, e.isCtrlPressed())) {
|
||||
TStroke *strokeRef = vi->getStroke(stroke);
|
||||
|
||||
if (m_snapAtIntersection.getValue()) {
|
||||
|
@ -453,6 +456,31 @@ public:
|
|||
return true;
|
||||
}
|
||||
|
||||
bool getNearestStrokeWithLock(const TPointD &p, double &outW,
|
||||
UINT &strokeIndex, double &dist2, bool lock) {
|
||||
TVectorImageP vi = TImageP(getImage(false));
|
||||
if (!vi) return false;
|
||||
|
||||
if (m_lockedStrokeIndex >= vi->getStrokeCount()) {
|
||||
m_lockedStrokeIndex = -1;
|
||||
}
|
||||
|
||||
if (lock && m_lockedStrokeIndex >= 0) {
|
||||
TStroke *stroke = vi->getStroke(m_lockedStrokeIndex);
|
||||
strokeIndex = m_lockedStrokeIndex;
|
||||
return stroke->getNearestW(p, outW, dist2);
|
||||
}
|
||||
|
||||
UINT index;
|
||||
if (vi->getNearestStroke(p, outW, index, dist2)) {
|
||||
m_lockedStrokeIndex = index;
|
||||
strokeIndex = index;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
} cutterTool;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
Loading…
Reference in a new issue