Index: trunk/SophyaPI/PIext/basexecut.cc
===================================================================
--- trunk/SophyaPI/PIext/basexecut.cc	(revision 2516)
+++ trunk/SophyaPI/PIext/basexecut.cc	(revision 2517)
@@ -1176,5 +1176,6 @@
 usage += ">> Axes:  axesnone stdaxes=defaxes=boxaxes boxaxesgrid \n";
 usage += "          fineaxes fineaxesgrid centeredaxes finecenteredaxes \n"; 
-usage += "          centeredaxesgrid finecenteredaxesgrid \n"; 
+usage += "          centeredaxesgrid finecenteredaxesgrid\n"; 
+usage += "          axescenter=x0,y0 (for default axescenter=)\n"; 
 usage += "          grid nogrid labels nolabels  \n"; 
 usage += "          ticks noticks minorticks nominorticks \n"; 
Index: trunk/SophyaPI/PIext/pi2dvec.cc
===================================================================
--- trunk/SophyaPI/PIext/pi2dvec.cc	(revision 2516)
+++ trunk/SophyaPI/PIext/pi2dvec.cc	(revision 2517)
@@ -169,2 +169,28 @@
 }
 
+
+
+/* --Methode-- */
+double PI2dVecDrawer::GetDistanceToPoint(double x, double y)
+{
+ if(_nti==NULL) return 1.e+9;
+ if( xK<0 || yK<0 ) return 1.e+9;
+ if( vK<0 || wK<0 ) return 1.e+9;
+
+ double dist = -1.e+18;
+ for(int i=0; i<_nti->NbLines(); i++) {
+   double xp=_nti->GetCell(i,xK);
+   double yp=_nti->GetCell(i,yK);
+   xp = (xp-x)/(XMax()-XMin())/0.5;
+   yp = (yp-y)/(YMax()-YMin())/0.5;
+   xp = xp*xp+yp*yp;
+   if(dist<0. || xp<dist) dist = xp;
+ }
+ dist=sqrt(fabs(dist));
+ cout<<dist<<"PI2dVecDrawer: xlim="<<XMin()<<","<<XMax()<<" ylim="<<YMin()<<","<<YMax()
+     <<" NbLines="<<_nti->NbLines()<<endl;
+ cout<<"....d="<<dist<<" x="<<x<<" y="<<y<<endl;
+ cout<<"****** NON teste (CMV) ******"<<endl;
+
+ return dist;
+}
Index: trunk/SophyaPI/PIext/pi2dvec.h
===================================================================
--- trunk/SophyaPI/PIext/pi2dvec.h	(revision 2516)
+++ trunk/SophyaPI/PIext/pi2dvec.h	(revision 2517)
@@ -22,4 +22,6 @@
   virtual int       SelectVW(const char* px, const char* py);
 
+// Renvoie une distance au point x,y
+  virtual double     GetDistanceToPoint(double x, double y);
  
 protected:
Index: trunk/SophyaPI/PIext/pigfd1.cc
===================================================================
--- trunk/SophyaPI/PIext/pigfd1.cc	(revision 2516)
+++ trunk/SophyaPI/PIext/pigfd1.cc	(revision 2517)
@@ -10,4 +10,5 @@
 SelectX(0);
 SelectErrBar(false,false);
+NptDraw = 0;
 }
 
@@ -60,8 +61,10 @@
 if(GetGraphicAtt().GetLineAtt()!=PI_NotDefLineAtt) SelectErrBar(true,true);
 double xp,yp,er;
