From 13965703ff458f57514c11a78e103e35b23e36a9 Mon Sep 17 00:00:00 2001 From: ankit-kumar-dwivedi Date: Nov 29 2019 17:41:40 +0000 Subject: added back code related to isCanceled() and some fixes --- diff --git a/synfig-studio/src/gui/canvasview.cpp b/synfig-studio/src/gui/canvasview.cpp index a909dbc..90b2dd7 100644 --- a/synfig-studio/src/gui/canvasview.cpp +++ b/synfig-studio/src/gui/canvasview.cpp @@ -190,7 +190,7 @@ class studio::CanvasViewUIInterface : public UIInterface { CanvasView *view; private: - float cur_progress; + float cur_progress = 0.0; public: CanvasViewUIInterface(CanvasView *view): @@ -302,13 +302,13 @@ public: virtual bool amount_complete(int current, int total) { - cur_progress = (float)current/(float)total; - - if(cur_progress>0.0 && cur_progress<1.0) + float temp = (float)current/(float)total; + if(temp != cur_progress && temp<1.0) { + cur_progress = temp; view->statusbar->hide(); view->progressbar->show(); - view->progressbar->set_fraction((float)cur_progress); + view->progressbar->set_fraction(cur_progress); studio::App::process_all_events(); return true; } diff --git a/synfig-studio/src/synfigapp/vectorizer/centerlineskeletonizer.cpp b/synfig-studio/src/synfigapp/vectorizer/centerlineskeletonizer.cpp index df17e0e..18f4b38 100644 --- a/synfig-studio/src/synfigapp/vectorizer/centerlineskeletonizer.cpp +++ b/synfig-studio/src/synfigapp/vectorizer/centerlineskeletonizer.cpp @@ -629,7 +629,10 @@ void Timeline::build(ContourFamily &polygons, VectorizationContext &context) { // NOTE: are edge events to be computed BEFORE split ones? for (i = 0; i < nodesToBeTreated.size(); ++i) { - + // Break calculation at user cancel press + /* To be uncommented if isCanceled is needed in future + if (thisVectorizer->isCanceled()) break; + */ Event currentEvent(nodesToBeTreated[i].m_node, &context); // Notify event calculation @@ -1598,6 +1601,22 @@ static SkeletonGraph *skeletonize(ContourFamily ®ionContours, if (maxThickness > 0.0) // if(!currConfig->m_outline) { Timeline &timeline = context.m_timeline; + + /* To be uncommented in case isCanceled is needed in future + + timeline.build(regionContours, context, thisVectorizer); + if (thisVectorizer->isCanceled()) { + // Bailing out + while (!timeline.empty()) timeline.pop(); + + context.m_nodesHeap.clear(); + context.m_edgesHeap.clear(); + + context.m_linearNodesHeap.clear(); + context.m_linearEdgesHeap.clear(); + + return output; + }*/ timeline.build(regionContours, context); // Process timeline @@ -1677,6 +1696,9 @@ SkeletonList* studio::skeletonize(Contours &contours, const etl::handleisCanceled()) break; + */ res->push_back(skeletonize(contours[i], context)); float partial = 30.0 + ((i/(float)contours_size)*30.0); ui_interface->amount_complete(partial,100); diff --git a/synfig-studio/src/synfigapp/vectorizer/centerlinevectorizer.cpp b/synfig-studio/src/synfigapp/vectorizer/centerlinevectorizer.cpp index a3d5d35..ca8e760 100644 --- a/synfig-studio/src/synfigapp/vectorizer/centerlinevectorizer.cpp +++ b/synfig-studio/src/synfigapp/vectorizer/centerlinevectorizer.cpp @@ -85,8 +85,14 @@ const CenterlineConfiguration &configuration,const Gamma &gamma) // without changing the essential structure of the image. SkeletonList *skeletons = studio::skeletonize(polygons,ui_interface, globals); ui_interface->amount_complete(6,10); - - + /* To be uncommented if isCanceled is needed in future + if (isCanceled()) + { + // Clean and return 0 at cancel command + deleteSkeletonList(skeletons); + std::cout<<"CenterlineVectorize cancelled\n"; + } + */ // step 4 // The raw skeleton data obtained from StraightSkeletonizer // class need to be grouped in joints and sequences before proceeding further