Hi Tony,
Sorry for this late reply. We are completly saturated by emails.
I have included your enhancement to TGX11::DrawPolyLine in the CVS source.
Thanks for sending this patch.
Rene Brun
Colley, Tony wrote:
>
> Has anyone had time to examine this issue lately...
>
> -----Original Message-----
> From: Colley, Tony
> Sent: Monday, March 04, 2002 17:01
> To: Colley, Tony; 'Faine, Valeri'; 'Eddy Offermann '
> Cc: 'roottalk@pcroot.cern.ch '
> Subject: RE: [ROOT] graphing huge datasets -- possible fix
>
> I modified the DrawPolyLine function in TGX11.cxx to split polylines with
> too many points into drawable chunks. This would not handle the case where
> someone wanted to draw a filled curve with too many points; but I don't need
> really big filled curves anyway. This change enabled ROOT to successfully
> handle a TGraph of 10^7 points (not quickly, by any means, but at least it
> draws the graph and doesn't crash).
>
> Here is a cvs diff output of my changes:
>
> ===================================================================
> 654a655,657
> > #define MAX_DRAW_PTS 1000001
> > #define MDP_MINUS_1 1000000
> >
> 661d663
> <
> 664c666,678
> < if (n > 1) {
> ---
> > if (n > MAX_DRAW_PTS) {
> > int ibeg = 0;
> > int iend = MDP_MINUS_1;
> > while (iend < n) {
> > DrawPolyLine( MAX_DRAW_PTS, &xyt[ibeg] );
> > ibeg = iend;
> > iend += MDP_MINUS_1;
> > }
> > if (ibeg < n) {
> > int npt = n - ibeg;
> > DrawPolyLine( npt, &xyt[ibeg] );
> > }
> > } else if (n > 1) {
>
> =====================================================================
>
> Here's an extract from TGX11.cxx showing the modifications:
>
> =====================================================================
> #define MAX_DRAW_PTS 1000001 // NEW
> #define MDP_MINUS_1 1000000 // NEW
>
> void TGX11::DrawPolyLine(int n, TPoint *xyt)
> {
> // Draw a line through all points.
> // n : number of points
> // xy : list of points
> XPoint *xy = (XPoint*)xyt;
>
> if (n > MAX_DRAW_PTS) { // NEW
> int ibeg = 0; // NEW
> int iend = MDP_MINUS_1; // NEW
> while (iend < n) { // NEW
> DrawPolyLine( MAX_DRAW_PTS, &xyt[ibeg] ); // NEW
> ibeg = iend; // NEW
> iend += MDP_MINUS_1; // NEW
> } // NEW
> if (ibeg < n) { // NEW
> int npt = n - ibeg; // NEW
> DrawPolyLine( npt, &xyt[ibeg] ); // NEW
> } // NEW
> } else if (n > 1) { // CHANGED
> if (gLineStyle == LineSolid)
> XDrawLines(fDisplay, gCws->drawing, *gGCline, xy, n,
> CoordModeOrigin);
> else {
> int i;
> XSetDashes(fDisplay, *gGCdash,
> gDashOffset, gDashList, sizeof(gDashList));
> XDrawLines(fDisplay, gCws->drawing, *gGCdash, xy, n,
> CoordModeOrigin);
>
> // calculate length of line to update dash offset
> for (i = 1; i < n; i++) {
> int dx = xy[i].x - xy[i-1].x;
> int dy = xy[i].y - xy[i-1].y;
> if (dx < 0) dx = - dx;
> if (dy < 0) dy = - dy;
> gDashOffset += dx > dy ? dx : dy;
> }
> gDashOffset %= gDashLength;
> }
> } else {
> int px,py;
> px=xy[0].x;
> py=xy[0].y;
> XDrawPoint(fDisplay, gCws->drawing,
> gLineStyle == LineSolid ? *gGCline : *gGCdash, px, py);
> }
> }
>
> =====================================================================
>
> If this doesn't break something I didn't try, then I think it is a
> reasonable way to fix the 2^20 data point limit.
>
> +------------------------------------------------+
> | Tony Colley ITT Industries A/CD |
> | Modeling/Simulation Group Fort Wayne, IN USA |
> +------------------------------------------------+
> | Using ROOT 3.03/02 on RedHat Linux 7.2 |
> | Last CVS update: 26 Feb 2002 at 2218 GMT |
> +------------------------------------------------+
> \I'm not responsible for anything below this line/
>
> ************************************
> If this email is not intended for you, or you are not responsible for the
> delivery of this message to the addressee, please note that this message may
> contain ITT Privileged/Proprietary Information. In such a case, you may not
> copy or deliver this message to anyone. You should destroy this message and
> kindly notify the sender by reply email. Information contained in this
> message that does not relate to the business of ITT is neither endorsed by
> nor attributable to ITT.
> ************************************
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:46 MET