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; }
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_intersects (BoxObj& userb, Graphic* gs) { Coord* convx, *convy; BoxObj b; bool result = false; getBox(b, gs); if (b.Intersects(userb)) { convx = new Coord[_count]; convy = new Coord[_count]; transformList(_x, _y, _count, convx, convy, gs); MultiLineObj ml; ml.SplineToMultiLine(convx, convy, _count); result = ml.Intersects(userb); delete convx; delete convy; } return result; }
boolean Graphic31::intersects_gs (BoxObj& userb, Graphic31* gs) { Coord* convx, *convy; Coord ll, bb, rr, tt; getbounds_gs(ll, bb, rr, tt, gs); BoxObj b(ll, bb, rr, tt);; boolean result = false; if (!_curved && !_fill) { if (b.Intersects(userb)) { convx = new Coord[_ctrlpts+1]; convy = new Coord[_ctrlpts+1]; Xform_gs(_x, _y, _ctrlpts, convx, convy, gs); if (_closed) { convx[_ctrlpts] = *convx; convy[_ctrlpts] = *convy; MultiLineObj ml(convx, convy, _ctrlpts+1); result = ml.Intersects(userb); } else { MultiLineObj ml(convx, convy, _ctrlpts); result = ml.Intersects(userb); } delete convx; delete convy; } return result; } else if (!_curved && _fill) { if (b.Intersects(userb)) { convx = new Coord[_ctrlpts]; convy = new Coord[_ctrlpts]; Xform_gs(_x, _y, _ctrlpts, convx, convy, gs); FillPolygonObj fp (convx, convy, _ctrlpts); result = fp.Intersects(userb); delete convx; delete convy; } return result; } else if (_curved && !_fill) { if (b.Intersects(userb)) { convx = new Coord[_ctrlpts]; convy = new Coord[_ctrlpts]; Xform_gs(_x, _y, _ctrlpts, convx, convy, gs); MultiLineObj ml; if (_closed) { ml.ClosedSplineToPolygon(convx, convy, _ctrlpts); } else { ml.SplineToMultiLine(convx, convy, _ctrlpts); } result = ml.Intersects(userb); delete convx; delete convy; } return result; } else { if (b.Intersects(userb)) { convx = new Coord[_ctrlpts]; convy = new Coord[_ctrlpts]; Xform_gs(_x, _y, _ctrlpts, convx, convy, gs); FillPolygonObj fp; fp.ClosedSplineToPolygon(convx, convy, _ctrlpts); result = fp.Intersects(userb); delete convx; delete convy; } return result; } }