summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2015-04-01 10:08:06 +0000
committerJabiertxof <jtx@jtx.marker.es>2015-04-01 10:08:06 +0000
commitce42be89c9b32edeba6eda6522199ec749e014f8 (patch)
tree975c7d6a213368996d9b88dbb2e7830fae77873a /src
parentMove 2Geom work to a intermediate positon -helper- (diff)
downloadinkscape-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.cpp6
-rw-r--r--src/helper/geom-pathinfo.h1
-rw-r--r--src/helper/geom-pointwise.cpp117
-rw-r--r--src/helper/geom-pointwise.h17
-rw-r--r--src/live_effects/lpe-fillet-chamfer.cpp4
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);
}
}