boolean Graphic31::contains_gs (PointObj& po, Graphic31* gs) { Coord ll, bb, rr, tt; PointObj pt (&po); getbounds_gs(ll, bb, rr, tt, gs); BoxObj b(ll, bb, rr, tt);; if (!_curved && !_fill) { if (b.Contains(po)) { MultiLineObj ml (_x, _y, _ctrlpts); invXform_gs(pt._x, pt._y, gs); if (_closed) { LineObj l (_x[_ctrlpts - 1], _y[_ctrlpts - 1], *_x, *_y); return ml.Contains(pt) || l.Contains(pt); } else { return ml.Contains(pt); } } return false; } else if (!_curved && _fill) { if (b.Contains(pt)) { FillPolygonObj fp (_x, _y, _ctrlpts); invXform_gs(pt._x, pt._y, gs); return fp.Contains(pt); } return false; } else if (_curved && !_fill) { if (b.Contains(pt)) { MultiLineObj ml; if (_closed) { ml.ClosedSplineToPolygon(_x, _y, _ctrlpts); } else { ml.SplineToMultiLine(_x, _y, _ctrlpts); } invXform_gs(pt._x, pt._y, gs); return ml.Contains(pt); } return false; } else { if (b.Contains(pt)) { FillPolygonObj fp; fp.ClosedSplineToPolygon(_x, _y, _ctrlpts); invXform_gs(pt._x, pt._y, gs); return fp.Contains(pt); } return false; } }
bool OpenBSpline::s_contains (PointObj& po, Graphic* gs) { PointObj pt (&po); BoxObj b; getBox(b, gs); if (b.Contains(pt)) { invTransform(pt._x, pt._y, gs); MultiLineObj ml; ml.SplineToMultiLine(_x, _y, _count); return ml.Contains(pt); } return false; }