+NptDraw = 0;
 for (int i=0; i<mGFD->NData(); i++) {
   xp = mGFD->Absc(VarX,i);
   yp = mGFD->Val(i);
   if(xp<xmin || xp>xmax || yp<ymin || yp>ymax)  continue;
+  NptDraw++;
   if(ErrX) {
     er = mGFD->EAbsc(VarX,i);
@@ -76,2 +79,35 @@
 return;
 }
+
+/* --Methode-- */
+double PIGenFitDat::GetDistanceToPoint(double x, double y)
+{
+ if(!mGFD) return 1.e+9;
+ if(mGFD->NData()<=0) return 1.e+9;
+ if(VarX<0) return 1.e+9;
+
+ const int nessai = 100;
+ long inc = (NptDraw>nessai) ? (long)(NptDraw/nessai)+1 : 1;
+
+ double dist = -1.e+18;
+ long n = 0;
+ for(long i=0; i<mGFD->NData(); i++) {
+   double xp=mGFD->Absc(VarX,i);
+   if(xp<XMin() || xp>XMax()) continue;
+   double yp=mGFD->Val(i);
+   if(yp<YMin() || yp>YMax()) continue;
+   if(n%inc==0) {
+     xp = (xp-x)/(XMax()-XMin())/0.5;
+     yp = (yp-y)/(YMax()-YMin())/0.5;
+     xp = xp*xp+yp*yp;
+     if(dist<0. || xp<dist) dist = xp;
+   }
+   n++;
+ }
+ dist=sqrt(fabs(dist));
+ //cout<<"PIGenFitDat: xlim="<<XMin()<<","<<XMax()<<" ylim="<<YMin()<<","<<YMax()
+ //    <<" NData="<<mGFD->NData()<<" inc="<<inc<<endl;
+ //cout<<"....d="<<dist<<" x="<<x<<" y="<<y<<" NptDraw="<<NptDraw<<endl;
+
+ return dist;
+}
Index: trunk/SophyaPI/PIext/pigfd1.h
===================================================================
--- trunk/SophyaPI/PIext/pigfd1.h	(revision 2516)
+++ trunk/SophyaPI/PIext/pigfd1.h	(revision 2517)
@@ -17,4 +17,7 @@
           void       SelectX(int varx);
           void       SelectErrBar(bool erbx,bool erby);
+
+// Renvoie une distance au point x,y
+  virtual double     GetDistanceToPoint(double x, double y);
        
 protected:
@@ -23,4 +26,5 @@
   int VarX;          // numero de variable X ds le GeneralFitData
   bool ErrX,ErrY;    // Erreur en X et Y ?
+  long NptDraw; // nombre de points effectivement dessines dans la fenetre
 };
 
Index: trunk/SophyaPI/PIext/pigfd2.h
===================================================================
--- trunk/SophyaPI/PIext/pigfd2.h	(revision 2516)
+++ trunk/SophyaPI/PIext/pigfd2.h	(revision 2517)
@@ -17,5 +17,4 @@
           void       SelectXY(int varx,int vary);
           void       SelectErrBar(bool erbx,bool erby,bool erbz);
-
        
 protected:
Index: trunk/SophyaPI/PIext/pihisto.cc
===================================================================
--- trunk/SophyaPI/PIext/pihisto.cc	(revision 2516)
+++ trunk/SophyaPI/PIext/pihisto.cc	(revision 2517)
@@ -3,4 +3,7 @@
 
 #include <stdio.h>
+#include <stdlib.h>
+#include <iostream>
+#include <math.h>
 #include <typeinfo>
 
@@ -39,4 +42,5 @@
   SetStats();
   SetError();
+  SetFilled();
   SetStatPosOffset();
   SetName("HistoDrw");
@@ -80,4 +84,7 @@
 
   bool oktrace=false;
+  // Tracer d'une polyline si demandee
+  bool drawpline=false;
+  if(GetGraphicAtt().GetLineAtt() != PI_NotDefLineAtt) drawpline=true;
   // Tracer des marqueurs si demande ou si HProf
   bool drawmarker=false;
@@ -94,4 +101,21 @@
   else if(error>0) drawerr=true;
   else if(error<0) drawerr=false;
