summaryrefslogtreecommitdiffstats
path: root/src/live_effects/parameter
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2015-07-06 10:01:17 +0000
committerJabiertxof <jtx@jtx.marker.es>2015-07-06 10:01:17 +0000
commit936f6512b26120b882a1c68e50968a15002f3af4 (patch)
tree82d18a24db63832d51f5d59544dc9561680fe372 /src/live_effects/parameter
parentFix a bug displaying arcs (diff)
downloadinkscape-936f6512b26120b882a1c68e50968a15002f3af4.tar.gz
inkscape-936f6512b26120b882a1c68e50968a15002f3af4.zip
Fixes from branch review
(bzr r13645.1.102)
Diffstat (limited to 'src/live_effects/parameter')
-rw-r--r--src/live_effects/parameter/array.cpp2
-rw-r--r--src/live_effects/parameter/satellitearray.cpp81
-rw-r--r--src/live_effects/parameter/satellitearray.h1
3 files changed, 61 insertions, 23 deletions
diff --git a/src/live_effects/parameter/array.cpp b/src/live_effects/parameter/array.cpp
index 9b326fe32..0abcd4b9b 100644
--- a/src/live_effects/parameter/array.cpp
+++ b/src/live_effects/parameter/array.cpp
@@ -20,7 +20,7 @@ sp_svg_satellite_read_d(gchar const *str, Satellite *sat){
return 0;
}
gchar ** strarray = g_strsplit(str, ",", 8);
- if(strarray[7] && !strarray[8]){
+ if(strlen(str) > 0 && strarray[7] && !strarray[8]){
sat->setSatelliteType(g_strstrip(strarray[0]));
sat->is_time = strncmp(strarray[1],"1",1) == 0;
sat->active = strncmp(strarray[2],"1",1) == 0;
diff --git a/src/live_effects/parameter/satellitearray.cpp b/src/live_effects/parameter/satellitearray.cpp
index 46c7396d0..b7d403a91 100644
--- a/src/live_effects/parameter/satellitearray.cpp
+++ b/src/live_effects/parameter/satellitearray.cpp
@@ -37,8 +37,6 @@ SatelliteArrayParam::SatelliteArrayParam(const Glib::ustring &label,
_last_pointwise = NULL;
}
-SatelliteArrayParam::~SatelliteArrayParam() {}
-
void SatelliteArrayParam::set_oncanvas_looks(SPKnotShapeType shape,
SPKnotModeType mode,
guint32 color)
@@ -76,8 +74,7 @@ void SatelliteArrayParam::updateCanvasIndicators(bool mirror)
return;
}
Geom::Piecewise<Geom::D2<Geom::SBasis> > pwd2 = _last_pointwise->getPwd2();
- Pathinfo* path_info = new Pathinfo();
- path_info->set(pwd2);
+ Geom::PathVector pointwise_pv = path_from_piecewise(Geom::remove_short_cuts(pwd2,0.01),0.01);
if (mirror == true) {
_hp.clear();
}
@@ -97,7 +94,17 @@ void SatelliteArrayParam::updateCanvasIndicators(bool mirror)
double size_out = _vector[i].arcDistance(pwd2[i]);
double lenght_out = Geom::length(pwd2[i], Geom::EPSILON);
double lenght_in = 0;
- boost::optional<size_t> d2_prev_index = path_info->previous(i);
+
+ Geom::Path sat_path = pointwise_pv.pathAt(i);
+ boost::optional<size_t> d2_prev_index = boost::none;
+ size_t sat_curve_time = Geom::nearest_time(pointwise_pv.curveAt(i).initialPoint() , pwd2);
+ size_t first = Geom::nearest_time(sat_path.initialPoint() , pwd2);
+ if (sat_path.closed() && sat_curve_time == first){
+ sat_curve_time = Geom::nearest_time(sat_path.initialPoint(),pwd2);
+ d2_prev_index = sat_curve_time + sat_path.size() - 1;
+ } else if(!sat_path.closed() || sat_curve_time != first){
+ d2_prev_index = sat_curve_time - 1;
+ }
if (d2_prev_index) {
lenght_in = Geom::length(pwd2[*d2_prev_index], Geom::EPSILON);
}
@@ -285,10 +292,18 @@ void FilletChamferKnotHolderEntity::knot_set(Geom::Point const &p,
}
Pointwise *pointwise = _pparam->_last_pointwise;
Geom::Piecewise<Geom::D2<Geom::SBasis> > pwd2 = pointwise->getPwd2();
- Pathinfo* path_info = new Pathinfo();
- path_info->set(pwd2);
- if (_pparam->_vector.size() <= _index) {
- boost::optional<size_t> d2_prev_index = path_info->previous(index);
+ Geom::PathVector pointwise_pv = path_from_piecewise(Geom::remove_short_cuts(pwd2,0.01),0.01);
+ if (_index >= _pparam->_vector.size() ) {
+ Geom::Path sat_path = pointwise_pv.pathAt(index);
+ boost::optional<size_t> d2_prev_index = boost::none;
+ size_t sat_curve_time = Geom::nearest_time(pointwise_pv.curveAt(index).initialPoint(),pwd2);
+ size_t first = Geom::nearest_time(sat_path.initialPoint() , pwd2);
+ if (sat_path.closed() && sat_curve_time == first){
+ sat_curve_time = Geom::nearest_time(sat_path.initialPoint(),pwd2);
+ d2_prev_index = sat_curve_time + sat_path.size() - 1;
+ } else if(!sat_path.closed() || sat_curve_time != first){
+ d2_prev_index = sat_curve_time - 1;
+ }
if (d2_prev_index) {
Geom::D2<Geom::SBasis> d2_in = pwd2[*d2_prev_index];
double mirror_time = Geom::nearest_time(s, d2_in);
@@ -334,15 +349,23 @@ Geom::Point FilletChamferKnotHolderEntity::knot_get() const
}
Pointwise *pointwise = _pparam->_last_pointwise;
Geom::Piecewise<Geom::D2<Geom::SBasis> > pwd2 = pointwise->getPwd2();
- Pathinfo* path_info = new Pathinfo();
- path_info->set(pwd2);
+ Geom::PathVector pointwise_pv = path_from_piecewise(Geom::remove_short_cuts(pwd2,0.01),0.01);
if (pwd2.size() <= index) {
return Geom::Point(Geom::infinity(), Geom::infinity());
}
this->knot->show();
if (_index >= _pparam->_vector.size()) {
tmp_point = satellite.getPosition(pwd2[index]);
- boost::optional<size_t> d2_prev_index = path_info->previous(index);
+ Geom::Path sat_path = pointwise_pv.pathAt(index);
+ boost::optional<size_t> d2_prev_index = boost::none;
+ size_t sat_curve_time = Geom::nearest_time(pointwise_pv.curveAt(index).initialPoint(),pwd2);
+ size_t first = Geom::nearest_time(sat_path.initialPoint() , pwd2);
+ if (sat_path.closed() && sat_curve_time == first){
+ sat_curve_time = Geom::nearest_time(sat_path.initialPoint(),pwd2);
+ d2_prev_index = sat_curve_time + sat_path.size() - 1;
+ } else if(!sat_path.closed() || sat_curve_time != first){
+ d2_prev_index = sat_curve_time - 1;
+ }
if (d2_prev_index) {
Geom::D2<Geom::SBasis> d2_in = pwd2[*d2_prev_index];
double s = satellite.arcDistance(pwd2[index]);
@@ -425,20 +448,28 @@ void FilletChamferKnotHolderEntity::knot_click(guint state)
}
} else if (state & GDK_SHIFT_MASK) {
Geom::Piecewise<Geom::D2<Geom::SBasis> > pwd2 = _pparam->_last_pointwise->getPwd2();
- Pathinfo* path_info = new Pathinfo();
- path_info->set(pwd2);
+ Geom::PathVector pointwise_pv = path_from_piecewise(Geom::remove_short_cuts(pwd2,0.01),0.01);
double amount = _pparam->_vector.at(index).amount;
+ Geom::Path sat_path = pointwise_pv.pathAt(index);
+ boost::optional<size_t> d2_prev_index = boost::none;
+ size_t sat_curve_time = Geom::nearest_time(pointwise_pv.curveAt(index).initialPoint(),pwd2);
+ size_t first = Geom::nearest_time(sat_path.initialPoint() , pwd2);
+ if (sat_path.closed() && sat_curve_time == first){
+ sat_curve_time = Geom::nearest_time(sat_path.initialPoint(),pwd2);
+ d2_prev_index = sat_curve_time + sat_path.size() - 1;
+ } else if(!sat_path.closed() || sat_curve_time != first){
+ d2_prev_index = sat_curve_time - 1;
+ }
+
if (!_pparam->_use_distance && !_pparam->_vector.at(index).is_time) {
- boost::optional<size_t> prev = path_info->previous(index);
- if (prev) {
- amount = _pparam->_vector.at(index).lenToRad(amount, pwd2[*prev], pwd2[index],_pparam->_vector.at(*prev));
+ if (d2_prev_index) {
+ amount = _pparam->_vector.at(index).lenToRad(amount, pwd2[*d2_prev_index], pwd2[index],_pparam->_vector.at(*d2_prev_index));
} else {
amount = 0.0;
}
}
bool aprox = false;
Geom::D2<Geom::SBasis> d2_out = _pparam->_last_pointwise->getPwd2()[index];
- boost::optional<size_t> d2_prev_index = path_info->previous(index);
if (d2_prev_index) {
Geom::D2<Geom::SBasis> d2_in =
_pparam->_last_pointwise->getPwd2()[*d2_prev_index];
@@ -468,9 +499,17 @@ void FilletChamferKnotHolderEntity::knot_set_offset(Satellite satellite)
double max_amount = amount;
if (!_pparam->_use_distance && !satellite.is_time) {
Geom::Piecewise<Geom::D2<Geom::SBasis> > pwd2 = _pparam->_last_pointwise->getPwd2();
- Pathinfo* path_info = new Pathinfo();
- path_info->set(pwd2);
- boost::optional<size_t> prev = path_info->previous(index);
+ Geom::PathVector pointwise_pv = path_from_piecewise(Geom::remove_short_cuts(pwd2,0.01),0.01);
+ Geom::Path sat_path = pointwise_pv.pathAt(index);
+ boost::optional<size_t> prev = boost::none;
+ size_t sat_curve_time = Geom::nearest_time(pointwise_pv.curveAt(index).initialPoint(),pwd2);
+ size_t first = Geom::nearest_time(sat_path.initialPoint() , pwd2);
+ if (sat_path.closed() && sat_curve_time == first){
+ sat_curve_time = Geom::nearest_time(sat_path.initialPoint(),pwd2);
+ prev = sat_curve_time + sat_path.size() - 1;
+ } else if(!sat_path.closed() || sat_curve_time != first){
+ prev = sat_curve_time - 1;
+ }
if (prev) {
amount = _pparam->_vector.at(index).radToLen(amount, pwd2[*prev], pwd2[index]);
} else {
diff --git a/src/live_effects/parameter/satellitearray.h b/src/live_effects/parameter/satellitearray.h
index cc09e7589..bb8bf27c8 100644
--- a/src/live_effects/parameter/satellitearray.h
+++ b/src/live_effects/parameter/satellitearray.h
@@ -35,7 +35,6 @@ public:
SatelliteArrayParam(const Glib::ustring &label, const Glib::ustring &tip,
const Glib::ustring &key,
Inkscape::UI::Widget::Registry *wr, Effect *effect);
- virtual ~SatelliteArrayParam();
virtual Gtk::Widget *param_newWidget()
{