Index: trunk/SophyaPI/PI/Makefile
===================================================================
--- trunk/SophyaPI/PI/Makefile	(revision 1903)
+++ trunk/SophyaPI/PI/Makefile	(revision 1904)
@@ -4,5 +4,5 @@
  
 all: $(LIB)libPI.a
-$(LIB)libPI.a : $(OBJ)lut.o $(OBJ)parradapter.o $(OBJ)pi3ddrw.o $(OBJ)piapplgen.o $(OBJ)piapplx.o $(OBJ)piaxestools.o $(OBJ)pibwdggen.o $(OBJ)pibwdgx.o $(OBJ)picmap.o $(OBJ)picmapgen.o $(OBJ)picmapview.o $(OBJ)picmapx.o $(OBJ)picons.o $(OBJ)picontainergen.o $(OBJ)picontainerx.o $(OBJ)pidrawer.o $(OBJ)pidrawwin.o $(OBJ)pidrwtools.o $(OBJ)pievthandler.o $(OBJ)pifilechogen.o $(OBJ)pifilechox.o $(OBJ)pifontgen.o $(OBJ)pifontx.o $(OBJ)pigraph3d.o $(OBJ)pigraphgen.o $(OBJ)pigraphps.o $(OBJ)pigraphuc.o $(OBJ)pigraphx.o $(OBJ)piimage.o $(OBJ)piimgtools.o $(OBJ)pilistgen.o $(OBJ)pilistx.o $(OBJ)pimenubargen.o $(OBJ)pimenubarx.o $(OBJ)pimenugen.o $(OBJ)pimenux.o $(OBJ)pimsghandler.o $(OBJ)pioptmenugen.o $(OBJ)pioptmenux.o $(OBJ)piperiodx.o $(OBJ)pipixmapgen.o $(OBJ)pipixmapx.o $(OBJ)piscdrawwdg.o $(OBJ)pistdwdggen.o $(OBJ)pistdwdgx.o $(OBJ)pistzwin.o $(OBJ)pisurfdr.o $(OBJ)pitherm.o $(OBJ)piwdggen.o $(OBJ)piwdgx.o $(OBJ)piwindowgen.o $(OBJ)piwindowx.o $(OBJ)pixtbase.o $(OBJ)psfile.o
+$(LIB)libPI.a : $(OBJ)lut.o $(OBJ)parradapter.o $(OBJ)pi3ddrw.o $(OBJ)piapplgen.o $(OBJ)piapplx.o $(OBJ)piaxestools.o $(OBJ)pibwdggen.o $(OBJ)pibwdgx.o $(OBJ)picmap.o $(OBJ)picmapgen.o $(OBJ)picmapview.o $(OBJ)picmapx.o $(OBJ)picons.o $(OBJ)picontainergen.o $(OBJ)picontainerx.o $(OBJ)pidrawer.o $(OBJ)pidrawwin.o $(OBJ)pidrwtools.o $(OBJ)pieldrw.o $(OBJ)pievthandler.o $(OBJ)pifilechogen.o $(OBJ)pifilechox.o $(OBJ)pifontgen.o $(OBJ)pifontx.o $(OBJ)pigraph3d.o $(OBJ)pigraphgen.o $(OBJ)pigraphps.o $(OBJ)pigraphuc.o $(OBJ)pigraphx.o $(OBJ)pigratt.o $(OBJ)piimage.o $(OBJ)piimgtools.o $(OBJ)pilistgen.o $(OBJ)pilistx.o $(OBJ)pimenubargen.o $(OBJ)pimenubarx.o $(OBJ)pimenugen.o $(OBJ)pimenux.o $(OBJ)pimsghandler.o $(OBJ)pioptmenugen.o $(OBJ)pioptmenux.o $(OBJ)piperiodx.o $(OBJ)pipixmapgen.o $(OBJ)pipixmapx.o $(OBJ)piscdrawwdg.o $(OBJ)pistdwdggen.o $(OBJ)pistdwdgx.o $(OBJ)pistzwin.o $(OBJ)pisurfdr.o $(OBJ)pitherm.o $(OBJ)piwdggen.o $(OBJ)piwdgx.o $(OBJ)piwindowgen.o $(OBJ)piwindowx.o $(OBJ)pixtbase.o $(OBJ)piyfxdrw.o $(OBJ)psfile.o
 	$(AR) $(ARFLAGS)  $@ $($(ARARGS)) 
 ifeq ($(CXX),cxx)
@@ -11,5 +11,5 @@
  
 clean:
-	rm -f $(OBJ)lut.o $(OBJ)parradapter.o $(OBJ)pi3ddrw.o $(OBJ)piapplgen.o $(OBJ)piapplx.o $(OBJ)piaxestools.o $(OBJ)pibwdggen.o $(OBJ)pibwdgx.o $(OBJ)picmap.o $(OBJ)picmapgen.o $(OBJ)picmapview.o $(OBJ)picmapx.o $(OBJ)picons.o $(OBJ)picontainergen.o $(OBJ)picontainerx.o $(OBJ)pidrawer.o $(OBJ)pidrawwin.o $(OBJ)pidrwtools.o $(OBJ)pievthandler.o $(OBJ)pifilechogen.o $(OBJ)pifilechox.o $(OBJ)pifontgen.o $(OBJ)pifontx.o $(OBJ)pigraph3d.o $(OBJ)pigraphgen.o $(OBJ)pigraphps.o $(OBJ)pigraphuc.o $(OBJ)pigraphx.o $(OBJ)piimage.o $(OBJ)piimgtools.o $(OBJ)pilistgen.o $(OBJ)pilistx.o $(OBJ)pimenubargen.o $(OBJ)pimenubarx.o $(OBJ)pimenugen.o $(OBJ)pimenux.o $(OBJ)pimsghandler.o $(OBJ)pioptmenugen.o $(OBJ)pioptmenux.o $(OBJ)piperiodx.o $(OBJ)pipixmapgen.o $(OBJ)pipixmapx.o $(OBJ)piscdrawwdg.o $(OBJ)pistdwdggen.o $(OBJ)pistdwdgx.o $(OBJ)pistzwin.o $(OBJ)pisurfdr.o $(OBJ)pitherm.o $(OBJ)piwdggen.o $(OBJ)piwdgx.o $(OBJ)piwindowgen.o $(OBJ)piwindowx.o $(OBJ)pixtbase.o $(OBJ)psfile.o
+	rm -f $(OBJ)lut.o $(OBJ)parradapter.o $(OBJ)pi3ddrw.o $(OBJ)piapplgen.o $(OBJ)piapplx.o $(OBJ)piaxestools.o $(OBJ)pibwdggen.o $(OBJ)pibwdgx.o $(OBJ)picmap.o $(OBJ)picmapgen.o $(OBJ)picmapview.o $(OBJ)picmapx.o $(OBJ)picons.o $(OBJ)picontainergen.o $(OBJ)picontainerx.o $(OBJ)pidrawer.o $(OBJ)pidrawwin.o $(OBJ)pidrwtools.o $(OBJ)pieldrw.o $(OBJ)pievthandler.o $(OBJ)pifilechogen.o $(OBJ)pifilechox.o $(OBJ)pifontgen.o $(OBJ)pifontx.o $(OBJ)pigraph3d.o $(OBJ)pigraphgen.o $(OBJ)pigraphps.o $(OBJ)pigraphuc.o $(OBJ)pigraphx.o $(OBJ)pigratt.o $(OBJ)piimage.o $(OBJ)piimgtools.o $(OBJ)pilistgen.o $(OBJ)pilistx.o $(OBJ)pimenubargen.o $(OBJ)pimenubarx.o $(OBJ)pimenugen.o $(OBJ)pimenux.o $(OBJ)pimsghandler.o $(OBJ)pioptmenugen.o $(OBJ)pioptmenux.o $(OBJ)piperiodx.o $(OBJ)pipixmapgen.o $(OBJ)pipixmapx.o $(OBJ)piscdrawwdg.o $(OBJ)pistdwdggen.o $(OBJ)pistdwdgx.o $(OBJ)pistzwin.o $(OBJ)pisurfdr.o $(OBJ)pitherm.o $(OBJ)piwdggen.o $(OBJ)piwdgx.o $(OBJ)piwindowgen.o $(OBJ)piwindowx.o $(OBJ)pixtbase.o $(OBJ)piyfxdrw.o $(OBJ)psfile.o
 ifeq ($(CXX),cxx)
 	cd $(REPM); rm -f *.o
@@ -23,9 +23,9 @@
  piwdgx.h piwdggen.h pimsghandler.h picolist.h picmap.h picmapx.h \
  picmapgen.h pigraphx.h pigraphgen.h pifontx.h pifontgen.h pigraphuc.h \
- pievthandler.h psfile.h pigraph3d.h pibwdgx.h pigraphps.h \
- pidrwtools.h pistdwdgx.h pistdwdggen.h pioptmenux.h pioptmenugen.h \
- pimenux.h pimenugen.h piwindowx.h piwindowgen.h picontainerx.h \
- picontainergen.h piapplx.h piapplgen.h pimenubarx.h pimenubargen.h \
- picons.h
+ pievthandler.h psfile.h pigratt.h pieldrw.h pigraph3d.h pibwdgx.h \
+ pigraphps.h pidrwtools.h pistdwdgx.h pistdwdggen.h pioptmenux.h \
+ pioptmenugen.h pimenux.h pimenugen.h piwindowx.h piwindowgen.h \
+ picontainerx.h picontainergen.h piapplx.h piapplgen.h pimenubarx.h \
+ pimenubargen.h picons.h
 $(OBJ)piapplgen.o: piapplgen.cc piapplgen.h pimsghandler.h \
  $(INC)machdefs.h pisysdep.h picontainerx.h \
@@ -49,10 +49,11 @@
  pimenubargen.h picons.h pibwdgx.h pibwdggen.h picmap.h picmapx.h \
  picmapgen.h pigraphx.h pigraphgen.h pifontx.h pifontgen.h pigraphuc.h \
- pievthandler.h psfile.h pigraphps.h piscdrawwdg.h pidrawer.h
+ pievthandler.h psfile.h pigraphps.h piscdrawwdg.h pidrawer.h \
+ pigratt.h pieldrw.h
 $(OBJ)pibwdggen.o: pibwdggen.cc pibwdggen.h pisysdep.h \
  $(INC)machdefs.h piwdgx.h piwdggen.h \
  pimsghandler.h picolist.h picmap.h picmapx.h picmapgen.h pigraphx.h \
  pigraphgen.h pifontx.h pifontgen.h pigraphuc.h pievthandler.h \
- psfile.h pidrawer.h pigraphps.h pidrwtools.h pistdwdgx.h \
+ psfile.h pidrawer.h pigratt.h pigraphps.h pidrwtools.h pistdwdgx.h \
  pistdwdggen.h pioptmenux.h pioptmenugen.h pimenux.h pimenugen.h \
  piwindowx.h piwindowgen.h picontainerx.h picontainergen.h piapplx.h \
@@ -90,5 +91,5 @@
  pidrawer.h pibwdggen.h pisysdep.h piwdgx.h piwdggen.h pimsghandler.h \
  picolist.h picmap.h picmapx.h picmapgen.h pigraphx.h pigraphgen.h \
- pifontx.h pifontgen.h pigraphuc.h pievthandler.h psfile.h \
+ pifontx.h pifontgen.h pigraphuc.h pievthandler.h psfile.h pigratt.h \
  pidrwtools.h pistdwdgx.h pistdwdggen.h pioptmenux.h pioptmenugen.h \
  pimenux.h pimenugen.h piwindowx.h piwindowgen.h picontainerx.h \
@@ -101,5 +102,5 @@
  picmapgen.h pigraphx.h pigraphgen.h pifontx.h pifontgen.h pigraphuc.h \
  pievthandler.h psfile.h pigraphps.h pistdwdgx.h pistdwdggen.h \
- pidrawer.h
+ pidrawer.h pigratt.h pieldrw.h
 $(OBJ)pidrwtools.o: pidrwtools.cc pidrwtools.h pisysdep.h \
  $(INC)machdefs.h pistdwdgx.h pistdwdggen.h \
@@ -110,5 +111,10 @@
  picmapgen.h pigraphx.h pigraphgen.h pifontx.h pifontgen.h pigraphuc.h \
  pievthandler.h psfile.h pigraphps.h piscdrawwdg.h pidrawer.h \
- pi3ddrw.h pigraph3d.h
+ pigratt.h pieldrw.h pi3ddrw.h pigraph3d.h
+$(OBJ)pieldrw.o: pieldrw.cc $(INC)machdefs.h \
+ pieldrw.h pidrawer.h pibwdggen.h pisysdep.h piwdgx.h piwdggen.h \
+ pimsghandler.h picolist.h picmap.h picmapx.h picmapgen.h pigraphx.h \
+ pigraphgen.h pifontx.h pifontgen.h pigraphuc.h pievthandler.h \
+ psfile.h pigratt.h
 $(OBJ)pievthandler.o: pievthandler.cc pievthandler.h pisysdep.h \
  $(INC)machdefs.h pimsghandler.h piwdgx.h \
@@ -153,14 +159,18 @@
  piwdggen.h pimsghandler.h picolist.h picmap.h picmapx.h picmapgen.h \
  pifontx.h pifontgen.h
+$(OBJ)pigratt.o: pigratt.cc pigratt.h pisysdep.h \
+ $(INC)machdefs.h pigraphgen.h piwdgx.h \
+ piwdggen.h pimsghandler.h picolist.h picmap.h picmapx.h picmapgen.h \
+ pifontx.h pifontgen.h
 $(OBJ)piimage.o: piimage.cc piimage.h parradapter.h \