+  // Fill de l'histo ?
+  bool drawfill=false;
+  if(filled) drawfill=true; else drawfill=false;
+  // Et aussi si on ne demande ni ligne ni marqueur ?
+  if( !drawmarker && !drawpline && !drawerr ) drawfill=true;
+
+  // Remplissage des bins avec la couleur courante (trace en premier)
+  if(drawfill) {
+    oktrace = true;
+    for(int i=0; i<mHisto->NBins(); i++) {
+      double left   = mHisto->BinLowEdge(i);
+      double width  = mHisto->BinWidth();
+      double bottom = 0;
+      double height = (*mHisto)(i);
+      g->DrawFBox(left,bottom,width,height);
+    }
+  }
 
   // Trace des marqeurs
@@ -125,8 +149,6 @@
   }
 
-  // Trace de la ligne continue
-  // Si on ne demande pas de ligne (PI_NotDefLineAtt)
-  // et que l'on a rien trace auparavent, on trace un FPolygon
-  if(GetGraphicAtt().GetLineAtt() != PI_NotDefLineAtt || !oktrace) {
+  // Trace de la ligne continue si demandee
+  if(drawpline) {
     PIGrCoord* x1 = new PIGrCoord[2*mHisto->NBins()+2];
     PIGrCoord* y1 = new PIGrCoord[2*mHisto->NBins()+2];
@@ -147,10 +169,7 @@
     y1[npt] = 0;
     npt++;
-    if(GetGraphicAtt().GetLineAtt() != PI_NotDefLineAtt) {
-      g->DrawPolygon(x1,y1,npt,false);
-      oktrace = true;
-    }
-    if(!oktrace) g->DrawFPolygon(x1,y1,npt,false);
-    delete[] x1;  delete[] y1;
+    g->DrawPolygon(x1,y1,npt,false);
+    delete [] x1; delete [] y1;
+    oktrace = true;
   }
 
@@ -179,4 +198,6 @@
     else if(opts=="noerr")    SetError(-1);
     else if(opts=="autoerr")  SetError(0);
+    else if(opts=="fill")     SetFilled(true);
+    else if(opts=="nofill")   SetFilled(false);
     else if(opts.substr(0,11) == "statposoff=") {
       float xo=0., yo=0.;
@@ -204,4 +225,5 @@
 info += "  err / nerr : draw, do not draw error bars\n";
 info += "  autoerr : draw error bars if Marker drawing requested OR Profile histo\n";
+info += "  fill / nofill : fill, do not fill bars with selected color\n";
 info += "  statposoff=OffsetX,OffsetY : Position offset for Stats drawing \n";
 info += "       as a fraction of total size \n";
@@ -262,2 +284,26 @@
                        
 }
+
+
+
+/* --Methode-- */
+double PIHisto::GetDistanceToPoint(double x, double y)
+{
+ if (!mHisto) return 1.e+9;
+
+ double dist = -1.e+18;
+ for(int i=0; i<mHisto->NBins(); i++) {
+   double xp=mHisto->BinCenter(i);
+   double yp=(*mHisto)(i);
+   xp = (xp-x)/(XMax()-XMin())/0.5;
+   yp = (yp-y)/(YMax()-YMin())/0.5;
+   xp = xp*xp+yp*yp;
+   if(dist<0. || xp<dist) dist = xp;
+ }
+ dist=sqrt(fabs(dist));
+ //cout<<dist<<"PIHisto: xlim="<<XMin()<<","<<XMax()<<" ylim="<<YMin()<<","<<YMax()
+ //    <<" NBins="<<mHisto->NBins()<<endl;
+ //cout<<"....d="<<dist<<" x="<<x<<" y="<<y<<endl;
+
+ return dist;
+}
Index: trunk/SophyaPI/PIext/pihisto.h
===================================================================
--- trunk/SophyaPI/PIext/pihisto.h	(revision 2516)
+++ trunk/SophyaPI/PIext/pihisto.h	(revision 2517)
@@ -20,4 +20,5 @@
   // 0=barres d'erreurs automatiques: trace si HProf ou markeur demande
   inline  void       SetError(short fg=0) {error=fg;}
+  inline  void       SetFilled(bool fg=false) {filled=fg;}
   inline  Histo*     Histogram() {return(mHisto);}
 
@@ -26,9 +27,12 @@
   virtual void       GetOptionsHelpInfo(string& info);
 
+// Renvoie une distance au point x,y
+  virtual double     GetDistanceToPoint(double x, double y);
+
 protected:
   virtual void       DrawStats(PIGraphicUC* g);
   Histo* mHisto;
   bool mAdDO;
-  bool stats;
+  bool stats,filled;
   short error;
   float spoX, spoY; // Stat pos offset par rapport a position defaut
Index: trunk/SophyaPI/PIext/pintuple.cc
===================================================================
--- trunk/SophyaPI/PIext/pintuple.cc	(revision 2516)
+++ trunk/SophyaPI/PIext/pintuple.cc	(revision 2517)
@@ -4,4 +4,7 @@
 
 #include <stdio.h>
+#include <stdlib.h>
+#include <iostream>
+#include <math.h>
 #include "pintuple.h"
 
@@ -55,4 +58,6 @@
   SelectLabel(NULL);
   SetName("NTupleDrw");
+  NptDraw = 0;
+
 }
 
