Página 1 de 1

Pintar un rombo o un triángulo

Publicado: Jue Dic 19, 2013 3:16 pm
por xevi[1]
El caso que ahora me ocupa és la forma en rellenar el interior de un rombo.
Con la clase TCanvas...
Si bien para pintar un cuadrado/rectángulo existe el método FillRect que
dadas unas coordenadas rellena un cuadrado... ¿como hacer esto para un
triángulo???
¿Alguien tiene alguna función hecha???
¿Seria muy complicado, si no existe el método, implementarlo???
Gracias.
Un Saludo,
Xevi.

Pintar un rombo o un triángulo

Publicado: Jue Dic 19, 2013 7:37 pm
por xhermita
Negus el manual deberí­as utilizar "ExtFloodFill" pero por mas que he
intentado hacerte un ejemplo cono consigo que me haga nada, aunque
siempre me devuelve .T. como que lo hizo bien.
Saludos
Pedro Amaro
El 19/12/2013 14:16, Xevi escribió:
> El caso que ahora me ocupa és la forma en rellenar el interior de un rombo.
> Con la clase TCanvas...
> Si bien para pintar un cuadrado/rectángulo existe el método FillRect que
> dadas unas coordenadas rellena un cuadrado... ¿como hacer esto para un
> triángulo???
>
> ¿Alguien tiene alguna función hecha???
> ¿Seria muy complicado, si no existe el método, implementarlo???
>
>
> Gracias.
>
> Un Saludo,
> Xevi.

Pintar un rombo o un triángulo

Publicado: Vie Dic 20, 2013 3:14 pm
por xevi[1]
Gracias Pedro.
TCanvas:ExtFloodFill
Dado que se le pasan dos coordenadas, solamente... ¿como pinto un
triángulo???
Esto vendrí­a a ser como pintar una lí­nea ¿no???
¿Alguien me puede orientar como utilizar ExtFloodFill ??? para pintar un
triángulo???
Un Saludo,
Xevi.
"Pedro Amaro" <xhermita@hotmail.com> ha escrit al
missatge:52b33d79$[email=2@svctag-j7w3v3j....]2@svctag-j7w3v3j....[/email]
> Negus el manual deberí­as utilizar "ExtFloodFill" pero por mas que he
> intentado hacerte un ejemplo cono consigo que me haga nada, aunque siempre
> me devuelve .T. como que lo hizo bien.
>
> Saludos
> Pedro Amaro
>
> El 19/12/2013 14:16, Xevi escribió:
>> El caso que ahora me ocupa és la forma en rellenar el interior de un
>> rombo.
>> Con la clase TCanvas...
>> Si bien para pintar un cuadrado/rectángulo existe el método FillRect que
>> dadas unas coordenadas rellena un cuadrado... ¿como hacer esto para un
>> triángulo???
>>
>> ¿Alguien tiene alguna función hecha???
>> ¿Seria muy complicado, si no existe el método, implementarlo???
>>
>>
>> Gracias.
>>
>> Un Saludo,
>> Xevi.
>

Pintar un rombo o un triángulo

Publicado: Vie Dic 20, 2013 3:53 pm
por xhermita
Hasta donde yo entiendo tienes que tener el triangulo dibujado a base de
lineas y con ExtFloodFill lo que haces es rellenarlo.
Saludos
Pedro Amaro
El 20/12/2013 14:14, Xevi escribió:
> Gracias Pedro.
>
> TCanvas:ExtFloodFill
>
> Dado que se le pasan dos coordenadas, solamente... ¿como pinto un
> triángulo???
> Esto vendrí­a a ser como pintar una lí­nea ¿no???
>
> ¿Alguien me puede orientar como utilizar ExtFloodFill ??? para pintar un
> triángulo???
>
>
>
> Un Saludo,
> Xevi.
>
>
> "Pedro Amaro" <xhermita@hotmail.com> ha escrit al
> missatge:52b33d79$[email=2@svctag-j7w3v3j....]2@svctag-j7w3v3j....[/email]
>> Negus el manual deberí­as utilizar "ExtFloodFill" pero por mas que he
>> intentado hacerte un ejemplo cono consigo que me haga nada, aunque
>> siempre me devuelve .T. como que lo hizo bien.
>>
>> Saludos
>> Pedro Amaro
>>
>> El 19/12/2013 14:16, Xevi escribió:
>>> El caso que ahora me ocupa és la forma en rellenar el interior de un
>>> rombo.
>>> Con la clase TCanvas...
>>> Si bien para pintar un cuadrado/rectángulo existe el método FillRect que
>>> dadas unas coordenadas rellena un cuadrado... ¿como hacer esto para un
>>> triángulo???
>>>
>>> ¿Alguien tiene alguna función hecha???
>>> ¿Seria muy complicado, si no existe el método, implementarlo???
>>>
>>>
>>> Gracias.
>>>
>>> Un Saludo,
>>> Xevi.
>>

