public IEnumerable <Linea> ObtenerLineas() { for (int i = LineaInicio; i < Cantidad; i++) { yield return(_lineas.Obtener(i)); } }
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); }
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); } }
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); }
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); }
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); } }
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; }
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); }