Index: trunk/SophyaPI/PIext/pihisto.cc
===================================================================
--- trunk/SophyaPI/PIext/pihisto.cc	(revision 2465)
+++ trunk/SophyaPI/PIext/pihisto.cc	(revision 2469)
@@ -79,8 +79,11 @@
   if( typeid(*mHisto)==typeid(HProf) ) mHisto->UpdateHisto();
 
-  bool drawmarker=false, drawerr=false, oktrace=false;
-  // Tracer les marqueurs si demande ou si HProf
+  bool oktrace=false;
+  // Tracer des marqueurs si demande ou si HProf
+  bool drawmarker=false;
   if( (GetGraphicAtt().GetMarker() != PI_NotDefMarker) ||  
       (typeid(*mHisto) == typeid(HProf)) ) drawmarker = true;
+  // Tracer des erreurs ?
+  bool drawerr=false;
   if(error==0) {  // Gestion automatique des erreurs
     // Tracer les erreurs si HProf
@@ -88,5 +91,7 @@
     // Trace les erreurs si marqueurs demandes
     if(drawmarker) drawerr=true;
-  } else if(error>0) drawerr=true;
+  }
+  else if(error>0) drawerr=true;
+  else if(error<0) drawerr=false;
 
   // Trace des marqeurs
@@ -101,5 +106,4 @@
 
   // Trace des erreurs
-  // Si Marqeurs definis OU HProf => marqueurs+Erreurs si il y en a
   if(drawerr) {
     if(GetGraphicAtt().GetLineAtt()==PI_NotDefLineAtt) g->SelLine(PI_ThinLine);
@@ -122,30 +126,31 @@
 
   // Trace de la ligne continue
-  if(GetGraphicAtt().GetLineAtt() != PI_NotDefLineAtt) {
-    double x1,y1, x2, y2; oktrace = true;
-    x1 = mHisto->BinLowEdge(0);
-    y1 = 0;
+  // 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) {
+    PIGrCoord* x1 = new PIGrCoord[2*mHisto->NBins()+2];
+    PIGrCoord* y1 = new PIGrCoord[2*mHisto->NBins()+2];
+    double dx = mHisto->BinWidth();
+    int npt=0;
+    x1[npt] = mHisto->BinLowEdge(0);
+    y1[npt] = 0;
+    npt++;
     for(int i=0; i<mHisto->NBins(); i++) {
-      x2 = x1;
-      y2 = (*mHisto)(i);
-      g->DrawLine(x1,y1, x2, y2);
-      y1 = y2;
-      x2 = mHisto->BinHighEdge(i);
-      g->DrawLine(x1,y1, x2, y2);
-      x1 = x2;
-    }
-    y2 = 0; g->DrawLine(x1,y1, x2, y2);
-  }
-
-  // Si rien n'a ete trace
-  if( !oktrace ) {
-    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);
-      g->DrawLine(left, bottom, left, bottom+height); // Au moins une ligne...
-    }
+      x1[npt] = mHisto->BinLowEdge(i);
+      y1[npt] = (*mHisto)(i);
+      npt++;
+      x1[npt] = (double)x1[npt-1] + dx;
+      y1[npt] = y1[npt-1];
+      npt++;
+    }
+    x1[npt] = x1[npt-1];
+    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;
   }
 
Index: trunk/SophyaPI/PIext/pihisto.h
===================================================================
--- trunk/SophyaPI/PIext/pihisto.h	(revision 2465)
+++ trunk/SophyaPI/PIext/pihisto.h	(revision 2469)
@@ -19,5 +19,5 @@
   // fg=-1 pas de barre d'erreur, 1=barres d'erreurs,
   // 0=barres d'erreurs automatiques: trace si HProf ou markeur demande
-  inline  void       SetError(unsigned short fg=0) {error=fg;}
+  inline  void       SetError(short fg=0) {error=fg;}
   inline  Histo*     Histogram() {return(mHisto);}
 
@@ -30,5 +30,6 @@
   Histo* mHisto;
   bool mAdDO;
-  bool stats,error;
+  bool stats;
+  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 2465)
+++ trunk/SophyaPI/PIext/pintuple.cc	(revision 2469)
@@ -140,9 +140,10 @@
 
 /* --Methode-- */
+#define NMXMULTP_LOCAL  30   // Pour multipoint sans new
 void PINTuple::Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax)
 {
 double xp,yp,xer,yer,wp;
 double xl,yl;
-int nok;
+int nok,npolyg;
 
 if (!mNT) return;
@@ -158,5 +159,5 @@
 PIColorMap * cmap = NULL;
 double dwc = 1.;
-double nwc = 1.;
+int nwc = 1;
 bool revcmap;
 CMapId mcmapid = GetGraphicAtt().GetColMapId(revcmap);
@@ -165,5 +166,5 @@
   cmap->ReverseColorIndex(revcmap);
   nwc = cmap->NCol();
-  dwc = (wMax-wMin)/nwc;
+  dwc = (wMax-wMin)/(double)nwc;
 }
 
@@ -187,6 +188,8 @@
 nok = 0;  
 xp = yp = xl = yl = 0;
+PIGrCoord xpolyg[NMXMULTP_LOCAL], ypolyg[NMXMULTP_LOCAL];
+npolyg = 0;  
 for (long i=0; i<(long)mNT->NbLines(); i++) {
-  xl = xp;  yl = yp; 
+  xl = xp;  yl = yp;
   xp = mNT->GetCell(i, xK);
   yp = mNT->GetCell(i, yK);
@@ -213,6 +216,14 @@
   }
 
-  if ( (i > 0) && connectPts )   
-    g->DrawLine(xl, yl, xp, yp);  // On relie les points ...
+  // Trace d'une ligne reliant les points
+  if( connectPts ) {
+    if(npolyg==0) {xpolyg[0]=xl; ypolyg[0]=yl; npolyg=1;}
+    if(npolyg<NMXMULTP_LOCAL)
+      {xpolyg[npolyg]=xp; ypolyg[npolyg]=yp; npolyg++;}
+    if(npolyg==NMXMULTP_LOCAL)
+      {g->DrawPolygon(xpolyg,ypolyg,npolyg,false); npolyg=0;}
+  }
+
+  // Trace des erreurs selon X et Y
   if ( xebK >= 0 ) {
     xer = mNT->GetCell(i, xebK);
@@ -223,10 +234,16 @@
     if(yer>0.) g->DrawLine(xp, yp-yer, xp, yp+yer);
   }
+
   // Trace du marker
   if ((wK >= 0)||(lK < 0)||(mmrk != PI_NotDefMarker))  g->DrawMarker(xp, yp); 
+
   // Trace eventuel du label
   if (lK >= 0) g->DrawString(xp, yp, mNT->GetCelltoString(i, lK).c_str());
 
 }
+
+// Fin du trace d'une ligne reliant les points  si necessaire
+if( connectPts && npolyg>1 )
+  {g->DrawPolygon(xpolyg,ypolyg,npolyg,false); npolyg=0;}
 
 if (stats) { // Trace de stats 
@@ -262,4 +279,5 @@
 return;
 }
+#undef NMXMULTP_LOCAL
 
 /* --Methode-- */