Pintar un rombo o un triángulo

Publicado: Vie Dic 20, 2013 7:21 pm
por xevi[1]
ExtFloodFill
¿Alguien puede poner un ejemplo de como utilizarlo???
Gracias.
Un Saludo,
Xevi.
"Xevi" <xevicomas_quitaeso@gmail.com> ha escrit al
missatge:52b2ffd3$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> El caso que ahora me ocupa és la forma en rellenar el interior de un
> rombo.
> Con la clase TCanvas...
> Si bien para pintar un cuadrado/rectángulo existe el método FillRect que
> dadas unas coordenadas rellena un cuadrado... ¿como hacer esto para un
> triángulo???
>
> ¿Alguien tiene alguna función hecha???
> ¿Seria muy complicado, si no existe el método, implementarlo???
>
>
> Gracias.
>
> Un Saludo,
> Xevi.

Pintar un rombo o un triángulo

Publicado: Sab Dic 21, 2013 10:44 am
por ignacio
Mira esto:
http://msdn.microsoft.com/en-us/library ... sktop/dd16 2814(v=vs.85).aspx
Con unos pocos conocimientos de 'C' lo tienes hecho en minutos.
Un saludo

Pintar un rombo o un triángulo

Publicado: Sab Dic 21, 2013 5:26 pm
por xevi[1]
Ignacio,
Seguro que es sencillo para quien tenga conocimientos de C,... pero mis
conocimientos son 0.
Por lo que agadeceria cualquier ayuda al respecto.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <nonametoavoidspam@xailer.com> ha escrit al
missatge:52b56303$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Mira esto:
> ç
> http://msdn.microsoft.com/en-us/library ... sktop/dd16 2814(v=vs.85).aspx
>
> Con unos pocos conocimientos de 'C' lo tienes hecho en
> minutos.
>
> Un saludo
> --
> Ignacio Ortiz de Zúñiga
> [Equipo de Xailer/Xailer team]
> http://www.xailer.com
> http://www.xailer.info

Pintar un rombo o un triángulo

Publicado: Dom Dic 22, 2013 11:01 am
por xevi[1]
ReBuscando por Google... cuesta entender lo que voy leyendo, pues que si
codigo C, ejemplos VB...
No se si este código es el que deberia de empezar por entender para hacer un
wrapper...
void polygon(int xc, int yc, int radius, double angle, int sides)
{
int i;
double ang = 360/sides; //Every vertex is about "ang" degrees from each
other
radian = 180/M_PI;
int points_x[7]; //Here i store the calculated vertexs
int points_y[7]; //Here i store the calculated vertexs
/*Here i calculate the vertexs of the polygon*/
for(i=0; i<sides; i++)
{
points_x = xc + ceil(radius * cos(angle/radian));
points_y = yc + ceil(radius * sin(angle/radian));
angle = angle+ang;
}
/*Here i draw the polygon with the know vertexs just calculated*/
for(i=0; i<sides-1; i++)
line(points_x, points_y, points_x[i+1], points_y[i+1]);
line(points_y, points_x, points_x[0], points_y[0]);
}
Un Saludo,
Xevi.
"Xevi" <xevicomas_quitaeso@gmail.com> ha escrit al
missatge:52b5c125$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Ignacio,
>
> Seguro que es sencillo para quien tenga conocimientos de C,... pero mis
> conocimientos son 0.
> Por lo que agadeceria cualquier ayuda al respecto.
>
>
> Un Saludo,
> Xevi.
>
>
> "Ignacio Ortiz de Zúñiga" <nonametoavoidspam@xailer.com> ha escrit
> al missatge:52b56303$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
>> Mira esto:
>> ç
>> http://msdn.microsoft.com/en-us/library ... sktop/dd16 2814(v=vs.85).aspx
>>
>> Con unos pocos conocimientos de 'C' lo tienes hecho en
>> minutos.
>>
>> Un saludo
>> --
>> Ignacio Ortiz de Zúñiga
>> [Equipo de Xailer/Xailer team]
>> http://www.xailer.com
>> http://www.xailer.info
>

