boolean MultiLineObj::operator == (MultiLineObj& ml) { if (count() == ml.count()) { for (int i = 0; i < count(); ++i) { if (x()[i] != ml.x()[i] || y()[i] != ml.y()[i]) { return false; } } return true; } 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; }
boolean FillPolygonObj::Intersects (LineObj& l) { BoxObj b; boolean intersects = false; if (_normCount == 0) { Normalize(); } GetBox(b); if (b.Intersects(l)) { MultiLineObj ml (_normx, _normy, _normCount - 1); intersects = ml.Intersects(l) || Contains(l._p1) || Contains(l._p2); } return intersects; }
boolean MultiLine::s_intersects (BoxObj& userb, Graphic* gs) { Coord* convx, *convy; BoxObj b; boolean 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 (convx, convy, count()); result = ml.Intersects(userb); delete convx; delete convy; } return result; }
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::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; } }
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; } }