Index: /trunk/SophyaPI/PIext/piaversion.h
===================================================================
--- /trunk/SophyaPI/PIext/piaversion.h	(revision 2372)
+++ /trunk/SophyaPI/PIext/piaversion.h	(revision 2373)
@@ -2,5 +2,5 @@
 #define PIAPPVERSION_H_SEEN
 
-#define PIAPP_VERSIONNUMBER  3.93
+#define PIAPP_VERSIONNUMBER  3.95
 
 #endif
Index: /trunk/SophyaPI/PIext/pintup3d.cc
===================================================================
--- /trunk/SophyaPI/PIext/pintup3d.cc	(revision 2372)
+++ /trunk/SophyaPI/PIext/pintup3d.cc	(revision 2373)
@@ -48,6 +48,8 @@
   mNT = nt;
   mAdDO = ad; 
+  UseSizeScale(true, 5);
+  UseColorScale(true);
   SelectXYZ(NULL, NULL, NULL);
-  SelectWt(NULL, 1);
+  SelectWt(NULL);
   SelectErrBar();
   SelectLabel(NULL);
@@ -91,7 +93,6 @@
 
 /* --Methode-- */
-void  PINTuple3D::SelectWt(const char* pw, int nbins)
-{
-nWbins = (nbins > 0) ? nbins : 10;
+void  PINTuple3D::SelectWt(const char* pw)
+{
 if (pw == NULL) wK = -1;  
 else { string name = pw;   wK = mNT->ColumnIndex(name);  }
@@ -189,5 +190,18 @@
 //  Pour tracer des markers avec taille fonction de Wt (poids)
 double dw = (wMax-wMin)/nWbins;
-if (dw < 1.e-19) dw = 1.e19;
+if (dw < 1.e-19) dw = 1.e-19;
+//  Pour tracer des markers avec couleur en fonction de Wt (poids)
+PIColorMap * cmap = NULL;
+double dwc = 1.;
+double nwc = 1.;
+bool revcmap;
+CMapId mcmapid = GetGraphicAtt().GetColMapId(revcmap);
+if( colorScale && (wK >= 0) && (mcmapid != CMAP_OTHER) ) {
+  cmap = new PIColorMap(mcmapid);
+  cmap->ReverseColorIndex(revcmap);
+  nwc = cmap->NCol();
+  dwc = (wMax-wMin)/nwc;
+}
+
 int msz,sz;
 
@@ -207,4 +221,23 @@
   yp = mNT->GetCell(i, yK);
   zp = mNT->GetCell(i, zK);
+
+// Taille - couleur de marker en fonction du poids
+  if (wK >= 0) wp = mNT->GetCell(i, wK);
+  if (mrkSzScale && (wK >= 0)) {   // Changement de taille
+    sz = (int)((wp-wMin)/dw);
+    if (sz < 0) sz = 0;
+    if (sz > nWbins)  sz = nWbins;
+    sz += msz;
+    if (sz < 2)  g->SelMarker(sz, PI_DotMarker);
+    else g->SelMarker(sz, mrk);
+  }
+// Couleur du marker en fonction du poids
+  if( colorScale && (wK >= 0) && cmap ) {
+    int cid = (int)((wp-wMin)/dwc);
+    if (cid < 0) cid = 0;
+    if (cid >= nwc)  cid = nwc-1;
+    g->SelForeground(*cmap, cid);
+  }
+
   if ( (i > 0) && connectPts ) // On relie les points ...
     g3->DrawLine3D(xl, yl, zl, xp, yp, zp);
@@ -221,13 +254,4 @@
     zer = mNT->GetCell(i, zebK);
     g3->DrawLine3D(xp, yp, zp-zer, xp, yp, zp+zer);
-  }
-  if (wK >= 0) { // Taille de marker en fonction du poids
-    wp = mNT->GetCell(i, wK);
-    sz = (int)((wp-wMin)/dw);
-    if (sz < 0) sz = 0;
-    if (sz > nWbins)  sz = nWbins;
-    sz += msz;
-    if (sz < 2)  g->SelMarker(sz, PI_DotMarker);
-    else g->SelMarker(sz, mrk);
   }
   // Trace du marker
@@ -271,4 +295,12 @@
     if (opts == "connectpoints") ConnectPoints(true);
     else if (opts == "noconnectpoints") ConnectPoints(false);
+    else if (opts == "colorscale") UseColorScale(true);
+    else if (opts == "nocolorscale") UseColorScale(false);
+    else if (opts == "sizescale") UseSizeScale(true);
+    else if (opts == "nosizescale") UseSizeScale(false);
+    else if (opts.substr(0,10) == "sizescale=") { 
+      int nbn = atoi(opts.substr(10).c_str());
+      UseSizeScale(true, nbn);
+    }
     else {
       // Si option non decode
@@ -298,4 +330,6 @@
 info += "  connectpoints: The points are connected by a line \n";
 info += "  noconnectpoints (this is the default) \n";
+info += "  colorscale/nocolorscale (Use color scale for weight) \n";
+info += "  sizescale/sizescale=nbins/nosizescale (Use marker size for weight) \n";
 info += "  and usual color/line/marker/... attribute decoding  \n";
 return;
Index: /trunk/SophyaPI/PIext/pintup3d.h
===================================================================
--- /trunk/SophyaPI/PIext/pintup3d.h	(revision 2372)
+++ /trunk/SophyaPI/PIext/pintup3d.h	(revision 2373)
@@ -14,9 +14,18 @@
   
   virtual void       SelectXYZ(const char* px, const char* py, const char* pz);
-  virtual void       SelectWt(const char* pw=NULL, int nbins=10);
+  virtual void       SelectWt(const char* pw=NULL);
   virtual void       SelectErrBar(const char* erbx=NULL, const char* erby=NULL, const char* erbz=NULL);
   virtual void       SelectLabel(const char* plabel);
 
   inline  void       ConnectPoints(bool fg=false) { connectPts = fg; }
+
+  // Gestion de la representation de poids
+  inline  void       UseSizeScale(bool fg=true, int nbins=5)
+    { mrkSzScale = fg; if (nbins>0) nWbins = nbins; }
+  inline  void       UseColorScale(bool fg=true) { colorScale = fg; }
+
+  inline  bool       GetSizeScale(int& nbins) 
+    { nbins = nWbins; return mrkSzScale; }
+  inline  bool       GetColScale() { return colorScale; }
 
 //   Methode de decodage des options
@@ -33,5 +42,7 @@
   int lK;                   // Index du nom de variable label (affiche en texte)
   double wMin, wMax;        // Valeurs de poids min/max
-  int nWbins;               // Nombre de bins pour le poids (Wt)
+  bool mrkSzScale;     // true -> Taille de markers variable suivant poids
+  int nWbins;          // Nombre de bins taille de marker variable
+  bool colorScale;     // true -> Couleur de marker variable suivant poids
 
   bool connectPts;          // true -> les points sont relies par une ligne
Index: /trunk/SophyaPI/PIext/pintuple.cc
===================================================================
--- /trunk/SophyaPI/PIext/pintuple.cc	(revision 2372)
+++ /trunk/SophyaPI/PIext/pintuple.cc	(revision 2373)
@@ -15,7 +15,7 @@
 //	Les objets "PINTuple" peuvent tracer des signes (markers)
 //	éventuellement avec des barres d'erreur et une étiquette
-//	pour chaque point. Si un attribut de ligne, autre que
-//	"PI_NotDefLineAtt" est spécifié, les points sont connectés
-//	par une ligne.
+//	pour chaque point. Si un nom de colonne poids est spécifié,
+//	la taille et/ou la couleur des signes (markers) sera fonction
+//	de la valeur de poids.
 //--
 //++
@@ -36,5 +36,5 @@
 //	Constructeur. Si "ad == true", l'objet "nt" est détruit par 
 //	le destructeur de l'objet "PINTuple"
-//	Note : "nt" doit être créé par new
+//	Note : "nt" doit être créé par new dans ce cas.
 //--
  
@@ -47,6 +47,8 @@
   SetStats(true);
   ConnectPoints(false);
+  UseSizeScale(true, 5);
+  UseColorScale(true);
   SelectXY(NULL, NULL);
-  SelectWt(NULL, 1);
+  SelectWt(NULL);
   SelectErrBar();
   SelectLabel(NULL);
@@ -88,7 +90,6 @@
 
 /* --Methode-- */
-void  PINTuple::SelectWt(const char* pw, int nbins)
-{
-nWbins = (nbins > 0) ? nbins : 10;
+void  PINTuple::SelectWt(const char* pw)
+{
 if (pw == NULL) wK = -1;  
 else { string name = pw;   wK = mNT->ColumnIndex(name);  }
@@ -151,5 +152,19 @@
 //  Pour tracer des markers avec taille fonction de Wt (poids)
 double dw = (wMax-wMin)/nWbins;
-if (dw < 1.e-19) dw = 1.e19;
+if (dw < 1.e-19) dw = 1.e-19;
+
+//  Pour tracer des markers avec couleur en fonction de Wt (poids)
+PIColorMap * cmap = NULL;
+double dwc = 1.;
+double nwc = 1.;
+bool revcmap;
+CMapId mcmapid = GetGraphicAtt().GetColMapId(revcmap);
+if( colorScale && (wK >= 0) && (mcmapid != CMAP_OTHER) ) {
+  cmap = new PIColorMap(mcmapid);
+  cmap->ReverseColorIndex(revcmap);
+  nwc = cmap->NCol();
+  dwc = (wMax-wMin)/nwc;
+}
+
 int msz,sz;
 
@@ -158,5 +173,5 @@
 if (wK >= 0)  mrk = (mmrk != PI_NotDefMarker) ? mmrk : PI_CircleMarker;
 else   mrk = (mmrk != PI_NotDefMarker) ? mmrk : PI_DotMarker;
- msz = GetGraphicAtt().GetMarkerSz(); 
+msz = GetGraphicAtt().GetMarkerSz(); 
 if (msz < 1) msz = 1;
 g->SelMarker(msz, mrk);
@@ -178,16 +193,8 @@
   nok++;
   if ( (xp < xmin) || (xp > xmax) || (yp < ymin) || (yp > ymax) )  continue;
-  if ( (i > 0) && connectPts )   
-    g->DrawLine(xl, yl, xp, yp);  // On relie les points ...
-  if ( xebK >= 0 ) {
-    xer = mNT->GetCell(i, xebK);
-    if(xer>0.) g->DrawLine(xp-xer, yp, xp+xer, yp);
-  }
-  if ( yebK >= 0 ) {
-    yer = mNT->GetCell(i, yebK);
-    if(yer>0.) g->DrawLine(xp, yp-yer, xp, yp+yer);
-  }
-  if (wK >= 0) { // Taille de marker en fonction du poids
-    wp = mNT->GetCell(i, wK);
+
+// Taille - couleur de marker en fonction du poids
+  if (wK >= 0) wp = mNT->GetCell(i, wK);
+  if (mrkSzScale && (wK >= 0)) {  // Changement de taille
     sz = (int)((wp-wMin)/dw);
     if (sz < 0) sz = 0;
@@ -196,4 +203,22 @@
     if (sz < 2)  g->SelMarker(sz, PI_DotMarker);
     else g->SelMarker(sz, mrk);
+  }
+// Couleur du marker en fonction du poids
+  if( colorScale && (wK >= 0) && cmap ) {
+    int cid = (int)((wp-wMin)/dwc);
+    if (cid < 0) cid = 0;
+    if (cid >= nwc)  cid = nwc-1;
+    g->SelForeground(*cmap, cid);
+  }
+
+  if ( (i > 0) && connectPts )   
+    g->DrawLine(xl, yl, xp, yp);  // On relie les points ...
+  if ( xebK >= 0 ) {
+    xer = mNT->GetCell(i, xebK);
+    if(xer>0.) g->DrawLine(xp-xer, yp, xp+xer, yp);
+  }
+  if ( yebK >= 0 ) {
+    yer = mNT->GetCell(i, yebK);
+    if(yer>0.) g->DrawLine(xp, yp-yer, xp, yp+yer);
   }
   // Trace du marker
@@ -228,4 +253,5 @@
 }
 
+if (cmap) delete cmap;
 return;
 }
@@ -289,4 +315,12 @@
     else if (opts == "connectpoints") ConnectPoints(true);
     else if (opts == "noconnectpoints") ConnectPoints(false);
+    else if (opts == "colorscale") UseColorScale(true);
+    else if (opts == "nocolorscale") UseColorScale(false);
+    else if (opts == "sizescale") UseSizeScale(true);
+    else if (opts == "nosizescale") UseSizeScale(false);
+    else if (opts.substr(0,10) == "sizescale=") { 
+      int nbn = atoi(opts.substr(10).c_str());
+      UseSizeScale(true, nbn);
+    }
     else {
       // Si option non decode
@@ -318,5 +352,10 @@
 info += "  connectpoints: The points are connected by a line \n";
 info += "  noconnectpoints (this is the default) \n";
+info += "  colorscale/nocolorscale (Use color scale for weight) \n";
+info += "  sizescale/sizescale=nbins/nosizescale (Use marker size for weight) \n";
 info += "  and usual color/line/marker/... attribute decoding  \n";
 return;
 }
+
+
+
Index: /trunk/SophyaPI/PIext/pintuple.h
===================================================================
--- /trunk/SophyaPI/PIext/pintuple.h	(revision 2372)
+++ /trunk/SophyaPI/PIext/pintuple.h	(revision 2373)
@@ -19,10 +19,20 @@
   
   virtual void       SelectXY(const char* px, const char* py);
-  virtual void       SelectWt(const char* pw=NULL, int nbins=10);
+  virtual void       SelectWt(const char* pw=NULL);
   virtual void       SelectErrBar(const char* erbx=NULL, const char* erby=NULL);
   virtual void       SelectLabel(const char* plabel=NULL);
 
+  inline  void       ConnectPoints(bool fg=false) { connectPts = fg; }
+
+  // Gestion de la representation de poids
+  inline  void       UseSizeScale(bool fg=true, int nbins=5)
+    { mrkSzScale = fg; if (nbins>0) nWbins = nbins; }
+  inline  void       UseColorScale(bool fg=true) { colorScale = fg; }
+
+  inline  bool       GetSizeScale(int& nbins) 
+    { nbins = nWbins; return mrkSzScale; }
+  inline  bool       GetColScale() { return colorScale; }
+
   inline  void       SetStats(bool fg=true) { stats = fg; }
-  inline  void       ConnectPoints(bool fg=false) { connectPts = fg; }
 
   virtual void       AppendTextInfo(string& info, double xmin, double ymin, double xmax, double ymax);
@@ -40,6 +50,8 @@
   int wK;              // Index du nom de variable poids
   int lK;              // Index du nom de variable label (affiche en texte)
-  double wMin, wMax;        // Valeurs de poids min/max
-  int nWbins;               // Nombre de bins pour le poids (Wt)
+  double wMin, wMax;   // Valeurs de poids min/max
+  bool mrkSzScale;     // true -> Taille de markers variable suivant poids
+  int nWbins;          // Nombre de bins taille de marker variable
+  bool colorScale;     // true -> Couleur de marker variable suivant poids
   bool stats;               // true -> indication du nb de points
   bool connectPts;          // true -> les points sont relies par une ligne