Pintar un rombo o un triángulo

Publicado: Lun Dic 23, 2013 9:38 am
por jfgimenez
Xevi,
pon esto en algún PRG de tu proyecto:
//---------------------------------------------------------- --------------------
CLASS TCanvas FROM XCanvas
METHOD Polygon( aPoints )
ENDCLASS
//---------------------------------------------------------- --------------------
#pragma BEGINDUMP
#include "Windows.h"
#include "Xailer.h"
HB_FUNC_STATIC( TCANVAS_POLYGON )
{
PHB_ITEM Self = hb_stackSelfItem();
HDC hDC = (HDC) XA_ObjGetNL( Self, "hDC" );
PHB_ITEM aPoints = hb_param( 1, HB_IT_ARRAY ), aPoint;
int nPoints, n;
LPPOINT pt;
if( aPoints && ( ( nPoints = hb_arrayLen( aPoints ) ) != 0 ) )
{
pt = hb_xgrab( nPoints * sizeof( POINT ) );
for( n = 0; n < nPoints; n++ )
{
aPoint = hb_arrayGetItemPtr( aPoints, n + 1 );
pt[ n ].x = hb_arrayGetNL( aPoint, 1 );
pt[ n ].y = hb_arrayGetNL( aPoint, 2 );
}
hb_retnl( Polygon( hDC, pt, nPoints ) );
hb_xfree( pt );
}
else
hb_retnl( 0 );
}
#pragma ENDDUMP
//---------------------------------------------------------- --------------------
Con eso, ya lo tienes como un método más de TCanvas, y para usarlo sólo
tienes que pasarle un array de puntos, donde cada punto es un array de 2
elementos (x e y). P.ej.:
::oCanvas:Polygon( { { 100, 0, }, { 200, 100 }, { 100, 200 }, {
0, 100 } } )
Por otro lado, ya que está, vamos a añadirlo a Xailer ;-)
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info

Pintar un rombo o un triángulo

Publicado: Lun Dic 23, 2013 10:01 am
por xevi[1]
Jose,
Solo un "pequeño" detalle,...
este añadido de la clase si bien funciona perfectamente y dibuja un rombo,
triángulo...
¿como hacer para que su interior sea opaco??
o sea pintar TODA el área interior (como hace FillRect()), enviando un
parámetro más a la clase...
Polygon( aPoints, lOpaco )
Gracias.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenezAM]"@wanadoo.es> ha escrit al
missatge:52b7f66f$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Xevi,
>
> pon esto en algún PRG de tu proyecto:
>
> //---------------------------------------------------------- --------------------
>
> CLASS TCanvas FROM XCanvas
>
> METHOD Polygon( aPoints )
>
> ENDCLASS
>
> //---------------------------------------------------------- --------------------
>
> #pragma BEGINDUMP
>
> #include "Windows.h"
> #include "Xailer.h"
>
> HB_FUNC_STATIC( TCANVAS_POLYGON )
> {
> PHB_ITEM Self = hb_stackSelfItem();
> HDC hDC = (HDC) XA_ObjGetNL( Self, "hDC" );
> PHB_ITEM aPoints = hb_param( 1, HB_IT_ARRAY ), aPoint;
> int nPoints, n;
> LPPOINT pt;
>
> if( aPoints && ( ( nPoints = hb_arrayLen( aPoints ) ) != 0 ) )
> {
> pt = hb_xgrab( nPoints * sizeof( POINT ) );
> for( n = 0; n < nPoints; n++ )
> {
> aPoint = hb_arrayGetItemPtr( aPoints, n + 1 );
> pt[ n ].x = hb_arrayGetNL( aPoint, 1 );
> pt[ n ].y = hb_arrayGetNL( aPoint, 2 );
> }
> hb_retnl( Polygon( hDC, pt, nPoints ) );
> hb_xfree( pt );
> }
> else
> hb_retnl( 0 );
> }
>
> #pragma ENDDUMP
>
> //---------------------------------------------------------- --------------------
>
> Con eso, ya lo tienes como un método más de TCanvas, y para usarlo sólo
> tienes que pasarle un array de puntos, donde cada punto es un array de 2
> elementos (x e y). P.ej.:
>
> ::oCanvas:Polygon( { { 100, 0, }, { 200, 100 }, { 100, 200 }, { 0,
> 100 } } )
>
>
> Por otro lado, ya que está, vamos a añadirlo a Xailer ;-)
>
>
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
> http://www.xailer.info

