//--------------------------------------------------------------------- public LineInterpolatorAA0(OutlineRenderer ren, LineParameters lp) : base(ren, lp) { m_di = new DistanceInterpolator1(lp.x1, lp.y1, lp.x2, lp.y2, lp.x1 & ~LineAA.SUBPIXEL_MARK, lp.y1 & ~LineAA.SUBPIXEL_MARK); m_li.adjust_forward(); }
public LineInterpolatorAABase(OutlineRenderer ren, LineParameters lp) { m_lp = lp; m_li = new LineInterpolatorDDA2(lp.vertical ? LineAA.DblHr(lp.x2 - lp.x1) : LineAA.DblHr(lp.y2 - lp.y1), lp.vertical ? Math.Abs(lp.y2 - lp.y1) : Math.Abs(lp.x2 - lp.x1) + 1); m_ren = ren; m_len = ((lp.vertical == (lp.inc > 0)) ? -lp.len : lp.len); m_x = (lp.x1 >> LineAA.SUBPIXEL_SHIFT); m_y = (lp.y1 >> LineAA.SUBPIXEL_SHIFT); m_old_x = (m_x); m_old_y = (m_y); m_count = ((lp.vertical ? Math.Abs((lp.y2 >> LineAA.SUBPIXEL_SHIFT) - m_y) : Math.Abs((lp.x2 >> LineAA.SUBPIXEL_SHIFT) - m_x))); m_width = (ren.SubPixelWidth); //m_max_extent(m_width >> (line_subpixel_shift - 2)); m_max_extent = ((m_width + LineAA.SUBPIXEL_MARK) >> LineAA.SUBPIXEL_SHIFT); m_step = 0; LineInterpolatorDDA2 li = new LineInterpolatorDDA2(0, lp.vertical ? (lp.dy << LineAA.SUBPIXEL_SHIFT) : (lp.dx << LineAA.SUBPIXEL_SHIFT), lp.len); int i; int stop = m_width + LineAA.SUBPIXEL_SCALE * 2; for (i = 0; i < MAX_HALF_WIDTH; ++i) { m_dist[i] = li.Y; if (m_dist[i] >= stop) { break; } li.Next(); } m_dist[i++] = 0x7FFF0000; }
public LineInterpolatorAABase(OutlineRenderer ren, LineParameters lp) { m_lp = lp; m_li = new LineInterpolatorDDA2(lp.vertical ? LineAA.DblHr(lp.x2 - lp.x1) : LineAA.DblHr(lp.y2 - lp.y1), lp.vertical ? Math.Abs(lp.y2 - lp.y1) : Math.Abs(lp.x2 - lp.x1) + 1); m_ren = ren; m_len = ((lp.vertical == (lp.inc > 0)) ? -lp.len : lp.len); m_x = (lp.x1 >> LineAA.SUBPIXEL_SHIFT); m_y = (lp.y1 >> LineAA.SUBPIXEL_SHIFT); m_old_x = (m_x); m_old_y = (m_y); m_count = ((lp.vertical ? Math.Abs((lp.y2 >> LineAA.SUBPIXEL_SHIFT) - m_y) : Math.Abs((lp.x2 >> LineAA.SUBPIXEL_SHIFT) - m_x))); m_width = (ren.SubPixelWidth); //m_max_extent(m_width >> (line_subpixel_shift - 2)); m_max_extent = ((m_width + LineAA.SUBPIXEL_MARK) >> LineAA.SUBPIXEL_SHIFT); m_step = 0; LineInterpolatorDDA2 li = new LineInterpolatorDDA2(0, lp.vertical ? (lp.dy << LineAA.SUBPIXEL_SHIFT) : (lp.dx << LineAA.SUBPIXEL_SHIFT), lp.len); int i; int stop = m_width + LineAA.SUBPIXEL_SCALE * 2; for (i = 0; i < MAX_HALF_WIDTH; ++i) { m_dist[i] = li.Y; if (m_dist[i] >= stop) break; li.Next(); } m_dist[i++] = 0x7FFF0000; }
//--------------------------------------------------------------------- public LineInterpolatorAA0(OutlineRenderer ren, LineParameters lp) { this._ren = ren; _aa_data = new LineInterpolatorAAData(ren, lp); _m_di = new DistanceInterpolator1(lp.x1, lp.y1, lp.x2, lp.y2, lp.x1 & ~LineAA.SUBPIXEL_MARK, lp.y1 & ~LineAA.SUBPIXEL_MARK); _aa_data.m_li.adjust_forward(); }
//--------------------------------------------------------------------- public LineInterpolatorAA2(OutlineRenderer ren, LineParameters lp, int ex, int ey) : base(ren, lp) { m_di = new DistanceInterpolator2(lp.x1, lp.y1, lp.x2, lp.y2, ex, ey, lp.x1 & ~LineAA.SUBPIXEL_MARK, lp.y1 & ~LineAA.SUBPIXEL_MARK, 0); base.m_li.adjust_forward(); base.m_step -= base.m_max_extent; }
public LineInterpolatorAA2( OutlineRenderer ren, LineParameters lp, int ex, int ey) { this._ren = ren; _aa_data = new Lines.LineInterpolatorAAData(ren, lp); _m_di = new DistanceInterpolator2(lp.x1, lp.y1, lp.x2, lp.y2, ex, ey, lp.x1 & ~LineAA.SUBPIXEL_MARK, lp.y1 & ~LineAA.SUBPIXEL_MARK, 0); _aa_data.m_li.adjust_forward(); _aa_data.m_step -= _aa_data.m_max_extent; }
//--------------------------------------------------------------------- public LineInterpolatorAA3(OutlineRenderer ren, LineParameters lp, int sx, int sy, int ex, int ey) : base(ren, lp) { m_di = new DistanceInterpolator3(lp.x1, lp.y1, lp.x2, lp.y2, sx, sy, ex, ey, lp.x1 & ~LineAA.SUBPIXEL_MARK, lp.y1 & ~LineAA.SUBPIXEL_MARK); int dist1_start; int dist2_start; int npix = 1; if (lp.vertical) { do { base.m_li.Prev(); base.m_y -= lp.inc; base.m_x = (base.m_lp.x1 + base.m_li.Y) >> LineAA.SUBPIXEL_SHIFT; if (lp.inc > 0) { m_di.DecY(base.m_x - base.m_old_x); } else { m_di.IncY(base.m_x - base.m_old_x); } base.m_old_x = base.m_x; dist1_start = dist2_start = m_di.dist_start; int dx = 0; if (dist1_start < 0) { ++npix; } do { dist1_start += m_di.DyStart; dist2_start -= m_di.DyStart; if (dist1_start < 0) { ++npix; } if (dist2_start < 0) { ++npix; } ++dx; }while (base.m_dist[dx] <= base.m_width); if (npix == 0) { break; } npix = 0; }while (--base.m_step >= -base.m_max_extent); } else { do { base.m_li.Prev(); base.m_x -= lp.inc; base.m_y = (base.m_lp.y1 + base.m_li.Y) >> LineAA.SUBPIXEL_SHIFT; if (lp.inc > 0) { m_di.DecX(base.m_y - base.m_old_y); } else { m_di.IncX(base.m_y - base.m_old_y); } base.m_old_y = base.m_y; dist1_start = dist2_start = m_di.dist_start; int dy = 0; if (dist1_start < 0) { ++npix; } do { dist1_start -= m_di.DxStart; dist2_start += m_di.DxStart; if (dist1_start < 0) { ++npix; } if (dist2_start < 0) { ++npix; } ++dy; }while (base.m_dist[dy] <= base.m_width); if (npix == 0) { break; } npix = 0; }while (--base.m_step >= -base.m_max_extent); } base.m_li.adjust_forward(); base.m_step -= base.m_max_extent; }
public LineInterpolatorAA3(OutlineRenderer ren, LineParameters lp, int sx, int sy, int ex, int ey) { this._ren = ren; _aa_data = new Lines.LineInterpolatorAAData(ren, lp); _m_di = new DistanceInterpolator3(lp.x1, lp.y1, lp.x2, lp.y2, sx, sy, ex, ey, lp.x1 & ~LineAA.SUBPIXEL_MARK, lp.y1 & ~LineAA.SUBPIXEL_MARK); int dist1_start; int dist2_start; int npix = 1; if (lp.vertical) { do { _aa_data.m_li.Prev(); _aa_data.m_y -= lp.inc; _aa_data.m_x = (_aa_data.m_lp.x1 + _aa_data.m_li.Y) >> LineAA.SUBPIXEL_SHIFT; if (lp.inc > 0) { _m_di.DecY(_aa_data.m_x - _aa_data.m_old_x); } else { _m_di.IncY(_aa_data.m_x - _aa_data.m_old_x); } _aa_data.m_old_x = _aa_data.m_x; dist1_start = dist2_start = _m_di.dist_start; int dx = 0; if (dist1_start < 0) { ++npix; } do { dist1_start += _m_di.DyStart; dist2_start -= _m_di.DyStart; if (dist1_start < 0) { ++npix; } if (dist2_start < 0) { ++npix; } ++dx; }while (_aa_data.m_dist[dx] <= _aa_data.m_width); if (npix == 0) { break; } npix = 0; }while (--_aa_data.m_step >= -_aa_data.m_max_extent); } else { do { _aa_data.m_li.Prev(); _aa_data.m_x -= lp.inc; _aa_data.m_y = (_aa_data.m_lp.y1 + _aa_data.m_li.Y) >> LineAA.SUBPIXEL_SHIFT; if (lp.inc > 0) { _m_di.DecX(_aa_data.m_y - _aa_data.m_old_y); } else { _m_di.IncX(_aa_data.m_y - _aa_data.m_old_y); } _aa_data.m_old_y = _aa_data.m_y; dist1_start = dist2_start = _m_di.dist_start; int dy = 0; if (dist1_start < 0) { ++npix; } do { dist1_start -= _m_di.DxStart; dist2_start += _m_di.DxStart; if (dist1_start < 0) { ++npix; } if (dist2_start < 0) { ++npix; } ++dy; }while (_aa_data.m_dist[dy] <= _aa_data.m_width); if (npix == 0) { break; } npix = 0; }while (--_aa_data.m_step >= -_aa_data.m_max_extent); } _aa_data.m_li.adjust_forward(); _aa_data.m_step -= _aa_data.m_max_extent; }
//--------------------------------------------------------------------- public LineInterpolatorAA3(OutlineRenderer ren, LineParameters lp, int sx, int sy, int ex, int ey) : base(ren, lp) { m_di = new DistanceInterpolator3(lp.x1, lp.y1, lp.x2, lp.y2, sx, sy, ex, ey, lp.x1 & ~LineAA.SUBPIXEL_MARK, lp.y1 & ~LineAA.SUBPIXEL_MARK); int dist1_start; int dist2_start; int npix = 1; if (lp.vertical) { do { base.m_li.Prev(); base.m_y -= lp.inc; base.m_x = (base.m_lp.x1 + base.m_li.Y) >> LineAA.SUBPIXEL_SHIFT; if (lp.inc > 0) m_di.DecY(base.m_x - base.m_old_x); else m_di.IncY(base.m_x - base.m_old_x); base.m_old_x = base.m_x; dist1_start = dist2_start = m_di.dist_start; int dx = 0; if (dist1_start < 0) ++npix; do { dist1_start += m_di.DyStart; dist2_start -= m_di.DyStart; if (dist1_start < 0) ++npix; if (dist2_start < 0) ++npix; ++dx; } while (base.m_dist[dx] <= base.m_width); if (npix == 0) break; npix = 0; } while (--base.m_step >= -base.m_max_extent); } else { do { base.m_li.Prev(); base.m_x -= lp.inc; base.m_y = (base.m_lp.y1 + base.m_li.Y) >> LineAA.SUBPIXEL_SHIFT; if (lp.inc > 0) m_di.DecX(base.m_y - base.m_old_y); else m_di.IncX(base.m_y - base.m_old_y); base.m_old_y = base.m_y; dist1_start = dist2_start = m_di.dist_start; int dy = 0; if (dist1_start < 0) ++npix; do { dist1_start -= m_di.DxStart; dist2_start += m_di.DxStart; if (dist1_start < 0) ++npix; if (dist2_start < 0) ++npix; ++dy; } while (base.m_dist[dy] <= base.m_width); if (npix == 0) break; npix = 0; } while (--base.m_step >= -base.m_max_extent); } base.m_li.adjust_forward(); base.m_step -= base.m_max_extent; }