diff options
| author | Jabier Arraiza Cenoz <jabier.arraiza@marker.es> | 2015-04-01 10:08:06 +0000 |
|---|---|---|
| committer | Jabiertxof <jtx@jtx.marker.es> | 2015-04-01 10:08:06 +0000 |
| commit | ce42be89c9b32edeba6eda6522199ec749e014f8 (patch) | |
| tree | 975c7d6a213368996d9b88dbb2e7830fae77873a /src | |
| parent | Move 2Geom work to a intermediate positon -helper- (diff) | |
| download | inkscape-ce42be89c9b32edeba6eda6522199ec749e014f8.tar.gz inkscape-ce42be89c9b32edeba6eda6522199ec749e014f8.zip | |
More cleanup of code structure.
TODO: Documentation
TODO: Fit code guidelines of Inkscape
(bzr r13645.1.64)
Diffstat (limited to 'src')
| -rw-r--r-- | src/helper/geom-pathinfo.cpp | 6 | ||||
| -rw-r--r-- | src/helper/geom-pathinfo.h | 1 | ||||
| -rw-r--r-- | src/helper/geom-pointwise.cpp | 117 | ||||
| -rw-r--r-- | src/helper/geom-pointwise.h | 17 | ||||
| -rw-r--r-- | src/live_effects/lpe-fillet-chamfer.cpp | 4 |
5 files changed, 53 insertions, 92 deletions
diff --git a/src/helper/geom-pathinfo.cpp b/src/helper/geom-pathinfo.cpp index c8ba01bd0..4bacad7ea 100644 --- a/src/helper/geom-pathinfo.cpp +++ b/src/helper/geom-pathinfo.cpp @@ -42,12 +42,6 @@ Pathinfo::Pathinfo(Piecewise<D2<SBasis> > pwd2) Pathinfo::~Pathinfo(){}; -Piecewise<D2<SBasis> > -Pathinfo::getPwd2() const -{ - return _pwd2; -} - void Pathinfo::setPwd2(Piecewise<D2<SBasis> > pwd2_in) { diff --git a/src/helper/geom-pathinfo.h b/src/helper/geom-pathinfo.h index 1696fd366..9018e44f2 100644 --- a/src/helper/geom-pathinfo.h +++ b/src/helper/geom-pathinfo.h @@ -49,7 +49,6 @@ class Pathinfo public: Pathinfo(Piecewise<D2<SBasis> > pwd2); virtual ~Pathinfo(); - Piecewise<D2<SBasis> > getPwd2() const; void setPwd2(Piecewise<D2<SBasis> > pwd2_in); size_t getSubPathIndex(size_t index) const; size_t getLast(size_t index) const; diff --git a/src/helper/geom-pointwise.cpp b/src/helper/geom-pointwise.cpp index 4926bcc47..9096dff28 100644 --- a/src/helper/geom-pointwise.cpp +++ b/src/helper/geom-pointwise.cpp @@ -30,13 +30,14 @@ */ #include <helper/geom-pointwise.h> -#include <cmath> + namespace Geom { Pointwise::Pointwise(Piecewise<D2<SBasis> > pwd2, std::vector<Satellite> satellites) : _pwd2(pwd2), _satellites(satellites), _pathInfo(pwd2) { + setStart(); }; Pointwise::~Pointwise(){}; @@ -64,6 +65,24 @@ void Pointwise::setSatellites(std::vector<Satellite> sats) { _satellites = sats; + setStart(); +} + +void +Pointwise::setStart() +{ + std::vector<std::pair<size_t, bool> > pathInfo = _pathInfo.getPathInfo(); + for(size_t i = 0; i < pathInfo.size(); i++){ + size_t firstNode = _pathInfo.getFirst(pathInfo[i].first); + size_t lastNode = _pathInfo.getLast(pathInfo[i].first); + if(!_pathInfo.getIsClosed(lastNode)){ + _satellites[firstNode].hidden = true; + _satellites[firstNode].active = false; + } else { + _satellites[firstNode].active = true; + _satellites[firstNode].hidden = _satellites[firstNode + 1].hidden; + } + } } void @@ -76,6 +95,24 @@ Pointwise::recalculate_for_new_pwd2(Piecewise<D2<SBasis> > A) } } +void +Pointwise::pwd2_sustract(Piecewise<D2<SBasis> > A) +{ + size_t counter = 0; + std::vector<Satellite> sats; + Piecewise<D2<SBasis> > pwd2 = _pwd2; + setPwd2(A); + for(size_t i = 0; i < _satellites.size(); i++){ + if(_pathInfo.getLast(i-counter) < i-counter || !are_near(pwd2[i].at0(),A[i-counter].at0(),0.001)){ + counter++; + } else { + sats.push_back(_satellites[i-counter]); + } + } + setSatellites(sats); +} + + void Pointwise::pwd2_append(Piecewise<D2<SBasis> > A) { @@ -96,13 +133,13 @@ Pointwise::pwd2_append(Piecewise<D2<SBasis> > A) changedSubpath = subpathAIndex != _pathInfo.getSubPathIndex(i-counter); } if(!reorder && first == i-counter && !are_near(_pwd2[i-counter].at0(),A[i].at0(),0.001) && !changedSubpath){ - subpath_append_reorder(_pathInfo.getSubPathIndex(first)); + subpath_to_top(_pathInfo.getSubPathIndex(first)); reorder = true; i--; continue; } if(!reversed && first == i-counter && !are_near(_pwd2[i-counter].at0(),A[i].at0(),0.001) && !changedSubpath){ - reverse(first, last); + subpath_reverse(first, last); reversed = true; } if(_pwd2.size() <= i-counter || !are_near(_pwd2[i-counter].at0(),A[i].at0(),0.001)){ @@ -125,62 +162,7 @@ Pointwise::pwd2_append(Piecewise<D2<SBasis> > A) } void -Pointwise::pwd2_sustract(Piecewise<D2<SBasis> > A) -{ - size_t counter = 0; - std::vector<Satellite> sats; - Piecewise<D2<SBasis> > pwd2 = _pwd2; - setPwd2(A); - for(size_t i = 0; i < _satellites.size(); i++){ - if(_pathInfo.getLast(i-counter) < i-counter || !are_near(pwd2[i].at0(),A[i-counter].at0(),0.001)){ - counter++; - } else { - sats.push_back(_satellites[i-counter]); - } - } - setSatellites(sats); -} - -void -Pointwise::set_extremes(bool active, bool hidden, double amount, double angle) -{ - std::vector<std::pair<size_t, bool> > pathInfo = _pathInfo.getPathInfo(); - for(size_t i = 0; i < pathInfo.size(); i++){ - size_t firstNode = _pathInfo.getFirst(pathInfo[i].first); - size_t lastNode = _pathInfo.getLast(pathInfo[i].first); - if(!_pathInfo.getIsClosed(lastNode)){ - for(size_t j = 0; j < _satellites.size(); j++){ - if(j < firstNode || j > lastNode){ - continue; - } - if(j == firstNode){ - _satellites[j].active = active; - _satellites[j].hidden = hidden; - if(amount >= 0){ - _satellites[j].amount = amount; - } - if(angle >= 0){ - _satellites[j].angle = angle; - } - } - } - } else { - for(size_t j = 0; j < _satellites.size(); j++){ - if(j < firstNode){ - continue; - } - if(j == firstNode && !_satellites[j].active){ - _satellites[j].active = true; - _satellites[j].hidden = _satellites[j+1].hidden; - } - - } - } - } -} - -void -Pointwise::subpath_append_reorder(size_t subpath){ +Pointwise::subpath_to_top(size_t subpath){ std::vector<Geom::Path> path_in = path_from_piecewise(remove_short_cuts(_pwd2,0.1), 0.001); size_t nSubpath = 0; size_t counter = 0; @@ -199,7 +181,7 @@ Pointwise::subpath_append_reorder(size_t subpath){ while (curve_it1 != curve_endit) { if(nSubpath == subpath){ _satellites.push_back(_satellites[counter]); - deleteSatellite(counter); + _satellites.erase(_satellites.begin() + counter); } else { counter++; } @@ -217,11 +199,11 @@ Pointwise::subpath_append_reorder(size_t subpath){ } void -Pointwise::reverse(size_t start,size_t end){ +Pointwise::subpath_reverse(size_t start,size_t end){ start ++; for(size_t i = end; i >= start; i--){ _satellites.push_back(_satellites[i]); - deleteSatellite(i); + _satellites.erase(_satellites.begin() + i); } std::vector<Geom::Path> path_in = path_from_piecewise(remove_short_cuts(_pwd2,0.1), 0.001); size_t counter = 0; @@ -244,17 +226,6 @@ Pointwise::reverse(size_t start,size_t end){ setPwd2(remove_short_cuts(paths_to_pw(tmp_path),0.01)); } -void -Pointwise::deleteSatellite(size_t A) -{ - for (std::vector<Satellite>::iterator it = _satellites.begin(); it != _satellites.end();) - { - if((unsigned)(it - _satellites.begin()) == A){ - it = _satellites.erase(it); - } - } -} - } // namespace Geom /* Local Variables: diff --git a/src/helper/geom-pointwise.h b/src/helper/geom-pointwise.h index 8b5c275b9..8297143c9 100644 --- a/src/helper/geom-pointwise.h +++ b/src/helper/geom-pointwise.h @@ -43,12 +43,11 @@ #ifndef SEEN_GEOM_POINTWISE_H #define SEEN_GEOM_POINTWISE_H -#include <vector> +#include <helper/geom-satellite.h> +#include <helper/geom-pathinfo.h> #include <2geom/sbasis.h> #include <2geom/sbasis-2d.h> #include <2geom/piecewise.h> -#include <helper/geom-satellite.h> -#include <helper/geom-pathinfo.h> #include <2geom/sbasis-to-bezier.h> #include <2geom/path.h> #include <boost/optional.hpp> @@ -63,17 +62,19 @@ class Pointwise public: Pointwise(Piecewise<D2<SBasis> > pwd2, std::vector<Satellite> satellites); virtual ~Pointwise(); + std::vector<Satellite> getSatellites() const; void setSatellites(std::vector<Satellite> sats); Piecewise<D2<SBasis> > getPwd2() const; void setPwd2(Piecewise<D2<SBasis> > pwd2_in); + void setStart(); + void recalculate_for_new_pwd2(Piecewise<D2<SBasis> > A); - void pwd2_append(Piecewise<D2<SBasis> > A); void pwd2_sustract(Piecewise<D2<SBasis> > A); - void set_extremes(bool active, bool hidden, double amount = -1, double angle = -1); - void deleteSatellite(size_t A); - void subpath_append_reorder(size_t subpath); - void reverse(size_t start,size_t end); + void pwd2_append(Piecewise<D2<SBasis> > A); + void subpath_to_top(size_t subpath); + void subpath_reverse(size_t start,size_t end); + private: Piecewise<D2<SBasis> > _pwd2; diff --git a/src/live_effects/lpe-fillet-chamfer.cpp b/src/live_effects/lpe-fillet-chamfer.cpp index 54b2fb52f..e873bebf9 100644 --- a/src/live_effects/lpe-fillet-chamfer.cpp +++ b/src/live_effects/lpe-fillet-chamfer.cpp @@ -400,12 +400,9 @@ void LPEFilletChamfer::doBeforeEffect(SPLPEItem const *lpeItem) if(pointwise && c->get_segment_count() != segCount && segCount != 0){ pointwise->recalculate_for_new_pwd2(pwd2_in); - pointwise->set_extremes(false, true, 0.0, 0.0); segCount = c->get_segment_count(); } else { pointwise = new Pointwise(pwd2_in, sats); - //mandatory call - pointwise->set_extremes(false, true); segCount = c->get_segment_count(); } satellitearrayparam_values.set_pointwise(pointwise); @@ -422,7 +419,6 @@ LPEFilletChamfer::adjustForNewPath(std::vector<Geom::Path> const &path_in) { if (!path_in.empty() && pointwise) { pointwise->recalculate_for_new_pwd2(remove_short_cuts(paths_to_pw(pathv_to_linear_and_cubic_beziers(path_in)),0.01)); - pointwise->set_extremes(false, true, 0.0, 0.0); satellitearrayparam_values.set_pointwise(pointwise); } } |