Pintar un rombo o un triángulo

Publicado: Lun Dic 23, 2013 10:50 am
por ignacio
Buenos dí­as,
Por lo que pude leer en la documentación de MSDN el interior de los puntos se rellenaba con el actual brush. Intenta hacer lo siguiente antes de llamar al método:
SetBkColor( oCanvas:hDC, nColor )
Si esto no te funcionase añade también:
SetbkMode( oCanvas:hDC, OPAQUE )
Saludos

Pintar un rombo o un triángulo

Publicado: Lun Dic 23, 2013 3:03 pm
por xevi[1]
Ignacio,
He cogido el Sample PrinterInfo de Xailer, para hacer pruebas...
en el evento
METHOD Button5Click( oSender ) CLASS TForm1
....
en la lí­nea 200 he añadido esta sola lí­nea
:Polygon( { { 100, 0, }, { 200, 100 }, { 100, 200 }, { 0, 100 } } )
Y muestra un rombo en las coordenadas especificadas.
Me doy cuenta que lo hace opaco (no transparente) y así­ pues, el interior es
de color blanco.
he cambiado esa lí­nea por estas lí­neas...
SetBkColor( :hDC, clRed )
SetbkMode( :hDC, OPAQUE )
:Polygon( { { 100, 0, }, { 200, 100 }, { 100, 200 }, { 0, 100 } } )
Pero no "cambia" el color del interior, siempre es opaco de color blanco.
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <nonametoavoidspam@xailer.com> ha escrit al
missatge:52b8077c$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Buenos dí­as,
> Por lo que pude leer en la documentación de MSDN el
> interior de los puntos se rellenaba con el actual brush.
> Intenta hacer lo siguiente antes de llamar al método:
>
> SetBkColor( oCanvas:hDC, nColor )
>
> Si esto no te funcionase añade también:
>
> SetbkMode( oCanvas:hDC, OPAQUE )
>
> Saludos
> --
> Ignacio Ortiz de Zúñiga
> [Equipo de Xailer/Xailer team]
> http://www.xailer.com
> http://www.xailer.info

Pintar un rombo o un triángulo

Publicado: Lun Dic 23, 2013 5:20 pm
por ignacio
Por lo que veo requiere una brocha:
WITH OBJECT TCanvas():NewFromDC( hDC )
hBrush := CreateSolidBrush( clBlue )
SelectObject( :hDC, hBrush )
:Polygon( { {0,0}, {100, 100}, {0, 100} } )
DeleteObject( hBrush )
END WITH
Saludos

Pintar un rombo o un triángulo

Publicado: Lun Dic 23, 2013 6:30 pm
por xevi[1]
Ignacio
Gracias.
Ahora SI !!!, solo un detallito... he tenido que añadir : en hDC, así­:
WITH OBJECT TCanvas():NewFromDC( :hDC )
hBrush := CreateSolidBrush( clBlue )
SelectObject( :hDC, hBrush )
:Polygon( { {100,0}, {200, 100}, {100, 200}, { 0, 100 } } )
DeleteObject( hBrush )
END WITH
en el Sample ya me "pinta" un rombo de color azul!!! Y quien dice un rombo,
dice un triángulo o una forma cualquiera de ángulos.
Al implementar el método Polygon() en TCanvas, en la próxima actualización
de Xailer será de esa forma o el mismo evento dispondrá de un parámetro para
el color de relleno ???
Puestos con ello... habrá o puede haber color transparente???
Y, más... por que no extender este método a un objeto cualquiera y así­ poder
"pintar" una forma de polí­gono en un Form, Panel...
Muchas Gracias.
Un Saludo,
Xevi.