- $(INC)machdefs.h lut.h pisysdep.h pidrawer.h \
- pibwdggen.h piwdgx.h piwdggen.h pimsghandler.h picolist.h picmap.h \
- picmapx.h picmapgen.h pigraphx.h pigraphgen.h pifontx.h pifontgen.h \
- pigraphuc.h pievthandler.h psfile.h pipixmapx.h pipixmapgen.h \
- pibwdgx.h pigraphps.h pistdwdgx.h pistdwdggen.h piwindowx.h \
- piwindowgen.h picontainerx.h picontainergen.h picmapview.h \
- piimgtools.h pioptmenux.h pioptmenugen.h pimenux.h pimenugen.h \
- piapplx.h piapplgen.h pimenubarx.h pimenubargen.h picons.h \
- pidrwtools.h piscdrawwdg.h
+ $(INC)machdefs.h lut.h pisysdep.h pieldrw.h \
+ pidrawer.h pibwdggen.h piwdgx.h piwdggen.h pimsghandler.h picolist.h \
+ picmap.h picmapx.h picmapgen.h pigraphx.h pigraphgen.h pifontx.h \
+ pifontgen.h pigraphuc.h pievthandler.h psfile.h pigratt.h pipixmapx.h \
+ pipixmapgen.h pibwdgx.h pigraphps.h pistdwdgx.h pistdwdggen.h \
+ piwindowx.h piwindowgen.h picontainerx.h picontainergen.h \
+ picmapview.h piimgtools.h pioptmenux.h pioptmenugen.h pimenux.h \
+ pimenugen.h piapplx.h piapplgen.h pimenubarx.h pimenubargen.h \
+ picons.h pidrwtools.h piscdrawwdg.h piyfxdrw.h
 $(OBJ)piimgtools.o: piimgtools.cc piimgtools.h pisysdep.h \
  $(INC)machdefs.h pistdwdgx.h pistdwdggen.h \
@@ -171,5 +181,5 @@
  picmapgen.h pigraphx.h pigraphgen.h pifontx.h pifontgen.h pigraphuc.h \
  pievthandler.h psfile.h pigraphps.h piimage.h parradapter.h lut.h \
- pidrawer.h pipixmapx.h pipixmapgen.h picmapview.h
+ pieldrw.h pidrawer.h pigratt.h pipixmapx.h pipixmapgen.h picmapview.h
 $(OBJ)pilistgen.o: pilistgen.cc pilistgen.h pisysdep.h \
  $(INC)machdefs.h piwdgx.h piwdggen.h \
@@ -229,7 +239,7 @@
  pifontgen.h pigraphuc.h pievthandler.h psfile.h pigraphps.h \
  pistdwdgx.h pistdwdggen.h piwindowx.h piwindowgen.h picontainerx.h \
- picontainergen.h pidrawer.h pidrwtools.h pioptmenux.h pioptmenugen.h \
- pimenux.h pimenugen.h piapplx.h piapplgen.h pimenubarx.h \
- pimenubargen.h picons.h piaxestools.h parradapter.h lut.h
+ picontainergen.h pidrawer.h pigratt.h pieldrw.h pidrwtools.h \
+ pioptmenux.h pioptmenugen.h pimenux.h pimenugen.h piapplx.h \
+ piapplgen.h pimenubarx.h pimenubargen.h picons.h piaxestools.h
 $(OBJ)pistdwdggen.o: pistdwdggen.cc pistdwdggen.h pisysdep.h \
  $(INC)machdefs.h piwdgx.h piwdggen.h \
@@ -249,6 +259,6 @@
  pidrawer.h pibwdggen.h piwdgx.h piwdggen.h pimsghandler.h picolist.h \
  picmap.h picmapx.h picmapgen.h pigraphx.h pigraphgen.h pifontx.h \
- pifontgen.h pigraphuc.h pievthandler.h psfile.h pigraph3d.h pibwdgx.h \
- pigraphps.h
+ pifontgen.h pigraphuc.h pievthandler.h psfile.h pigratt.h pieldrw.h \
+ pigraph3d.h pibwdgx.h pigraphps.h
 $(OBJ)pitherm.o: pitherm.cc pitherm.h pisysdep.h \
  $(INC)machdefs.h pibwdgx.h pibwdggen.h \
@@ -278,4 +288,9 @@
  pigraphx.h pigraphgen.h pifontx.h pifontgen.h pigraphuc.h \
  pievthandler.h psfile.h pigraphps.h pixtbase.h
+$(OBJ)piyfxdrw.o: piyfxdrw.cc $(INC)machdefs.h \
+ piyfxdrw.h pisysdep.h parradapter.h lut.h pidrawer.h pibwdggen.h \
+ piwdgx.h piwdggen.h pimsghandler.h picolist.h picmap.h picmapx.h \
+ picmapgen.h pigraphx.h pigraphgen.h pifontx.h pifontgen.h pigraphuc.h \
+ pievthandler.h psfile.h pigratt.h
 $(OBJ)psfile.o: psfile.cc psfile.h $(INC)machdefs.h \
  pisysdep.h pifontgen.h pigraphgen.h piwdgx.h piwdggen.h \
Index: trunk/SophyaPI/PI/objlist.list
===================================================================
--- trunk/SophyaPI/PI/objlist.list	(revision 1903)
+++ trunk/SophyaPI/PI/objlist.list	(revision 1904)
@@ -17,4 +17,5 @@
 pidrawwin.o
 pidrwtools.o
+pieldrw.o
 pievthandler.o
 pifilechogen.o
@@ -27,4 +28,5 @@
 pigraphuc.o
 pigraphx.o
+pigratt.o
 piimage.o
 piimgtools.o
@@ -52,3 +54,4 @@
 piwindowx.o
 pixtbase.o
+piyfxdrw.o
 psfile.o
