// License: GPL. For details, see LICENSE file.
package pdfimport;
import java.awt.geom.Point2D;
public class OrthogonalShapesFilter {
private double tolerance;
public OrthogonalShapesFilter(double toleranceDegrees) {
tolerance = Math.toRadians(toleranceDegrees);
}
public boolean isOrthogonal(PdfPath path) {
if (path.points.size() < 3)
return false;
int targetPos = path.isClosed() ? path.points.size() : path.points.size() - 1;
for (int pos = 1; pos < targetPos; pos++) {
Point2D p1 = path.points.get(pos -1);
Point2D p2 = path.points.get(pos);
Point2D p3 = pos+1 == path.points.size() ? path.points.get(1) : path.points.get(pos+1);
double angle1 = Math.atan2(p2.getY() - p1.getY(), p2.getX() - p1.getX());
double angle2 = Math.atan2(p3.getY() - p2.getY(), p3.getX() - p2.getX());
double angleDifference = angle1 - angle2;
while (angleDifference < 0) angleDifference += Math.PI;
//test straight angles
boolean hasGoodVariant = false;
for (int quadrant = 0; quadrant <= 4; quadrant++) {
double difference = angleDifference - Math.PI / 2 * quadrant;
if (Math.abs(difference) <= tolerance)
hasGoodVariant = true;
}
if (!hasGoodVariant)
return false;
}
return true;
}
}