10.7.- Los rellenos El bgi permite varios tipos de relleno para nuestras figuras, estos son: Constantes de Relleno. EmptyFill = 0 Usa color del fondo. SolidFill = 1 Usa color del primer plano. LineFill = 2 Relleno con lineas horizontales (---). LtSlashFill = 3 Relleno con diagonales finas (///). SlashFill = 4 Relleno con diagonales gruesas (///). BkSlashFill = 5 Relleno con diagonales finas (\\\). LtBkSlashFill = 6 Relleno con diagonales gruesas (\\\). HatchFill = 7 Lineas cruzadas. XHatchFill = 8 Linea cruzadas menos espaciadas. InterleaveFill = 9 Lineas Intercaladas. WideDotFill = 10 Lineas muy espaciadas. CloseDotFill = 11 Lineas poco espaciadas. UserFill = 12 Relleno definido por el usuario. El procedimientos que nos permite usarlo es: -Setfillstyle(x,y): El parametro "x" indica la trama de relleno y en "y" va el color que puede variar desde 0 hasta 15. Solo se puede utilizar con algunas rutinas que generen figuras cerradas. Estas son : Bar, Bar3d, Fillpoly y Pieslice. 10.7.1) Creando nuestra tramas de relleno El procedimiento que hace que logremos esto es: -SetFillPattern(x,y): En "x" debera colocar una trama del tipo fillpatterntype, en "y" debe colocar el color. FillPatternType es un tipo predefinido en la unidad graph, resulta ser un array [1..8] de tipo byte, lo cual significa que el entramado que se defina tiene 64 bits. Para explicarlo tome una hoja cuadriculada y marque 8 filas de ocho cuadrados cada uno como se indica: Bit 7 6 5 4 3 2 1 0 = $FE = $FE = $00 = $FE = $FE = $FE = $00 = $FE Lo cual corresponde al patron de ladrillos utilizado en el programa que se presenta al final del capitulo. Para el disenio de patrones se requiere cierta practica y ademas se requiere dibujar algunos caracteres aparte del que se quiere diseniar. Observe que a simple vista, lo que aparece en el recuadro no se parece nada a un ladrillo. Esto es asi porque este caracter es solo un parte del dibujo, pruebe a juntar muchos de ellos y vera como el todo si genera una forma de ladrillo. Luego de activar un relleno predefinido podemos preguntarle al bgi cual fue este con el siguiente procedimiento: -GetFillSettings(x): "x" es un parametro var donde se devuelve el tipo FillSettingsType predefinido de la siguiente forma: TYPE FILLSETTINGSTYPE = RECORD PATTERN : WORD; COLOR : WORD; END; Como vera solo es posible que nos devuelva el numero del entramado activo. -GetFillPattern(x): Guarda en una variable de tipo fillpatterntype la definicion de la trama actual. 10.7.2.-Relleno de figuras Hasta ahora hemos visto la forma tradicional de rellenar figuras, conociendo sus puntos limite por ser regulares pero cuando no se conocen los limites hay que utilizar otra forma de relleno, este es el relleno por vertido y se utiliza con el procedimiento siguiente: -FloodFill(x,y,z): Los primeros dos parametros son las coordenadas (x,y) del punto donde se comenzara a rellenar, y en "z" estara el color del limite que hay que comprobar. Si se establece un entramado de relleno se rellena con este y debe asegurarse que la figura sea cerrada puesto si hay una abertura por pequenia que sea el relleno se expandira hasta que encuentre un limite. 10.7.3.-Algunos procedimientos orientados a los negocios -Bar(w,x,y,z): Los parametros son los mismos del rectangulo, dibuja un barra (rectangulo) pero la barra asi generada a diferencia del rectangulo porque puede rellenarse automaticamente con una trama de relleno. -Bar3D(u,v,w,x,y,z): Genera una barra que tendra un aspecto tridimensional. Los primeros cuatro parametros generan una barra igual que bar, en "y" se especifica la profundidad en pixels y el parametro "z" es de tipo boolean e indica si la parte superior de la barra tridimensional ha de ser dibujada o no. -PieSlice(v,w,x,y,z): Dibuja el popular grafico del pie en los negocios. La lista de parametros es identica a la del procedimiento arc. -Sector(u,v,w,x,y,z): Los parametros son identicos a los del procedimiento ellipse. Se dibuja un arco de elipse relleno con el entramado actual. 10.7.4.- Dibujo y relleno de poligonos El dibujo se consigue con el procedimiento: -Drawpoly(x,y): El primer parametro indica cuantos vertices tiene el poligono que se pretende dibujar y el segundo es un parametro var sin tipo que puede ser cualquier cosa pero el bgi espera que sea un array del tipo predefinido PointType que es asi: TYPE POINTTYPE = RECORD X,Y : INTEGER; END; Por ejemplo para dibujar un triangulo deberia hacer lo siguiente: CONST TRIANGULO : ARRAY [0..3] OF POINTTYPE = ((X:50 ,Y:50), (X:100 ,Y:120), (X:70 ,Y:280), (X:50 ,Y:50)); { ESTE ES PARA QUE SE CIERRE EL POLIGONO } Para llamarlo habra de hacer drawpoly (4,triangulo) lo cual dibujara un triangulo. Cabe destacar que no es necesario que la figura se cierre. Para dibujar poligonos rellenos debera usar fillpoly que rellenara el poligono con la trama actual. De paso conviene decir que para rellenar una elipse se usa: -FillEllipse(w,x,y,z): En (w,x) esta el "centro" de la elipse segun se describio en el dibujo de elipses, en "y" se encuentra el primer radio y en "z" se encuentra el segundo radio. .