summaryrefslogtreecommitdiffstats
path: root/src/2geom/pointwise.cpp
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2015-03-14 21:06:08 +0000
committerJabiertxof <jtx@jtx.marker.es>2015-03-14 21:06:08 +0000
commit14b24b5d5cc3a8c72d496bea35e16e8ca47ae458 (patch)
treed44dca5ee6c215a03c81c1c1430a95a60f2d21ec /src/2geom/pointwise.cpp
parentupdate to trunk (diff)
downloadinkscape-14b24b5d5cc3a8c72d496bea35e16e8ca47ae458.tar.gz
inkscape-14b24b5d5cc3a8c72d496bea35e16e8ca47ae458.zip
commit for refactoring
(bzr r13645.1.42)
Diffstat (limited to 'src/2geom/pointwise.cpp')
-rw-r--r--src/2geom/pointwise.cpp148
1 files changed, 148 insertions, 0 deletions
diff --git a/src/2geom/pointwise.cpp b/src/2geom/pointwise.cpp
index 3b182916a..96a7e8644 100644
--- a/src/2geom/pointwise.cpp
+++ b/src/2geom/pointwise.cpp
@@ -63,6 +63,95 @@ Pointwise::setPwd2(Piecewise<D2<SBasis> > pwd2_in){
_pwd2 = pwd2_in;
}
+void
+Pointwise::recalculate_for_new_pwd2(Piecewise<D2<SBasis> > A)
+{
+ if( _pwd2.size() > A.size()){
+ new_pwd_sustract(A);
+ } else if ( _pwd2.size() < A.size()){
+ new_pwd_append(A);
+ }
+}
+
+void
+Pointwise::new_pwd_append(Piecewise<D2<SBasis> > A)
+{
+ int counter = 0;
+ double last = -1;
+ std::vector<std::pair<unsigned int,Satellite> > satellites;
+ std::cout << _pwd2.size() << "pwsize\n";
+ std::cout << A.size() << "Asize\n";
+ for(unsigned i = 0; i < _satellites.size(); i++){
+ std::cout << _satellites[i].first << "firat\n";
+ std::cout << _satellites[i].first-counter << "firat\n";
+
+ if(_satellites.size() > i+1 && !_satellites[i+1].second.getIsStart() && !are_near(_pwd2[_satellites[i].first].at0(),A[_satellites[i].first-counter].at0(),0.001)){
+ std::cout << "removed\n";
+ if(last != _satellites[i].first){
+ std::cout << "removedtrue\n";
+ counter++;
+ last = _satellites[i].first;
+ }
+ } else{
+ std::cout << "added\n";
+ satellites.push_back(std::make_pair(_satellites[i].first-counter,_satellites[i].second));
+ }
+ }
+ _pwd2 = A;
+ _satellites = satellites;
+}
+void
+Pointwise::new_pwd_sustract(Piecewise<D2<SBasis> > A)
+{
+ int counter = 0;
+ double last = -1;
+ double start = false;
+ double hideLast = false;
+ std::vector<std::pair<unsigned int,Satellite> > satellites;
+ std::cout << _pwd2.size() << "pwsize\n";
+ std::cout << A.size() << "Asize\n";
+ for(unsigned i = 0; i < _satellites.size(); i++){
+ std::cout << _satellites[i].first << "firat\n";
+ std::cout << _satellites[i].first-counter << "firat\n";
+ if((_satellites[i].first != findLastIndex(i) && !_satellites[findLastIndex(i)].second.getIsClosing()) && !are_near(_pwd2[_satellites[i].first].at0(),A[_satellites[i].first-counter].at0(),0.001)){
+ std::cout << "removed\n";
+ if(last != _satellites[i].first){
+ std::cout << "removedtrue\n";
+ counter++;
+ last = _satellites[i].first;
+ if(_satellites[i].second.getIsClosing()){
+ satellites = setBackClosing(satellites);
+ }
+ if(_satellites[i].second.getIsStart()){
+ start = true;
+ }
+ if(_satellites[i].second.getHidden()){
+ hideLast = true;
+ } else {
+ hideLast = false;
+ }
+ }
+ } else{
+ std::cout << "added\n";
+ if(start){
+ setStarting(_satellites[i].first);
+ start = false;
+ }
+ if(_satellites[i].second.getIsStart() && hideLast){
+ satellites = setBackHidden(satellites);
+ hideLast = false;
+ }
+ if(last != _satellites[i].first && _satellites[i].first == findLastIndex(i) && !_satellites[findLastIndex(i)].second.getIsClosing()){
+ last = _satellites[i].first;
+ counter++;
+ }
+ satellites.push_back(std::make_pair(_satellites[i].first-counter,_satellites[i].second));
+ }
+ }
+ _pwd2 = A;
+ _satellites = satellites;
+}
+
double
Pointwise::rad_to_len(double A, std::pair<unsigned int,Geom::Satellite> satellite)
{
@@ -192,6 +281,49 @@ Pointwise::findSatellites(unsigned int A, int B) const
return ret;
}
+std::vector<std::pair<unsigned int,Satellite> >
+Pointwise::setBackHidden(std::vector<std::pair<unsigned int,Satellite> > sat)
+{
+ for(unsigned i = 0; i < sat.size(); i++){
+ if(sat[i].first == sat.back().first ){
+ sat[i].second.setHidden(true);
+ }
+ }
+ return sat;
+}
+
+std::vector<std::pair<unsigned int,Satellite> >
+Pointwise::setBackInactive(std::vector<std::pair<unsigned int,Satellite> > sat)
+{
+ for(unsigned i = 0; i < sat.size(); i++){
+ if(sat[i].first == sat.back().first ){
+ sat[i].second.setHidden(true);
+ }
+ }
+ return sat;
+}
+
+std::vector<std::pair<unsigned int,Satellite> >
+Pointwise::setBackClosing(std::vector<std::pair<unsigned int,Satellite> > sat)
+{
+ for(unsigned i = 0; i < sat.size(); i++){
+ if(sat[i].first == sat.back().first ){
+ sat[i].second.setIsClosing(true);
+ }
+ }
+ return sat;
+}
+
+void
+Pointwise::setStarting(unsigned int A)
+{
+ for(unsigned i = 0; i < _satellites.size(); i++){
+ if(_satellites[i].first == A){
+ _satellites[i].second.setIsStart(true);
+ }
+ }
+}
+
std::vector<Satellite>
Pointwise::findClosingSatellites(unsigned int A) const
{
@@ -211,6 +343,22 @@ Pointwise::findClosingSatellites(unsigned int A) const
return ret;
}
+double
+Pointwise::findLastIndex(unsigned int A) const
+{
+ double ret = -1;
+ bool finded = false;
+ for(unsigned i = 0; i < _satellites.size(); i++){
+ if(finded && _satellites[i].second.getIsStart()){
+ return _satellites[i].first;
+ }
+ if(_satellites[i].first == A){
+ finded = true;
+ }
+ }
+ return ret;
+}
+
std::vector<Satellite>
Pointwise::findPeviousSatellites(unsigned int A, int B) const
{