diff options
| author | Jabier Arraiza Cenoz <jabier.arraiza@marker.es> | 2015-04-01 02:13:16 +0000 |
|---|---|---|
| committer | Jabiertxof <jtx@jtx.marker.es> | 2015-04-01 02:13:16 +0000 |
| commit | dff3aa428ff050c2cce501f646977ddad921feca (patch) | |
| tree | 3152c9b571095e1db57af2522129d278b5f4ce39 /src/live_effects/parameter | |
| parent | removed code comments (diff) | |
| download | inkscape-dff3aa428ff050c2cce501f646977ddad921feca.tar.gz inkscape-dff3aa428ff050c2cce501f646977ddad921feca.zip | |
Move 2Geom work to a intermediate positon -helper-
Removed dependency to helper/geom.h
Now use a simple vector, not a vector of pairs of size_t and Satellite
Getters and setters on Satellite removed
Update store parameter to a more friendly string, like powerstroke
Todo:
Documentation and Fix coding style.
(bzr r13645.1.63)
Diffstat (limited to 'src/live_effects/parameter')
| -rw-r--r-- | src/live_effects/parameter/Makefile_insert | 4 | ||||
| -rw-r--r-- | src/live_effects/parameter/array.cpp | 77 | ||||
| -rw-r--r-- | src/live_effects/parameter/array.h | 38 | ||||
| -rw-r--r-- | src/live_effects/parameter/satellitearray.cpp (renamed from src/live_effects/parameter/satellitepairarray.cpp) | 159 | ||||
| -rw-r--r-- | src/live_effects/parameter/satellitearray.h (renamed from src/live_effects/parameter/satellitepairarray.h) | 18 |
5 files changed, 151 insertions, 145 deletions
diff --git a/src/live_effects/parameter/Makefile_insert b/src/live_effects/parameter/Makefile_insert index 74b499fa2..9a0ebe235 100644 --- a/src/live_effects/parameter/Makefile_insert +++ b/src/live_effects/parameter/Makefile_insert @@ -22,8 +22,8 @@ ink_common_sources += \ live_effects/parameter/originalpatharray.h \ live_effects/parameter/powerstrokepointarray.cpp \ live_effects/parameter/powerstrokepointarray.h \ - live_effects/parameter/satellitepairarray.cpp \ - live_effects/parameter/satellitepairarray.h \ + live_effects/parameter/satellitearray.cpp \ + live_effects/parameter/satellitearray.h \ live_effects/parameter/text.cpp \ live_effects/parameter/text.h \ live_effects/parameter/transformedpoint.cpp \ diff --git a/src/live_effects/parameter/array.cpp b/src/live_effects/parameter/array.cpp index 33cb53f4e..c8ee63fec 100644 --- a/src/live_effects/parameter/array.cpp +++ b/src/live_effects/parameter/array.cpp @@ -5,9 +5,7 @@ */ #include "live_effects/parameter/array.h" - #include "helper-fns.h" - #include <2geom/coord.h> #include <2geom/point.h> @@ -15,6 +13,35 @@ namespace Inkscape { namespace LivePathEffect { +//TODO: move maybe to svg-lenght.cpp +unsigned int +sp_svg_satellite_read_d(gchar const *str, Geom::Satellite *sat){ + if (!str) { + return 0; + } + gchar ** strarray = g_strsplit(str, ",", 8); + if(strarray[7] && !strarray[8]){ + sat->setSatelliteType(g_strstrip(strarray[0])); + sat->isTime = strncmp(strarray[1],"1",1) == 0; + sat->active = strncmp(strarray[2],"1",1) == 0; + sat->hasMirror = strncmp(strarray[3],"1",1) == 0; + sat->hidden = strncmp(strarray[4],"1",1) == 0; + double amount,angle; + float stepsTmp; + sp_svg_number_read_d(strarray[5], &amount); + sp_svg_number_read_d(strarray[6], &angle); + sp_svg_number_read_f(strarray[7], &stepsTmp); + unsigned int steps = (unsigned int)stepsTmp; + sat->amount = amount; + sat->angle = angle; + sat->steps = steps; + g_strfreev (strarray); + return 1; + } + g_strfreev (strarray); + return 0; +} + template <> double ArrayParam<double>::readsvg(const gchar * str) @@ -47,51 +74,17 @@ ArrayParam<Geom::Point>::readsvg(const gchar * str) } return Geom::Point(Geom::infinity(),Geom::infinity()); } -//TODO: move maybe to svg-lenght.cpp -unsigned int -sp_svg_satellite_read_d(gchar const *str, Geom::Satellite *sat){ - if (!str) { - return 0; - } - gchar ** strarray = g_strsplit(str, "*", 0); - if(strarray[8] && !strarray[9]){ - sat->setSatelliteType(strarray[0]); - sat->setIsTime(strncmp(strarray[1],"1",1) == 0); - sat->setIsEndOpen(strncmp(strarray[2],"1",1) == 0); - sat->setActive(strncmp(strarray[3],"1",1) == 0); - sat->setHasMirror(strncmp(strarray[4],"1",1) == 0); - sat->setHidden(strncmp(strarray[5],"1",1) == 0); - double amount,angle; - float stepsTmp; - sp_svg_number_read_d(strarray[6], &amount); - sp_svg_number_read_d(strarray[7], &angle); - sp_svg_number_read_f(strarray[8], &stepsTmp); - unsigned int steps = (unsigned int)stepsTmp; - sat->setAmount(amount); - sat->setAngle(angle); - sat->setSteps(steps); - g_strfreev (strarray); - return 1; - } - g_strfreev (strarray); - return 0; -} template <> -std::pair<size_t, Geom::Satellite> -ArrayParam<std::pair<size_t, Geom::Satellite> >::readsvg(const gchar * str) +Geom::Satellite +ArrayParam<Geom::Satellite >::readsvg(const gchar * str) { - gchar ** strarray = g_strsplit(str, ",", 2); - double index; - std::pair<size_t, Geom::Satellite> result; - unsigned int success = (int)sp_svg_number_read_d(strarray[0], &index); Geom::Satellite sat; - success += sp_svg_satellite_read_d(strarray[1], &sat); - g_strfreev (strarray); - if (success == 2) { - return std::make_pair((size_t)index, sat); + if (sp_svg_satellite_read_d(str, &sat)) { + return sat; } - return std::make_pair((size_t)0,sat); + Geom::Satellite satellite(Geom::F, true, false, false, true, 0.0, 0.0, 0); + return satellite; } } /* namespace LivePathEffect */ diff --git a/src/live_effects/parameter/array.h b/src/live_effects/parameter/array.h index 4fb053dbb..25e479304 100644 --- a/src/live_effects/parameter/array.h +++ b/src/live_effects/parameter/array.h @@ -15,8 +15,8 @@ #include "live_effects/parameter/parameter.h" -#include <2geom/satellite.h> -#include <2geom/satellite-enum.h> +#include "helper/geom-satellite.h" +#include "helper/geom-satellite-enum.h" #include "svg/svg.h" #include "svg/stringstream.h" @@ -111,26 +111,22 @@ protected: str << nVector; } - void writesvgData(SVGOStringStream &str, std::pair<size_t, Geom::Satellite> const &nVector) const { - str << nVector.first; + void writesvgData(SVGOStringStream &str, Geom::Satellite const &nVector) const { + str << nVector.getSatelliteTypeGchar(); str << ","; - str << nVector.second.getSatelliteTypeGchar(); - str << "*"; - str << nVector.second.getIsTime(); - str << "*"; - str << nVector.second.getIsEndOpen(); - str << "*"; - str << nVector.second.getActive(); - str << "*"; - str << nVector.second.getHasMirror(); - str << "*"; - str << nVector.second.getHidden(); - str << "*"; - str << nVector.second.getAmount(); - str << "*"; - str << nVector.second.getAngle(); - str << "*"; - str << nVector.second.getSteps(); + str << nVector.isTime; + str << ","; + str << nVector.active; + str << ","; + str << nVector.hasMirror; + str << ","; + str << nVector.hidden; + str << ","; + str << nVector.amount; + str << ","; + str << nVector.angle; + str << ","; + str << nVector.steps; } StorageType readsvg(const gchar * str); diff --git a/src/live_effects/parameter/satellitepairarray.cpp b/src/live_effects/parameter/satellitearray.cpp index 461a6b54e..24a491b4b 100644 --- a/src/live_effects/parameter/satellitepairarray.cpp +++ b/src/live_effects/parameter/satellitearray.cpp @@ -10,10 +10,11 @@ #include "knotholder.h" #include "ui/dialog/lpe-fillet-chamfer-properties.h" -#include "live_effects/parameter/satellitepairarray.h" +#include "live_effects/parameter/satellitearray.h" #include "live_effects/effect.h" #include "sp-lpe-item.h" #include <preferences.h> +#include <boost/optional.hpp> // TODO due to internal breakage in glibmm headers, // this has to be included last. #include <glibmm/i18n.h> @@ -25,11 +26,11 @@ namespace Inkscape { namespace LivePathEffect { -SatellitePairArrayParam::SatellitePairArrayParam( +SatelliteArrayParam::SatelliteArrayParam( const Glib::ustring &label, const Glib::ustring &tip, const Glib::ustring &key, Inkscape::UI::Widget::Registry *wr, Effect *effect) - : ArrayParam<std::pair<size_t,Geom::Satellite> >(label, tip, key, wr, effect, 0), + : ArrayParam<Geom::Satellite>(label, tip, key, wr, effect, 0), knoth(NULL) { knot_shape = SP_KNOT_SHAPE_DIAMOND; @@ -41,9 +42,9 @@ SatellitePairArrayParam::SatellitePairArrayParam( last_pointwise = NULL; } -SatellitePairArrayParam::~SatellitePairArrayParam() {} +SatelliteArrayParam::~SatelliteArrayParam() {} -void SatellitePairArrayParam::set_oncanvas_looks(SPKnotShapeType shape, +void SatelliteArrayParam::set_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color) { @@ -52,77 +53,78 @@ void SatellitePairArrayParam::set_oncanvas_looks(SPKnotShapeType shape, knot_color = color; } -void SatellitePairArrayParam::set_pointwise(Geom::Pointwise *pointwise) +void SatelliteArrayParam::set_pointwise(Geom::Pointwise *pointwise) { last_pointwise = pointwise; param_set_and_write_new_value(last_pointwise->getSatellites()); } -void SatellitePairArrayParam::set_document_unit(Glib::ustring value_document_unit) +void SatelliteArrayParam::set_document_unit(Glib::ustring value_document_unit) { documentUnit = value_document_unit; } -void SatellitePairArrayParam::set_use_distance(bool use_knot_distance ) +void SatelliteArrayParam::set_use_distance(bool use_knot_distance ) { use_distance = use_knot_distance; } -void SatellitePairArrayParam::set_unit(const gchar *abbr) +void SatelliteArrayParam::set_unit(const gchar *abbr) { unit = abbr; } -void SatellitePairArrayParam::set_effect_type(EffectType et) +void SatelliteArrayParam::set_effect_type(EffectType et) { _effectType = et; } -void SatellitePairArrayParam::set_helper_size(int hs) +void SatelliteArrayParam::set_helper_size(int hs) { helper_size = hs; updateCanvasIndicators(); } -void SatellitePairArrayParam::updateCanvasIndicators(bool mirror) +void SatelliteArrayParam::updateCanvasIndicators(bool mirror) { if(!last_pointwise){ return; } Geom::Piecewise<Geom::D2<Geom::SBasis> > pwd2 = last_pointwise->getPwd2(); + Pathinfo pathInfo(pwd2); if( mirror == true){ hp.clear(); } for (size_t i = 0; i < _vector.size(); ++i) { - if(!_vector[i].second.getActive() || _vector[i].second.getHidden()){ + if(!_vector[i].active || _vector[i].hidden){ continue; } - if((!_vector[i].second.getHasMirror() && mirror == true) || _vector[i].second.getAmount() == 0){ + if((!_vector[i].hasMirror && mirror == true) || _vector[i].amount == 0){ continue; } double pos = 0; - if(pwd2.size() <= (unsigned)_vector[i].first){ + if(pwd2.size() <= i){ break; } - Geom::D2<Geom::SBasis> d2 = pwd2[_vector[i].first]; + Geom::D2<Geom::SBasis> d2 = pwd2[i]; bool overflow = false; - double size_out = _vector[i].second.getSize(pwd2[_vector[i].first]); - double lenght_out = Geom::length(pwd2[_vector[i].first], Geom::EPSILON); + double size_out = _vector[i].getSize(pwd2[i]); + double lenght_out = Geom::length(pwd2[i], Geom::EPSILON); double lenght_in = 0; - boost::optional<size_t> d2_prev_index = last_pointwise->getPrevious(_vector[i].first); + boost::optional<size_t> d2_prev_index = pathInfo.getPrevious(i); if(d2_prev_index){ lenght_in = Geom::length(pwd2[*d2_prev_index], Geom::EPSILON); } if(mirror == true){ if(d2_prev_index){ d2 = pwd2[*d2_prev_index]; - pos = _vector[i].second.getOpositeTime(size_out,d2); + pos = _vector[i].getOpositeTime(size_out,d2); if(lenght_out < size_out){ overflow = true; } } } else { - pos = _vector[i].second.getTime(d2); + pos = _vector[i].getTime(d2); if(lenght_in < size_out){ overflow = true; } @@ -181,18 +183,18 @@ void SatellitePairArrayParam::updateCanvasIndicators(bool mirror) updateCanvasIndicators(false); } } -void SatellitePairArrayParam::updateCanvasIndicators() +void SatelliteArrayParam::updateCanvasIndicators() { updateCanvasIndicators(true); } -void SatellitePairArrayParam::addCanvasIndicators( +void SatelliteArrayParam::addCanvasIndicators( SPLPEItem const */*lpeitem*/, std::vector<Geom::PathVector> &hp_vec) { hp_vec.push_back(hp); } -void SatellitePairArrayParam::recalculate_knots() +void SatelliteArrayParam::recalculate_knots() { if(last_pointwise){ _vector = last_pointwise->getSatellites(); @@ -200,15 +202,15 @@ void SatellitePairArrayParam::recalculate_knots() } void -SatellitePairArrayParam::param_transform_multiply(Geom::Affine const &postmul, +SatelliteArrayParam::param_transform_multiply(Geom::Affine const &postmul, bool /*set*/) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); if (prefs->getBool("/options/transform/rectcorners", true)) { for (size_t i = 0; i < _vector.size(); ++i) { - if(!_vector[i].second.getIsTime() && _vector[i].second.getAmount() > 0){ - _vector[i].second.setAmount(_vector[i].second.getAmount() * ((postmul.expansionX() + postmul.expansionY()) / 2)); + if(!_vector[i].isTime && _vector[i].amount > 0){ + _vector[i].amount = _vector[i].amount * ((postmul.expansionX() + postmul.expansionY()) / 2); } } param_set_and_write_new_value(_vector); @@ -217,7 +219,7 @@ SatellitePairArrayParam::param_transform_multiply(Geom::Affine const &postmul, // param_set_and_write_new_value( (*this) * postmul ); } -void SatellitePairArrayParam::addKnotHolderEntities(KnotHolder *knotholder, +void SatelliteArrayParam::addKnotHolderEntities(KnotHolder *knotholder, SPDesktop *desktop, SPItem *item, bool mirror) @@ -228,14 +230,14 @@ void SatellitePairArrayParam::addKnotHolderEntities(KnotHolder *knotholder, if( mirror == true){ iPlus = i + _vector.size(); } - if(!_vector[i].second.getActive()){ + if(!_vector[i].active){ continue; } - if(!_vector[i].second.getHasMirror() && mirror == true){ + if(!_vector[i].hasMirror && mirror == true){ continue; } using namespace Geom; - SatelliteType type = _vector[i].second.getSatelliteType(); + SatelliteType type = _vector[i].satelliteType; //IF is for filletChamfer effect... if(_effectType == FILLET_CHAMFER){ const gchar *tip; @@ -268,7 +270,7 @@ void SatellitePairArrayParam::addKnotHolderEntities(KnotHolder *knotholder, } } -void SatellitePairArrayParam::addKnotHolderEntities(KnotHolder *knotholder, +void SatelliteArrayParam::addKnotHolderEntities(KnotHolder *knotholder, SPDesktop *desktop, SPItem *item) { @@ -276,7 +278,7 @@ void SatellitePairArrayParam::addKnotHolderEntities(KnotHolder *knotholder, addKnotHolderEntities(knotholder, desktop, item, true); } -FilletChamferKnotHolderEntity::FilletChamferKnotHolderEntity(SatellitePairArrayParam *p, size_t index) +FilletChamferKnotHolderEntity::FilletChamferKnotHolderEntity(SatelliteArrayParam *p, size_t index) : _pparam(p), _index(index) { @@ -299,34 +301,33 @@ void FilletChamferKnotHolderEntity::knot_set(Point const &p, return; } - std::pair<int,Geom::Satellite> satellite = _pparam->_vector.at(index); - if(!satellite.second.getActive() || satellite.second.getHidden()){ + Geom::Satellite satellite = _pparam->_vector.at(index); + if(!satellite.active || satellite.hidden){ return; } Geom::Pointwise* pointwise = _pparam->last_pointwise; Geom::Piecewise<Geom::D2<Geom::SBasis> > pwd2 = pointwise->getPwd2(); + Pathinfo pathInfo(pwd2); if(_pparam->_vector.size() <= _index){ - boost::optional<size_t> d2_prev_index = pointwise->getPrevious(satellite.first); + boost::optional<size_t> d2_prev_index = pathInfo.getPrevious(index); if(d2_prev_index){ Geom::D2<Geom::SBasis> d2_in = pwd2[*d2_prev_index]; double mirrorTime = Geom::nearest_point(s, d2_in); double timeStart = 0; - std::vector<size_t> satIndexes = pointwise->findPeviousSatellites(satellite.first,1); - if(satIndexes.size()>0){ - timeStart = pointwise->getSatellites()[satIndexes[0]].second.getTime(d2_in); - } + std::vector<Geom::Satellite> sats = pointwise->getSatellites(); + timeStart = sats[*d2_prev_index].getTime(d2_in); if(timeStart > mirrorTime){ mirrorTime = timeStart; } - double size = satellite.second.toSize(mirrorTime, d2_in); + double size = satellite.toSize(mirrorTime, d2_in); double amount = Geom::length(d2_in, Geom::EPSILON) - size; - if(satellite.second.getIsTime()){ - amount = satellite.second.toTime(amount,pwd2[satellite.first]); + if(satellite.isTime){ + amount = satellite.toTime(amount,pwd2[index]); } - satellite.second.setAmount(amount); + satellite.amount = amount; } } else { - satellite.second.setPosition(s,pwd2[satellite.first]); + satellite.setPosition(s,pwd2[index]); } _pparam->_vector.at(index) = satellite; SPLPEItem * splpeitem = dynamic_cast<SPLPEItem *>(item); @@ -347,26 +348,27 @@ FilletChamferKnotHolderEntity::knot_get() const if (!valid_index(index)) { return Point(infinity(), infinity()); } - std::pair<int,Geom::Satellite> satellite = _pparam->_vector.at(index); + Geom::Satellite satellite = _pparam->_vector.at(index); if(!_pparam->last_pointwise){ return Point(infinity(), infinity()); } - if(!satellite.second.getActive() || satellite.second.getHidden()){ + if(!satellite.active || satellite.hidden){ return Point(infinity(), infinity()); } Geom::Pointwise* pointwise = _pparam->last_pointwise; Geom::Piecewise<Geom::D2<Geom::SBasis> > pwd2 = pointwise->getPwd2(); - if(pwd2.size() <= (unsigned)satellite.first){ + Pathinfo pathInfo(pwd2); + if(pwd2.size() <= index){ return Point(infinity(), infinity()); } this->knot->show(); if( _index >= _pparam->_vector.size()){ - tmpPoint = satellite.second.getPosition(pwd2[satellite.first]); - boost::optional<size_t> d2_prev_index = pointwise->getPrevious(satellite.first); + tmpPoint = satellite.getPosition(pwd2[index]); + boost::optional<size_t> d2_prev_index = pathInfo.getPrevious(index); if(d2_prev_index){ Geom::D2<Geom::SBasis> d2_in = pwd2[*d2_prev_index]; - double s = satellite.second.getSize(pwd2[satellite.first]); - double t = satellite.second.getOpositeTime(s,d2_in); + double s = satellite.getSize(pwd2[index]); + double t = satellite.getOpositeTime(s,d2_in); if(t > 1){ t = 1; } @@ -374,17 +376,14 @@ FilletChamferKnotHolderEntity::knot_get() const t = 0; } double timeStart = 0; - std::vector<size_t> satIndexes = pointwise->findPeviousSatellites(satellite.first,1); - if(satIndexes.size()>0){ - timeStart = pointwise->getSatellites()[satIndexes[0]].second.getTime(d2_in); - } + timeStart = pointwise->getSatellites()[*d2_prev_index].getTime(d2_in); if(timeStart > t){ t = timeStart; } tmpPoint = (d2_in).valueAt(t); } } else { - tmpPoint = satellite.second.getPosition(pwd2[satellite.first]); + tmpPoint = satellite.getPosition(pwd2[index]); } Geom::Point const canvas_point = tmpPoint; return canvas_point; @@ -402,12 +401,12 @@ void FilletChamferKnotHolderEntity::knot_click(guint state) } if (state & GDK_CONTROL_MASK) { if (state & GDK_MOD1_MASK) { - _pparam->_vector.at(index).second.setAmount(0.0); + _pparam->_vector.at(index).amount = 0.0; _pparam->param_set_and_write_new_value(_pparam->_vector); sp_lpe_item_update_patheffect(SP_LPE_ITEM(item), false, false); }else{ using namespace Geom; - SatelliteType type = _pparam->_vector.at(index).second.getSatelliteType(); + SatelliteType type = _pparam->_vector.at(index).satelliteType; switch(type){ case F: type = IF; @@ -422,7 +421,7 @@ void FilletChamferKnotHolderEntity::knot_click(guint state) type = F; break; } - _pparam->_vector.at(index).second.setSatelliteType(type); + _pparam->_vector.at(index).satelliteType = type; _pparam->param_set_and_write_new_value(_pparam->_vector); sp_lpe_item_update_patheffect(SP_LPE_ITEM(item), false, false); const gchar *tip; @@ -447,19 +446,28 @@ void FilletChamferKnotHolderEntity::knot_click(guint state) this->knot->show(); } } else if (state & GDK_SHIFT_MASK) { - double amount = _pparam->_vector.at(index).second.getAmount(); - if(!_pparam->use_distance && !_pparam->_vector.at(index).second.getIsTime()){ - amount = _pparam->last_pointwise->len_to_rad(amount, _pparam->_vector.at(index)); + Piecewise<D2<SBasis> > pwd2 = _pparam->last_pointwise->getPwd2(); + Pathinfo pathInfo(pwd2); + double amount = _pparam->_vector.at(index).amount; + if(!_pparam->use_distance && !_pparam->_vector.at(index).isTime){ + boost::optional<size_t> prev = pathInfo.getPrevious(index); + boost::optional<Geom::D2<Geom::SBasis> > prevPwd2 = boost::none; + boost::optional<Geom::Satellite > prevSat = boost::none; + if(prev){ + prevPwd2 = pwd2[*prev]; + prevSat = _pparam->_vector.at(*prev); + } + amount = _pparam->_vector.at(index).len_to_rad(amount, prevPwd2, pwd2[index], prevSat); } bool aprox = false; D2<SBasis> d2_out = _pparam->last_pointwise->getPwd2()[index]; - boost::optional<size_t> d2_prev_index = _pparam->last_pointwise->getPrevious(_pparam->_vector.at(index).first); + boost::optional<size_t> d2_prev_index = pathInfo.getPrevious(index); if(d2_prev_index){ Geom::D2<Geom::SBasis> d2_in = _pparam->last_pointwise->getPwd2()[*d2_prev_index]; aprox = ((d2_in)[0].degreesOfFreedom() != 2 || d2_out[0].degreesOfFreedom() != 2) && !_pparam->use_distance?true:false; } Inkscape::UI::Dialogs::FilletChamferPropertiesDialog::showDialog( - this->desktop, amount , this, _pparam->unit, _pparam->use_distance, aprox, _pparam->documentUnit,_pparam->_vector.at(index).second); + this->desktop, amount , this, _pparam->unit, _pparam->use_distance, aprox, _pparam->documentUnit,_pparam->_vector.at(index)); } } @@ -473,16 +481,25 @@ void FilletChamferKnotHolderEntity::knot_set_offset(Geom::Satellite satellite) if( _index >= _pparam->_vector.size()){ index = _index-_pparam->_vector.size(); } - double amount = satellite.getAmount(); + double amount = satellite.amount; double maxAmount = amount; - if(!_pparam->use_distance && !satellite.getIsTime()){ - amount = _pparam->last_pointwise->rad_to_len(amount, _pparam->_vector.at(index)); + if(!_pparam->use_distance && !satellite.isTime){ + Piecewise<D2<SBasis> > pwd2 = _pparam->last_pointwise->getPwd2(); + Pathinfo pathInfo(pwd2); + boost::optional<size_t> prev = pathInfo.getPrevious(index); + boost::optional<Geom::D2<Geom::SBasis> > prevPwd2 = boost::none; + boost::optional<Geom::Satellite > prevSat = boost::none; + if(prev){ + prevPwd2 = pwd2[*prev]; + prevSat = _pparam->_vector.at(*prev); + } + amount = _pparam->_vector.at(index).rad_to_len(amount, prevPwd2, pwd2[index], prevSat); if(maxAmount > 0 && amount == 0){ - amount = _pparam->_vector.at(index).second.getAmount(); + amount = _pparam->_vector.at(index).amount; } } - satellite.setAmount(amount); - _pparam->_vector.at(index).second = satellite; + satellite.amount = amount; + _pparam->_vector.at(index) = satellite; this->parent_holder->knot_ungrabbed_handler(this->knot, 0); _pparam->param_set_and_write_new_value(_pparam->_vector); SPLPEItem * splpeitem = dynamic_cast<SPLPEItem *>(item); diff --git a/src/live_effects/parameter/satellitepairarray.h b/src/live_effects/parameter/satellitearray.h index fcd3bd736..ee0cfbad3 100644 --- a/src/live_effects/parameter/satellitepairarray.h +++ b/src/live_effects/parameter/satellitearray.h @@ -18,11 +18,11 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include <glib.h> #include "live_effects/parameter/array.h" #include "live_effects/effect-enum.h" +#include "helper/geom-pointwise.h" #include "knot-holder-entity.h" -#include <2geom/pointwise.h> +#include <glib.h> namespace Inkscape { @@ -30,14 +30,14 @@ namespace LivePathEffect { class FilletChamferKnotHolderEntity; -class SatellitePairArrayParam : public ArrayParam<std::pair<size_t, Geom::Satellite> > { +class SatelliteArrayParam : public ArrayParam<Geom::Satellite> { public: - SatellitePairArrayParam(const Glib::ustring &label, + SatelliteArrayParam(const Glib::ustring &label, const Glib::ustring &tip, const Glib::ustring &key, Inkscape::UI::Widget::Registry *wr, Effect *effect); - virtual ~SatellitePairArrayParam(); + virtual ~SatelliteArrayParam(); virtual Gtk::Widget * param_newWidget() { return NULL; @@ -66,8 +66,8 @@ public: protected: KnotHolder *knoth; private: - SatellitePairArrayParam(const SatellitePairArrayParam &); - SatellitePairArrayParam &operator=(const SatellitePairArrayParam &); + SatelliteArrayParam(const SatelliteArrayParam &); + SatelliteArrayParam &operator=(const SatelliteArrayParam &); SPKnotShapeType knot_shape; SPKnotModeType knot_mode; @@ -84,7 +84,7 @@ private: class FilletChamferKnotHolderEntity : public KnotHolderEntity { public: - FilletChamferKnotHolderEntity(SatellitePairArrayParam *p, size_t index); + FilletChamferKnotHolderEntity(SatelliteArrayParam *p, size_t index); virtual ~FilletChamferKnotHolderEntity() {_pparam->knoth = NULL;} virtual void knot_set(Geom::Point const &p, Geom::Point const &origin, guint state); @@ -97,7 +97,7 @@ public: }; private: - SatellitePairArrayParam *_pparam; + SatelliteArrayParam *_pparam; size_t _index; }; |
