コード例 #1
0
 public int BaseStepV(ref DistanceInterpolator3 di)
 {
     m_li.Next();
     m_y += m_lp.inc;
     m_x  = (m_lp.x1 + m_li.Y) >> LineAA.SUBPIXEL_SHIFT;
     if (m_lp.inc > 0)
     {
         di.IncY(m_x - m_old_x);
     }
     else
     {
         di.DecY(m_x - m_old_x);
     }
     m_old_x = m_x;
     return(di.Distance / m_len);
 }
コード例 #2
0
 public int BaseStepH(ref DistanceInterpolator3 di)
 {
     m_li.Next();
     m_x += m_lp.inc;
     m_y  = (m_lp.y1 + m_li.Y) >> LineAA.SUBPIXEL_SHIFT;
     if (m_lp.inc > 0)
     {
         di.IncX(m_y - m_old_y);
     }
     else
     {
         di.DecX(m_y - m_old_y);
     }
     m_old_y = m_y;
     return(di.Distance / m_len);
 }
コード例 #3
0
        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;
        }