bool first = true, last = false;
extreme = false;
- // printf(" loop\n");
for(;next!=end;iter=next++)
{
- // printf(" top\n");
// Setup the curve
etl::hermite<Vector> curve(iter->get_vertex(), next->get_vertex(), iter->get_tangent2(), next->get_tangent1());
float thisdist(0);
dist=thisdist;
best_pos = pos;
best_curve = curve;
- // printf("set best_curve\n");
best_len = total_len;
last = true;
- // printf(" *last\n");
}
}
total_len += curve.length();
first = false;
}
- // printf(" after\n");
t = best_pos;
if (fast)
{
len = best_len + best_curve.find_distance(0,best_curve.find_closest(fast, p));
- // printf("fast set len = %f + %f = %f\n", best_len, best_curve.find_distance(0,best_curve.find_closest(fast, p)), len);
if (last && t > .99) extreme = true;
}
else
{
len = best_len + best_curve.find_distance(0,best_pos);
- // printf("slow set len = %f + %f = %f\n", best_len, best_curve.find_distance(0,best_pos), len);
- // printf("find_distance from 0 to %f is %f\n", best_pos, best_curve.find_distance(0,best_pos));
- // if (last) printf("last\n");
-
- if (last && t > .999)
- {
- extreme = true;
- // printf("extreme end\n");
- }
+ if (last && t == 1) extreme = true;
}
return ret;
}
{
curve_length_=calculate_distance(bline);
perp_ = (end_point - start_point).perp().norm();
- // printf("curve_length_ = %f\n", curve_length_);
}
CurveWarp::CurveWarp():
origin(0,0),
- width(1),
- start_point(-3,-1),
- end_point(3,1),
+ perp_width(1),
+ start_point(-2.5,-0.5),
+ end_point(2.5,-0.3),
fast(true)
{
bline.push_back(BLinePoint());
bline.push_back(BLinePoint());
bline[0].set_vertex(Point(-2.5,0));
- bline[1].set_vertex(Point(2.5,0));
- bline[0].set_tangent(Point(1, 1));
- bline[1].set_tangent(Point(1, -1));
+ bline[1].set_vertex(Point( 2.5,0));
+ bline[0].set_tangent(Point(1, 0.1));
+ bline[1].set_tangent(Point(1, -0.1));
bline[0].set_width(1.0f);
bline[1].set_width(1.0f);
synfig::BLinePoint start(bline[0]);
// Point a(start.get_vertex());
tangent = start.get_tangent1().norm();
- diff = tangent.perp()*thickness*width;
+ diff = tangent.perp()*thickness*perp_width;
len = (point_-origin - p1)*tangent;
}
else
iter=bline.end();
iter--;
tangent = iter->get_tangent2().norm();
- diff = tangent.perp()*thickness*width;
+ diff = tangent.perp()*thickness*perp_width;
len = (point_-origin - p1)*tangent + curve_length_;
}
}
{
diff=(p1-(point_-origin));
if(diff*tangent.perp()<0) diff=-diff;
- diff=diff.norm()*thickness*width;
+ diff=diff.norm()*thickness*perp_width;
}
else
- diff=tangent.perp()*thickness*width;
+ diff=tangent.perp()*thickness*perp_width;
const Real mag(diff.inv_mag());
supersample=supersample*mag;
len /= curve_length_;
- // printf("len %6.2f dist %6.2f\n", len, dist);
- return ((start_point + (end_point - start_point) * len) +
- perp_ * dist);
+ return (start_point + (end_point - start_point) * len) + perp_ * dist;
}
float
IMPORT(start_point);
IMPORT(end_point);
IMPORT(fast);
- IMPORT(width);
+ IMPORT(perp_width);
if(param=="bline" && value.get_type()==ValueBase::TYPE_LIST)
{
EXPORT(end_point);
EXPORT(bline);
EXPORT(fast);
- EXPORT(width);
+ EXPORT(perp_width);
EXPORT_NAME();
EXPORT_VERSION();
ret.push_back(ParamDesc("origin")
.set_local_name(_("Origin")));
- ret.push_back(ParamDesc("width")
- .set_local_name(_("Width")));
+ ret.push_back(ParamDesc("perp_width")
+ .set_local_name(_("Width"))
+ .set_origin("start_point"));
ret.push_back(ParamDesc("start_point")
- .set_local_name(_("Start Point")));
+ .set_local_name(_("Start Point"))
+ .set_connect("end_point"));
ret.push_back(ParamDesc("end_point")
.set_local_name(_("End Point")));