I've now properly implemented the rotate option in plarc and updated
the documentation. I've also modified example 27 to provide a more
rigorous test / demonstration of the plarc capabilities.
This did throw up a problem with filled arcs. For me the code crashed with
a malloc error. Reducing the number of segments by 1 fixed the problem so
I think it is either a rounding error, or an off-by-one error in the fill
code for dealing with cases where there are > PL_MAXPOLY points in the
boundary. My workaround is ok for now, but doesn't address the underlying
problem. I'll try and take a look unless anyone else gets there first.
Andrew
On Wed, Aug 03, 2011 at 10:29:34AM +0100, Andrew Ross wrote:
>
> Actually, on closer inspection the API to plarc in 5.9.8 supports
> an argument rotate, but the argument doesn't actually do anything!
> I'll see if we can get this cleaned up. Thanks for drawing it to
> our attention.
>
> Andrew
>
> On Wed, Aug 03, 2011 at 11:36:51AM +0800, l.f.hwang wrote:
> > hi guys,
> >
> > I had write a patch to support drawing eclipse rotated in 5.9.6, pls
> > check attachment enclosed.
> >
> >
> > --
> > l.f.hwang
> > 2011-08-03
> > _________________________________________________________
> >
> >
>
> > diff -cr plplot-5.9.6/bindings/c++/plstream.cc
> > plplot-5.9.6_p1/bindings/c++/plstream.cc
> > *** plplot-5.9.6/bindings/c++/plstream.cc 2010-06-06 00:11:39.000000000
> > +0800
> > --- plplot-5.9.6_p1/bindings/c++/plstream.cc 2010-09-24
> > 09:53:24.056339651 +0800
> > ***************
> > *** 328,333 ****
> > --- 328,343 ----
> > plarc( x, y, a, b, angle1, angle2, fill );
> > }
> >
> > +
> > + void
> > + plstream::arcr( PLFLT x, PLFLT y, PLFLT a, PLFLT b, PLFLT angle1, PLFLT
> > angle2, PLFLT rotate,
> > + PLBOOL fill )
> > + {
> > + set_stream();
> > +
> > + plarcr( x, y, a, b, angle1, angle2, rotate, fill );
> > + }
> > +
> > void
> > plstream::arrows( PLFLT * u, PLFLT * v, PLFLT * x, PLFLT * y, PLINT n,
> > PLFLT scale, PLFLT dx, PLFLT dy )
> > diff -cr plplot-5.9.6/bindings/c++/plstream.h
> > plplot-5.9.6_p1/bindings/c++/plstream.h
> > *** plplot-5.9.6/bindings/c++/plstream.h 2010-06-06 00:11:39.000000000
> > +0800
> > --- plplot-5.9.6_p1/bindings/c++/plstream.h 2010-09-24 09:53:25.856319962
> > +0800
> > ***************
> > *** 123,128 ****
> > --- 123,134 ----
> >
> > void arc( PLFLT x, PLFLT y, PLFLT a, PLFLT b, PLFLT angle1, PLFLT
> > angle2,
> > PLBOOL fill );
> > +
> > + // Plot an rotate arc
> > +
> > + void arcr( PLFLT x, PLFLT y, PLFLT a, PLFLT b, PLFLT angle1, PLFLT
> > angle2, PLFLT rotate,
> > + PLBOOL fill );
> > +
> >
> > // Simple arrow plotter
> > void arrows( PLFLT *u, PLFLT *v, PLFLT *x, PLFLT *y, PLINT n,
> > diff -cr plplot-5.9.6/include/plplot.h plplot-5.9.6_p1/include/plplot.h
> > *** plplot-5.9.6/include/plplot.h 2010-06-06 00:11:39.000000000 +0800
> > --- plplot-5.9.6_p1/include/plplot.h 2010-09-24 09:37:53.036314838
> > +0800
> > ***************
> > *** 623,628 ****
> > --- 623,629 ----
> > #define pl_setcontlabelparam c_pl_setcontlabelparam
> > #define pladv c_pladv
> > #define plarc c_plarc
> > + #define plarcr c_plarcr
> > #define plaxes c_plaxes
> > #define plbin c_plbin
> > #define plbop c_plbop
> > ***************
> > *** 839,845 ****
> > --- 840,852 ----
> > PLDLLIMPEXP void
> > c_plarc( PLFLT x, PLFLT y, PLFLT a, PLFLT b, PLFLT angle1, PLFLT angle2,
> > PLBOOL fill );
> > +
> > + /* Plot an rotated arc */
> >
> > + PLDLLIMPEXP void
> > + c_plarcr( PLFLT x, PLFLT y, PLFLT a, PLFLT b, PLFLT angle1, PLFLT angle2,
> > PLFLT rotate,
> > + PLBOOL fill );
> > +
> > /* This functions similarly to plbox() except that the origin of the axes
> > */
> > /* is placed at the user-specified point (x0, y0). */
> >
> > diff -cr plplot-5.9.6/src/plarc.c plplot-5.9.6_p1/src/plarc.c
> > *** plplot-5.9.6/src/plarc.c 2010-06-06 00:11:39.000000000 +0800
> > --- plplot-5.9.6_p1/src/plarc.c 2010-11-02 13:01:16.260160438 +0800
> > ***************
> > *** 141,143 ****
> > --- 141,242 ----
> > }
> > }
> >
> > +
> > +
> > /*-------------------------------------------------------------------------
> > + * c_plarcr : Plot an arc with rotate supportd.
> > + *
> > + * Takes the following arguments:
> > + *
> > + * x, y:
> > + * x and y coordinates for the center of the arc
> > + *
> > + * a, b:
> > + * Radius of the arc's major and minor axes
> > + *
> > + * angle1:
> > + * Start angle (degrees)
> > + *
> > + * angle2:
> > + * End angle (degrees)
> > + *
> > + * rotate:
> > + * rotate angle ( degrees )
> > + *
> > + * fill:
> > + * Should the arc be filled?
> > + *
> > +
> > *-------------------------------------------------------------------------*/
> > +
> > + void
> > + plarcr_approx( PLFLT x, PLFLT y, PLFLT a, PLFLT b, PLFLT angle1, PLFLT
> > angle2, PLFLT rotate, PLBOOL fill )
> > + {
> > +
> > + PLINT i;
> > + PLFLT theta0, theta_step, theta, d_angle;
> > +
> > + /* rotatd angle */
> > + PLFLT alpha = DEG_TO_RAD( rotate );
> > +
> > + PLFLT cos_alpha = cos( alpha );
> > + PLFLT sin_alpha = sin( alpha );
> > +
> > + PLFLT tmp_x;
> > + PLFLT tmp_y;
> > +
> > + PLINT segments;
> > + PLFLT xs[CIRCLE_SEGMENTS], ys[CIRCLE_SEGMENTS];
> > +
> > + /* The difference between the start and end angles */
> > + d_angle = DEG_TO_RAD( angle2 - angle1 );
> > + if ( fabs( d_angle ) > M_PI * 2.0 )
> > + d_angle = M_PI * 2.0;
> > +
> > + /* The number of line segments used to approximate the arc */
> > + segments = d_angle / ( 2.0 * M_PI ) * CIRCLE_SEGMENTS;
> > + /* Always use at least 2 arc points, otherwise fills will break. */
> > + if ( segments < 2 )
> > + segments = 2;
> > + /* The start angle in radians and number of radians in each
> > approximating
> > + * segment. */
> > + theta0 = DEG_TO_RAD( angle1 );
> > +
> > + theta_step = d_angle / ( segments - 1 );
> > +
> > + /* The coordinates for the circle outline */
> > + for ( i = 0; i < segments; i++ )
> > + {
> > + theta = theta0 + theta_step * (PLFLT) i;
> > +
> > + tmp_x = a * cos( theta );
> > + tmp_y = b * sin( theta );
> > +
> > + xs[i] = tmp_x * cos_alpha - tmp_y * sin_alpha + x;
> > + ys[i] = tmp_y * cos_alpha + tmp_x * sin_alpha + y;
> > + //xs[i] = a * ( cos( theta ) * cos_alpha - sin( theta ) *
> > sin_alpha ) + x;
> > + //ys[i] = b * ( cos( theta ) * sin_alpha + sin( theta ) *
> > cos_alpha ) + y;
> > + }
> > +
> > + if ( fill )
> > + {
> > + /* Add the center point if we aren't drawing a circle */
> > + if ( fabs( d_angle ) < M_PI * 2.0 )
> > + {
> > + xs[segments - 1] = x;
> > + ys[segments - 1] = y;
> > + }
> > + /* Draw a filled arc */
> > + plfill( segments, xs, ys );
> > + }
> > + else
> > + {
> > + /* Draw the arc outline */
> > + plline( segments, xs, ys );
> > + }
> > + }
> > +
> > + void
> > + c_plarcr( PLFLT x, PLFLT y, PLFLT a, PLFLT b, PLFLT angle1, PLFLT angle2,
> > PLFLT rotate, PLBOOL fill )
> > + {
> > + plarcr_approx( x, y, a, b, angle1, angle2, rotate, fill );
> > + }
> > +
>
> > ------------------------------------------------------------------------------
> > BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA
> > The must-attend event for mobile developers. Connect with experts.
> > Get tools for creating Super Apps. See the latest technologies.
> > Sessions, hands-on labs, demos & much more. Register early & save!
> > http://p.sf.net/sfu/rim-blackberry-1
> > _______________________________________________
> > Plplot-devel mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/plplot-devel
>
>
> ------------------------------------------------------------------------------
> BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA
> The must-attend event for mobile developers. Connect with experts.
> Get tools for creating Super Apps. See the latest technologies.
> Sessions, hands-on labs, demos & much more. Register early & save!
> http://p.sf.net/sfu/rim-blackberry-1
> _______________________________________________
> Plplot-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/plplot-devel
>
------------------------------------------------------------------------------
BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA
The must-attend event for mobile developers. Connect with experts.
Get tools for creating Super Apps. See the latest technologies.
Sessions, hands-on labs, demos & much more. Register early & save!
http://p.sf.net/sfu/rim-blackberry-1
_______________________________________________
Plplot-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/plplot-devel