Changeset 200 in Sophya for trunk/SophyaPI


Ignore:
Timestamp:
Feb 25, 1999, 2:37:21 PM (27 years ago)
Author:
ercodmgr
Message:

dessin grille + ticks axes correctement geres rz+cmv 25/2/99

Location:
trunk/SophyaPI/PI
Files:
2 edited

Legend:

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

    r163 r200  
    226226}
    227227
     228static void BestTicks(float rmin,float rmax,int nticks,float& majt)
     229{
     230double d = rmax - rmin;
     231double ld = log10(d);
     232double fld = floor(fabs(ld));
     233double del,del0;
     234double fac[4] = {2.,5.,10.,20.};
     235if(ld>=0.) { fld -= 1.; del0 = del = pow(10.,fld); }
     236else { fld += 2.; del0 = del = pow(10., -fld); }
     237int k=0;
     238while( d/del > (double) nticks && k<4 ) { del = fac[k]*del0; k++; }
     239majt = del;
     240}
    228241
    229242void
    230243PIDrawer::CalcTicks()
    231244{
    232         float xExt = xMax-xMin;
    233         int lx = (int) ceil(log10(xExt)-0.1);
    234         xExt = (float)pow(10.0,lx);
    235         xMajTickStep = xExt/10;
    236         xMinTickStep = xMajTickStep/10;
    237     xFirstMajTick = int(xMin / xMajTickStep) * xMajTickStep;
    238     if (xFirstMajTick < xMin) xFirstMajTick += xMajTickStep;
    239     xFirstMinTick = int(xMin / xMinTickStep) * xMinTickStep;
    240     if (xFirstMinTick < xMin) xFirstMinTick += xMinTickStep;
    241    
    242    
    243         float yExt = yMax-yMin;
    244         int ly = (int) ceil(log10(yExt)-0.1);
    245         yExt = (float)pow(10.0,ly);
    246         yMajTickStep = yExt/10;
    247         yMinTickStep = yMajTickStep/10;
    248     yFirstMajTick = int(yMin / yMajTickStep) * yMajTickStep;
    249     if (yFirstMajTick < yMin) yFirstMajTick += yMajTickStep;
    250     yFirstMinTick = int(yMin / yMinTickStep) * yMinTickStep;
    251     if (yFirstMinTick < yMin) yFirstMinTick += yMinTickStep;
    252    
    253     yMajTickLen = (xMax-xMin)/100;
    254     yMinTickLen = (xMax-xMin)/250;
    255     xMajTickLen = (yMax-yMin)/100;
    256     xMinTickLen = (yMax-yMin)/250;
    257 
    258 }
    259 
    260 
     245  BestTicks(xMin,xMax,7,xMajTickStep);
     246  xMinTickStep = xMajTickStep/10;
     247  xFirstMajTick = int(xMin / xMajTickStep) * xMajTickStep;
     248  if (xFirstMajTick < xMin) xFirstMajTick += xMajTickStep;
     249  xFirstMinTick = int(xMin / xMinTickStep) * xMinTickStep;
     250  if (xFirstMinTick < xMin) xFirstMinTick += xMinTickStep;
     251
     252  BestTicks(yMin,yMax,12,yMajTickStep);
     253  yMinTickStep = yMajTickStep/10;
     254  yFirstMajTick = int(yMin / yMajTickStep) * yMajTickStep;
     255  if (yFirstMajTick < yMin) yFirstMajTick += yMajTickStep;
     256  yFirstMinTick = int(yMin / yMinTickStep) * yMinTickStep;
     257  if (yFirstMinTick < yMin) yFirstMinTick += yMinTickStep;
     258
     259  yMajTickLen = (xMax-xMin)/100;
     260  yMinTickLen = (xMax-xMin)/250;
     261  xMajTickLen = (yMax-yMin)/100;
     262  xMinTickLen = (yMax-yMin)/250;
     263}
    261264
    262265void
     
    280283  else g->SelLine(mLAtt);
    281284  unsigned int flags = axesFlags;
     285
    282286  if (flags & kStdAxes) {
    283  
     287
    284288    // Les axes
    285289   
     
    335339    float extYMinTickLen = flags&kExtTicks ? yMinTickLen : 0;
    336340    float intYMinTickLen = flags&kIntTicks ? yMinTickLen : 0;
     341
     342    // La grille en pointilles
     343
     344    if (flags & kGridOn) DrawGrid(g);
    337345
    338346    // Les ticks majeurs
     
    440448      g->DrawString(x+xOffset, y, label);
    441449  }
     450}
     451
     452void
     453PIDrawer::DrawGrid(PIGraphicUC* g)
     454{
     455  PILineAtt savlineatt = g->GetLineAtt();
     456  g->SelLine(PI_ThinDashedLine);
     457
     458  for (float x=xFirstMajTick; x<=xMax; x += xMajTickStep)
     459    g->DrawLine(x, yMin, x, yMax);
     460
     461  for (float y=yFirstMajTick; y<=yMax; y += yMajTickStep)
     462    g->DrawLine(xMin, y, xMax, y);
     463
     464  g->SelLine(savlineatt);
    442465}
    443466
  • trunk/SophyaPI/PI/pidrawer.h

    r163 r200  
    2323  kMinTicks    = 0x0080,
    2424  kLabels      = 0x1000,
     25  kGridOn      = 0x2000,
    2526  kAxesDflt    = kStdAxes | kTicks | kLabels,       // Axes trace par defaut
    2627  kAxesNone    = 0                                  // Pas de trace d axe 
     
    8283  void DrawHLabels(PIGraphicUC* g, float y, float xBeg, float xStep, int just=0);
    8384  void DrawVLabels(PIGraphicUC* g, float x, float yBeg, float yStep, int just=0);
     85  void DrawGrid(PIGraphicUC* g);
    8486
    8587 
Note: See TracChangeset for help on using the changeset viewer.