Changeset 1643 in Sophya


Ignore:
Timestamp:
Aug 23, 2001, 7:06:31 PM (24 years ago)
Author:
cmv
Message:

des labels sur axes horizontaux encore mieux... cmv 23/8/2001

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaPI/PI/pidrawer.cc

    r1640 r1643  
    329329{
    330330double d = rmax - rmin;
    331 if (d < 1.e-39) d = 1.e-39;
     331//if (d < 1.e-39) d = 1.e-39;
     332if (d < 1.e-100) d = 1.e-100;
    332333double ld = log10(d);
    333334double fld = floor(fabs(ld));
     
    344345PIDrawer::CalcTicks()
    345346{
    346   int ntick_x = (aXlog) ? 4 : 7;
     347  int ntick_x = (aXlog) ? 6 : 10;
    347348  BestTicks(xMin,xMax,ntick_x,xMajTickStep);
    348349  xMinTickStep = xMajTickStep/5;
     
    512513PIDrawer::DrawHTicks(PIGraphicUC* g, double y, double tickUp, double tickDown, double xBeg, double xStep)
    513514{
    514   for (double x=xBeg; x<=xMax; x += xStep)
     515  for (double x=xBeg; x<=xMax+xStep/10.; x += xStep)
    515516    g->DrawLine(x, g->DeltaUCY(y, -tickDown), x, g->DeltaUCY(y, tickUp));
    516517}
     
    535536  BonFormatAxes(xBeg,xMax,xStep,format);
    536537
    537   // Pour que les labels ne se sur-ecrivent pas (On ne peut pas changer
    538   // xStep a ce niveau sinon les labels ne sont pas en face des ticks)
    539   double largeurmax = -1.;
    540   int ntick = 0;
    541   for(double x=xMin;x<=xMax;x+=xStep) {
    542     double xx = (fabs(x/xStep)<1.e-5) ? 0.: x;
    543     char label[64]; sprintf(label,format.c_str(), xx);
    544     for(kk=0;kk<64;kk++) if(label[kk]==' ') {label[kk]='\0'; break;}
    545     double largeur = g->CalcStringWidth(label);
    546     if(largeur>largeurmax) largeurmax=largeur;
    547     ntick++;
    548   }
    549   largeurmax *= 1.1;  // 10% de securite
    550 
    551   double xlastlabel = xBeg; int ntick1=0;
    552   for (double x=xBeg; x<=xMax; x += xStep) {
     538  double xlastlabelfin = xBeg - 2.*(xMax-xBeg);
     539  for (double x=xBeg; x<=xMax+xStep/10.; x += xStep) {
    553540      // Attention aux erreurs d'arrondi quand x->0
    554541      //        car on code 5.1698e-26 au lieu de 0
     
    557544      for(kk=0;kk<64;kk++) if(label[kk]==' ') {label[kk]='\0'; break;}
    558545      double largeur = g->CalcStringWidth(label);
    559       if (just == 1)
    560         xOffset = -largeur;
    561       else if (just == 0)
    562         xOffset = -largeur/2;
    563       else
    564         xOffset = 0;
    565       if (aXdir)  xOffset = -xOffset;
    566       if( ntick1==0 || ntick1==ntick-1
    567         || (xlastlabel+largeurmax<x && x+largeurmax<xMax) ) {
     546      if(just == 1)        xOffset = -largeur;
     547        else if(just == 0) xOffset = -largeur/2;
     548          else             xOffset = 0;
     549      if(aXdir)            xOffset = -xOffset;
     550      if( x+xOffset > xlastlabelfin ) {
    568551        g->DrawString(g->DeltaUCX(x,xOffset), y, label);
    569         xlastlabel = x;
     552        xlastlabelfin = x + xOffset + 1.1*largeur;
    570553      }
    571       ntick1 ++;
    572554  }
    573555}
Note: See TracChangeset for help on using the changeset viewer.