In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Pintar un rombo o un triángulo
Pintar un rombo o un triángulo
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.
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.
- xhermita
- Mensajes: 177
- Registrado: Vie Feb 18, 2011 10:05 pm
- Ubicación: Las Palmas de Gran Canaria
- Contactar:
Pintar un rombo o un triángulo
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.
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.
Pedro Amaro
2PC Service
Xailer / Néfele / MySQL-MariaDB / SQLServer
2PC Service
Xailer / Néfele / MySQL-MariaDB / SQLServer
Pintar un rombo o un triángulo
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.
>
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.
>
- xhermita
- Mensajes: 177
- Registrado: Vie Feb 18, 2011 10:05 pm
- Ubicación: Las Palmas de Gran Canaria
- Contactar:
Pintar un rombo o un triángulo
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.
>>
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.
>>
Pedro Amaro
2PC Service
Xailer / Néfele / MySQL-MariaDB / SQLServer
2PC Service
Xailer / Néfele / MySQL-MariaDB / SQLServer
Pintar un rombo o un triángulo
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.
¿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.
- ignacio
- Site Admin
- Mensajes: 9441
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Pintar un rombo o un triángulo
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
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
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Pintar un rombo o un triángulo
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
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
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
>
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
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
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
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
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
- ignacio
- Site Admin
- Mensajes: 9441
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Pintar un rombo o un triángulo
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
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
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Pintar un rombo o un triángulo
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
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
- ignacio
- Site Admin
- Mensajes: 9441
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Pintar un rombo o un triángulo
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
WITH OBJECT TCanvas():NewFromDC( hDC )
hBrush := CreateSolidBrush( clBlue )
SelectObject( :hDC, hBrush )
:Polygon( { {0,0}, {100, 100}, {0, 100} } )
DeleteObject( hBrush )
END WITH
Saludos
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Pintar un rombo o un triángulo
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.
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.