Index: trunk/SophyaPI/PI/pi3ddrw.cc
===================================================================
--- trunk/SophyaPI/PI/pi3ddrw.cc	(revision 1903)
+++ trunk/SophyaPI/PI/pi3ddrw.cc	(revision 1904)
@@ -141,6 +141,6 @@
                             double yl1, double yl2, double zl1, double zl2)
 {
-  if (mLAtt == PI_NotDefLineAtt)    g3->SelLine(PI_ThinLine);
-  if (mFSz == PI_NotDefFontSize)    g3->SelFontSz((YMax()-YMin())/150.);
+  if (mGrAtt.GetLineAtt() == PI_NotDefLineAtt)    g3->SelLine(PI_ThinLine);
+  // RZZZZZ  if (mGrAtt. == PI_NotDefFontSize)    g3->SelFontSz((YMax()-YMin())/150.);
 
   PIGrCoord x1,y1,z1,x2,y2,z2;
Index: trunk/SophyaPI/PI/pi3ddrw.h
===================================================================
--- trunk/SophyaPI/PI/pi3ddrw.h	(revision 1903)
+++ trunk/SophyaPI/PI/pi3ddrw.h	(revision 1904)
@@ -9,4 +9,5 @@
 #include "pisysdep.h"
 #include "pidrawer.h"
+#include "pieldrw.h"
 #include "pigraph3d.h"
 
Index: trunk/SophyaPI/PI/picons.cc
===================================================================
--- trunk/SophyaPI/PI/picons.cc	(revision 1903)
+++ trunk/SophyaPI/PI/picons.cc	(revision 1904)
@@ -968,5 +968,5 @@
       break;
     case 3103 :
-      SelectFont(PI_BigSizeFont);
+      SelectFont(PI_LargeSizeFont);
       AutoSize();
       break;
Index: trunk/SophyaPI/PI/pidrawer.cc
===================================================================
--- trunk/SophyaPI/PI/pidrawer.cc	(revision 1903)
+++ trunk/SophyaPI/PI/pidrawer.cc	(revision 1904)
@@ -1,4 +1,4 @@
 // Module PI : Peida Interactive     PIDrawer
-// Classe de traceurs pouvat être attachés à une PIBaseWdg
+// Classe de traceurs pouvant être attachés à une PIBaseWdg
 //	      E. Aubourg , R.Ansari     96-98
 // LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA
@@ -56,13 +56,4 @@
   mFgHighLight = false;  // Flag de control d'affichage en mode HighLight
 
-  mFCol = mBCol = PI_NotDefColor;
-  mLAtt = PI_NotDefLineAtt;
-  mFSz = PI_NotDefFontSize;
-  mFAtt = PI_NotDefFontAtt;
-  mMSz = -1;
-  mMrk = PI_NotDefMarker;
-  mCmapid = CMAP_OTHER;
-  mRevCmap = false;
-  mFName = PI_DefaultFont;
 
   // Nom par defaut : Le nom de la classe
@@ -239,69 +230,19 @@
 //--
 
-void 
-PIDrawer::SetColAtt(PIColors fg, PIColors bg)
-{
-  mFCol = fg;
-  mBCol = bg;
-}
-
-void 
-PIDrawer::SetLineAtt(PILineAtt lat)
-{
-  mLAtt = lat;
-}
-
-void 
-PIDrawer::SetFontAtt(PIFontSize fsz, PIFontAtt fat)
-{
-  mFSz = fsz;
-  mFAtt = fat;
-}
-
-void 
-PIDrawer::SetFont(PIFontName fn, PIFontSize fsz, PIFontAtt fat)
-{
-  mFName = fn;
-  mFSz = fsz;
-  mFAtt = fat;
-}
-
-void 
-PIDrawer::SetMarkerAtt(int sz, PIMarker mrk)
-{
-  mMSz = sz;
-  mMrk = mrk;
-}
-
-void 
-PIDrawer::SetArrowMarkerAtt(int sz, PIArrowMarker mrk)
-{
-  mArrowMrkSz = sz;
-  mArrowMrk = mrk;
-}
-
-void 
-PIDrawer::SetColMapId(CMapId cid, bool rev)
-{
-  mCmapid = cid;
-  mRevCmap = rev;
-}
 
 void 
 PIDrawer::SelGraAtt(PIGraphicUC* g)
 {
-  if (mFCol != PI_NotDefColor)    g->SelForeground(mFCol);
-  if (mBCol != PI_NotDefColor)    g->SelBackground(mBCol);
-  if (mLAtt != PI_NotDefLineAtt)  g->SelLine(mLAtt);
-  if (mFName != PI_DefaultFont) {
-    PIFont myfont(mFName);
-    myfont.SetFontAtt(mFAtt);
-    myfont.SetFontSz(mFSz);
-    g->SelFont(myfont);
-  }
-  else if ( (mFSz != PI_NotDefFontSize) || (mFAtt != PI_NotDefFontAtt)  )
-                                  g->SelFont(mFSz, mFAtt);
-  if ( (mMrk != PI_NotDefMarker) || (mMSz >= 0) )
-                                  g->SelMarker(mMSz, mMrk);
+  PIColors fcol = GetGraphicAtt().GetFgColor(); 
+  if (fcol != PI_NotDefColor)    g->SelForeground(fcol);
+  PIColors bcol = GetGraphicAtt().GetBgColor(); 
+  if (bcol != PI_NotDefColor)    g->SelBackground(bcol);
+  if (GetGraphicAtt().GetLineAtt() != PI_NotDefLineAtt)  
+    g->SelLine(GetGraphicAtt().GetLineAtt());
+  if ( (GetGraphicAtt().GetFontName() != PI_DefaultFont) ||
+       (GetGraphicAtt().GetFontAtt() != PI_NotDefFontAtt) )
+    g->SelFont(GetGraphicAtt().GetFont());
+  if (GetGraphicAtt().GetMarker() != PI_NotDefMarker) 
+    g->SelMarker(GetGraphicAtt().GetMarkerSize(), GetGraphicAtt().GetMarker());
 }
 
@@ -343,5 +284,5 @@
 
 int
-PIDrawer::DecodeOptionString(vector<string> & opt)
+PIDrawer::DecodeOptionString(vector<string> & opt, bool rmdecop)
 {
   // a faire un jour OP+Reza 30/11/01
@@ -422,8 +363,8 @@
 {
   g->NoClip();
-  if (mLAtt == PI_NotDefLineAtt)  g->SelLine(PI_ThinLine);
-  else g->SelLine(mLAtt);
-  if (mFCol == PI_NotDefColor) g->SelForeground(PI_Black);
-  else g->SelForeground(mFCol);
+  if (GetGraphicAtt().GetLineAtt() == PI_NotDefLineAtt)  g->SelLine(PI_ThinLine);
+  else g->SelLine(GetGraphicAtt().GetLineAtt());
+  if (GetGraphicAtt().GetColor() == PI_NotDefColor) g->SelForeground(PI_Black);
+  else g->SelForeground(GetGraphicAtt().GetColor());
   //  On calcule les ticks 
   CalcTicks();
@@ -575,6 +516,6 @@
   int kk;
 
-  if (mFSz == PI_NotDefFontSize) 
-    g->SelFontSz(xMajTickLen*4., mFAtt);  // Passage de x3. a x4. - Reza Janvier 2002
+  if (axesAFSz) 
+    g->SelFontSz(xMajTickLen*4.);  // Passage de x3. a x4. - Reza Janvier 2002
 
   // Choix du bon format pour les labels des axes;
@@ -606,6 +547,6 @@
   double xOffset = 0;
 
-  if (mFSz == PI_NotDefFontSize) 
-    g->SelFontSz(xMajTickLen*4., mFAtt);    // Passage de x3. a x4. - Reza Janvier 2002
+  if (axesAFSz) 
+    g->SelFontSz(xMajTickLen*4.);  // Passage de x3. a x4. - Reza Janvier 2002
 
   // Choix du bon format pour les labels des axes;
@@ -714,190 +655,2 @@
 }
 
-/*  --------------------------------------------------------------  */
-/*  ------------------- Classe PIElDrawer ------------------------  */
-/*  --------------------------------------------------------------  */
-
-//++
-// Class	PIElDrawer
-// Lib		PI
-// include	pidrawer.h
-//
-//	Classe de traceur ("Drawer") capable de gérer et de 
-//	tracer une liste d'éléments simples. Cette classe
-//	est utilisé pour le tracé des axes et des éléments de
-//	texte ds les "PIScDrawWdg", "PIDraw3DWdg" et "PIImage".
-//--
-//++
-// Links	Parents
-// PIDrawer
-//--
-
-//++
-// Titre	Constructeurs et méthodes
-//--
-
-//++
-// PIElDrawer()
-//	Constructeur
-//--
-
-/* --Methode-- */
-PIElDrawer::PIElDrawer()
-{
-mEn = 0;
-titleT = titleB = "";
-}
-
-/* --Methode-- */
-PIElDrawer::~PIElDrawer()
-{
-}
-
-
-//++
-//  void  SetTitles(const char* tt=NULL, const char* tb=NULL)
-//	Ajout de titres haut ("tt") et bas ("tb")
-//  void  SetTitles(string const & tt, string const & tb)
-//	Ajout de titres haut ("tt") et bas ("tb")
-//--
-
-/* --Methode-- */
-void PIElDrawer::SetTitles(const char* tt, const char* tb)
-{
-if (tt != NULL)  titleT = tt;
-if (tb != NULL)  titleB = tb;
-}
-
-/* --Methode-- */
-void PIElDrawer::SetTitles(string const & tt, string const & tb)
-{
-titleT = tt;  titleB = tb;
-}
-
-//++
-// int  ElAddText(PIGrCoord x, PIGrCoord y, const char* s, PIColors c=PI_NotDefColor)
-//	Ajout d'un élément texte avec un attribut de couleur.
-//	Renvoie le numéro identificateur de l'élément.
-// int  ElAddLine(PIGrCoord x1, PIGrCoord y1, PIGrCoord x2, PIGrCoord y2, -
-//                 PIColors c=PI_NotDefColor)
-//	Ajout d'un élément de ligne avec un attribut de couleur.
-//	Renvoie le numéro identificateur de l'élément.
-// int  ElAddRect(PIGrCoord x, PIGrCoord y, PIGrCoord dx, PIGrCoord dy, -
-//                PIColors c=PI_NotDefColor)
-//	Ajout d'un élément de type rectangle avec un attribut de couleur.
-//	Renvoie le numéro identificateur de l'élément.
-// int  ElAddFRect(PIGrCoord x, PIGrCoord y, PIGrCoord dx, PIGrCoord dy, -
-//                PIColors c=PI_NotDefColor)
-//	Ajout d'un élément de type rectangle plein avec un attribut de couleur.
-//	Renvoie le numéro identificateur de l'élément.
-// int  ElAddCirc(PIGrCoord x, PIGrCoord y, PIGrCoord r, PIColors c=PI_NotDefColor)
-//	Ajout d'un élément de type cercle avec un attribut de couleur.
-//	Renvoie le numéro identificateur de l'élément.
-// int  ElAddFCirc(PIGrCoord x, PIGrCoord y, PIGrCoord r, PIColors c=PI_NotDefColor)
-//	Ajout d'un élément de type cercle plein avec un attribut de couleur.
-//	Renvoie le numéro identificateur de l'élément.
-// 
-// void  ElDel(int id)
-//	Suppression de l'élément avec l'identificateur "id".
-// void  ElDelAll()
-//	Suppression de tous les éléments du dessin.
-//--
-
-/* --Methode-- */
-void  PIElDrawer::Draw(PIGraphicUC* g, double /*xmin*/, double /*ymin*/, double /*xmax*/, double /*ymax*/)
-{
-SelGraAtt(g);   // DrawAxes change certains attributs graphiques
-DrawAxes(g);   // Trace des axes 
-g->SelFont(PI_NormalSizeFont, mFAtt);
-SelGraAtt(g);   // DrawAxes change certains attributs graphiques
-
-// Trace des titres 
-if ( (titleT.length() > 0) || (titleB.length() > 0) ) {
-  aXdir = false;  // Vrai si Axe X de Droite vers Gauche 
-  aYdir = false;  // Vrai si Axe Y de Haut vers Bas
-  PIGrCoord gas, gds;
-  double fx, fy, fh;
-//  fh = g->GetFontHeightUC(gas, gds);
-  fh = 0.075*(YMax()-YMin());
-  if ( titleT.length() > 0) {
-      fx = g->CalcStringWidth(titleT.c_str());
-      if(aXdir) fx = g->DeltaUCX(XMax(), -(XMax()-XMin()-fx)/2.);
-      else fx = g->DeltaUCX(XMin(), (XMax()-XMin()-fx)/2.);
-      if (g->isAxeYDirUpDown()) fy = g->DeltaUCY(YMin(), -fh);
-      else fy = g->DeltaUCY(YMax(), fh);
-      g->DrawString(fx, fy, titleT.c_str());
-//      printf(" PIElDrawer::Draw()/DBG (%g , %g) %s  - %g \n", fx, fy, titleT.c_str(), fh);
-    }
-  if ( titleB.length() > 0) {
-      fx = g->CalcStringWidth(titleB.c_str());
-      if(aXdir) fx = g->DeltaUCX(XMax(), -(XMax()-XMin()-fx)/2.);
-      else fx = g->DeltaUCX(XMin(), (XMax()-XMin()-fx)/2.);
-      if (g->isAxeYDirUpDown()) fy =  g->DeltaUCY(YMax(), fh*1.5);
-      else fy = g->DeltaUCY(YMin(), -fh*1.5);
-      g->DrawString(fx, fy, titleB.c_str());
-//      printf(" PIElDrawer::Draw()/DBG (%g , %g) %s  - %g \n", fx, fy, titleT.c_str(), fh);
-    }
-  }
-DrwElList::iterator it;
-PIColors cc = g->GetForeground();
-for (it = mElist.begin(); it != mElist.end(); it++)
-  {
-  if ((*it).col != PI_NotDefColor)  g->SelForeground((*it).col);
-  switch ( (*it).etyp )
-    {
-    case PIDEL_Line :
-      g->DrawLine((*it).ex, (*it).ey, (*it).edx, (*it).edy ); 
-      break;
-    case PIDEL_Text :
-      g->DrawString((*it).ex, (*it).ey, (char*) ((*it).es.c_str()) ); 
-      break;
-    case PIDEL_Rect :
-      g->DrawBox((*it).ex, (*it).ey, (*it).edx, (*it).edy ); 
-      break;
-    case PIDEL_FRect :
-      g->DrawFBox((*it).ex, (*it).ey, (*it).edx, (*it).edy ); 
-      break;
-    case PIDEL_Circ :
-      g->DrawCircle((*it).ex, (*it).ey, (*it).edx ); 
-      break;
-    case PIDEL_FCirc :
-      g->DrawFCircle((*it).ex, (*it).ey, (*it).edx ); 
-      break;
-    default :
-      break;
-    }
-  g->SelForeground(cc);
-  }
-}
-
-
-/* --Methode-- */
-int PIElDrawer::ElAdd(int typ, PIGrCoord x, PIGrCoord  y, PIGrCoord dx, PIGrCoord dy, const char* s, PIColors c)
-{
-DrwEl dre;
-mEn++;
-dre.eid = mEn;  dre.etyp = typ;
-dre.ex = x;   dre.ey = y;
-dre.edx = dx;  dre.edy = dy;
-dre.col = c;
-if (s)  dre.es = s;
-mElist.push_back(dre);
-return(mEn);
-}
-
-/* --Methode-- */
-void  PIElDrawer::ElDel(int id)
-{
-DrwElList::iterator it;
-for (it = mElist.begin(); it != mElist.end(); it++)
-  if ( (*it).eid == id) { mElist.erase(it);   break; }
-return;
-}
-
-/* --Methode-- */
-void  PIElDrawer::ElDelAll()
-{
-mElist.erase(mElist.begin(), mElist.end());
-return;
-}
-
Index: trunk/SophyaPI/PI/pidrawer.h
===================================================================
--- trunk/SophyaPI/PI/pidrawer.h	(revision 1903)
+++ trunk/SophyaPI/PI/pidrawer.h	(revision 1904)
@@ -8,4 +8,5 @@
 #include "pibwdggen.h"
 #include "pigraphuc.h"
+#include "pigratt.h"
 
 
@@ -38,7 +39,9 @@
                              { aXlog = logx; aYlog = logy; }
 
+  virtual void       SetAxesFlags(unsigned int flags=kAxesNone);
+  inline  void       SetAxesAutoFontSize(bool fg=true) { axesAFSz = fg; }
+
   virtual void       DrawAxes(PIGraphicUC* g);
-  virtual void       SetAxesFlags(unsigned int flags=kAxesNone);
-    
+
   virtual void       Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax); 
 
@@ -66,4 +69,5 @@
 
   inline unsigned int GetAxesFlags() { return(axesFlags); }
+  inline  bool       isAxesAutoFontSize(bool fg=true) { return axesAFSz; }
 
   inline PIGraphicUC*    GetGraphicUC() { return(mGrUC); }
@@ -72,32 +76,14 @@
   inline void         FreeLimits() {limitsFixed = 0;}
 
+  virtual void        SelGraAtt(PIGraphicUC* g);
+
 // Changement des attributs graphiques
-  virtual void       SetColAtt(PIColors fg=PI_NotDefColor, 
-                               PIColors bg=PI_NotDefColor);
-  virtual void       SetLineAtt(PILineAtt lat=PI_NotDefLineAtt);
-  virtual void       SetFontAtt(PIFontSize fsz=PI_NotDefFontSize,
-                                PIFontAtt fat=PI_NotDefFontAtt);
-  virtual void	     SetFont(PIFontName fn, PIFontSize fsz=PI_NotDefFontSize,
-			     PIFontAtt fat=PI_NotDefFontAtt);
-  virtual void       SetMarkerAtt(int sz=1, PIMarker mrk=PI_NotDefMarker);
-  virtual void       SetArrowMarkerAtt(int sz=5, PIArrowMarker mrk=PI_NotDefArrowMarker);
-  virtual void       SetColMapId(CMapId cid=CMAP_OTHER, bool rev=false);
-
-  void               SelGraAtt(PIGraphicUC* g);
+  inline void         SetGraphicAtt(PIGraphicAtt const& att) { mGrAtt = att; }
+  inline void         UpdateGraphicAtt(PIGraphicAtt const& att) 
+                      { mGrAtt.UpdateFrom(att); }
 
 // Acces aux attributs graphiques
-  inline PIColors    GetFgColAtt()  { return(mFCol); }
-  inline PIColors    GetBgColAtt()  { return(mBCol); }
-  inline PILineAtt   GetLineAtt()   { return(mLAtt); }
-  inline PIFontSize  GetFontSz()    { return(mFSz);  }
-  inline PIFontAtt   GetFontAtt()   { return(mFAtt); }
-  inline PIFontName  GetFontName()  { return(mFName);} 
-  inline int         GetMarkerSz()  { return(mMSz);  }
-  inline PIMarker    GetMarker()    { return(mMrk);  } 
-  inline int           GetArrowMarkerSz()  { return(mArrowMrkSz);  }
-  inline PIArrowMarker GetArrowMarker()  { return(mArrowMrk);  } 
-  inline CMapId      GetColMapId()  { return(mCmapid); }
-  inline CMapId      GetColMapId(bool & rev)  { rev = mRevCmap; return(mCmapid); }
-
+  inline PIGraphicAtt  GetGraphicAtt() const { return(mGrAtt); }
+  inline PIGraphicAtt& GetGraphicAtt() { return(mGrAtt); }
 
 //  Methode permettant l'affichage d'une fenetre de controle specialisee 
@@ -107,5 +93,5 @@
 
 //   Methode permettant de decoder des options a partir de chaines
-  virtual int        DecodeOptionString(vector<string> & opt);
+  virtual int        DecodeOptionString(vector<string> & opt, bool rmdecopt=true);
 
 //   On peut donner un nom a un drawer (par defaut = nom de la classe)
@@ -158,5 +144,5 @@
   int limitsFixed;
   unsigned int axesFlags;
-  
+  bool axesAFSz;
   PIBaseWdgGen* mBWdg;
   PIGraphicUC* mGrUC;
@@ -173,79 +159,9 @@
 
 //  Gestion d attributs graphiques associes a chaque drawer
-  PIColors           mFCol, mBCol;
-  PILineAtt          mLAtt;
-  PIFontName	     mFName;
-  PIFontSize         mFSz;
-  PIFontAtt          mFAtt;
-  int                mMSz;
-  PIMarker           mMrk;  
-  int                mArrowMrkSz;
-  PIArrowMarker      mArrowMrk;
-  CMapId             mCmapid;
-  bool               mRevCmap;
+  PIGraphicAtt   mGrAtt;
 
 };
 
 
