Changeset 1946 in Sophya


Ignore:
Timestamp:
Mar 26, 2002, 6:37:10 PM (24 years ago)
Author:
cmv
Message:
  • gestion des axes avec positions et decalage OK.
  • ATTENTION GROSSE MODIF: ds piscdrawwdg.cc et pigraphuc.cc changement: 1.e-39 -> PETIT_DBLE 1.e-5 -> PREC_DBLE 1.e-19 -> PROT_DBLE puis: #define PETIT_DBLE 1.e-100

#define PREC_DBLE 1.e-16
#define PROT_DBLE 1.e-40

rz +cmv 26/03/2002

(changement de version -> 1.3 54)

Location:
trunk/SophyaPI/PI
Files:
4 edited

Legend:

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

    r1937 r1946  
    5252  limitsFixed = 0;
    5353  SetAxesFlags(kAxesNone);   // Pas de trace d'axes par defaut
     54  SetAxesAutoFontSize();
     55
    5456  mDndfg = false;  // Pour controle de l'appel de Detach() si delete
    5557
     
    358360    // Les axes
    359361   
    360     g->DrawLine(xMin, 0, xMax, 0);
    361     g->DrawLine(0, yMin, 0, yMax);
     362    g->DrawLine(xMin, (yMin+yMax)/2., xMax, (yMin+yMax)/2.);
     363    g->DrawLine((xMin+xMax)/2., yMin, (xMin+xMax)/2., yMax);
    362364
    363365    // La grille en pointilles
     
    368370 
    369371    if (flags & kMajTicks) {
    370         DrawHTicks(g, 0, xMajTickLen, xMajTickLen, xFirstMajTick, xMajTickStep);
    371         DrawVTicks(g, 0, yMajTickLen, yMajTickLen, yFirstMajTick, yMajTickStep);
     372        DrawHTicks(g, (yMin+yMax)/2., xMajTickLen, xMajTickLen, xFirstMajTick, xMajTickStep);
     373        DrawVTicks(g, (xMin+xMax)/2., yMajTickLen, yMajTickLen, yFirstMajTick, yMajTickStep);
    372374    }
    373375   
     
    375377 
    376378    if (flags & kMinTicks) {
    377         DrawHTicks(g, 0, xMinTickLen, xMinTickLen, xFirstMinTick, xMinTickStep);
    378         DrawVTicks(g, 0, yMinTickLen, yMinTickLen, yFirstMinTick, yMinTickStep);
     379        DrawHTicks(g, (yMin+yMax)/2., xMinTickLen, xMinTickLen, xFirstMinTick, xMinTickStep);
     380        DrawVTicks(g, (xMin+xMax)/2., yMinTickLen, yMinTickLen, yFirstMinTick, yMinTickStep);
    379381    }
    380382   
     
    383385    if (flags & kLabels) {
    384386      if (!aYdir)
    385         DrawHLabels(g, -xMajTickLen*6, xFirstMajTick, xMajTickStep,0);
     387        DrawHLabels(g, (yMin+yMax)/2.-xMajTickLen*2, xFirstMajTick, xMajTickStep,PI_VerticalTop);
    386388      else
    387         DrawHLabels(g, xMajTickLen*6, xFirstMajTick, xMajTickStep,0);
     389        DrawHLabels(g, (yMin+yMax)/2.+xMajTickLen*2, xFirstMajTick, xMajTickStep,PI_VerticalTop);
    388390      if (!aXdir)
    389         DrawVLabels(g, -yMajTickLen*2, yFirstMajTick, yMajTickStep,1);
     391        DrawVLabels(g, (xMin+xMax)/2.-yMajTickLen*2, yFirstMajTick, yMajTickStep,PI_HorizontalRight);
    390392      else
    391         DrawVLabels(g, yMajTickLen*2, yFirstMajTick, yMajTickStep,1);
     393        DrawVLabels(g, (xMin+xMax)/2.+yMajTickLen*2, yFirstMajTick, yMajTickStep,PI_HorizontalRight);
    392394    }
    393395   
     
    441443    if (flags & kLabels) {
    442444      if (!aYdir) {
    443         DrawHLabels(g, g->DeltaUCY(yMin, -xMajTickLen*6), xFirstMajTick, xMajTickStep,0);
    444         //DrawHLabels(g, g->DeltaUCY(yMax,  xMajTickLen*2), xFirstMajTick, xMajTickStep,0);
     445        DrawHLabels(g, g->DeltaUCY(yMin, -xMajTickLen*2), xFirstMajTick, xMajTickStep,PI_VerticalTop);
     446        //DrawHLabels(g, g->DeltaUCY(yMax,  xMajTickLen*2), xFirstMajTick, xMajTickStep,PI_VerticalBottom);
    445447      }
    446448      else {
    447         //DrawHLabels(g, g->DeltaUCY(yMin, -xMajTickLen*2), xFirstMajTick, xMajTickStep,0);
    448         DrawHLabels(g, g->DeltaUCY(yMax,  xMajTickLen*6), xFirstMajTick, xMajTickStep,0);
     449        //DrawHLabels(g, g->DeltaUCY(yMin, -xMajTickLen*2), xFirstMajTick, xMajTickStep,PI_VerticalBottom);
     450        DrawHLabels(g, g->DeltaUCY(yMax,  xMajTickLen*2), xFirstMajTick, xMajTickStep,PI_VerticalTop);
    449451      }
    450452      if (!aXdir) {
    451         DrawVLabels(g, g->DeltaUCX(xMin, -yMajTickLen*2), yFirstMajTick, yMajTickStep,1);
    452         //DrawVLabels(g, g->DeltaUCX(xMax,  yMajTickLen*2), yFirstMajTick, yMajTickStep,-1);
     453        DrawVLabels(g, g->DeltaUCX(xMin, -yMajTickLen*2), yFirstMajTick, yMajTickStep,PI_HorizontalRight);
     454        //DrawVLabels(g, g->DeltaUCX(xMax,  yMajTickLen*2), yFirstMajTick, yMajTickStep,PI_HorizontalLeft);
    453455      }
    454456      else {
    455         //DrawVLabels(g, g->DeltaUCX(xMin, -yMajTickLen*2), yFirstMajTick, yMajTickStep,-1);
    456         DrawVLabels(g, g->DeltaUCX(xMax,  yMajTickLen*2), yFirstMajTick, yMajTickStep,1);
     457        //DrawVLabels(g, g->DeltaUCX(xMin, -yMajTickLen*2), yFirstMajTick, yMajTickStep,PI_HorizontalLeft);
     458        DrawVLabels(g, g->DeltaUCX(xMax,  yMajTickLen*2), yFirstMajTick, yMajTickStep,PI_HorizontalRight);
    457459      }
    458460    }
     
    493495
    494496void
    495 PIDrawer::DrawHLabels(PIGraphicUC* g, double y, double xBeg, double xStep, int just)
     497PIDrawer::DrawHLabels(PIGraphicUC* g, double y, double xBeg, double xStep, unsigned long just)
    496498{
    497499  double fsz = xMajTickLen*4.;
     
    499501
    500502  // Choix du bon format pour les labels des axes;
    501   char label[64]; string format; double fac = 1.;
     503  char label[64]; string format; double fac=1.; bool p10=false;
    502504  int npuiss = BonFormatAxes(xBeg,xMax,xStep,format,2,1);
    503 
    504   if(npuiss!=0) {
    505     fac = pow(10.,(double)npuiss);
    506     sprintf(label,"10^%d",npuiss);
    507     double xm = (aXdir)? xMin: xMax;
    508     double ym = (aYdir)? yMax+1.5*fsz: yMin-1.5*fsz;
    509     g->DrawString(xm,ym,label,PI_HorizontalCenter|PI_VerticalTop);
    510   }
     505  if(npuiss<-2 || npuiss>3) {p10 = true; fac=pow(10.,(double)npuiss);}
     506  else BonFormatAxes(xBeg,xMax,xStep,format,0,1);
    511507
    512508  double xOffset = 0;
     
    518514    for(int kk=0;kk<64;kk++) if(label[kk]==' ') {label[kk]='\0'; break;}
    519515    double largeur = g->CalcStringWidth(label);
    520     if(just==1) xOffset=-largeur; else if(just==0) xOffset=-largeur/2;
    521     if(aXdir) xOffset = -xOffset;
     516    if(aXdir) xOffset = largeur/2; else xOffset=-largeur/2;
    522517    if(x+xOffset > xlastlabelfin) {
    523       g->DrawString(g->DeltaUCX(x,xOffset),y,label);
     518      g->DrawString(x,y,label,PI_HorizontalCenter|just);
    524519      xlastlabelfin = x + xOffset + 1.1*largeur;
    525520    }
    526521  }
    527 }
    528 
    529 void
    530 PIDrawer::DrawVLabels(PIGraphicUC* g, double x, double yBeg, double yStep, int just)
     522
     523  if(p10) {
     524    PIGrCoord asc,desc;
     525    double h = g->GetFontHeight(asc,desc);
     526    if((aYdir && (just&PI_VerticalBottom)) || (!aYdir && (just&PI_VerticalTop)) ) h = -h;
     527    double xm = (aXdir)? xMin: xMax;
     528    double ym = g->DeltaUCY(y,1.5*h);
     529    sprintf(label,"%d",npuiss);
     530    g->DrawCompString(xm,ym,"x 10",label,NULL,PI_HorizontalCenter|just);
     531  }
     532
     533}
     534
     535void
     536PIDrawer::DrawVLabels(PIGraphicUC* g, double x, double yBeg, double yStep, unsigned long just)
    531537{
    532538  double fsz = xMajTickLen*4.;
     
    534540
    535541  // Choix du bon format pour les labels des axes;
    536   char label[64]; string format; double fac = 1.;
     542  char label[64]; string format; double fac=1.; bool p10=false;
    537543  int npuiss = BonFormatAxes(yBeg,yMax,yStep,format,2,1);
    538 
    539   if(npuiss!=0) {
    540     fac = pow(10.,(double)npuiss);
    541     sprintf(label,"10^%d",npuiss);
    542     double xm = (aXdir)? xMax: xMin;
    543     double ym = (aYdir)? yMin-1.5*fsz: yMax+1.5*fsz;
    544     g->DrawString(xm,ym,label,PI_HorizontalRight|PI_VerticalBottom);
     544  if(npuiss<-2 || npuiss>3) {p10 = true; fac=pow(10.,(double)npuiss);}
     545  else BonFormatAxes(yBeg,yMax,yStep,format,0,1);
     546
     547  for(double y=yBeg; y<=yMax; y += yStep) {
     548    double yy = (fabs(y/yStep)<1.e-5) ? 0.: y;
     549    sprintf(label,format.c_str(),yy/fac);
     550    for(int kk=0;kk<64;kk++) if(label[kk]==' ') {label[kk]='\0'; break;}
     551    g->DrawString(x,y,label,PI_VerticalCenter|just);
    545552  }
    546553
    547   double xOffset = 0;
    548   for (double y=yBeg; y<=yMax; y += yStep) {
    549       double yy = (fabs(y/yStep)<1.e-5) ? 0.: y;
    550       sprintf(label,format.c_str(),yy/fac);
    551       for(int kk=0;kk<64;kk++) if(label[kk]==' ') {label[kk]='\0'; break;}
    552       double largeur = g->CalcStringWidth(label);
    553       if (just==1) xOffset=-largeur; else if(just==0) xOffset=-largeur/2;
    554       if (aXdir)  xOffset = -xOffset;
    555       g->DrawString(g->DeltaUCX(x, xOffset), y, label);
     554  if(p10) {
     555    PIGrCoord asc,desc;
     556    double h = g->GetFontHeight(asc,desc);
     557    if(aYdir) h = -h;
     558    double ym = (aYdir)? yMin: yMax; ym = g->DeltaUCY(ym,h);
     559    sprintf(label,"%d",npuiss);
     560    g->DrawCompString(x,ym,"x 10",label,NULL,PI_VerticalBottom|just);
    556561  }
     562
    557563}
    558564
     
    665671   // Ex: 1.2345e+2 -> 123.45   /  -1.2345e+2 -> -123.45
    666672   //     1.2345e-1 -> 0.12345  /  -1.2345e-1 -> -0.12345
    667    if(axmin>=1e-4 && axmax<1e4) ftype='f';
     673   if((axmin>=1e-4 || axmin==0.) && axmax<1e4) ftype='f';
    668674 }
    669675
  • trunk/SophyaPI/PI/pidrawer.h

    r1932 r1946  
    122122  void DrawHTicks(PIGraphicUC* g, double y, double tickUp, double tickDown, double xBeg, double xStep);
    123123  void DrawVTicks(PIGraphicUC* g, double x, double tickLeft, double tickRight, double yBeg, double yStep);
    124   void DrawHLabels(PIGraphicUC* g, double y, double xBeg, double xStep, int just=0);
    125   void DrawVLabels(PIGraphicUC* g, double x, double yBeg, double yStep, int just=0);
     124  void DrawHLabels(PIGraphicUC* g, double y, double xBeg, double xStep, unsigned long just=0);
     125  void DrawVLabels(PIGraphicUC* g, double x, double yBeg, double yStep, unsigned long just=0);
    126126  void DrawGrid(PIGraphicUC* g);
    127127
  • trunk/SophyaPI/PI/pigraphuc.cc

    r1939 r1946  
    1212#include <ieeefp.h>
    1313#endif
     14
     15//define PETIT_DBLE 1.e-39
     16//define PREC_DBLE  1.e-5
     17//define PROT_DBLE  1.e-19
     18#define PETIT_DBLE 1.e-100
     19#define PREC_DBLE  1.e-16
     20#define PROT_DBLE  1.e-40
    1421
    1522//++
     
    169176  }
    170177
    171   // $ CMV A FAIRE: metrte des define pour les 1.e-39 1.e-19 1.e-5
    172   //                ET ADAPTER POUR DES DOUBLES !!!!! ==> 1.e-100 etc..
    173178  double xym;
    174   xym = fabs(xmax+xmin); xym = (xym > 1.e-39) ? xym : 1.e-39;
    175   if ((xmax-xmin)/xym < 1.e-5) { xmin = xmin - 5.e-6*xym;  xmax = xmin + 1.e-5*xym; }
    176   xym = fabs(ymax+ymin); xym = (xym > 1.e-39) ? xym : 1.e-39;
    177   if ((ymax-ymin)/xym < 1.e-5) { ymin = ymin - 5.e-6*xym;  ymax = ymin + 1.e-5*xym; }
     179  xym = fabs(xmax+xmin); xym = (xym > PETIT_DBLE) ? xym : PETIT_DBLE;
     180  if ((xmax-xmin)/xym < PREC_DBLE) {xmin=xmin-PREC_DBLE/2.*xym; xmax=xmin+PREC_DBLE*xym;}
     181  xym = fabs(ymax+ymin); xym = (xym > PETIT_DBLE) ? xym : PETIT_DBLE;
     182  if ((ymax-ymin)/xym < PREC_DBLE) {ymin=ymin-PREC_DBLE/2.*xym; ymax=ymin+PREC_DBLE*xym;}
    178183//  if (xmax <= xmin  || ymax <= ymin) {
    179184//    cerr << "PIGraphicUC::SetUCS() Error - xmax <= xmin  || ymax <= ymin ! " << endl;
     
    196201
    197202  xScale = xWd/(xMax-xMin);
    198   if (xScale < 1.e-19)  xScale = 1.e-19;  // Protection
     203  if (xScale < PROT_DBLE)  xScale = PROT_DBLE;  // Protection
    199204  if (aXdir)  {
    200205    xScale = -xScale;
     
    205210
    206211  yScale = yWd/(yMax-yMin);
    207   if (yScale < 1.e-19)  yScale = 1.e-19;  // Protection
     212  if (yScale < PROT_DBLE)  yScale = PROT_DBLE;  // Protection
    208213  if (!aYdir) {
    209214    yScale = -yScale;
     
    220225{
    221226if (logx)
    222   if (xMax < 1.e-39) {
    223     cerr << "PIGraphicUC::SetLogScale() Warning - XLogScale not valid for XMax ="
    224          << xMax << " < 1.e-39" << endl;
     227  if (xMax < PETIT_DBLE) {
     228    cerr<< "PIGraphicUC::SetLogScale() Warning - XLogScale not valid for XMax ="
     229        << xMax<<" < "<<PETIT_DBLE<<endl;
    225230    logx = false;
    226231  }
    227232if (logy)
    228   if (yMax < 1.e-39) {
    229     cerr << "PIGraphicUC::SetLogScale() Warning - YLogScale not valid for YMax ="
    230          << yMax << " < 1.e-39" << endl;
     233  if (yMax < PETIT_DBLE) {
     234    cerr<<"PIGraphicUC::SetLogScale() Warning - YLogScale not valid for YMax ="
     235        <<yMax<<" < "<<PETIT_DBLE<<endl;
    231236    logy = false;
    232237  }
     
    236241
    237242if (aXlog) {     
    238   xMinLog = (xMin > 1.e-39) ? xMin : ( (1. < xMax/10.) ? 1. : xMax/10.);
     243  xMinLog = (xMin > PETIT_DBLE) ? xMin : ( (1. < xMax/10.) ? 1. : xMax/10.);
    239244  xScaleLog = xWd*(xMax-xMinLog)/(xMax-xMin) / (log10(xMax)-log10(xMinLog));
    240   if (xScaleLog < 1.e-19)  xScaleLog = 1.e-19;  // Protection
     245  if (xScaleLog < PROT_DBLE)  xScaleLog = PROT_DBLE;  // Protection
    241246  if (aXdir)  {
    242247    xScaleLog = -xScaleLog;
     
    253258}
    254259if (aYlog) {     
    255   yMinLog = (yMin > 1.e-39) ? yMin : ( (1. < yMax/10.) ? 1. : yMax/10.);
     260  yMinLog = (yMin > PETIT_DBLE) ? yMin : ( (1. < yMax/10.) ? 1. : yMax/10.);
    256261  yScaleLog = yWd*(yMax-yMinLog)/(yMax-yMin) / (log10(yMax)-log10(yMinLog));
    257   if (yScaleLog < 1.e-19)  yScaleLog = 1.e-19;  // Protection
     262  if (yScaleLog < PROT_DBLE)  yScaleLog = PROT_DBLE;  // Protection
    258263  if (!aYdir) {
    259264    yScaleLog = -yScaleLog;
  • trunk/SophyaPI/PI/piscdrawwdg.cc

    r1932 r1946  
    1010#include "pidrwtools.h"
    1111#include "piaxestools.h"
     12
     13//define PETIT_DBLE 1.e-39
     14//define PREC_DBLE  1.e-5
     15#define PETIT_DBLE 1.e-100
     16#define PREC_DBLE  1.e-16
    1217
    1318
     
    166171//    }
    167172  double xym;
    168   xym = fabs(xmax+xmin); xym = (xym > 1.e-39) ? xym : 1.e-39;
    169   if ((xmax-xmin)/xym < 1.e-5) { xmin = xmin - 5.e-6*xym;  xmax = xmin + 1.e-5*xym; }
    170   xym = fabs(ymax+ymin); xym = (xym > 1.e-39) ? xym : 1.e-39;
    171   if ((ymax-ymin)/xym < 1.e-5) { ymin = ymin - 5.e-6*xym;  ymax = ymin + 1.e-5*xym; }
     173  xym = fabs(xmax+xmin); xym = (xym > PETIT_DBLE) ? xym : PETIT_DBLE;
     174  if ((xmax-xmin)/xym < PREC_DBLE) { xmin = xmin - PREC_DBLE/2.*xym;  xmax = xmin + PREC_DBLE*xym; }
     175  xym = fabs(ymax+ymin); xym = (xym > PETIT_DBLE) ? xym : PETIT_DBLE;
     176  if ((ymax-ymin)/xym < PREC_DBLE) { ymin = ymin - PREC_DBLE/2.*xym;  ymax = ymin + PREC_DBLE*xym; }
    172177
    173178  SetDefaultDrawerLimits(xmin, xmax, ymin, ymax, axrl, ayud);
Note: See TracChangeset for help on using the changeset viewer.