예제 #1
0
 public IEnumerable <Linea> ObtenerLineas()
 {
     for (int i = LineaInicio; i < Cantidad; i++)
     {
         yield return(_lineas.Obtener(i));
     }
 }
예제 #2
0
        internal Posicion ObtenerPosicionPixels(ListaLineas _Lineas, Punto punto, Posicion posicion)
        {
            int      lim  = LineaInicio + Cantidad;
            Medicion suma = Medicion.Cero;
            Medicion posx = punto.X - Margen.Izquierdo;
            Medicion posy = punto.Y - Margen.Superior;

            if (posy < Medicion.Cero)
            {
                posy = Medicion.Cero;
            }
            Medicion anchoLineas = ObtenerAnchoLineas();

            for (int i = LineaInicio; i < lim; i++)
            {
                Linea l = _Lineas.Obtener(i);
                if (posy >= suma && posy <= suma + l.AltoLinea)
                {
                    int numcaracter = l.ObtenerNumCaracter(posx, anchoLineas);
                    Completar(_Lineas, posicion, i, numcaracter);
                    return(posicion);
                }
                suma = suma + l.AltoLinea;
            }
            if (posy > suma && Cantidad > 0)
            {
                Linea l  = _Lineas.Obtener(lim - 1);
                int   nc = l.ObtenerNumCaracter(posx, anchoLineas);
                Completar(_Lineas, posicion, lim - 1, nc);
                return(posicion);
                //return documento.CrearPosicion(numpagina, lim - 1, nc);
            }
            return(posicion);
        }
예제 #3
0
        public Posicion BuscarParrafo(Parrafo parrafoBuscado)
        {
            Pagina pag     = _Paginas[_Paginas.Count - 1];
            Linea  inicial = _Lineas.Obtener(pag.LineaInicio);

            if (inicial.Parrafo == parrafoBuscado || inicial.Parrafo.EsSiguiente(parrafoBuscado))
            {
                int indice        = _Paginas.Count - 1;
                int lineabusqueda = -1;

                //Hacer búsqueda lineal, puesto que aún no se ha calculado
                IEnumerable <Pagina> pags = ObtenerDesde(_Paginas.Count - 1);
                bool salirbucle           = false;
                foreach (Pagina p in pags)
                {
                    int lim = p.LineaInicio + p.Cantidad;
                    for (int q = p.LineaInicio; q < lim; q++)
                    {
                        Linea l = _Lineas.Obtener(q);
                        if (l.Parrafo == parrafoBuscado)
                        {
                            lineabusqueda = q;
                            salirbucle    = true;
                            break;
                        }
                        else if (l.Parrafo.EsSiguiente(parrafoBuscado))
                        {
                            //continuar
                        }
                        else
                        {
                            lineabusqueda = q;
                            salirbucle    = true;
                            break;
                        }
                    }
                    if (salirbucle)
                    {
                        break;
                    }
                    indice++;
                }
                if (lineabusqueda == -1)
                {
                    throw new Exception("Párrafo no encontrado");
                }
                int      linea = lineabusqueda;//BuscarLineaInicioParrafo(lineabusqueda, parrafoBuscado);
                Posicion pos   = new Posicion(_docimpreso);

                _docimpreso.Completar(pos, indice, linea, 0);
                Debug.Assert(pos.Linea != null);
                return(pos);
            }
            else
            {
                Posicion pos = BuscarParrafo(parrafoBuscado, 0, _Paginas.Count - 1);
                Debug.Assert(pos.Linea != null);
                return(pos);
            }
        }
예제 #4
0
 public void Completar(ListaLineas lineas, Posicion posicion, int lineaPagina, int numCaracter)
 {
     posicion.Linea             = lineas.Obtener(lineaPagina);
     posicion.IndiceLinea       = lineaPagina;
     posicion.IndiceLineaPagina = lineaPagina - posicion.Pagina.LineaInicio;
     posicion.Linea.Completar(lineas, posicion, ObtenerAnchoLineas(), numCaracter);
 }
예제 #5
0
        private Medicion ObtenerAltoLineas(ListaLineas _Lineas)
        {
            int      lim  = LineaInicio + _Cantidad;
            Medicion suma = Medicion.Cero;

            for (int i = LineaInicio; i < lim; i++)
            {
                suma += _Lineas.Obtener(i).AltoLinea;
            }
            return(suma);
        }
예제 #6
0
        public void Dibujar(IGraficador g, Punto esquinaSuperior, ListaLineas _Lineas, Seleccion seleccion, AvanceBloques avance)
        {
            CompletarLineas();
            Punto pt = esquinaSuperior;

            pt.X += Margen.Izquierdo;
            pt.Y += Margen.Superior;
            Medicion anchoPagina = ObtenerAnchoLineas();
            int      lim         = LineaInicio + Cantidad;

            for (int numlinea = LineaInicio; numlinea < lim; numlinea++)
            {
                Linea l = _Lineas.Obtener(numlinea);
                pt = l.Dibujar(g, pt, seleccion, avance, anchoPagina, true, true);
            }
        }
예제 #7
0
        public void CompletarPosicionPixels(ListaLineas lineas, Posicion posicionLinea, Medicion anchoLinea, bool incluirEspacioAnterior, bool incluirEspacioPosterior)
        {
            Medicion suma = new Medicion(0);

            for (int i = posicionLinea.Pagina.LineaInicio; i < posicionLinea.IndiceLinea; i++)
            {
                suma += lineas.Obtener(i).AltoLinea;
            }
            Medicion deltaAnterior  = (incluirEspacioAnterior && EsPrimeraLineaParrafo ? Parrafo.Formato.ObtenerEspacioAnterior() : Medicion.Cero);
            Medicion deltaSiguiente = (incluirEspacioPosterior && EsUltimaLineaParrafo ? Parrafo.Formato.ObtenerEspacioPosterior() : Medicion.Cero);

            posicionLinea.PosicionPagina = new Punto(
                ObtenerPosicionCaracter(posicionLinea.PosicionCaracter)
                + ObtenerDeltaAlineacion(anchoLinea)
                , suma + deltaAnterior);
            posicionLinea.AltoLinea = AltoLinea
                                      - deltaSiguiente
                                      - deltaAnterior;
        }
예제 #8
0
        public void DibujarPagina(IGraficador g, Punto esquinaSuperior, int numpagina, Seleccion seleccion)
        {
            AvanceBloques av = new AvanceBloques(_Lineas.Obtener(_Paginas.Obtener(numpagina).LineaInicio));

            _Paginas.Obtener(numpagina).Dibujar(g, esquinaSuperior, _Lineas, seleccion, av);
        }