-//  Classe avec gestion d une liste d elements a tracer 
-
-class PIElDrawer : public PIDrawer 
-{
-public:
-  enum { PIDEL_Line = 1, PIDEL_Text = 2,
-         PIDEL_Rect = 3, PIDEL_FRect = 4, 
-         PIDEL_Circ = 5, PIDEL_FCirc = 6 } ; 
-
-                     PIElDrawer();
-  virtual           ~PIElDrawer();
-
-  virtual void	     SetTitles(const char* tt=NULL, const char* tb=NULL);
-  virtual void       SetTitles(string const & tt, string const & tb);
-
-  virtual void       Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax); 
-
-  inline int         ElAddLine(PIGrCoord x1, PIGrCoord y1, PIGrCoord x2, PIGrCoord y2, 
-                               PIColors c=PI_NotDefColor)
-    { return( ElAdd(PIDEL_Line, x1, y1, x2, y2, NULL, c) ); }  
-  inline int         ElAddText(PIGrCoord x, PIGrCoord y, const char* s, PIColors c=PI_NotDefColor)
-    { return( ElAdd(PIDEL_Text, x, y, 0, 0, s, c) ); }  
-  inline int         ElAddRect(PIGrCoord x, PIGrCoord y, PIGrCoord dx, PIGrCoord dy, 
-                               PIColors c=PI_NotDefColor)
-    { return( ElAdd(PIDEL_Rect, x, y, dx, dy, NULL, c) ); }  
-  inline int         ElAddFRect(PIGrCoord x, PIGrCoord y, PIGrCoord dx, PIGrCoord dy,
-                               PIColors c=PI_NotDefColor)
-    { return( ElAdd(PIDEL_FRect, x, y, dx, dy, NULL, c) ); }  
-  inline int         ElAddCirc(PIGrCoord x, PIGrCoord y, PIGrCoord r, PIColors c=PI_NotDefColor)
-    { return( ElAdd(PIDEL_Circ, x, y, r, r, NULL, c) ); }  
-  inline int         ElAddFCirc(PIGrCoord x, PIGrCoord y, PIGrCoord r, PIColors c=PI_NotDefColor)
-    { return( ElAdd(PIDEL_FCirc, x, y, r, r, NULL, c) ); }  
-
-  void               ElDel(int id);
-  void               ElDelAll();
-
-protected:
-  int                ElAdd(int typ, PIGrCoord x, PIGrCoord y, PIGrCoord dx, PIGrCoord dy, 
-                           const char* s, PIColors c=PI_NotDefColor);
-#ifdef __DECCXX
-public:
-#endif
-  struct DrwEl{
-    int eid, etyp;
-    PIGrCoord ex,ey;
-    PIGrCoord edx,edy;
-    string es;
-    PIColors col;
-  };
-#ifdef __DECCXX
-protected:
-#endif
-  typedef list<DrwEl> DrwElList;
-
-  DrwElList mElist;
-  int mEn;
-
-  string titleT, titleB;       // Titre Haut - Bas
-
-};
 
 #endif
Index: trunk/SophyaPI/PI/pidrwtools.cc
===================================================================
--- trunk/SophyaPI/PI/pidrwtools.cc	(revision 1903)
+++ trunk/SophyaPI/PI/pidrwtools.cc	(revision 1904)
@@ -250,5 +250,5 @@
 mOpt[7]->AppendItem("Small FontSz", 802);
 mOpt[7]->AppendItem("Normal FontSz", 803);
-mOpt[7]->AppendItem("Big FontSz", 804);
+mOpt[7]->AppendItem("Large FontSz", 804);
 mOpt[7]->AppendItem("Huge FontSz", 805);
 mOpt[7]->SetBinding(PIBK_elastic, PIBK_elastic, PIBK_elastic, PIBK_elastic);
@@ -348,5 +348,5 @@
 			       PI_ItalicFont, PI_BoldItalicFont };
 static PIFontSize fntsz[6] = { PI_NotDefFontSize, PI_TinySizeFont, PI_SmallSizeFont, 
-			       PI_NormalSizeFont, PI_BigSizeFont, PI_HugeSizeFont };
+			       PI_NormalSizeFont, PI_LargeSizeFont, PI_HugeSizeFont };
 
 /* --Methode-- */
@@ -438,22 +438,24 @@
 if (!dr)  return;
 int ii,jj,kk;
-PIColors fc = dr->GetFgColAtt();
+PIGraphicAtt const & gratt = dr->GetGraphicAtt();
+PIColors fc = gratt.GetFgColor();
 for(kk=0; kk<MYNMXCOLORS; kk++) 
   if (fc == cols[kk])  { mOpt[0]->SetValue(100+kk);  break; }    
-CMapId cmi = dr->GetColMapId();
+CMapId cmi = gratt.GetColMapId();
 if (cmi == CMAP_OTHER)  mOpt[1]->SetValue(200);
 else for(kk=0; kk<PIColorMap::NumberStandardColorMaps(); kk++)
   if (cmi == PIColorMap::GetStandardColorMapId(kk)) { mOpt[1]->SetValue(201+kk);  break; }  
-PIMarker mk = dr->GetMarker();   
+PIMarker mk = gratt.GetMarker();   
 for(kk=0; kk<12; kk++) 
   if (mk == mrk[kk])   { mOpt[2]->SetValue(300+kk);  break; }
-kk = dr->GetMarkerSz();
+kk = gratt.GetMarkerSz();
 if (kk < 1)  kk = 1;
 if (kk > 15) kk = 15;
 if (kk%2 == 0) kk++;
 mOpt[3]->SetValue(400+kk);
-PIFontName fnm = dr->GetFontName();
-PIFontAtt fat = dr->GetFontAtt();
-PIFontSize fsz = dr->GetFontSz();
+PIFontName fnm = gratt.GetFontName();
+PIFontAtt fat = gratt.GetFontAtt();
+PIFontSize fsz = gratt.GetFontSz();
+
 for(ii=0; ii<5; ii++)
   if (fnm ==  fntname[ii]) break;
@@ -470,5 +472,5 @@
 mOpt[7]->SetValue(800+jj);
 
-PILineAtt lat = dr->GetLineAtt();
+PILineAtt lat = gratt.GetLineAtt();
 for(kk=0; kk<13; kk++)
   if (lat == line[kk])   { mOpt[5]->SetValue(600+kk);  break; }
@@ -484,11 +486,12 @@
   if (drw == NULL)  return;
   mCurBW->SetActiveDrawer(mNDr);
+  PIGraphicAtt gratt;
   int k,ii,jj,kk;
   k = mOpt[0]->GetValue()-100;
   if ( (k < 0) || (k >= MYNMXCOLORS) )  k = 0;
-  drw->SetColAtt(cols[k]);
+  gratt.SetColAtt(cols[k]);
   k = mOpt[1]->GetValue()-200;
-  if (k == 0) drw->SetColMapId(CMAP_OTHER);
-  else drw->SetColMapId(PIColorMap::GetStandardColorMapId(k-1));
+  if (k == 0) gratt.SetColMapId(CMAP_OTHER);
+  else gratt.SetColMapId(PIColorMap::GetStandardColorMapId(k-1));
   k =  mOpt[2]->GetValue()-300;
   if ( (k < 0) || (k > 11) )  k = 0;
@@ -499,13 +502,13 @@
   //   kk = 3;
   //  }
-  drw->SetMarkerAtt(kk, mrk[k]);
+  gratt.SetMarkerAtt(kk, mrk[k]);
   ii =  (mOpt[4]->GetValue()-500);
   jj =  (mOpt[6]->GetValue()-700);
   kk =  (mOpt[7]->GetValue()-800);
-  drw->SetFont(fntname[ii], fntsz[kk], fntatt[jj]);
+  gratt.SetFontAtt(fntname[ii], fntsz[kk], fntatt[jj]);
 
   k =  mOpt[5]->GetValue()-600;
   if ( (k < 0) || (k > 12) )  k = 0;
-  drw->SetLineAtt(PILineAtt(line[k]));
+  gratt.SetLineAtt(PILineAtt(line[k]));
   if (fgref)  mCurBW->Refresh();
   else drw->Refresh();
@@ -515,5 +518,4 @@
 void PIDrwTools::Process(PIMessage msg, PIMsgHandler* /*sender*/, void* /*data*/)
 {
-  char strg[64];
 
   PIMessage mod = ModMsg(msg);
Index: trunk/SophyaPI/PI/pieldrw.cc
===================================================================
--- trunk/SophyaPI/PI/pieldrw.cc	(revision 1904)
+++ trunk/SophyaPI/PI/pieldrw.cc	(revision 1904)
@@ -0,0 +1,200 @@
+// Module PI : Peida Interactive     PIElDrawer
+//	      E. Aubourg , R.Ansari     96-02
+// (C) LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA
+
+#include "machdefs.h"
+#include <strings.h>
+#include <iostream.h>
+
+#include "pieldrw.h"
+
+#include <math.h>
+
+
+/*  --------------------------------------------------------------  */
+/*  ------------------- Classe PIElDrawer ------------------------  */
+/*  --------------------------------------------------------------  */
+
+//++
+// Class	PIElDrawer
+// Lib		PI
+// include	pieldrw.h
+//
+//	Classe de traceur ("Drawer") capable de gérer et de 
+//	tracer une liste d'éléments simples. Cette classe
+//	est utilisé pour le tracé des axes et des éléments de
+//	texte ds les "PIScDrawWdg", "PIDraw3DWdg" et "PIImage".
+//--
+//++
+// Links	Parents
+// PIDrawer
+//--
+
+//++
+// Titre	Constructeurs et méthodes
+//--
+
+//++
+// PIElDrawer()
+//	Constructeur
+//--
+
+/* --Methode-- */
+PIElDrawer::PIElDrawer()
+{
+mEn = 0;
+titleT = titleB = "";
+}
+
+/* --Methode-- */
+PIElDrawer::~PIElDrawer()
+{
+}
+
+
+//++
+//  void  SetTitles(const char* tt=NULL, const char* tb=NULL)
+//	Ajout de titres haut ("tt") et bas ("tb")
+//  void  SetTitles(string const & tt, string const & tb)
+//	Ajout de titres haut ("tt") et bas ("tb")
+//--
+
+/* --Methode-- */
+void PIElDrawer::SetTitles(const char* tt, const char* tb)
+{
+if (tt != NULL)  titleT = tt;
+if (tb != NULL)  titleB = tb;
+}
+
+/* --Methode-- */
+void PIElDrawer::SetTitles(string const & tt, string const & tb)
+{
+titleT = tt;  titleB = tb;
+}
+
+//++
+// int  ElAddText(PIGrCoord x, PIGrCoord y, const char* s, PIColors c=PI_NotDefColor)
+//	Ajout d'un élément texte avec un attribut de couleur.
+//	Renvoie le numéro identificateur de l'élément.
+// int  ElAddLine(PIGrCoord x1, PIGrCoord y1, PIGrCoord x2, PIGrCoord y2, -
+//                 PIColors c=PI_NotDefColor)
+//	Ajout d'un élément de ligne avec un attribut de couleur.
+//	Renvoie le numéro identificateur de l'élément.
+// int  ElAddRect(PIGrCoord x, PIGrCoord y, PIGrCoord dx, PIGrCoord dy, -
+//                PIColors c=PI_NotDefColor)
+//	Ajout d'un élément de type rectangle avec un attribut de couleur.
+//	Renvoie le numéro identificateur de l'élément.
+// int  ElAddFRect(PIGrCoord x, PIGrCoord y, PIGrCoord dx, PIGrCoord dy, -
+//                PIColors c=PI_NotDefColor)
+//	Ajout d'un élément de type rectangle plein avec un attribut de couleur.
+//	Renvoie le numéro identificateur de l'élément.
+// int  ElAddCirc(PIGrCoord x, PIGrCoord y, PIGrCoord r, PIColors c=PI_NotDefColor)
+//	Ajout d'un élément de type cercle avec un attribut de couleur.
+//	Renvoie le numéro identificateur de l'élément.
+// int  ElAddFCirc(PIGrCoord x, PIGrCoord y, PIGrCoord r, PIColors c=PI_NotDefColor)
+//	Ajout d'un élément de type cercle plein avec un attribut de couleur.
+//	Renvoie le numéro identificateur de l'élément.
+// 
+// void  ElDel(int id)
+//	Suppression de l'élément avec l'identificateur "id".
+// void  ElDelAll()
+//	Suppression de tous les éléments du dessin.
+//--
+
+/* --Methode-- */
+void  PIElDrawer::Draw(PIGraphicUC* g, double /*xmin*/, double /*ymin*/, double /*xmax*/, double /*ymax*/)
+{
+SelGraAtt(g);   // DrawAxes change certains attributs graphiques
+DrawAxes(g);   // Trace des axes 
+g->SelFont(PI_NormalSizeFont);
+SelGraAtt(g);   // DrawAxes change certains attributs graphiques
+
+// Trace des titres 
+if ( (titleT.length() > 0) || (titleB.length() > 0) ) {
+  aXdir = false;  // Vrai si Axe X de Droite vers Gauche 
+  aYdir = false;  // Vrai si Axe Y de Haut vers Bas
+  double fx, fy, fh;
+//  fh = g->GetFontHeightUC(gas, gds);
+  fh = 0.075*(YMax()-YMin());
+  if ( titleT.length() > 0) {
+      fx = g->CalcStringWidth(titleT.c_str());
+      if(aXdir) fx = g->DeltaUCX(XMax(), -(XMax()-XMin()-fx)/2.);
+      else fx = g->DeltaUCX(XMin(), (XMax()-XMin()-fx)/2.);
+      if (g->isAxeYDirUpDown()) fy = g->DeltaUCY(YMin(), -fh);
+      else fy = g->DeltaUCY(YMax(), fh);
+      g->DrawString(fx, fy, titleT.c_str());
+//      printf(" PIElDrawer::Draw()/DBG (%g , %g) %s  - %g \n", fx, fy, titleT.c_str(), fh);
+    }
+  if ( titleB.length() > 0) {
+      fx = g->CalcStringWidth(titleB.c_str());
+      if(aXdir) fx = g->DeltaUCX(XMax(), -(XMax()-XMin()-fx)/2.);
+      else fx = g->DeltaUCX(XMin(), (XMax()-XMin()-fx)/2.);
+      if (g->isAxeYDirUpDown()) fy =  g->DeltaUCY(YMax(), fh*1.5);
+      else fy = g->DeltaUCY(YMin(), -fh*1.5);
+      g->DrawString(fx, fy, titleB.c_str());
+//      printf(" PIElDrawer::Draw()/DBG (%g , %g) %s  - %g \n", fx, fy, titleT.c_str(), fh);
+    }
+  }
+DrwElList::iterator it;
+PIColors cc = g->GetForeground();
+for (it = mElist.begin(); it != mElist.end(); it++)
+  {
+  if ((*it).col != PI_NotDefColor)  g->SelForeground((*it).col);
+  switch ( (*it).etyp )
+    {
+    case PIDEL_Line :
+      g->DrawLine((*it).ex, (*it).ey, (*it).edx, (*it).edy ); 
+      break;
+    case PIDEL_Text :
+      g->DrawString((*it).ex, (*it).ey, (char*) ((*it).es.c_str()) ); 
+      break;
+    case PIDEL_Rect :
+      g->DrawBox((*it).ex, (*it).ey, (*it).edx, (*it).edy ); 
+      break;
+    case PIDEL_FRect :
+      g->DrawFBox((*it).ex, (*it).ey, (*it).edx, (*it).edy ); 
+      break;
+    case PIDEL_Circ :
+      g->DrawCircle((*it).ex, (*it).ey, (*it).edx ); 
+      break;
+    case PIDEL_FCirc :
+      g->DrawFCircle((*it).ex, (*it).ey, (*it).edx ); 
+      break;
+    default :
+      break;
+    }
+  g->SelForeground(cc);
+  }
+}
+
+
+/* --Methode-- */
+int PIElDrawer::ElAdd(int typ, PIGrCoord x, PIGrCoord  y, PIGrCoord dx, PIGrCoord dy, const char* s, PIColors c)
+{
+DrwEl dre;
+mEn++;
+dre.eid = mEn;  dre.etyp = typ;
+dre.ex = x;   dre.ey = y;
+dre.edx = dx;  dre.edy = dy;
+dre.col = c;
+if (s)  dre.es = s;
+mElist.push_back(dre);
+return(mEn);
+}
+
+/* --Methode-- */
+void  PIElDrawer::ElDel(int id)
+{
+DrwElList::iterator it;
+for (it = mElist.begin(); it != mElist.end(); it++)
+  if ( (*it).eid == id) { mElist.erase(it);   break; }
+return;
+}
+
+/* --Methode-- */
+void  PIElDrawer::ElDelAll()
+{
+mElist.erase(mElist.begin(), mElist.end());
+return;
+}
+
Index: trunk/SophyaPI/PI/pieldrw.h
===================================================================
--- trunk/SophyaPI/PI/pieldrw.h	(revision 1904)
+++ trunk/SophyaPI/PI/pieldrw.h	(revision 1904)
@@ -0,0 +1,72 @@
+// This may look like C code, but it is really -*- C++ -*-
+// PIElDrawer - 
+//                             R. Ansari  97-02
+// LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA
+#ifndef PIELDRW_H
+#define PIELDRW_H
+
+#include "pidrawer.h"
+
+//  Classe avec gestion d une liste d elements a tracer 
+
+class PIElDrawer : public PIDrawer 
+{
+public:
+  enum { PIDEL_Line = 1, PIDEL_Text = 2,
+         PIDEL_Rect = 3, PIDEL_FRect = 4, 
+         PIDEL_Circ = 5, PIDEL_FCirc = 6 } ; 
+
+                     PIElDrawer();
+  virtual           ~PIElDrawer();
+
+  virtual void	     SetTitles(const char* tt=NULL, const char* tb=NULL);
+  virtual void       SetTitles(string const & tt, string const & tb);
+
+  virtual void       Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax); 
+
+  inline int         ElAddLine(PIGrCoord x1, PIGrCoord y1, PIGrCoord x2, PIGrCoord y2, 
+                               PIColors c=PI_NotDefColor)
+    { return( ElAdd(PIDEL_Line, x1, y1, x2, y2, NULL, c) ); }  
+  inline int         ElAddText(PIGrCoord x, PIGrCoord y, const char* s, PIColors c=PI_NotDefColor)
+    { return( ElAdd(PIDEL_Text, x, y, 0, 0, s, c) ); }  
+  inline int         ElAddRect(PIGrCoord x, PIGrCoord y, PIGrCoord dx, PIGrCoord dy, 
+                               PIColors c=PI_NotDefColor)
+    { return( ElAdd(PIDEL_Rect, x, y, dx, dy, NULL, c) ); }  
+  inline int         ElAddFRect(PIGrCoord x, PIGrCoord y, PIGrCoord dx, PIGrCoord dy,
+                               PIColors c=PI_NotDefColor)
+    { return( ElAdd(PIDEL_FRect, x, y, dx, dy, NULL, c) ); }  
+  inline int         ElAddCirc(PIGrCoord x, PIGrCoord y, PIGrCoord r, PIColors c=PI_NotDefColor)
+    { return( ElAdd(PIDEL_Circ, x, y, r, r, NULL, c) ); }  
+  inline int         ElAddFCirc(PIGrCoord x, PIGrCoord y, PIGrCoord r, PIColors c=PI_NotDefColor)
+    { return( ElAdd(PIDEL_FCirc, x, y, r, r, NULL, c) ); }  
+
+  void               ElDel(int id);
+  void               ElDelAll();
+
+protected:
+  int                ElAdd(int typ, PIGrCoord x, PIGrCoord y, PIGrCoord dx, PIGrCoord dy, 
+                           const char* s, PIColors c=PI_NotDefColor);
+#ifdef __DECCXX
+public:
+#endif
+  struct DrwEl{
+    int eid, etyp;
+    PIGrCoord ex,ey;
+    PIGrCoord edx,edy;
+    string es;
+    PIColors col;
+  };
+#ifdef __DECCXX
+protected:
+#endif
+  typedef list<DrwEl> DrwElList;
+
+  DrwElList mElist;
+  int mEn;
+
+  string titleT, titleB;       // Titre Haut - Bas
+
+};
+
+
+#endif
Index: trunk/SophyaPI/PI/pifontgen.cc
===================================================================
--- trunk/SophyaPI/PI/pifontgen.cc	(revision 1903)
+++ trunk/SophyaPI/PI/pifontgen.cc	(revision 1904)
@@ -21,9 +21,11 @@
 //	et de la taille *PIFontSize*.
 //	* PIFontName :
