コード例 #1
0
ファイル: Curve.java プロジェクト: jianc65/logisim
    @Override
    public boolean contains(Location loc, boolean assumeFilled) {
        Object type = getPaintType();
        if (assumeFilled && type == DrawAttr.PAINT_STROKE) {
            type = DrawAttr.PAINT_STROKE_FILL;
        }
        if (type != DrawAttr.PAINT_FILL) {
            int stroke = getStrokeWidth();
            double[] q = toArray(loc);
            double[] p0 = toArray(this.p0);
            double[] p1 = toArray(this.p1);
            double[] p2 = toArray(this.p2);
            double[] p = CurveUtil.findNearestPoint(q, p0, p1, p2);
            if (p == null) {
                return false;
            }


            int thr;
            if (type == DrawAttr.PAINT_STROKE) {
                thr = Math.max(Line.ON_LINE_THRESH, stroke / 2);
            } else {
                thr = stroke / 2;
            }
            if (LineUtil.distanceSquared(p[0], p[1], q[0], q[1]) < thr * thr) {
                return true;
            }
        }
        if (type != DrawAttr.PAINT_STROKE) {
            QuadCurve2D curve = getCurve(null);
            if (curve.contains(loc.getX(), loc.getY())) {
                return true;
            }
        }
        return false;
    }