@@ -189,5 +194,6 @@
 xp = yp = xl = yl = 0;
 PIGrCoord xpolyg[NMXMULTP_LOCAL], ypolyg[NMXMULTP_LOCAL];
-npolyg = 0;  
+npolyg = 0;
+NptDraw = 0;
 for (long i=0; i<(long)mNT->NbLines(); i++) {
   xl = xp;  yl = yp;
@@ -198,4 +204,5 @@
   if ( (xp < xmin) || (xp > xmax) || (yp < ymin) || (yp > ymax) )  continue;
 
+  NptDraw++;
 // Taille - couleur de marker en fonction du poids
   if (wK >= 0) wp = mNT->GetCell(i, wK);
@@ -391,3 +398,33 @@
 
 
-
+/* --Methode-- */
+double PINTuple::GetDistanceToPoint(double x, double y)
+{
+ if(!mNT) return 1.e+9;
+ if( xK<0 || yK<0 ) return 1.e+9;
+
+ const int nessai = 100;
+ long inc = (NptDraw>nessai) ? (long)(NptDraw/nessai)+1 : 1;
+
+ double dist = -1.e+18;
+ long n = 0;
+ for(long i=0; i<(long)mNT->NbLines(); i++) {
+   double xp=mNT->GetCell(i,xK);
+   if(xp<XMin() || xp>XMax()) continue;
+   double yp=mNT->GetCell(i,yK);
+   if(yp<YMin() || yp>YMax()) continue;
+   if(n%inc==0) {
+     xp = (xp-x)/(XMax()-XMin())/0.5;
+     yp = (yp-y)/(YMax()-YMin())/0.5;
+     xp = xp*xp+yp*yp;
+     if(dist<0. || xp<dist) dist = xp;
+   }
+   n++;
+ }
+ dist=sqrt(fabs(dist));
+ //cout<<"PINTuple: xlim="<<XMin()<<","<<XMax()<<" ylim="<<YMin()<<","<<YMax()
+ //    <<" NbLines="<<mNT->NbLines()<<" inc="<<inc<<endl;
+ //cout<<"....d="<<dist<<" x="<<x<<" y="<<y<<" NptDraw="<<NptDraw<<endl;
+
+ return dist;
+}
Index: trunk/SophyaPI/PIext/pintuple.h
===================================================================
--- trunk/SophyaPI/PIext/pintuple.h	(revision 2516)
+++ trunk/SophyaPI/PIext/pintuple.h	(revision 2517)
@@ -44,4 +44,7 @@
 //   Texte d'aide des options disponibles
   virtual void       GetOptionsHelpInfo(string& info);
+
+// Renvoie une distance au point x,y
+  virtual double     GetDistanceToPoint(double x, double y);
        
 protected:
@@ -59,4 +62,5 @@
   bool connectPts;          // true -> les points sont relies par une ligne
   float spoX, spoY; // Stat pos offset par rapport a position defaut
+  long NptDraw; // nombre de points effectivement dessines dans la fenetre
 };
 