-//|	PI_DefaultFont , PI_CourierFont , PI_SymbolFont
+//|	PI_DefaultFont , PI_CourierFont , PI_HelveticaFont, 
+//|	PI_TimesFont, PI_SymbolFont
 //	* PIFontSize :
-//|	PI_SmallSizeFont , PI_NormalSizeFont , PI_BigSizeFont, PI_HugeSizeFont
+//|	PI_TinySizeFont, PI_SmallSizeFont , PI_NormalSizeFont , 
+//|	PI_LargeSizeFont, PI_VeryLargeSizeFont, PI_HugeSizeFont
 //	* PIFontAtt :	
-//|	PI_RomanFont , PI_BoldFont , PI_ItalicFont 
+//|	PI_RomanFont , PI_BoldFont , PI_ItalicFont , PI_BoldItalicFont 
 //--
 
@@ -76,6 +78,10 @@
 // PIFontAtt  GetFontAtt()
 //	Retourne l'attribut de fonte
-// int  GetFontSize()
+// PIFontSize  GetFontSz()
+//	Retourne la taille de fonte converti en enum PIFontSize
+// int  GetFontSzPt()
 //	Retourne la taille de fonte en points (pixels)
+// int  GetFontSeze()
+//	Retourne la taille de fonte en points (pixels) - idem GetFontSzPt()
 // int GetFontHeight(int& asc, int& desc) 
 //	Renvoie la hauteur des caractères, ainsi que la taille au dessus
Index: trunk/SophyaPI/PI/pifontgen.h
===================================================================
--- trunk/SophyaPI/PI/pifontgen.h	(revision 1903)
+++ trunk/SophyaPI/PI/pifontgen.h	(revision 1904)
@@ -14,5 +14,6 @@
 		  PI_TinySizeFont = 1,
                   PI_SmallSizeFont = 2, PI_NormalSizeFont = 3, 
-                  PI_BigSizeFont = 4, PI_HugeSizeFont = 5 };
+                  PI_LargeSizeFont = 4, PI_VeryLargeSizeFont = 5,
+		  PI_HugeSizeFont = 6 };
 
 enum PIFontAtt { PI_NotDefFontAtt = -1,
@@ -35,10 +36,12 @@
   virtual void		SetFontSzPt(int npt)		= 0;
 
-  virtual PIFontName    GetFontName()			= 0;
-  virtual PIFontAtt     GetFontAtt()			= 0;
-  virtual int		GetFontSize()			= 0;
+  virtual PIFontName    GetFontName()  const		= 0;
+  virtual PIFontAtt     GetFontAtt()  const		= 0;
+  virtual PIFontSize	GetFontSz() const	        = 0;
+  virtual int		GetFontSzPt() const		= 0;
+  inline  int		GetFontSize() const { return GetFontSzPt(); }
 
-  virtual int		GetFontHeight(int& asc, int& desc)	= 0;
-  virtual int		GetStringWidth(char const* s)		= 0;
+  virtual int		GetFontHeight(int& asc, int& desc) const	= 0;
+  virtual int		GetStringWidth(char const* s) const		= 0;
 };
 
Index: trunk/SophyaPI/PI/pifontx.cc
===================================================================
--- trunk/SophyaPI/PI/pifontx.cc	(revision 1903)
+++ trunk/SophyaPI/PI/pifontx.cc	(revision 1904)
@@ -82,5 +82,5 @@
 
 /* --Methode-- */
