public void DibujarRectangulo(Lapiz lapiz, Punto inicio, TamBloque bloque) { Pen l = _lapices.Obtener(lapiz); PointF pt = Traducir(inicio); SizeF tam = Traducir(bloque); g.DrawRectangle(l, pt.X, pt.Y, tam.Width, tam.Height); }
public void RellenarRectangulo(Brocha brocha, Punto inicio, TamBloque bloque) { Brush b = _brochas.Obtener(brocha); PointF pt = Traducir(inicio); SizeF tam = Traducir(bloque); g.FillRectangle(b, pt.X, pt.Y, tam.Width, tam.Height); }
public Punto Dibujar(IGraficador g, Punto posicionInicial, Seleccion seleccion, AvanceBloques avance, Medicion anchoLinea, bool incluirEspacioAnterior, bool incluirEspacioPosterior) { List <Bloque> lista = new List <Bloque>(avance.ObtenerBloquesDe(this)); bool esultimalinea = EsUltimaLineaParrafo; Medicion espacioanterior = EsPrimeraLineaParrafo?(incluirEspacioAnterior ? (Parrafo.Formato.ObtenerEspacioAnterior()) : Medicion.Cero):Medicion.Cero; Medicion espacioposterior = EsUltimaLineaParrafo?(incluirEspacioPosterior?(Parrafo.Formato.ObtenerEspacioPosterior()):Medicion.Cero):Medicion.Cero; Medicion altolinea = AltoLinea - espacioposterior; Medicion deltacalc = ObtenerDeltaAlineacion(anchoLinea); AlineacionParrafo alineacion = Parrafo.Formato.ObtenerAlineacionHorizontal(); Punto posicion = new Punto(posicionInicial.X, posicionInicial.Y); for (int i = 0; i < 2; i++) { Medicion deltax; if (alineacion == AlineacionParrafo.Centro || alineacion == AlineacionParrafo.Derecha) { deltax = posicion.X + deltacalc; } else { deltax = posicion.X; } Punto pt = posicion; int posbase = Inicio; Medicion altobase = AltoBase; Bloque ultb = new Bloque(0, Parrafo.Formato.ObtenerFormatoTexto()); foreach (Bloque b in lista) { ultb = b; if (b.Cantidad == 0) { continue; } Estilo e = new Estilo(b); Medicion baset = e.MedirAlto(); string total = Parrafo.ObtenerSubCadena(posbase, b.Cantidad); TamBloque tb = e.Medir(total); Punto posdibujo = new Punto(deltax, posicion.Y + (altolinea - baset) - altobase); Dibujar(g, posdibujo, seleccion, e, posbase, b.Cantidad, total, i); posbase += b.Cantidad; deltax += tb.Ancho; } if (seleccion != null && EsUltimaLineaParrafo && seleccion.Contiene(Parrafo, Inicio + Cantidad)) { Estilo e = new Estilo(ultb); Medicion baset = e.MedirAlto(); Estilo sel = e.Clonar(); sel.ColorFondo = new BrochaSolida(new ColorDocumento(0, 0, 0)); sel.ColorLetra = new BrochaSolida(new ColorDocumento(255, 255, 255)); Punto posdibujo = new Punto(deltax, posicion.Y + (altolinea - baset) - altobase); DibujarConTam(sel, g, posdibujo, " ", "", i); } } return(new Punto(posicion.X, posicion.Y + AltoLinea)); }
public void AsegurarVisibilidad(Posicion posicion) { TamBloque pos = posicion.ObtenerMargenEdicion(); if (LineaAnterior != posicion.IndiceLinea) { AsegurarVisibilidadPuntoPagina(posicion.IndicePagina, posicion.PosicionPagina); } AsegurarVisibilidadMargen(posicion); }
public void AsegurarVisibilidadMargen(Posicion posicion) { AsegurarGraficador(); TamBloque margen = posicion.ObtenerMargenEdicion(); Punto pt = posicion.PosicionPagina; Punto arribaizq = pt.Agregar(Medicion.Cero - margen.Ancho, Medicion.Cero - margen.Alto); Punto abajoder = pt.Agregar(margen.Ancho, margen.Alto + posicion.AltoLinea); AsegurarVisibilidadPuntoPagina(posicion.IndicePagina, abajoder); AsegurarVisibilidadPuntoPagina(posicion.IndicePagina, arribaizq); }
public Punto DibujarFondo(IGraficador graficos, Punto posicionbase, string texto, string anteriortexto) { if (!string.IsNullOrEmpty(anteriortexto)) { posicionbase.X += GraficadorConsultas.MedirUnion(Letra, anteriortexto, texto); } TamBloque b = Medir(texto); graficos.RellenarRectangulo(ColorFondo, posicionbase, b); return(new Punto(posicionbase.X + b.Ancho, posicionbase.Y)); }
public Pagina(int lineaInicio, ListaPaginas paginas, ListaLineas lineas) { _lineas = lineas; _paginas = paginas; LineaInicio = lineaInicio; Dimensiones = new TamBloque(new Medicion(210, Unidad.Milimetros), new Medicion(270, Unidad.Milimetros)); Margen = new Margen() { Derecho = new Medicion(10, Unidad.Milimetros), Izquierdo = new Medicion(10, Unidad.Milimetros), Superior = new Medicion(10, Unidad.Milimetros), Inferior = new Medicion(10, Unidad.Milimetros) }; AltoActual = Medicion.Cero; }
public Medicion MedirUnion(Letra letra, string a, string b) { if (a.Length > 0 && b.Length > 0) { TamBloque t1 = MedirTexto(letra, a[a.Length - 1].ToString() + b[0]); TamBloque t2 = MedirTexto(letra, a[a.Length - 1].ToString()); TamBloque t3 = MedirTexto(letra, b[0].ToString()); //return t1.Ancho-(t2.Ancho + t3.Ancho); return(t1.Ancho - (t2.Ancho + t3.Ancho)); } return(Medicion.Cero); }
void docimpr_QueryPageSettings(object sender, QueryPageSettingsEventArgs e) { if (!numpagina.HasValue) { numpagina = 0; } //int lim = escritorio.Controlador.Documento.ObtenerNumPaginas(); TamBloque tam = _impgenerica.GetNextPageSize(); e.PageSettings.PaperSize = new PaperSize("Personalizado", (int)tam.Ancho.ConvertirA(CentesimaPulgada).Valor, (int)tam.Alto.ConvertirA(CentesimaPulgada).Valor); }
public int ObtenerNumCaracter(Medicion posicionx, Medicion anchoLinea) { if (Cantidad == 0) { return(0); } posicionx -= ObtenerDeltaAlineacion(anchoLinea); if (posicionx < new Medicion(0)) { posicionx = new Medicion(0); return(0); } string linea = Parrafo.ToString().Substring(Inicio, Cantidad); Medicion maxbase; TamBloque tam = MedirDeParrafo(Inicio, Cantidad, out maxbase); Medicion anchocaracterespromedio = tam.Ancho / linea.Length; if (posicionx > tam.Ancho) { return(Cantidad); } else { int posicionestimada = (int)(posicionx / anchocaracterespromedio);//((posicionx / anchocaracterespromedio) * tam.Width); Medicion pos = ObtenerPosicionCaracter(posicionestimada, out maxbase); while (posicionestimada > 0 && pos - posicionx > Medicion.Cero) { posicionestimada--; pos = ObtenerPosicionCaracter(posicionestimada); } while (posicionestimada < Cantidad - 1 && pos - posicionx < Medicion.Cero) { posicionestimada++; pos = ObtenerPosicionCaracter(posicionestimada, out maxbase); } if (posicionestimada > 0 && pos - posicionx > Medicion.Cero) { posicionestimada--; pos = ObtenerPosicionCaracter(posicionestimada, out maxbase); } Normalizar(ref posicionestimada); return(posicionestimada); } }
public TamBloque MedirDeParrafo(int inicio, int cantidad, out Medicion maximaBase) { Debug.Assert(inicio >= 0 && inicio + cantidad <= Parrafo.Longitud && cantidad >= 0); AvanceBloques av = new AvanceBloques(this); int inicioact = inicio; TamBloque bq = new TamBloque(Medicion.Cero, Medicion.Cero); Medicion maxbase = Medicion.Cero; IEnumerable <Bloque> bloques = av.ObtenerBloquesDe(this); bool primerbloqueOK = false; //Medir al menos uno de los bloques foreach (Bloque b in bloques) { if (!primerbloqueOK) { primerbloqueOK = true; } else { if (b.Cantidad == 0) { continue; } } Estilo e = new Estilo(b); Medicion medicionbase = e.MedirBase(); if (medicionbase > maxbase) { maxbase = medicionbase; } int cantidadbloque = Math.Min(b.Cantidad, cantidad); TamBloque tm = e.Medir(Parrafo.ObtenerSubCadena(inicioact, cantidadbloque)); if (tm.Alto > bq.Alto) { bq.Alto = tm.Alto; } bq.Ancho = bq.Ancho + tm.Ancho; cantidad -= cantidadbloque; inicioact += cantidadbloque; } maximaBase = maxbase; return(bq); }
private Medicion ObtenerDeltaAlineacion(Medicion anchoLinea) { AlineacionParrafo alineacion = Parrafo.Formato.ObtenerAlineacionHorizontal(); Medicion deltacalc = Medicion.Cero; if (alineacion == AlineacionParrafo.Derecha || alineacion == AlineacionParrafo.Centro) { Medicion altobase; TamBloque tam = MedirDeParrafo(Inicio, Cantidad, out altobase); Medicion anchotexto = tam.Ancho; if (alineacion == AlineacionParrafo.Derecha) { deltacalc = anchoLinea - anchotexto; } else { deltacalc = (anchoLinea - anchotexto) * 0.5; } } return(deltacalc); }
public bool EnRango(Punto esquinaSuperior, TamBloque tamaño, Punto puntoTest) { return(puntoTest.X >= esquinaSuperior.X && (puntoTest.X < esquinaSuperior.X + tamaño.Ancho) && puntoTest.Y >= esquinaSuperior.Y && (puntoTest.Y < esquinaSuperior.Y + tamaño.Alto)); }
public void NotifySizeChanged(TamBloque nuevoTamaño) { escritorio.Dimensiones = nuevoTamaño; }
internal static Linea ObtenerSiguienteLinea(Parrafo parrafo, int caracterinicio, Medicion ancho, bool incluirAltoParrafo, bool incluirBaseParrafo) { int tamparrafo = parrafo.Longitud; //Estilo e = new Estilo(); if (tamparrafo == 0) { Estilo estparrafo = new Estilo(new Bloque(0, parrafo.Formato.ObtenerFormatoTexto())); Medicion alto = estparrafo.Medir(string.Empty).Alto;//e.Medir(string.Empty).Alto; if (parrafo.Formato.ObtenerEspaciadoInterlineal() != 1) { alto = alto * (float)parrafo.Formato.ObtenerEspaciadoInterlineal(); } if (incluirAltoParrafo) { alto += parrafo.Formato.ObtenerEspacioAnterior(); } if (incluirBaseParrafo) { alto += parrafo.Formato.ObtenerEspacioPosterior(); } ; return(new Linea(parrafo, caracterinicio, 0, alto, estparrafo.MedirBase(), ancho)); } Linea actual = new Linea(parrafo, caracterinicio, 0, Medicion.Cero, Medicion.Cero, ancho); TamBloque tampromedio = new Estilo(new Bloque(4, parrafo.Formato.ObtenerFormatoTexto())).Medir("MMMM"); Medicion anchocaracter = tampromedio.Ancho / 4; int numcaracteres = (int)(ancho / anchocaracter); int limitecaracteres = tamparrafo - caracterinicio; if (numcaracteres > limitecaracteres) { numcaracteres = limitecaracteres; } actual.Cantidad = numcaracteres; Medicion mbase; TamBloque bloque = actual.MedirDeParrafo(actual.Inicio, actual.Cantidad, out mbase);//e.Medir(parrafo.ObtenerSubCadena(caracterinicio, numcaracteres)); while (numcaracteres < limitecaracteres && bloque.Ancho < ancho) { actual.Cantidad = numcaracteres; bloque = actual.MedirDeParrafo(caracterinicio, numcaracteres, out mbase);//parrafo.ObtenerSubCadena(caracterinicio, numcaracteres)); numcaracteres++; } while (numcaracteres > 0 && bloque.Ancho > ancho) { actual.Cantidad = numcaracteres; //string subcad = parrafo.ObtenerSubCadena(caracterinicio, numcaracteres); bloque = actual.MedirDeParrafo(caracterinicio, numcaracteres, out mbase);// e.Medir(subcad); if (numcaracteres > 0 && bloque.Ancho > ancho) { string subcad = parrafo.ObtenerSubCadena(caracterinicio, numcaracteres); numcaracteres = ObtenerAnteriorDivision(subcad, numcaracteres); } } actual.AltoBase = mbase; actual.Cantidad = numcaracteres; actual.AltoLinea = bloque.Alto; actual.AnchoLinea = ancho; if (parrafo.Formato.ObtenerEspaciadoInterlineal() != 1) { actual.AltoLinea = actual.AltoLinea * (float)parrafo.Formato.ObtenerEspaciadoInterlineal(); } if (incluirAltoParrafo && actual.Inicio == 0) { actual.AltoLinea += parrafo.Formato.ObtenerEspacioAnterior(); } if (incluirBaseParrafo && actual.Inicio + actual.Cantidad == tamparrafo) { actual.AltoLinea += parrafo.Formato.ObtenerEspacioPosterior(); } return(actual); //return new Linea() { Parrafo = parrafo, Cantidad = numcaracteres, Inicio = caracterinicio,AltoLinea=tampromedio.Alto }; }
public SizeF Traducir(TamBloque bloque) { return(new SizeF( (float)bloque.Ancho.ConvertirA(unidaddispositivox).Valor, (float)bloque.Alto.ConvertirA(unidaddispositivoy).Valor)); }
public Size CrearTam(TamBloque tambloque) { return(new Size(ObtenerMedida(tambloque.Ancho), ObtenerMedida(tambloque.Alto))); }