00001
00002
00003
00004
00005
00006
00007
00008 #include "drawLegendEntity.h"
00009 #include "GetProperty.h"
00010 #include "Xcall1.h"
00011 #include "periScreen.h"
00012 #include "MALLOC.h"
00013 #include "sciprint.h"
00014 #include "PloEch.h"
00015
00016
00017
00024 void Legends( integer * style, integer * n1, char * legend )
00025 {
00026 int rect[4] ;
00027 int xx = 0 ;
00028 int yy = 0 ;
00029 char *leg,*loc;
00030 double xi,xi1,yi,yi1,xoffset,yoffset;
00031 int i;
00032 integer verbose=0,narg,xz[10],fg;
00033
00034 loc = MALLOC( (strlen(legend)+1)*sizeof(char));
00035 if ( loc == NULL )
00036 {
00037 sciprint( "Impossible to draw legends, memory full.\n" ) ;
00038 return ;
00039 }
00040
00041
00042 C2F(dr)("xstringl","pl",&xx,&yy,rect,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
00043
00044 C2F(dr)("xget","foreground",&verbose,&fg,&narg,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
00045 C2F(dr)("xget","line style",&verbose,xz,&narg,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
00046 C2F(dr)("xset","line style",(i=1,&i),PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
00047
00048 C2F(dr)("xget","color",&verbose,xz+6,&narg,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
00049 C2F(dr)("xset","color",&fg,PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
00050
00051 strcpy(loc,legend);
00052
00053
00054 xoffset= (Cscale.wdim[0]*Cscale.subwin_rect[2]*(1- Cscale.axis[0] - Cscale.axis[1]))/12.0;
00055
00056 yoffset= (Cscale.wdim[1]*Cscale.subwin_rect[3]*Cscale.axis[3])/5.0;
00057
00058
00059 xi = Cscale.wdim[0]*Cscale.subwin_rect[2]*Cscale.axis[0]
00060 + Cscale.subwin_rect[0]*Cscale.wdim[0];
00061
00062 xi1 = xi + Cscale.wdim[0]*Cscale.subwin_rect[2]*(1.0 - (Cscale.axis[0]+Cscale.axis[1]))/2.0 ;
00063
00064
00065 yi1 = Cscale.wdim[1]*Cscale.subwin_rect[3]*Cscale.axis[2]
00066 + Cscale.subwin_rect[1]*Cscale.wdim[1]
00067 + Cscale.subwin_rect[3]*Cscale.wdim[1]*(1.0 - (Cscale.axis[2]+Cscale.axis[3])) ;
00068
00069 for ( i = 0 ; i < *n1 && i < 6 ; i++)
00070 {
00071 integer xs,ys,flag=0,polyx[2],polyy[2],lstyle[1];
00072 double angle=0.0;
00073
00074 if (i >= 3)
00075 {
00076
00077 xi= xi1;
00078 yi= yi1 +(i-3)*yoffset+3.0*yoffset;}
00079 else
00080 {
00081 yi= yi1 + (i)*yoffset+3.0*yoffset;
00082 }
00083 xs=inint(xi+1.2*xoffset);
00084 ys=inint(yi);
00085
00086 if ( i==0) leg=strtok(loc,"@"); else leg=strtok((char *)0,"@");
00087 if (leg != 0)
00088 {
00089 C2F(dr)("xset","color",&fg,PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
00090 C2F(dr)("xstring",leg,&xs,&ys,PI0,&flag,PI0,PI0,&angle,PD0,PD0,PD0,0L,0L);
00091 C2F(dr)("xset","color",xz+6,PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
00092 if (style[i] > 0)
00093 {
00094 integer n=1,p=2;
00095 polyx[0]=inint(xi);polyx[1]=inint(xi+xoffset);
00096 polyy[0]=inint(yi - rect[3]/2.0);polyy[1]=polyy[0];
00097 lstyle[0]=style[i];
00098 C2F(dr)("xpolys","v",polyx,polyy,lstyle,&n,&p
00099 ,PI0,PD0,PD0,PD0,PD0,0L,0L);
00100 }
00101 else
00102 {
00103 integer n=1,p=1;
00104 polyx[0]=inint(xi+xoffset);
00105 polyy[0]=inint(yi- rect[3]/2.0);
00106 lstyle[0]=style[i];
00107 C2F(dr)("xpolys","v",polyx,polyy,lstyle,&n,&p
00108 ,PI0,PD0,PD0,PD0,PD0,0L,0L);
00109 }
00110 }
00111 }
00112 FREE(loc);
00113 C2F(dr)("xset","line style",xz,PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
00114
00115 }
00116
00117
00118
00119 int drawLegendEntity( sciPointObj * pObj )
00120 {
00121 sciLegend * ppLegend = pLEGEND_FEATURE(pObj) ;
00122
00123 int verbose = 0 ;
00124 int foreground = sciGetForeground( pObj ) ;
00125 int fontWidth = sciGetFontDeciWidth( pObj ) / 100 ;
00126 int fontStyle = sciGetFontStyle( pObj ) ;
00127 int oldForeground = 0 ;
00128 int oldDashStyle = 0 ;
00129 int v = 0 ;
00130 double dv = 0.0 ;
00131 int i ;
00132
00133 if ( !sciGetVisibility(pObj) ) { return 0 ; }
00134
00135 C2F(dr1)("xget", "dashes", &verbose, &oldDashStyle, &v, &v, &v,&v, &dv, &dv, &dv, &dv, 5L, 4096);
00136 C2F(dr1)("xget", "foreground", &verbose, &oldForeground, &v, &v, &v, &v, &dv, &dv, &dv, &dv, 5L, 4096);
00137
00138
00139 #ifdef _MSC_VER
00140 flag_DO=MaybeSetWinhdc();
00141 #endif
00142 C2F (dr1) ("xset", "dashes", &foreground, &foreground, &v, &v, &v, &v, &dv,
00143 &dv, &dv, &dv, 5L, 4096);
00144 C2F (dr1) ("xset", "foreground", &foreground, &foreground, &v, &v, &v, &v,
00145 &dv, &dv, &dv, &dv, 5L, 4096);
00146
00147 C2F(dr)("xset","font",&fontStyle,&fontWidth,&v, &v, &v, &v,&dv, &dv, &dv, &dv, 5L, 4L);
00148
00149
00150
00151 for ( i = 0; i < ppLegend->nblegends; i++ )
00152 {
00153 sciPointObj * curObj = ppLegend->pptabofpointobj[i] ;
00154 if ( sciGetIsMark( curObj ) )
00155 {
00156 ppLegend->pstyle[i] = -sciGetMarkStyle( curObj );
00157 }
00158 else
00159 {
00160 ppLegend->pstyle[i] = sciGetForeground( curObj );
00161 }
00162 }
00163 Legends( ppLegend->pstyle, &(ppLegend->nblegends), getStrMatElement(sciGetText(pObj),0,0) ) ;
00164
00165
00166
00167
00168 C2F (dr1) ("xset", "dashes", &oldDashStyle, &v, &v, &v, &v, &v, &dv, &dv, &dv, &dv, 5L, 6L);
00169 C2F (dr1) ("xset", "foreground", &oldForeground, &v, &v, &v, &v, &v, &dv, &dv, &dv, &dv, 5L, 10L);
00170 #ifdef _MSC_VER
00171 if ( flag_DO == 1) ReleaseWinHdc ();
00172 #endif
00173
00174 return 0 ;
00175
00176 }
00177