-PIFontName PIFontX::GetFontName()
+PIFontName PIFontX::GetFontName() const
 {
 return(mFName);
@@ -88,5 +88,5 @@
 
 /* --Methode-- */
-PIFontAtt PIFontX::GetFontAtt()
+PIFontAtt PIFontX::GetFontAtt() const
 {
 return(mFAtt);
@@ -94,11 +94,12 @@
 
 /* --Methode-- */
-int PIFontX::GetFontSize()
+int PIFontX::GetFontSzPt() const
 {
 return(mFSize);
 }
 
-/* --Methode-- */
-int PIFontX::GetFontHeight(int& asc, int& desc)
+
+/* --Methode-- */
+int PIFontX::GetFontHeight(int& asc, int& desc) const
 {
 char a[2];
@@ -111,5 +112,5 @@
 
 /* --Methode-- */
-int PIFontX::GetStringWidth(char const* s)
+int PIFontX::GetStringWidth(char const* s) const
 {
 return(XTextWidth(mFSt, s, strlen(s)));
@@ -117,5 +118,5 @@
 
 
-#define NMAXFONTSZ    9
+#define NMAXFONTSZ    13
 #define NMAXFONTATT   4
 #define NMAXFONTTYP   5
@@ -123,10 +124,11 @@
 /*  Variables globales pour la gestion des fontes  */
 static XFontStruct * fntst[NMAXFONTSZ][NMAXFONTATT][NMAXFONTTYP];
-static int fntsz[NMAXFONTSZ] = {8,9,10,11,12,14,18,24,36};
-static int TinyFontIndex = 0; 
-static int SmallFontIndex = 2; 
-static int NormalFontIndex = 4;
-static int BigFontIndex = 6;
-static int HugeFontIndex = 8;
+static int fntsz[NMAXFONTSZ] = {8,9,10,11,12,14,16,18,20,24,28,32,36};
+static int TinyFontIndex = 1; 
+static int SmallFontIndex = 3; 
+static int NormalFontIndex = 5;
+static int LargeFontIndex = 7;
+static int VeryLargeFontIndex = 9;
+static int HugeFontIndex = 11;
 static  PIFontAtt fntatt[NMAXFONTATT] = 
         { PI_RomanFont, PI_BoldFont, PI_ItalicFont, PI_BoldItalicFont };
@@ -136,4 +138,30 @@
 
 /* --Methode-- */
+PIFontSize PIFontX::GetFontSz() const
+{
+  int fnidx[6],k;
+  fnidx[0] = TinyFontIndex;
+  fnidx[1] = SmallFontIndex;
+  fnidx[2] = NormalFontIndex;
+  fnidx[3] = LargeFontIndex;
+  fnidx[4] = VeryLargeFontIndex;
+  fnidx[5] = HugeFontIndex;
+  PIFontSize rfnsz[6] = {PI_TinySizeFont, PI_SmallSizeFont, PI_NormalSizeFont, 
+			 PI_LargeSizeFont, PI_VeryLargeSizeFont, PI_HugeSizeFont};
+  PIFontSize rs = PI_NormalSizeFont;
+  int diff = mFSize-fntsz[NormalFontIndex];
+  int diffsz = (diff < 0) ? -diff : diff;
+  for(k=0; k<6; k++) {
+    diff = mFSize-fntsz[fnidx[k]];
+    if (diff < 0)  diff = -diff;
+    if (diff < diffsz) {
+      diffsz = diff; 
+      rs = rfnsz[k];
+    }
+  }
+return(rs);
+}
+
+/* --Methode-- */
 void PIFontX::SelectFont(PIFontName fn, PIFontAtt fa, PIFontSize fs)
 {
@@ -149,6 +177,9 @@
     isz = fntsz[NormalFontIndex];
     break;
-  case PI_BigSizeFont:
-    isz = fntsz[BigFontIndex];
+  case PI_LargeSizeFont:
+    isz = fntsz[LargeFontIndex];
+    break;
+  case PI_VeryLargeSizeFont:
+    isz = fntsz[VeryLargeFontIndex];
     break;
   case PI_HugeSizeFont:
@@ -360,5 +391,8 @@
 NormalFontIndex = kksel;
 SmallFontIndex = (kksel > 1) ? kksel-2 : 0 ;
-BigFontIndex =  (kksel < NMAXFONTSZ-2) ? kksel+2 :  NMAXFONTSZ-1;
+TinyFontIndex = (kksel > 3) ? kksel-4 : 0 ;  
+LargeFontIndex =  (kksel < NMAXFONTSZ-2) ? kksel+2 :  NMAXFONTSZ-1;
+VeryLargeFontIndex =  (kksel < NMAXFONTSZ-4) ? kksel+4 :  NMAXFONTSZ-1;
+HugeFontIndex =  (kksel < NMAXFONTSZ-6) ? kksel+6 :  NMAXFONTSZ-1;
 // On garde HugeFontIndex et TinyFontIndex aux tailles extremes 
 // HugeFontIndex = NMAXFONTSZ-1;
Index: trunk/SophyaPI/PI/pifontx.h
===================================================================
--- trunk/SophyaPI/PI/pifontx.h	(revision 1903)
+++ trunk/SophyaPI/PI/pifontx.h	(revision 1904)
@@ -28,10 +28,11 @@
   virtual void		SetFontSzPt(int npt);
 
-  virtual PIFontName    GetFontName();
-  virtual PIFontAtt     GetFontAtt();
-  virtual int		GetFontSize();
+  virtual PIFontName    GetFontName() const ;
+  virtual PIFontAtt     GetFontAtt() const ;
+  virtual PIFontSize    GetFontSz() const;
+  virtual int		GetFontSzPt() const ;
 
-  virtual int		GetFontHeight(int& asc, int& desc);
-  virtual int		GetStringWidth(char const* s);
+  virtual int		GetFontHeight(int& asc, int& desc) const ;
+  virtual int		GetStringWidth(char const* s) const ;
 
 // En public pour PIGraphicX
Index: trunk/SophyaPI/PI/pigraphuc.cc
===================================================================
--- trunk/SophyaPI/PI/pigraphuc.cc	(revision 1903)
+++ trunk/SophyaPI/PI/pigraphuc.cc	(revision 1904)
@@ -45,6 +45,9 @@
 //	Permet de modifier l'objet "PIGraphic" de départ et l'espace graphique correspondant.
 //
-// void  SelFontSz(PIGrCoord sz, PIFontAtt att=PI_RomanFont)
+// void  SelFontSz(PIGrCoord sz)
 //	Sélection de fonte avec la taille exprimée en coordonnées utilisateur
+// void  SelFontSz(PIGrCoord sz, PIFontAtt att)
+//	Sélection de fonte avec la taille exprimée en coordonnées utilisateur, avec 
+//	Spécification d'attribut de fonte
 // void  SelMarkerSz(PIGrCoord msz, PIMarker mrk=PI_DotMarker)
 //	Sélection de marker avec la taille exprimée en coordonnées utilisateur
@@ -802,4 +805,11 @@
 
 /* --Methode-- */
+void PIGraphicUC::SelFontSz(PIGrCoord sz)
+{
+  if (!mGrC) return;
+  SelFontSz(sz, mGrC->GetFont().GetFontAtt());
+}
+
+/* --Methode-- */
 void PIGraphicUC::SelFontSz(PIGrCoord sz, PIFontAtt att)
 {
Index: trunk/SophyaPI/PI/pigraphuc.h
===================================================================
--- trunk/SophyaPI/PI/pigraphuc.h	(revision 1903)
+++ trunk/SophyaPI/PI/pigraphuc.h	(revision 1904)
@@ -89,5 +89,6 @@
   virtual void       SelFontSzPt(int npt=12, PIFontAtt att=PI_RomanFont);
 //  Fonctions specifiques a PIGraphicUC :
-  virtual void       SelFontSz(PIGrCoord sz, PIFontAtt att=PI_RomanFont);
+  virtual void       SelFontSz(PIGrCoord sz);
+  virtual void       SelFontSz(PIGrCoord sz, PIFontAtt att);
   virtual void       SelMarkerSz(PIGrCoord msz, PIMarker mrk=PI_DotMarker);
 
Index: trunk/SophyaPI/PI/pigratt.cc
===================================================================
--- trunk/SophyaPI/PI/pigratt.cc	(revision 1904)
+++ trunk/SophyaPI/PI/pigratt.cc	(revision 1904)
@@ -0,0 +1,80 @@
+// Module PI : Peida Interactive     PIGraphicAtt 
+// PIGraphicAtt - Implementation     R. Ansari  2002
+// (C) LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA
+
+#include "pigratt.h"
+
+PIGraphicAtt::PIGraphicAtt()
+{
+  SetColAtt();
+  SetLineAtt();
+  SetMarkerAtt(1);
+  SetArrowMarkerAtt(5);
+  SetColMapId();
+}
+
+PIGraphicAtt::PIGraphicAtt(PIGraphicAtt const & att)
+{
+  CopyFrom(att);
+}
+
+PIGraphicAtt::PIGraphicAtt(vector<string> & att, bool rmdecatt=true)
+{
+  SetColAtt();
+  SetLineAtt();
+  SetMarkerAtt(1);
+  SetArrowMarkerAtt(5);
+  SetColMapId();
+}
+
+PIGraphicAtt::~PIGraphicAtt()
+{
+}
+
+void PIGraphicAtt::CopyFrom(PIGraphicAtt const & att)
+{
+  mFCol = att.mFCol;
+  mBCol = att.mBCol;
+  mFnt = att.mFnt;
+  mMSz = att.mMSz;
+  mMrk = att.mMrk;
+  mArrowMrkSz = att.mArrowMrkSz;
+  mArrowMrk = att.mArrowMrk;
+  mCmapid = att.mCmapid;
+  mRevCmap = att.mRevCmap;
+}
+
+void PIGraphicAtt::UpdateFrom(PIGraphicAtt const & att)
+{
+  if (att.mFCol != PI_NotDefColor)  mFCol = att.mFCol;
+  if (att.mBCol != PI_NotDefColor)  mBCol = att.mBCol;
+  if ( (att.mFnt.GetFontName() != PI_DefaultFont) || 
+       (att.mFnt.GetFontAtt() != PI_NotDefFontAtt) ||
+       (att.mFnt.GetFontSize() != PI_NotDefFontSize) )  mFnt = att.mFnt;
+  if (att.mMrk != PI_NotDefMarker) {
+    mMSz = att.mMSz;
+    mMrk = att.mMrk;
+  }
+  if (att.mArrowMrk != PI_NotDefArrowMarker) {
+    mArrowMrkSz = att.mArrowMrkSz;
+    mArrowMrk = att.mArrowMrk;
+  }
+  if (att.mCmapid != CMAP_OTHER) {
+    mCmapid = att.mCmapid;
+    mRevCmap = att.mRevCmap;
+  }
+
+}
+
+void PIGraphicAtt::SetFontAtt(PIFontSize fsz, PIFontAtt fat)
+{
+  mFnt.SetFontAtt(fat);
+  mFnt.SetFontSz(fsz);
+}
+
+void PIGraphicAtt::SetFontAtt(PIFontName fn, PIFontSize fsz, PIFontAtt fat)
+{
+  mFnt.SetFont(fn);
+  mFnt.SetFontAtt(fat);
+  mFnt.SetFontSz(fsz);
+}
Index: trunk/SophyaPI/PI/pigratt.h
===================================================================
--- trunk/SophyaPI/PI/pigratt.h	(revision 1904)
+++ trunk/SophyaPI/PI/pigratt.h	(revision 1904)
@@ -0,0 +1,81 @@
+// This may look like C code, but it is really -*- C++ -*-
+// Module PI : Peida Interactive     PIGraphicAtt 
+// Classe de gestion des attributs graphiques  
+//                                        R. Ansari  2002
+// (C) LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA
+
+#ifndef PIGRAPHICATT_H_SEEN
+#define PIGRAPHICATT_H_SEEN
+
+#include "pisysdep.h"
+#include <string>
+#include <vector>
+#include "pigraphgen.h"
+
+class PIGraphicAtt {
+public:
+                 PIGraphicAtt();
+                 PIGraphicAtt(PIGraphicAtt const & att);
+                 PIGraphicAtt(vector<string> & att, bool rmdecatt=true);
+  virtual        ~PIGraphicAtt();
+
+  virtual void   CopyFrom(PIGraphicAtt const & att);
+  inline PIGraphicAtt& operator = (PIGraphicAtt const & att)
+                 { CopyFrom(att);  return(*this); }
+
+  virtual void   UpdateFrom(PIGraphicAtt const & att);
+
+// Changement des attributs graphiques
+  inline void    SetColAtt(PIColors fg=PI_NotDefColor, 
+			   PIColors bg=PI_NotDefColor)  { mFCol = fg; mBCol = bg; }
+  inline void    SetLineAtt(PILineAtt lat=PI_NotDefLineAtt)  { mLAtt = lat; }
+  inline void    SetFont(PIFont const & fnt)  { mFnt = fnt; } 
+         void    SetFontAtt(PIFontSize fsz=PI_NotDefFontSize,
+			    PIFontAtt fat=PI_NotDefFontAtt);
+         void	 SetFontAtt(PIFontName fn, PIFontSize fsz=PI_NotDefFontSize,
+			    PIFontAtt fat=PI_NotDefFontAtt);
+  inline void    SetMarkerAtt(int sz, PIMarker mrk=PI_NotDefMarker)
+                 { mMSz = (sz>0)?sz:mMSz;  mMrk = mrk; }
+  inline void    SetMarkerAtt(PIMarker mrk=PI_NotDefMarker)  { mMrk = mrk; }
+  inline void    SetArrowMarkerAtt(int sz, PIArrowMarker mrk=PI_NotDefArrowMarker)
+                 { mArrowMrkSz = (sz>2)?sz:mArrowMrkSz;  mArrowMrk = mrk; }
+  inline void    SetArrowMarkerAtt(PIArrowMarker mrk=PI_NotDefArrowMarker)
+                 { mArrowMrk = mrk; }
+  inline void    SetColMapId(CMapId cid=CMAP_OTHER, bool rev=false)
+                 { mCmapid = cid; mRevCmap = rev; }
+
+// Acces aux attributs graphiques
+  inline PIColors    GetColor() const { return(mFCol); }
+  inline PIColors    GetFgColor() const { return(mFCol); }
+  inline PIColors    GetBgColor() const { return(mBCol); }
+  inline PILineAtt   GetLineAtt()  const { return(mLAtt); }
+  inline PILineAtt&  GetLineAtt()  { return(mLAtt); }
+  inline PIFont      GetFont()  const  { return(mFnt);  }
+  inline PIFont&     GetFont()   { return(mFnt);  }
+  inline PIFontSize  GetFontSz() const   { return(mFnt.GetFontSz());  }
+  inline int         GetFontSzPt() const   { return(mFnt.GetFontSzPt());  }
+  inline int         GetFontSize() const   { return(mFnt.GetFontSize());  }
+  inline PIFontAtt   GetFontAtt() const  { return(mFnt.GetFontAtt()); }
+  inline PIFontName  GetFontName() const  { return(mFnt.GetFontName());} 
+  inline int         GetMarkerSz() const  { return(mMSz);  }
+  inline int         GetMarkerSize() const  { return(mMSz);  }
+  inline PIMarker    GetMarker() const   { return(mMrk);  } 
+  inline int         GetArrowMarkerSz() const  { return(mArrowMrkSz);  }
+  inline int         GetArrowMarkerSize() const  { return(mArrowMrkSz);  }
+  inline PIArrowMarker GetArrowMarker() const  { return(mArrowMrk);  } 
+  inline CMapId      GetColMapId() const { return(mCmapid); }
+  inline CMapId      GetColMapId(bool & rev) const { rev = mRevCmap; return(mCmapid); }
+
+protected:
+  PIColors           mFCol, mBCol;
+  PILineAtt          mLAtt;
+  PIFont             mFnt;
+  int                mMSz;
+  PIMarker           mMrk;  
+  int                mArrowMrkSz;
+  PIArrowMarker      mArrowMrk;
+  CMapId             mCmapid;
+  bool               mRevCmap;
+};
+
+#endif
Index: trunk/SophyaPI/PI/piimage.cc
===================================================================
--- trunk/SophyaPI/PI/piimage.cc	(revision 1903)
+++ trunk/SophyaPI/PI/piimage.cc	(revision 1904)
@@ -13,4 +13,5 @@
 #include "pidrwtools.h"
 #include "piscdrawwdg.h"
+#include "piyfxdrw.h"
 #include PIAPP_H
 
@@ -352,25 +353,25 @@
   string dum = "";
   drw = new PIYfXDrawer(cutarrx, NULL, true);
-    drw->SetColAtt(PI_Red);
-    drw->SetMarkerAtt(5, PI_CrossMarker);
-    drw->SetLineAtt(PI_ThinLine);
+    drw->GetGraphicAtt().SetColAtt(PI_Red);
+    drw->GetGraphicAtt().SetMarkerAtt(5, PI_CrossMarker);
+    drw->GetGraphicAtt().SetLineAtt(PI_ThinLine);
     cutscw->AddScDrawer(drw, true);
     dum += "Red: X, ";
   drw = new PIYfXDrawer(cutarry, NULL, true);
-    drw->SetColAtt(PI_Blue);
-    drw->SetMarkerAtt(5, PI_TriangleMarker);
-    drw->SetLineAtt(PI_ThinLine);
+    drw->GetGraphicAtt().SetColAtt(PI_Blue);
+    drw->GetGraphicAtt().SetMarkerAtt(5, PI_TriangleMarker);
+    drw->GetGraphicAtt().SetLineAtt(PI_ThinLine);
     cutscw->AddScDrawer(drw, true);
     dum += "Blue: Y, ";
   drw = new PIYfXDrawer(cutarrd, NULL, true);
-    drw->SetColAtt(PI_Green);
-    drw->SetMarkerAtt(5, PI_PlusMarker);
-    drw->SetLineAtt(PI_ThinLine);
+    drw->GetGraphicAtt().SetColAtt(PI_Green);
+    drw->GetGraphicAtt().SetMarkerAtt(5, PI_PlusMarker);
+    drw->GetGraphicAtt().SetLineAtt(PI_ThinLine);
     cutscw->AddScDrawer(drw, true);
     dum += "Green: XY, ";
   drw = new PIYfXDrawer(cutarra, NULL, true);
-    drw->SetColAtt(PI_Orange);
-    drw->SetMarkerAtt(5, PI_BoxMarker);
-    drw->SetLineAtt(PI_ThinLine);
+    drw->GetGraphicAtt().SetColAtt(PI_Orange);
+    drw->GetGraphicAtt().SetMarkerAtt(5, PI_BoxMarker);
+    drw->GetGraphicAtt().SetLineAtt(PI_ThinLine);
     cutscw->AddScDrawer(drw, true);
     dum += "Orange: -XY";
@@ -533,6 +534,6 @@
 int cmapid = cmp->Type();
 if ( (cmapid == CMAP_GREY32) || (cmapid == CMAP_GREYINV32) || 
-     (cmapid == CMAP_GREY128) || (cmapid == CMAP_GREYINV128))  mdrw->SetColAtt(PI_Red);
-else mdrw->SetColAtt(PI_Turquoise);
+     (cmapid == CMAP_GREY128) || (cmapid == CMAP_GREYINV128))  mdrw->GetGraphicAtt().SetColAtt(PI_Red);
+else mdrw->GetGraphicAtt().SetColAtt(PI_Turquoise);
 PIPixmap::SetColMap(cmp, refr);
 if (refr) { xcurs =  ycurs = -1; }
@@ -547,6 +548,6 @@
 {
 if ( (cmapid == CMAP_GREY32) || (cmapid == CMAP_GREYINV32) || 
-     (cmapid == CMAP_GREY128) || (cmapid == CMAP_GREYINV128))  mdrw->SetColAtt(PI_Red);
-else mdrw->SetColAtt(PI_Turquoise);
+     (cmapid == CMAP_GREY128) || (cmapid == CMAP_GREYINV128))  mdrw->GetGraphicAtt().SetColAtt(PI_Red);
+else mdrw->GetGraphicAtt().SetColAtt(PI_Turquoise);
 PIPixmap::SetColMapId(cmapid, revidx, refr);
 if (zow)  zow->SetColMapId(cmapid, revidx, refr);
@@ -1019,7 +1020,8 @@
 int cmapid = cmap->Type();
 if ( (cmapid == CMAP_GREY32) || (cmapid == CMAP_GREYINV32) || 
-     (cmapid == CMAP_GREY128) || (cmapid == CMAP_GREYINV128)) gvdrw->SetColAtt(PI_Red); 
-else gvdrw->SetColAtt(PI_Turquoise);
-gvdrw->SetLineAtt(PI_NormalLine);
+     (cmapid == CMAP_GREY128) || (cmapid == CMAP_GREYINV128)) 
+  gvdrw->GetGraphicAtt().SetColAtt(PI_Red); 
+else gvdrw->GetGraphicAtt().SetColAtt(PI_Turquoise);
+gvdrw->GetGraphicAtt().SetLineAtt(PI_NormalLine);
 gvdrw->ElAddRect(x,y,dx,dy);
 gvw->AddDrawer(gvdrw, xw1, yw1, xw2, yw2, false); 
Index: trunk/SophyaPI/PI/piimage.h
===================================================================
--- trunk/SophyaPI/PI/piimage.h	(revision 1903)
+++ trunk/SophyaPI/PI/piimage.h	(revision 1904)
@@ -11,5 +11,5 @@
 #include "pisysdep.h"
 
-#include "pidrawer.h"
+#include "pieldrw.h"
 #include PIPIXMAP_H
 #include PISTDWDG_H
Index: trunk/SophyaPI/PI/piscdrawwdg.cc
===================================================================
--- trunk/SophyaPI/PI/piscdrawwdg.cc	(revision 1903)
+++ trunk/SophyaPI/PI/piscdrawwdg.cc	(revision 1904)
@@ -10,5 +10,4 @@
 #include "pidrwtools.h"
 #include "piaxestools.h"
-#include "parradapter.h"
 
 
@@ -565,201 +564,3 @@
 }
 
-// --------------------------------------------------------------------------
-// --------------------------------------------------------------------------
-// --------------------------------------------------------------------------
-// ----------------------------------------------------------
-//  Classe de trace de points/fonctions Y=f(X)
-//  Trace Y=ay->Value() = f(X= ax->Value()) si ax et ay != NULL
-//  Trace Y=ax->Value() = f(X= ax->X())  si ay == NULL
-// ----------------------------------------------------------
-// --------------------------------------------------------------------------
-
-//++
-// Class	PIYfXDrawer
-// Lib		PI
-// include	piscdrawwdg.h
-//
-//	Classe de traceur de points/fonctions Y = f(X).
-//--
-//++
-// Links	Parents
-// PIDrawer
-//--
-//++
-// Links	Voir aussi
-// P1DArrayAdapter
-//--
-//++
-// Titre	Constructeur
-//--
-
-//++
-// PIYfXDrawer(P1DArrayAdapter* ax, P1DArrayAdapter* ay, bool ad)
-//	Constructeur. Tracé de 
-//|	 Y=ay->Value() = f(X= ax->Value()) si ax et ay != NULL
-//|	Y=ax->Value() = f(X= ax->X())  si ay == NULL
-//	Si "ad==true" les objets "ax" et "ay" sont détruits par 
-//	le destructeur de "PIYfXDrawer".
-//--
-
-/* --Methode-- */
-PIYfXDrawer::PIYfXDrawer(P1DArrayAdapter* ax, P1DArrayAdapter* ay, bool ad)
-    : PIDrawer()
-{
-  mAdDO = ad;
-  mAx = ax;
-  mAy = ay;
-  mName = "YfXDrawer";
-} 
-
-/* --Methode-- */
-PIYfXDrawer::~PIYfXDrawer()
-{
-  if (mAdDO && mAx)  delete mAx;
-  if (mAdDO && mAy)  delete mAy;
-}
-
-/* --Methode-- */
-void PIYfXDrawer::UpdateLimits()
-{
-  if ((mAx == NULL))  mSz = 0;
-  else {
-    if (!mAy)  mSz = mAx->Size();
-    else   mSz = (mAx->Size() < mAy->Size()) ? mAx->Size() :  mAy->Size();
-    }
-  if (mSz <= 0)  return;
-  double xmin, xmax, ymin, ymax;
-  int i=0;
-  double cv;
-  if (mAy) {
-    xmin = xmax = mAx->Value(0);
-    ymin = ymax = mAy->Value(0);
-    for(i=1; i<mSz; i++) {
-      cv = mAx->Value(i); 
-      if (cv < xmin)  xmin = cv;
-      if (cv > xmax)  xmax = cv;
-      cv = mAy->Value(i); 
-      if (cv < ymin)  ymin = cv;
-      if (cv > ymax)  ymax = cv;
-      }
-    }
-  else {
-    xmin = xmax = mAx->X(0);
-    ymin = ymax = mAx->Value(0);
-    for(i=1; i<mSz; i++) {
-      cv = mAx->X(i); 
-      if (cv < xmin)  xmin = cv;
-      if (cv > xmax)  xmax = cv;
-      cv = mAx->Value(i); 
-      if (cv < ymin)  ymin = cv;
-      if (cv > ymax)  ymax = cv;
-      }
-    }
-
-  double dx, dy;
-  dx = 0.02*(xmax-xmin);
-  dy = 0.02*(ymax-ymin);
-
-  SetLimits(xmin-dx, xmax+dx, ymin-dy, ymax+dy);
-  SetAxesFlags(kBoxAxes | kExtTicks | kLabels);
-}
-
-
-/* --Methode-- */
-void PIYfXDrawer::Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax)
-{
-  double xp,yp;
-  int i;
-
-  if ((mAx == NULL))  mSz = 0;
-  else {
-    if (!mAy)  mSz = mAx->Size();
-    else   mSz = (mAx->Size() < mAy->Size()) ? mAx->Size() :  mAy->Size();
-    }
-  if (mSz <= 0)  return;
-
-//  Trace des markers 
-  if ( (mMrk != PI_NotDefMarker) ||  (mLAtt == PI_NotDefLineAtt) ) {
-    for(i=0; i<mSz; i++) {
-      if (mAy) { xp = mAx->Value(i); yp = mAy->Value(i); }
-      else { xp = mAx->X(i);  yp = mAx->Value(i); }
-      if ( (xp < xmin) || (xp > xmax) || (yp < ymin) || (yp > ymax) )  continue;
-      g->DrawMarker(xp, yp);
-    }
-  }
-
-  if (mLAtt == PI_NotDefLineAtt)    return;
-
-// Trace des lignes 
-  double xp2, yp2;
-  if (mAy) { xp2 = mAx->Value(0); yp2 = mAy->Value(0); }
-  else { xp2 = mAx->X(0);  yp2 = mAx->Value(0); }
-  for(i=1; i<mSz; i++) {
-    xp = xp2; yp = yp2;
-    if (mAy) { xp2 = mAx->Value(i); yp2 = mAy->Value(i); }
-    else { xp2 = mAx->X(i);  yp2 = mAx->Value(i); }
-    if ( ((xp < xmin) || (xp > xmax) || (yp < ymin) || (yp > ymax)) &&
-         ((xp2 < xmin) || (xp2 > xmax) || (yp2 < ymin) || (yp2 > ymax)) )  continue;
-    g->DrawLine(xp, yp, xp2, yp2);
-  }
-}
-
-
-//================================================================
-// PIFuncDrawer
-// Classe de traceur de fonction  double = f(fouble)
-//================================================================
-
-//++
-// Class	PIFuncDrawer
-// Lib		PI
-// include	piscdrawwdg.h
-//
-//	Classe de traceur de fonctions Y = f(double X).
-//--
-//++
-// Links	Parents
-// PIDrawer
-//--
-//++
-// Titre	Constructeur
-//--
-//++
-//  PIFuncDrawer(FUNC f)
-//	Cosntructeur de traceur d'une fonction "FUNC f" avec
-//|	typedef double(*FUNC)(double)
-//--
-
-
-/* --Methode-- */
-PIFuncDrawer::PIFuncDrawer(PIFuncDrawer::FUNC f)
-: mFunc(f)
-{}
-
-/* --Methode-- */
-PIFuncDrawer::~PIFuncDrawer()
-{
-}
-
-/* --Methode-- */
-void
-PIFuncDrawer::Draw(PIGraphicUC* g, double /*xmin*/, double/*ymin*/, double/*xmax*/, double/*ymax*/)
-{
-  PIGrCoord x1, x2, y1, y2;
-  g->GetGrSpace(x1, x2, y1, y2);
-  double xMax = x2;
-  double xMin = x1;
-  double yMax = y2;
-  double yMin = y1;
-  double xStep = (xMax - xMin)/100;
-  double xOld = xMin;
-  double yOld = mFunc(xMin);
-  for (double x = xMin+xStep; x<xMax; x+=xStep) {
-    double y = mFunc(x);
-    if (y>yMin && yOld>yMin && 
-        y<yMax && yOld<yMax) 
-           g->DrawLine(xOld, yOld, x, y);
-    xOld = x;
-    yOld = y;
-  }
-}
+
Index: trunk/SophyaPI/PI/piscdrawwdg.h
===================================================================
--- trunk/SophyaPI/PI/piscdrawwdg.h	(revision 1903)
+++ trunk/SophyaPI/PI/piscdrawwdg.h	(revision 1904)
@@ -1,4 +1,4 @@
 // This may look like C code, but it is really -*- C++ -*-
-// Module PI : Peida Interactive  PIScDrawWdg PIYfXDrawer
+// Module PI : Peida Interactive  PIScDrawWdg 
 // Gestionnaire Drawer-2D  E.Aubourg, R. Ansari  96-98
 // LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA
@@ -12,4 +12,5 @@
 #include PIWIN_H
 #include "pidrawer.h"
+#include "pieldrw.h"
 
 
@@ -121,40 +122,4 @@
 
 
-// ----------------------------------------------------------
-// Classe de traceur de points/fonction Y=F(x)
-// Trace Y=ay->Value() = f(X= ax->Value()) si ax et ay != NULL
-// Trace Y=ax->Value() = f(X= ax->X())  si ay == NULL
- 
-class P1DArrayAdapter;
-class PIYfXDrawer : public PIDrawer {
-public:
-                     PIYfXDrawer(P1DArrayAdapter* ax, P1DArrayAdapter* ay, bool ad);
-  virtual           ~PIYfXDrawer();
-  
-  virtual void       Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax);
-  virtual void       UpdateLimits();
-  
-       
-protected:
-  P1DArrayAdapter* mAx;
-  P1DArrayAdapter* mAy;
-  int mSz;
-  bool mAdDO;
-};
-
-// ----------------------------------------------------------
-// Classe de traceur de fonction  double = f(fouble)
-// ----------------------------------------------------------
-
-class PIFuncDrawer : public PIDrawer {
-public:
-  typedef double(*FUNC)(double);
-                     PIFuncDrawer(FUNC);
-  virtual           ~PIFuncDrawer();
-  
-  virtual void       Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax);
-protected:
-  FUNC               mFunc;
-};
 
 #endif
