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&reg; 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
> Plplot-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/plplot-devel


------------------------------------------------------------------------------
BlackBerry&reg; 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
Plplot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/plplot-devel

Reply via email to