curves: restored the old DCT_Spline implementation (cubic splines), and added new DCT_CatumullRom curve type
This commit is contained in:
@@ -393,6 +393,7 @@ DiagonalCurveEditor* DiagonalCurveEditorSubGroup::addCurve(Glib::ustring curveLa
|
||||
storeCurveValues(newCE, getCurveFromGUI(DCT_Spline));
|
||||
storeCurveValues(newCE, getCurveFromGUI(DCT_Parametric));
|
||||
storeCurveValues(newCE, getCurveFromGUI(DCT_NURBS));
|
||||
storeCurveValues(newCE, getCurveFromGUI(DCT_CatumullRom));
|
||||
return newCE;
|
||||
}
|
||||
|
||||
@@ -437,6 +438,7 @@ void DiagonalCurveEditorSubGroup::pipetteMouseOver(EditDataProvider *provider, i
|
||||
|
||||
switch((DiagonalCurveType)(curveEditor->curveType->getSelected())) {
|
||||
case (DCT_Spline):
|
||||
case (DCT_CatumullRom):
|
||||
customCurve->pipetteMouseOver(curveEditor, provider, modifierKey);
|
||||
customCurve->setDirty(true);
|
||||
break;
|
||||
@@ -511,6 +513,7 @@ bool DiagonalCurveEditorSubGroup::pipetteButton1Pressed(EditDataProvider *provid
|
||||
|
||||
switch((DiagonalCurveType)(curveEditor->curveType->getSelected())) {
|
||||
case (DCT_Spline):
|
||||
case (DCT_CatumullRom):
|
||||
isDragging = customCurve->pipetteButton1Pressed(provider, modifierKey);
|
||||
break;
|
||||
|
||||
@@ -539,6 +542,7 @@ void DiagonalCurveEditorSubGroup::pipetteButton1Released(EditDataProvider *provi
|
||||
|
||||
switch((DiagonalCurveType)(curveEditor->curveType->getSelected())) {
|
||||
case (DCT_Spline):
|
||||
case (DCT_CatumullRom):
|
||||
customCurve->pipetteButton1Released(provider);
|
||||
break;
|
||||
|
||||
@@ -562,6 +566,7 @@ void DiagonalCurveEditorSubGroup::pipetteDrag(EditDataProvider *provider, int mo
|
||||
|
||||
switch((DiagonalCurveType)(curveEditor->curveType->getSelected())) {
|
||||
case (DCT_Spline):
|
||||
case (DCT_CatumullRom):
|
||||
customCurve->pipetteDrag(provider, modifierKey);
|
||||
break;
|
||||
|
||||
@@ -615,6 +620,7 @@ void DiagonalCurveEditorSubGroup::refresh(CurveEditor *curveToRefresh)
|
||||
if (curveToRefresh != nullptr && curveToRefresh == static_cast<DiagonalCurveEditor*>(parent->displayedCurve)) {
|
||||
switch((DiagonalCurveType)(curveToRefresh->curveType->getSelected())) {
|
||||
case (DCT_Spline):
|
||||
case (DCT_CatumullRom):
|
||||
customCurve->refresh();
|
||||
break;
|
||||
|
||||
@@ -703,9 +709,10 @@ void DiagonalCurveEditorSubGroup::switchGUI()
|
||||
}
|
||||
}
|
||||
|
||||
switch((DiagonalCurveType)(dCurve->curveType->getSelected())) {
|
||||
switch(auto tp = (DiagonalCurveType)(dCurve->curveType->getSelected())) {
|
||||
case (DCT_Spline):
|
||||
customCurve->setPoints (dCurve->customCurveEd);
|
||||
case (DCT_CatumullRom):
|
||||
customCurve->setPoints(tp == DCT_Spline ? dCurve->customCurveEd : dCurve->catmullRomCurveEd);
|
||||
customCurve->setColorProvider(dCurve->getCurveColorProvider(), dCurve->getCurveCallerId());
|
||||
customCurve->setColoredBar(leftBar, bottomBar);
|
||||
customCurve->queue_resize_no_redraw();
|
||||
@@ -776,6 +783,7 @@ void DiagonalCurveEditorSubGroup::savePressed ()
|
||||
|
||||
switch (parent->displayedCurve->selected) {
|
||||
case DCT_Spline: // custom
|
||||
case DCT_CatumullRom:
|
||||
p = customCurve->getPoints ();
|
||||
break;
|
||||
|
||||
@@ -797,6 +805,8 @@ void DiagonalCurveEditorSubGroup::savePressed ()
|
||||
f << "Linear" << std::endl;
|
||||
} else if (p[ix] == (double)(DCT_Spline)) {
|
||||
f << "Spline" << std::endl;
|
||||
} else if (p[ix] == (double)(DCT_CatumullRom)) {
|
||||
f << "CatmullRom" << std::endl;
|
||||
} else if (p[ix] == (double)(DCT_NURBS)) {
|
||||
f << "NURBS" << std::endl;
|
||||
} else if (p[ix] == (double)(DCT_Parametric)) {
|
||||
@@ -838,6 +848,8 @@ void DiagonalCurveEditorSubGroup::loadPressed ()
|
||||
p.push_back ((double)(DCT_Linear));
|
||||
} else if (s == "Spline") {
|
||||
p.push_back ((double)(DCT_Spline));
|
||||
} else if (s == "CatmullRom") {
|
||||
p.push_back ((double)(DCT_CatumullRom));
|
||||
} else if (s == "NURBS") {
|
||||
p.push_back ((double)(DCT_NURBS));
|
||||
} else if (s == "Parametric") {
|
||||
@@ -858,7 +870,7 @@ void DiagonalCurveEditorSubGroup::loadPressed ()
|
||||
|
||||
rtengine::sanitizeCurve(p);
|
||||
|
||||
if (p[0] == (double)(DCT_Spline)) {
|
||||
if (p[0] == (double)(DCT_Spline) || p[0] == (double)(DCT_CatumullRom)) {
|
||||
customCurve->setPoints (p);
|
||||
customCurve->queue_draw ();
|
||||
customCurve->notifyListener ();
|
||||
@@ -903,6 +915,12 @@ void DiagonalCurveEditorSubGroup::copyPressed ()
|
||||
clipboard.setDiagonalCurveData (curve, DCT_NURBS);
|
||||
break;
|
||||
|
||||
case DCT_CatumullRom:
|
||||
curve = customCurve->getPoints ();
|
||||
curve[0] = DCT_CatumullRom;
|
||||
clipboard.setDiagonalCurveData (curve, DCT_CatumullRom);
|
||||
break;
|
||||
|
||||
default: // (DCT_Linear, DCT_Unchanged)
|
||||
// ... do nothing
|
||||
break;
|
||||
@@ -923,6 +941,7 @@ void DiagonalCurveEditorSubGroup::pastePressed ()
|
||||
|
||||
switch (type) {
|
||||
case DCT_Spline: // custom
|
||||
case DCT_CatumullRom:
|
||||
customCurve->setPoints (curve);
|
||||
customCurve->queue_draw ();
|
||||
customCurve->notifyListener ();
|
||||
@@ -1060,6 +1079,10 @@ void DiagonalCurveEditorSubGroup::storeDisplayedCurve()
|
||||
storeCurveValues(parent->displayedCurve, getCurveFromGUI(DCT_NURBS));
|
||||
break;
|
||||
|
||||
case (DCT_CatumullRom):
|
||||
storeCurveValues(parent->displayedCurve, getCurveFromGUI(DCT_CatumullRom));
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -1097,6 +1120,10 @@ void DiagonalCurveEditorSubGroup::storeCurveValues (CurveEditor* ce, const std::
|
||||
(static_cast<DiagonalCurveEditor*>(ce))->NURBSCurveEd = p;
|
||||
break;
|
||||
|
||||
case (DCT_CatumullRom):
|
||||
(static_cast<DiagonalCurveEditor*>(ce))->catmullRomCurveEd = p;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -1126,6 +1153,14 @@ const std::vector<double> DiagonalCurveEditorSubGroup::getCurveFromGUI (int type
|
||||
case (DCT_NURBS):
|
||||
return NURBSCurve->getPoints ();
|
||||
|
||||
case (DCT_CatumullRom): {
|
||||
auto ret = customCurve->getPoints();
|
||||
if (!ret.empty()) {
|
||||
ret[0] = DCT_CatumullRom;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
default: {
|
||||
// linear and other solutions
|
||||
std::vector<double> lcurve (1);
|
||||
@@ -1162,6 +1197,10 @@ bool DiagonalCurveEditorSubGroup::curveReset(CurveEditor *ce)
|
||||
customCurve->reset (dce->customResetCurve, dce->getIdentityValue());
|
||||
return true;
|
||||
|
||||
case (DCT_CatumullRom) :
|
||||
customCurve->reset (dce->catmullRomResetCurve, dce->getIdentityValue());
|
||||
return true;
|
||||
|
||||
case (DCT_Parametric) : {
|
||||
DiagonalCurveEditor* dCurve = static_cast<DiagonalCurveEditor*>(parent->displayedCurve);
|
||||
double mileStone[3];
|
||||
|
Reference in New Issue
Block a user