Index: trunk/SophyaPI/PI/pisurfdr.cc
===================================================================
--- trunk/SophyaPI/PI/pisurfdr.cc	(revision 1903)
+++ trunk/SophyaPI/PI/pisurfdr.cc	(revision 1904)
@@ -226,10 +226,11 @@
 
   PIGrCoord xg[5],yg[5],zg[5];
-  PIColors fgc; 
-
-
-  if (mCmapid == CMAP_OTHER) {   // Trace avec des lignes
-    if (mLAtt == PI_NotDefLineAtt)    g3->SelLine(PI_ThinLine);
-    fgc = ( mFCol == PI_NotDefColor ) ? PI_Black : mFCol;
+  PIColors mfcol = GetGraphicAtt().GetFgColor();
+  PIColors fgc = mfcol;
+
+
+  if (GetGraphicAtt().GetColMapId() == CMAP_OTHER) {   // Trace avec des lignes
+    if (GetGraphicAtt().GetLineAtt() == PI_NotDefLineAtt)    g3->SelLine(PI_ThinLine);
+    fgc = (mfcol  == PI_NotDefColor ) ? PI_Black : mfcol;
     for(l=0;l<k;l++) {
       i =  ijzp[l].ij%xsz;
@@ -254,10 +255,10 @@
   }
   else {   // Trace avec niveaux de couleur
-    PIColorMap* cmap = new PIColorMap(mCmapid);
-    PIColors fgc; 
-    if ( (mCmapid == CMAP_GREY32) || (mCmapid == CMAP_GREYINV32) || 
-         (mCmapid == CMAP_GREY128)  || (mCmapid == CMAP_GREYINV128) )
-      fgc = ( mFCol == PI_NotDefColor ) ? PI_Red : mFCol;
-    else  fgc = ( mFCol == PI_NotDefColor ) ? PI_Black : mFCol;
+    PIColorMap* cmap = new PIColorMap(GetGraphicAtt().GetColMapId());
+    CMapId mcmapid = GetGraphicAtt().GetColMapId();
+    if ( (mcmapid == CMAP_GREY32) || (mcmapid == CMAP_GREYINV32) || 
+         (mcmapid == CMAP_GREY128)  || (mcmapid == CMAP_GREYINV128) )
+      fgc = ( mfcol == PI_NotDefColor ) ? PI_Red : mfcol;
+    else  fgc = ( mfcol == PI_NotDefColor ) ? PI_Black : mfcol;
     for(l=0;l<k;l++) {
       i =  ijzp[l].ij%xsz;
@@ -275,5 +276,5 @@
       g3->DrawFPolygon3D(xg,yg,zg,5);
 // On trace 
-      if (mLAtt == PI_NotDefLineAtt)   continue;
+      if (GetGraphicAtt().GetLineAtt() == PI_NotDefLineAtt)   continue;
       g3->SelForeground(fgc);
       g3->DrawPolygon3D(xg,yg,zg,5);
Index: trunk/SophyaPI/PI/piyfxdrw.cc
===================================================================
--- trunk/SophyaPI/PI/piyfxdrw.cc	(revision 1904)
+++ trunk/SophyaPI/PI/piyfxdrw.cc	(revision 1904)
@@ -0,0 +1,210 @@
+// Module PI : Peida Interactive  PIYfXDrawer, PIFuncDrawer
+// Drawer Y=f(X)      E.Aubourg, R. Ansari  96-02
+// (C) LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA
+
+#include "machdefs.h"
+#include <math.h>
+#include "piyfxdrw.h"
+#include "parradapter.h"
+
+// --------------------------------------------------------------------------
+// --------------------------------------------------------------------------
+// --------------------------------------------------------------------------
+// ----------------------------------------------------------
+//  Classe de trace de points/fonctions Y=f(X)
+//  Trace Y=ay->Value() = f(X= ax->Value()) si ax et ay != NULL
+//  Trace Y=ax->Value() = f(X= ax->X())  si ay == NULL
+// ----------------------------------------------------------
+// --------------------------------------------------------------------------
+
+//++
+// Class	PIYfXDrawer
+// Lib		PI
+// include	piyfxdrw.h
+//
+//	Classe de traceur de points/fonctions Y = f(X).
+//--
+//++
+// Links	Parents
+// PIDrawer
+//--
+//++
+// Links	Voir aussi
+// P1DArrayAdapter
+//--
+//++
+// Titre	Constructeur
+//--
+
+//++
+// PIYfXDrawer(P1DArrayAdapter* ax, P1DArrayAdapter* ay, bool ad)
+//	Constructeur. Tracé de 
+//|	 Y=ay->Value() = f(X= ax->Value()) si ax et ay != NULL
+//|	Y=ax->Value() = f(X= ax->X())  si ay == NULL
+//	Si "ad==true" les objets "ax" et "ay" sont détruits par 
+//	le destructeur de "PIYfXDrawer".
+//--
+
+/* --Methode-- */
+PIYfXDrawer::PIYfXDrawer(P1DArrayAdapter* ax, P1DArrayAdapter* ay, bool ad)
+    : PIDrawer()
+{
+  mAdDO = ad;
+  mAx = ax;
+  mAy = ay;
+  mName = "YfXDrawer";
+} 
+
+/* --Methode-- */
+PIYfXDrawer::~PIYfXDrawer()
+{
+  if (mAdDO && mAx)  delete mAx;
+  if (mAdDO && mAy)  delete mAy;
+}
+
+/* --Methode-- */
+void PIYfXDrawer::UpdateLimits()
+{
+  if ((mAx == NULL))  mSz = 0;
+  else {
+    if (!mAy)  mSz = mAx->Size();
+    else   mSz = (mAx->Size() < mAy->Size()) ? mAx->Size() :  mAy->Size();
+    }
+  if (mSz <= 0)  return;
+  double xmin, xmax, ymin, ymax;
+  int i=0;
+  double cv;
+  if (mAy) {
+    xmin = xmax = mAx->Value(0);
+    ymin = ymax = mAy->Value(0);
+    for(i=1; i<mSz; i++) {
+      cv = mAx->Value(i); 
+      if (cv < xmin)  xmin = cv;
+      if (cv > xmax)  xmax = cv;
+      cv = mAy->Value(i); 
+      if (cv < ymin)  ymin = cv;
+      if (cv > ymax)  ymax = cv;
+      }
+    }
+  else {
+    xmin = xmax = mAx->X(0);
+    ymin = ymax = mAx->Value(0);
+    for(i=1; i<mSz; i++) {
+      cv = mAx->X(i); 
+      if (cv < xmin)  xmin = cv;
+      if (cv > xmax)  xmax = cv;
+      cv = mAx->Value(i); 
+      if (cv < ymin)  ymin = cv;
+      if (cv > ymax)  ymax = cv;
+      }
+    }
+
+  double dx, dy;
+  dx = 0.02*(xmax-xmin);
+  dy = 0.02*(ymax-ymin);
+
+  SetLimits(xmin-dx, xmax+dx, ymin-dy, ymax+dy);
+  SetAxesFlags(kBoxAxes | kExtTicks | kLabels);
+}
+
+
+/* --Methode-- */
+void PIYfXDrawer::Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax)
+{
+  double xp,yp;
+  int i;
+
+  if ((mAx == NULL))  mSz = 0;
+  else {
+    if (!mAy)  mSz = mAx->Size();
+    else   mSz = (mAx->Size() < mAy->Size()) ? mAx->Size() :  mAy->Size();
+    }
+  if (mSz <= 0)  return;
+
+//  Trace des markers 
+  if ( (GetGraphicAtt().GetMarker() != PI_NotDefMarker) ||  
+       (GetGraphicAtt().GetLineAtt() == PI_NotDefLineAtt) ) {
+    for(i=0; i<mSz; i++) {
+      if (mAy) { xp = mAx->Value(i); yp = mAy->Value(i); }
+      else { xp = mAx->X(i);  yp = mAx->Value(i); }
+      if ( (xp < xmin) || (xp > xmax) || (yp < ymin) || (yp > ymax) )  continue;
+      g->DrawMarker(xp, yp);
+    }
+  }
+
+  if (GetGraphicAtt().GetLineAtt() == PI_NotDefLineAtt)    return;
+
+// Trace des lignes 
+  double xp2, yp2;
+  if (mAy) { xp2 = mAx->Value(0); yp2 = mAy->Value(0); }
+  else { xp2 = mAx->X(0);  yp2 = mAx->Value(0); }
+  for(i=1; i<mSz; i++) {
+    xp = xp2; yp = yp2;
+    if (mAy) { xp2 = mAx->Value(i); yp2 = mAy->Value(i); }
+    else { xp2 = mAx->X(i);  yp2 = mAx->Value(i); }
+    if ( ((xp < xmin) || (xp > xmax) || (yp < ymin) || (yp > ymax)) &&
+         ((xp2 < xmin) || (xp2 > xmax) || (yp2 < ymin) || (yp2 > ymax)) )  continue;
+    g->DrawLine(xp, yp, xp2, yp2);
+  }
+}
+
+
+//================================================================
+// PIFuncDrawer
+// Classe de traceur de fonction  double = f(fouble)
+//================================================================
+
+//++
+// Class	PIFuncDrawer
+// Lib		PI
+// include	piyfxdrw.h
+//
+//	Classe de traceur de fonctions Y = f(double X).
+//--
+//++
+// Links	Parents
+// PIDrawer
+//--
+//++
+// Titre	Constructeur
+//--
+//++
+//  PIFuncDrawer(FUNC f)
+//	Constructeur de traceur d'une fonction "FUNC f" avec
+//|	typedef double(*FUNC)(double)
+//--
+
+
+/* --Methode-- */
+PIFuncDrawer::PIFuncDrawer(PIFuncDrawer::FUNC f)
+: mFunc(f)
+{}
+
+/* --Methode-- */
+PIFuncDrawer::~PIFuncDrawer()
+{
+}
+
+/* --Methode-- */
+void
+PIFuncDrawer::Draw(PIGraphicUC* g, double /*xmin*/, double/*ymin*/, double/*xmax*/, double/*ymax*/)
+{
+  PIGrCoord x1, x2, y1, y2;
+  g->GetGrSpace(x1, x2, y1, y2);
+  double xMax = x2;
+  double xMin = x1;
+  double yMax = y2;
+  double yMin = y1;
+  double xStep = (xMax - xMin)/100;
+  double xOld = xMin;
+  double yOld = mFunc(xMin);
+  for (double x = xMin+xStep; x<xMax; x+=xStep) {
+    double y = mFunc(x);
+    if (y>yMin && yOld>yMin && 
+        y<yMax && yOld<yMax) 
+           g->DrawLine(xOld, yOld, x, y);
+    xOld = x;
+    yOld = y;
+  }
+}
+
Index: trunk/SophyaPI/PI/piyfxdrw.h
===================================================================
--- trunk/SophyaPI/PI/piyfxdrw.h	(revision 1904)
+++ trunk/SophyaPI/PI/piyfxdrw.h	(revision 1904)
@@ -0,0 +1,50 @@
+// This may look like C code, but it is really -*- C++ -*-
+// Module PI : Peida Interactive  PIYfXDrawer, PIFuncDrawer
+// Drawer Y=f(X)      E.Aubourg, R. Ansari  96-02
+// (C) LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA
+
+#ifndef PIYFXDRW_H
+#define PIYFXDRW_H
+
+#include "pisysdep.h"
+#include "parradapter.h"
+#include "pidrawer.h"
+
+// ----------------------------------------------------------
+// Classe de traceur de points/fonction Y=F(x)
+// Trace Y=ay->Value() = f(X= ax->Value()) si ax et ay != NULL
+// Trace Y=ax->Value() = f(X= ax->X())  si ay == NULL
+ 
+class P1DArrayAdapter;
+class PIYfXDrawer : public PIDrawer {
+public:
+                     PIYfXDrawer(P1DArrayAdapter* ax, P1DArrayAdapter* ay, bool ad);
+  virtual           ~PIYfXDrawer();
+  
+  virtual void       Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax);
+  virtual void       UpdateLimits();
+  
+       
+protected:
+  P1DArrayAdapter* mAx;
+  P1DArrayAdapter* mAy;
+  int mSz;
+  bool mAdDO;
+};
+
+// ----------------------------------------------------------
+// Classe de traceur de fonction  double = f(fouble)
+// ----------------------------------------------------------
+
+class PIFuncDrawer : public PIDrawer {
+public:
+  typedef double(*FUNC)(double);
+                     PIFuncDrawer(FUNC);
+  virtual           ~PIFuncDrawer();
+  
+  virtual void       Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax);
+protected:
+  FUNC               mFunc;
+};
+
+#endif
Index: trunk/SophyaPI/PI/psfile.cc
===================================================================
--- trunk/SophyaPI/PI/psfile.cc	(revision 1903)
+++ trunk/SophyaPI/PI/psfile.cc	(revision 1904)
@@ -57,5 +57,5 @@
   \
   PI_RomanFont, PI_BoldFont, PI_ItalicFont, PI_NotDefFontAtt,\
-  PI_SmallSizeFont, PI_NormalSizeFont, PI_BigSizeFont, PI_NotDefFontSize, \
+  PI_SmallSizeFont, PI_NormalSizeFont, PI_LargeSizeFont, PI_NotDefFontSize, \
   \
   PI_NormalLine, PI_ThinLine, PI_ThickLine, PI_NotDefLineAtt
@@ -95,5 +95,5 @@
 %%/FS%-2d {8  scalefont setfont} bind def          %% PI_SmallSizeFont\n\
 %%/FS%-2d {12 scalefont setfont} bind def          %% PI_NormalSizeFont\n\
-%%/FS%-2d {16 scalefont setfont} bind def          %% PI_BigSizeFont\n\
+%%/FS%-2d {16 scalefont setfont} bind def          %% PI_LargeSizeFont\n\
 /FS%-2d {}                     bind def          %% PI_NotDefFontSize\n\
 /L%-2d  {1    slw} bind def                      %% PI_NormalLine\n\
