|
From: Marques, H. G <hg...@es...> - 2006-03-28 22:15:17
|
Hi Radu...
I solved the issue for the current version of player; everything was =
fine in your code apart from the fact that you were using the number of =
points to fix the size, when in the "dirty fix" your proposed the number =
of points is always 64 (see code bellow). I think it would be a good =
idea for now to extend the change to the other methods drawPoligon and =
drawPoints and leave it like that until the new version of player comes =
out...
hope this helps...
Cheers...
Hugo
************************************ BEGIN OF CODE =
************************
public void drawPolyline (PlayerGraphics2dCmdPolyline pgcp) {
try {
short points =3D pgcp.getCount ();
// int size =3D 4 + 4 + (points * 8) + 16;
int size =3D 4 + (64 * 8) + 16; // ADDED BY HGM
// int size =3D 4 + (points * 8) + 16; // COMENTED BY HGM
sendHeader
(PLAYER_MSGTYPE_CMD, PLAYER_GRAPHICS2D_CMD_POLYLINE, size);
XdrBufferEncodingStream xdr =3D new XdrBufferEncodingStream (size);
xdr.beginEncoding (null, 0);
xdr.xdrEncodeShort (points);
// xdr.xdrEncodeInt (points);
=20
for (int i =3D 0; i < points; i++) {
xdr.xdrEncodeFloat (pgcp.getPoints ()[i].getPx ());
xdr.xdrEncodeFloat (pgcp.getPoints ()[i].getPy ());
}
=20
for (int i =3D points; i < 64; i++) {
xdr.xdrEncodeFloat (0);
xdr.xdrEncodeFloat (0);
}
xdr.xdrEncodeByte
((byte)(pgcp.getColor ().getAlpha () & 0x000000FF));
xdr.xdrEncodeByte
((byte)(pgcp.getColor ().getRed () & 0x000000FF));
xdr.xdrEncodeByte
((byte)(pgcp.getColor ().getGreen () & 0x000000FF));
xdr.xdrEncodeByte
((byte)(pgcp.getColor ().getBlue () & 0x000000FF));
xdr.endEncoding ();
os.write (xdr.getXdrData (), 0, xdr.getXdrLength ());
xdr.close ();
os.flush ();
} catch (IOException e) {
throw new PlayerException
("[Graphics2D] : Couldn't send draw command: " +
e.toString(), e);
} catch (OncRpcException e) {
throw new PlayerException
("[Graphics2D] : Error while XDR-encoding draw command: " +
e.toString(), e);
}
}
=09
****************************************** END OF CODE =
*****************************************
----------------------------------------------------
Hugo Gravato Marques, University of Essex, PhD Student
PHONE: +44 (0)7854917241, England or +351 962482416, Portugal
ADDRESS: University of Essex, Department of Computer Science,
Wivenhoe Park, Colchester Essex, CO4 3SQ, UK
WEB: http://privatewww.essex.ac.uk/~hgmarq/
=20
-----Original Message-----
From: jav...@li... on behalf of =
Marques, Hugo G
Sent: Tue 28/03/2006 15:37
To: jav...@li...
Subject: RE: [Java-player-users] Graphics2D interface
=20
Hi Radu...
I downloaded the changes you made to the CVS but now I have a =
javaclient2.xdr.OncRpcException (see bellow). I tried the new code in my =
yesterday's example (lineSize =3D 32, if you remember) and I also made a =
simpler example (see code bellow) but I keep having the exception. The =
example you sent me in the weekend works fine, but that is because the =
number of points you used is >=3D 64. I tried to see what was the =
problem in the Graphics2DInterface but the manipulation of the bytes you =
used for encoding the information is a bit confusing for me as I'm not =
familiar with the neither the xdr encoding nor the format of the =
messages exchanged with player/stage. =20
sorry about the insistence man... :(
cheers,
hugo
******************************************** BEGINNING OF CODE =
*********************************
robot =3D new PlayerClient (host,port);
graphicsInterface =3D robot.requestInterfaceGraphics2D(0, 1);
robot.runThreaded(-1, -1);
=20
graphicsInterface.clearScreen ();
PlayerGraphics2dCmdPolyline p =3D new PlayerGraphics2dCmdPolyline ();
PlayerColor color =3D new PlayerColor ();
color.setAlpha (0);
color.setRed (0); color.setGreen (0); color.setBlue (0xff);
p.setCount (2);
PlayerPoint2d[] points =3D new PlayerPoint2d[2];
points[0] =3D new PlayerPoint2d ();
points[0].setPx (-1.0f);
points[0].setPy (-1.0f);
points[1] =3D new PlayerPoint2d ();
points[1].setPx (1.0f);
points[1].setPy (1.0f);
p.setPoints (points);
p.setColor (color);
graphicsInterface.drawPolyline (p);
try { Thread.sleep (100); } catch (Exception e) {
e.printStackTrace(); }
******************************************** END CODE ***** BEGINNING OF =
EXCEPTION *********************************
Exception in thread "main" javaclient2.PlayerException: [Graphics2D] : =
Error while XDR-encoding draw command: javaclient2.xdr.OncRpcException: =
ONC/RPC buffer overflow
at =
javaclient2.Graphics2DInterface.drawPolyline(Graphics2DInterface.java:181=
)
at Agent.testGraphics(Agent.java:368)
at Agent.initRobot(Agent.java:305)
at Agent.initialize(Agent.java:136)
at Agent.main(Agent.java:441)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at =
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java=
:39)
at =
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorI=
mpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
Caused by: javaclient2.xdr.OncRpcException: ONC/RPC buffer overflow
at =
javaclient2.xdr.XdrBufferEncodingStream.xdrEncodeInt(XdrBufferEncodingStr=
eam.java:181)
at =
javaclient2.xdr.XdrEncodingStream.xdrEncodeFloat(XdrEncodingStream.java:3=
34)
at =
javaclient2.Graphics2DInterface.drawPolyline(Graphics2DInterface.java:156=
)
... 9 more
******************************************** END OF EXCEPTION =
*********************************
----------------------------------------------------
Hugo Gravato Marques, University of Essex, PhD Student
PHONE: +44 (0)7854917241, England or +351 962482416, Portugal
ADDRESS: University of Essex, Department of Computer Science,
Wivenhoe Park, Colchester Essex, CO4 3SQ, UK
WEB: http://privatewww.essex.ac.uk/~hgmarq/
=20
-----Original Message-----
From: jav...@li... on behalf of Radu =
Bogdan Rusu
Sent: Mon 27/03/2006 23:12
To: jav...@li...
Subject: Re: [Java-player-users] Graphics2D interface
=20
Ok, since the fix seems to affect more than one file (Player-wise),=20
ignore changing your player distribution for now, and use the latest=20
Javaclient2 CVS version. I just commited the latest changes which should =
work with the *current* Player version (CVS). Once Player 2.1 is out, I=20
will change it.
Best,
Radu.
Radu Bogdan Rusu wrote:
> Aham!!! Evrika! ;)
>
> We just found another Player bug. The fix for this one is trivial=20
> though. I envision Player in a few months being 99.99% bug free at=20
> this rate! :)
>
> Unfortunately I don't have commit rights to that part of the=20
> repository (libplayercore)... so I'll ask Brian to do it for us now.
>
> If you don't want to "cvs" Player... go into player.h yourself, search =
> for the player_graphics2d_cmd_points_t,=20
> player_graphics2d_cmd_polyline_t and player_graphics2d_cmd_polygon_t=20
> structures, and modify the first member from "uint16_t count;" to=20
> "uint16_t points_count;". Then recompile Player, and that should be =
it.
>
> There is one small fix for Javaclient2 as well... I am committing it=20
> now, and then waiting for Brian to patch Player, and probably test=20
> again in the morning.
>
> Cheers,
> Radu.
>
> Marques, Hugo G wrote:
>
>> Hi Radu...
>>
>> first of all thank's for the quick implementation of the interface... =
>> I really needed it in order to continue my experiments...
>>
>> I tryed to run your code and it works perfectly... but if I try to=20
>> use an PlayerGraphics2dCmdPolyline object with the number of lines=20
>> smaller than 64 it simply does not show anything... I tryed to show a =
>> simple line on Stage with only 2 points using the same idea you used=20
>> in the example and it did not work... Then I hacked slightly your=20
>> code (see bellow) in order to print only part of the circles and it=20
>> did not worked as well...
>>
>> I then tried to solve the issue with the class=20
>> PlayerGraphics2dCmdPolygon but I had the same problem. I tried to=20
>> went through the source code of playerclient and the=20
>> graphics2DInterface and it seemed fine to me...
>> Another thing that you might want to have a look in the class=20
>> PlayerGraphics2dCmdPolygon is that if you do not setFill_color it=20
>> gives an exception, when it could probably use a default=20
>> (transparent?) value...
>>
>> Thank you very much Regards...
>> Hugo
>>
>> ************************************* CODE *******************
>>
>> PlayerClient robot;
>> Graphics2DInterface graphicsInterface;
>>
>> robot =3D new PlayerClient ("localhost", 6665);
>> graphicsInterface =3D robot.requestInterfaceGraphics2D(0, 1);
>> robot.runThreaded(-1, -1);
>>
>> graphicsInterface.clearScreen ();
>>
>> PlayerGraphics2dCmdPolyline p =3D new PlayerGraphics2dCmdPolyline ();
>>
>> PlayerColor color =3D new PlayerColor ();
>> color.setAlpha (0);
>> color.setRed (0); color.setGreen (0); color.setBlue (0xff);
>> int lineSize =3D 32;
>> p.setCount (lineSize);
>>
>> for (double r =3D 0; r < 1.0; r +=3D 0.05) {
>> PlayerPoint2d[] points =3D new PlayerPoint2d[lineSize];
>> for (int j =3D 0; j < lineSize; j++) {
>> points[j] =3D new PlayerPoint2d ();
>> points[j].setPx ((float)(r * Math.cos (j * Math.PI / 32)));
>> points[j].setPy ((float)(r * Math.sin (j * Math.PI / 32)));
>> System.out.println(" Point: "+points[j].getPx()+",=20
>> "+points[j].getPy());
>> }
>>
>> p.setPoints (points);
>> p.setColor (color);
>>
>> graphicsInterface.drawPolyline (p);
>>
>> try { Thread.sleep (100); } catch (Exception e) {
>> e.printStackTrace(); }
>>
>> ************************************* END CODE *******************
>>
>>
>>
>> ----------------------------------------------------
>> Hugo Gravato Marques, University of Essex, PhD Student
>> PHONE: +44 (0)7854917241, England or +351 962482416, Portugal
>> ADDRESS: University of Essex, Department of Computer Science,
>> Wivenhoe Park, Colchester Essex, CO4 3SQ, UK
>> WEB: http://privatewww.essex.ac.uk/~hgmarq/
>> =20
>>
>
--=20
| Radu Bogdan Rusu | http://rbrusu.com/
| http://www9.cs.tum.edu/people/rusu/
| Intelligent Autonomous Systems
| Technische Universitaet Muenchen
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting =
language
that extends applications into web and mobile media. Attend the live =
webcast
and join the prime developer group breaking into this new coding =
territory!
http://sel.as-us.falkag.net/sel?cmd=3Dk&kid=110944&bid$1720&dat=121642
_______________________________________________
Java-player-users mailing list
Jav...@li...
https://lists.sourceforge.net/lists/listinfo/java-player-users
|