Thank you for your patch. This functionality is already implemented in
the current version of plplot (5.9.8), although the documentation has
not been properly updated. I will fix this in the subversion repository.
Regards
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