Changeset 1946 in Sophya
- Timestamp:
- Mar 26, 2002, 6:37:10 PM (24 years ago)
- Location:
- trunk/SophyaPI/PI
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaPI/PI/pidrawer.cc
r1937 r1946 52 52 limitsFixed = 0; 53 53 SetAxesFlags(kAxesNone); // Pas de trace d'axes par defaut 54 SetAxesAutoFontSize(); 55 54 56 mDndfg = false; // Pour controle de l'appel de Detach() si delete 55 57 … … 358 360 // Les axes 359 361 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); 362 364 363 365 // La grille en pointilles … … 368 370 369 371 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); 372 374 } 373 375 … … 375 377 376 378 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); 379 381 } 380 382 … … 383 385 if (flags & kLabels) { 384 386 if (!aYdir) 385 DrawHLabels(g, -xMajTickLen*6, xFirstMajTick, xMajTickStep,0);387 DrawHLabels(g, (yMin+yMax)/2.-xMajTickLen*2, xFirstMajTick, xMajTickStep,PI_VerticalTop); 386 388 else 387 DrawHLabels(g, xMajTickLen*6, xFirstMajTick, xMajTickStep,0);389 DrawHLabels(g, (yMin+yMax)/2.+xMajTickLen*2, xFirstMajTick, xMajTickStep,PI_VerticalTop); 388 390 if (!aXdir) 389 DrawVLabels(g, -yMajTickLen*2, yFirstMajTick, yMajTickStep,1);391 DrawVLabels(g, (xMin+xMax)/2.-yMajTickLen*2, yFirstMajTick, yMajTickStep,PI_HorizontalRight); 390 392 else 391 DrawVLabels(g, yMajTickLen*2, yFirstMajTick, yMajTickStep,1);393 DrawVLabels(g, (xMin+xMax)/2.+yMajTickLen*2, yFirstMajTick, yMajTickStep,PI_HorizontalRight); 392 394 } 393 395 … … 441 443 if (flags & kLabels) { 442 444 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); 445 447 } 446 448 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); 449 451 } 450 452 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); 453 455 } 454 456 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); 457 459 } 458 460 } … … 493 495 494 496 void 495 PIDrawer::DrawHLabels(PIGraphicUC* g, double y, double xBeg, double xStep, intjust)497 PIDrawer::DrawHLabels(PIGraphicUC* g, double y, double xBeg, double xStep, unsigned long just) 496 498 { 497 499 double fsz = xMajTickLen*4.; … … 499 501 500 502 // 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; 502 504 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); 511 507 512 508 double xOffset = 0; … … 518 514 for(int kk=0;kk<64;kk++) if(label[kk]==' ') {label[kk]='\0'; break;} 519 515 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; 522 517 if(x+xOffset > xlastlabelfin) { 523 g->DrawString( g->DeltaUCX(x,xOffset),y,label);518 g->DrawString(x,y,label,PI_HorizontalCenter|just); 524 519 xlastlabelfin = x + xOffset + 1.1*largeur; 525 520 } 526 521 } 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 535 void 536 PIDrawer::DrawVLabels(PIGraphicUC* g, double x, double yBeg, double yStep, unsigned long just) 531 537 { 532 538 double fsz = xMajTickLen*4.; … … 534 540 535 541 // 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; 537 543 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); 545 552 } 546 553 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); 556 561 } 562 557 563 } 558 564 … … 665 671 // Ex: 1.2345e+2 -> 123.45 / -1.2345e+2 -> -123.45 666 672 // 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'; 668 674 } 669 675 -
trunk/SophyaPI/PI/pidrawer.h
r1932 r1946 122 122 void DrawHTicks(PIGraphicUC* g, double y, double tickUp, double tickDown, double xBeg, double xStep); 123 123 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, intjust=0);125 void DrawVLabels(PIGraphicUC* g, double x, double yBeg, double yStep, intjust=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); 126 126 void DrawGrid(PIGraphicUC* g); 127 127 -
trunk/SophyaPI/PI/pigraphuc.cc
r1939 r1946 12 12 #include <ieeefp.h> 13 13 #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 14 21 15 22 //++ … … 169 176 } 170 177 171 // $ CMV A FAIRE: metrte des define pour les 1.e-39 1.e-19 1.e-5172 // ET ADAPTER POUR DES DOUBLES !!!!! ==> 1.e-100 etc..173 178 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;} 178 183 // if (xmax <= xmin || ymax <= ymin) { 179 184 // cerr << "PIGraphicUC::SetUCS() Error - xmax <= xmin || ymax <= ymin ! " << endl; … … 196 201 197 202 xScale = xWd/(xMax-xMin); 198 if (xScale < 1.e-19) xScale = 1.e-19; // Protection203 if (xScale < PROT_DBLE) xScale = PROT_DBLE; // Protection 199 204 if (aXdir) { 200 205 xScale = -xScale; … … 205 210 206 211 yScale = yWd/(yMax-yMin); 207 if (yScale < 1.e-19) yScale = 1.e-19; // Protection212 if (yScale < PROT_DBLE) yScale = PROT_DBLE; // Protection 208 213 if (!aYdir) { 209 214 yScale = -yScale; … … 220 225 { 221 226 if (logx) 222 if (xMax < 1.e-39) {223 cerr 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; 225 230 logx = false; 226 231 } 227 232 if (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; 231 236 logy = false; 232 237 } … … 236 241 237 242 if (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.); 239 244 xScaleLog = xWd*(xMax-xMinLog)/(xMax-xMin) / (log10(xMax)-log10(xMinLog)); 240 if (xScaleLog < 1.e-19) xScaleLog = 1.e-19; // Protection245 if (xScaleLog < PROT_DBLE) xScaleLog = PROT_DBLE; // Protection 241 246 if (aXdir) { 242 247 xScaleLog = -xScaleLog; … … 253 258 } 254 259 if (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.); 256 261 yScaleLog = yWd*(yMax-yMinLog)/(yMax-yMin) / (log10(yMax)-log10(yMinLog)); 257 if (yScaleLog < 1.e-19) yScaleLog = 1.e-19; // Protection262 if (yScaleLog < PROT_DBLE) yScaleLog = PROT_DBLE; // Protection 258 263 if (!aYdir) { 259 264 yScaleLog = -yScaleLog; -
trunk/SophyaPI/PI/piscdrawwdg.cc
r1932 r1946 10 10 #include "pidrwtools.h" 11 11 #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 12 17 13 18 … … 166 171 // } 167 172 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; } 172 177 173 178 SetDefaultDrawerLimits(xmin, xmax, ymin, ymax, axrl, ayud);
Note:
See TracChangeset
for help on using the changeset viewer.