support avoid-edges in all markers placements

This commit is contained in:
artemp 2014-09-05 16:33:20 +01:00
parent 2727eddf90
commit fef3d22154
4 changed files with 18 additions and 6 deletions

View file

@ -69,7 +69,10 @@ public:
angle = 0; angle = 0;
box2d<double> box = this->perform_transform(angle, x, y); box2d<double> box = this->perform_transform(angle, x, y);
if (this->params_.avoid_edges && !this->detector_.extent().contains(box))
{
return false;
}
if (!this->params_.allow_overlap && !this->detector_.has_placement(box)) if (!this->params_.allow_overlap && !this->detector_.has_placement(box))
{ {
return false; return false;

View file

@ -172,6 +172,11 @@ public:
x = last_x + dx * (spacing_left_ / segment_length); x = last_x + dx * (spacing_left_ / segment_length);
y = last_y + dy * (spacing_left_ / segment_length); y = last_y + dy * (spacing_left_ / segment_length);
box2d<double> box = this->perform_transform(angle, x, y); box2d<double> box = this->perform_transform(angle, x, y);
if (this->params_.avoid_edges && !this->detector_.extent().contains(box))
{
set_spacing_left(spacing_left_ + spacing_ * this->params_.max_error / 10.0);
continue;
}
if (!this->params_.allow_overlap && !this->detector_.has_placement(box)) if (!this->params_.allow_overlap && !this->detector_.has_placement(box))
{ {
//10.0 is the approxmiate number of positions tried and choosen arbitrarily //10.0 is the approxmiate number of positions tried and choosen arbitrarily

View file

@ -68,7 +68,10 @@ public:
} }
box2d<double> box = this->perform_transform(angle, x, y); box2d<double> box = this->perform_transform(angle, x, y);
if (this->params_.avoid_edges && !this->detector_.extent().contains(box))
{
return false;
}
if (!this->params_.allow_overlap && !this->detector_.has_placement(box)) if (!this->params_.allow_overlap && !this->detector_.has_placement(box))
{ {
return false; return false;

View file

@ -32,9 +32,7 @@ class markers_vertex_last_placement : public markers_point_placement<Locator, De
{ {
public: public:
markers_vertex_last_placement(Locator &locator, Detector &detector, markers_placement_params const& params) markers_vertex_last_placement(Locator &locator, Detector &detector, markers_placement_params const& params)
: markers_point_placement<Locator, Detector>(locator, detector, params) : markers_point_placement<Locator, Detector>(locator, detector, params) {}
{
}
bool get_point(double &x, double &y, double &angle, bool ignore_placement) bool get_point(double &x, double &y, double &angle, bool ignore_placement)
{ {
@ -74,7 +72,10 @@ public:
} }
box2d<double> box = this->perform_transform(angle, x, y); box2d<double> box = this->perform_transform(angle, x, y);
if (this->params_.avoid_edges && !this->detector_.extent().contains(box))
{
return false;
}
if (!this->params_.allow_overlap && !this->detector_.has_placement(box)) if (!this->params_.allow_overlap && !this->detector_.has_placement(box))
{ {
return false; return false;