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::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; } }