Index: /trunk/SophyaPI/PI/Makefile
===================================================================
--- /trunk/SophyaPI/PI/Makefile	(revision 110)
+++ /trunk/SophyaPI/PI/Makefile	(revision 111)
@@ -4,5 +4,5 @@
  
 all: $(LIB)libPI.a
-$(LIB)libPI.a : $(OBJ)lut.o $(OBJ)piapplgen.o $(OBJ)piapplx.o $(OBJ)pibwdggen.o $(OBJ)pibwdgx.o $(OBJ)picmap.o $(OBJ)picmapgen.o $(OBJ)picmapx.o $(OBJ)picons.o $(OBJ)picontainergen.o $(OBJ)picontainerx.o $(OBJ)pidrawer.o $(OBJ)pidrawwin.o $(OBJ)pifilechogen.o $(OBJ)pifilechox.o $(OBJ)pigraphgen.o $(OBJ)pigraphps.o $(OBJ)pigraphuc.o $(OBJ)pigraphx.o $(OBJ)pihisto.o $(OBJ)pihisto2d.o $(OBJ)piimage.o $(OBJ)piinit.o $(OBJ)pilistgen.o $(OBJ)pilistx.o $(OBJ)pimenubargen.o $(OBJ)pimenubarx.o $(OBJ)pimenugen.o $(OBJ)pimenux.o $(OBJ)pimsghandler.o $(OBJ)pintuple.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)pistlist.o $(OBJ)piup.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)pi3ddrw.o $(OBJ)piapplgen.o $(OBJ)piapplx.o $(OBJ)pibwdggen.o $(OBJ)pibwdgx.o $(OBJ)picmap.o $(OBJ)picmapgen.o $(OBJ)picmapx.o $(OBJ)picons.o $(OBJ)picontainergen.o $(OBJ)picontainerx.o $(OBJ)pidrawer.o $(OBJ)pidrawwin.o $(OBJ)pifilechogen.o $(OBJ)pifilechox.o $(OBJ)pigraph3d.o $(OBJ)pigraphgen.o $(OBJ)pigraphps.o $(OBJ)pigraphuc.o $(OBJ)pigraphx.o $(OBJ)pihisto.o $(OBJ)pihisto2d.o $(OBJ)piimage.o $(OBJ)piimgtools.o $(OBJ)piinit.o $(OBJ)pilistgen.o $(OBJ)pilistx.o $(OBJ)pimenubargen.o $(OBJ)pimenubarx.o $(OBJ)pimenugen.o $(OBJ)pimenux.o $(OBJ)pimsghandler.o $(OBJ)pintuple.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)pistlist.o $(OBJ)piup.o $(OBJ)piwdggen.o $(OBJ)piwdgx.o $(OBJ)piwindowgen.o $(OBJ)piwindowx.o $(OBJ)pixtbase.o $(OBJ)psfile.o
 	$(AR) $(ARFLAGS)  $@ $? 
 ifeq ($(CXX),cxx)
@@ -12,24 +12,25 @@
  
 $(OBJ)lut.o: lut.cc $(EROSDEVREP)/Include/defs.h lut.h
+$(OBJ)pi3ddrw.o: pi3ddrw.cc pi3ddrw.h
 $(OBJ)piapplgen.o: piapplgen.cc piapplgen.h pimsghandler.h pisysdep.h \
  picontainerx.h picontainergen.h piwdgx.h piwdggen.h pimenubarx.h \
  pimenubargen.h pimenux.h pimenugen.h picons.h pistdwdgx.h \
  pistdwdggen.h pibwdgx.h pibwdggen.h picmap.h picmapx.h picmapgen.h \
- pigraphx.h pigraphgen.h psfile.h $(EROSDEVREP)/Include/defs.h \
- pigraphps.h
+ pigraphx.h pigraphgen.h pigraphuc.h psfile.h \
+ $(EROSDEVREP)/Include/defs.h pigraphps.h
 $(OBJ)piapplx.o: piapplx.cc piapplx.h piapplgen.h pimsghandler.h pisysdep.h \
  picontainerx.h picontainergen.h piwdgx.h piwdggen.h pimenubarx.h \
  pimenubargen.h pimenux.h pimenugen.h picons.h pistdwdgx.h \
  pistdwdggen.h pibwdgx.h pibwdggen.h picmap.h picmapx.h picmapgen.h \
- pigraphx.h pigraphgen.h psfile.h $(EROSDEVREP)/Include/defs.h \
- pigraphps.h
+ pigraphx.h pigraphgen.h pigraphuc.h psfile.h \
+ $(EROSDEVREP)/Include/defs.h pigraphps.h
 $(OBJ)pibwdggen.o: pibwdggen.cc pibwdggen.h pisysdep.h piwdgx.h piwdggen.h \
  pimsghandler.h picmap.h picmapx.h picmapgen.h pigraphx.h pigraphgen.h \
- psfile.h $(EROSDEVREP)/Include/defs.h pidrawer.h pigraphuc.h \
+ pigraphuc.h psfile.h $(EROSDEVREP)/Include/defs.h pidrawer.h \
  pigraphps.h
 $(OBJ)pibwdgx.o: pibwdgx.cc pixtbaseP.h pibwdgx.h pisysdep.h pibwdggen.h \
  piwdgx.h piwdggen.h pimsghandler.h picmap.h picmapx.h picmapgen.h \
- pigraphx.h pigraphgen.h psfile.h $(EROSDEVREP)/Include/defs.h \
- pigraphps.h pixtbase.h
+ pigraphx.h pigraphgen.h pigraphuc.h psfile.h \
+ $(EROSDEVREP)/Include/defs.h pigraphps.h pixtbase.h
 $(OBJ)picmap.o: picmap.cc picmap.h pisysdep.h picmapx.h picmapgen.h
 $(OBJ)picmapgen.o: picmapgen.cc picmapgen.h pisysdep.h picmapx.h picmap.h
@@ -39,5 +40,5 @@
  piwdggen.h pimsghandler.h picons.h pistdwdgx.h pistdwdggen.h \
  picontainerx.h picontainergen.h pibwdgx.h pibwdggen.h picmap.h \
- picmapx.h picmapgen.h pigraphx.h pigraphgen.h psfile.h \
+ picmapx.h picmapgen.h pigraphx.h pigraphgen.h pigraphuc.h psfile.h \
  $(EROSDEVREP)/Include/defs.h pigraphps.h
 $(OBJ)picontainergen.o: picontainergen.cc picontainergen.h pisysdep.h \
@@ -47,11 +48,11 @@
 $(OBJ)pidrawer.o: pidrawer.cc pidrawer.h pibwdggen.h pisysdep.h piwdgx.h \
  piwdggen.h pimsghandler.h picmap.h picmapx.h picmapgen.h pigraphx.h \
- pigraphgen.h psfile.h $(EROSDEVREP)/Include/defs.h pigraphuc.h
+ pigraphgen.h pigraphuc.h psfile.h $(EROSDEVREP)/Include/defs.h
 $(OBJ)pidrawwin.o: pidrawwin.cc pidrawwin.h pisysdep.h piwindowx.h \
  piwindowgen.h picontainerx.h picontainergen.h piwdgx.h piwdggen.h \
  pimsghandler.h piscdrawwdg.h pibwdgx.h pibwdggen.h picmap.h picmapx.h \
- picmapgen.h pigraphx.h pigraphgen.h psfile.h \
+ picmapgen.h pigraphx.h pigraphgen.h pigraphuc.h psfile.h \
  $(EROSDEVREP)/Include/defs.h pigraphps.h pistdwdgx.h pistdwdggen.h \
- pidrawer.h pigraphuc.h
+ pidrawer.h
 $(OBJ)pifilechogen.o: pifilechogen.cc pifilechogen.h pisysdep.h piwdgx.h \
  piwdggen.h pimsghandler.h
@@ -59,4 +60,7 @@
  piwdgx.h piwdggen.h pimsghandler.h piwindowx.h piwindowgen.h \
  picontainerx.h picontainergen.h
+$(OBJ)pigraph3d.o: pigraph3d.cc pigraph3d.h pisysdep.h pigraphuc.h \
+ pigraphgen.h piwdgx.h piwdggen.h pimsghandler.h picmap.h picmapx.h \
+ picmapgen.h
 $(OBJ)pigraphgen.o: pigraphgen.cc pigraphgen.h pisysdep.h piwdgx.h \
  piwdggen.h pimsghandler.h picmap.h picmapx.h picmapgen.h
@@ -76,16 +80,13 @@
  $(EROSDEVREP)/Include/cvector.h $(EROSDEVREP)/Include/matrix.h \
  $(EROSDEVREP)/Include/ppersist.h \
- $(EROSDEVREP)/Include/pclassids.h piscdrawwdg.h pisysdep.h \
- pibwdgx.h pibwdggen.h piwdgx.h piwdggen.h pimsghandler.h picmap.h \
- picmapx.h picmapgen.h pigraphx.h pigraphgen.h psfile.h pigraphps.h \
- pistdwdgx.h pistdwdggen.h piwindowx.h piwindowgen.h picontainerx.h \
- picontainergen.h pidrawer.h pigraphuc.h
+ $(EROSDEVREP)/Include/pclassids.h pidrawer.h pibwdggen.h \
+ pisysdep.h piwdgx.h piwdggen.h pimsghandler.h picmap.h picmapx.h \
+ picmapgen.h pigraphx.h pigraphgen.h pigraphuc.h psfile.h
 $(OBJ)pihisto2d.o: pihisto2d.cc pihisto2d.h pisysdep.h pimenux.h pimenugen.h \
  piwdgx.h piwdggen.h pimsghandler.h pimenubarx.h pimenubargen.h \
- pioptmenux.h pioptmenugen.h picontainerx.h picontainergen.h \
- pistdwdgx.h pistdwdggen.h $(EROSDEVREP)/Include/histos2.h \
- $(EROSDEVREP)/Include/peida.h $(EROSDEVREP)/Include/defs.h \
- $(EROSDEVREP)/Include/utils.h $(EROSDEVREP)/Include/machine.h \
- $(EROSDEVREP)/Include/perrors.h \
+ pioptmenux.h pioptmenugen.h pistdwdgx.h pistdwdggen.h \
+ $(EROSDEVREP)/Include/histos2.h $(EROSDEVREP)/Include/peida.h \
+ $(EROSDEVREP)/Include/defs.h $(EROSDEVREP)/Include/utils.h \
+ $(EROSDEVREP)/Include/machine.h $(EROSDEVREP)/Include/perrors.h \
  $(EROSDEVREP)/Include/exceptions.h \
  $(EROSDEVREP)/Include/peidainit.h $(EROSDEVREP)/Include/fmath.h \
@@ -94,9 +95,16 @@
  $(EROSDEVREP)/Include/pclassids.h piscdrawwdg.h pibwdgx.h \
  pibwdggen.h picmap.h picmapx.h picmapgen.h pigraphx.h pigraphgen.h \
- psfile.h pigraphps.h piwindowx.h piwindowgen.h pidrawer.h pigraphuc.h \
+ pigraphuc.h psfile.h pigraphps.h piwindowx.h piwindowgen.h \
+ picontainerx.h picontainergen.h pidrawer.h \
  $(EROSDEVREP)/Include/nbrandom.h
-$(OBJ)piimage.o: piimage.cc piimage.h $(EROSDEVREP)/Include/cimage.h \
- $(EROSDEVREP)/Include/rzimage.h $(EROSDEVREP)/Include/rzvect.h \
- $(EROSDEVREP)/Include/machine.h $(EROSDEVREP)/Include/defs.h \
+$(OBJ)piimage.o: piimage.cc piimage.h parradapter.h \
+ $(EROSDEVREP)/Include/defs.h $(EROSDEVREP)/Include/machine.h \
+ lut.h pisysdep.h pidrawer.h pibwdggen.h piwdgx.h piwdggen.h \
+ pimsghandler.h picmap.h picmapx.h picmapgen.h pigraphx.h pigraphgen.h \
+ pigraphuc.h psfile.h pipixmapx.h pipixmapgen.h pibwdgx.h pigraphps.h \
+ pistdwdgx.h pistdwdggen.h piwindowx.h piwindowgen.h picontainerx.h \
+ picontainergen.h $(EROSDEVREP)/Include/imageop.h \
+ $(EROSDEVREP)/Include/cimage.h $(EROSDEVREP)/Include/rzimage.h \
+ $(EROSDEVREP)/Include/rzvect.h \
  $(EROSDEVREP)/Include/exceptions.h \
  $(EROSDEVREP)/Include/peidainit.h \
@@ -106,10 +114,5 @@
  $(EROSDEVREP)/Include/ppersist.h \
  $(EROSDEVREP)/Include/pclassids.h \
- $(EROSDEVREP)/Include/dvlist.h lut.h pisysdep.h pipixmapx.h \
- pipixmapgen.h pibwdgx.h pibwdggen.h piwdgx.h piwdggen.h \
- pimsghandler.h picmap.h picmapx.h picmapgen.h pigraphx.h pigraphgen.h \
- psfile.h pigraphps.h pistdwdgx.h pistdwdggen.h piwindowx.h \
- piwindowgen.h picontainerx.h picontainergen.h \
- $(EROSDEVREP)/Include/imageop.h \
+ $(EROSDEVREP)/Include/dvlist.h \
  $(EROSDEVREP)/Include/fitsimage.h \
  $(EROSDEVREP)/Include/fitsheader.h \
@@ -125,4 +128,12 @@
  $(EROSDEVREP)/Include/xstrstream.h \
  $(EROSDEVREP)/Include/dates.h $(EROSDEVREP)/Include/tarlib.h
+$(OBJ)piimgtools.o: piimgtools.cc pisysdep.h pistdwdgx.h pistdwdggen.h \
+ piwdgx.h piwdggen.h pimsghandler.h pimenux.h pimenugen.h pioptmenux.h \
+ pioptmenugen.h piapplx.h piapplgen.h picontainerx.h picontainergen.h \
+ pimenubarx.h pimenubargen.h picons.h pibwdgx.h pibwdggen.h picmap.h \
+ picmapx.h picmapgen.h pigraphx.h pigraphgen.h pigraphuc.h psfile.h \
+ $(EROSDEVREP)/Include/defs.h pigraphps.h piimage.h parradapter.h \
+ $(EROSDEVREP)/Include/machine.h lut.h pidrawer.h pipixmapx.h \
+ pipixmapgen.h piwindowx.h piwindowgen.h piimgtools.h
 $(OBJ)piinit.o: piinit.cc $(EROSDEVREP)/Include/defs.h piinit.h \
  $(EROSDEVREP)/Include/strecinit.h \
@@ -137,16 +148,16 @@
  picontainerx.h picontainergen.h pimenubarx.h picons.h pistdwdgx.h \
  pistdwdggen.h pibwdgx.h pibwdggen.h picmap.h picmapx.h picmapgen.h \
- pigraphx.h pigraphgen.h psfile.h $(EROSDEVREP)/Include/defs.h \
- pigraphps.h
+ pigraphx.h pigraphgen.h pigraphuc.h psfile.h \
+ $(EROSDEVREP)/Include/defs.h pigraphps.h
 $(OBJ)pimenubarx.o: pimenubarx.cc pimenubarx.h pimenubargen.h pisysdep.h \
  pimenux.h pimenugen.h piwdgx.h piwdggen.h pimsghandler.h piapplx.h \
  piapplgen.h picontainerx.h picontainergen.h picons.h pistdwdgx.h \
  pistdwdggen.h pibwdgx.h pibwdggen.h picmap.h picmapx.h picmapgen.h \
- pigraphx.h pigraphgen.h psfile.h $(EROSDEVREP)/Include/defs.h \
- pigraphps.h
+ pigraphx.h pigraphgen.h pigraphuc.h psfile.h \
+ $(EROSDEVREP)/Include/defs.h pigraphps.h
 $(OBJ)pimenugen.o: pimenugen.cc pimenugen.h pisysdep.h piwdgx.h piwdggen.h \
  pimsghandler.h
-$(OBJ)pimenux.o: pimenux.cc pimenux.h pimenugen.h pisysdep.h piwdgx.h \
- piwdggen.h pimsghandler.h
+$(OBJ)pimenux.o: pimenux.cc pisysdep.h pimenubarx.h pimenubargen.h pimenux.h \
+ pimenugen.h piwdgx.h piwdggen.h pimsghandler.h
 $(OBJ)pimsghandler.o: pimsghandler.cc pimsghandler.h
 $(OBJ)pintuple.o: pintuple.cc pintuple.h $(EROSDEVREP)/Include/ntuple.h \
@@ -157,13 +168,15 @@
  $(EROSDEVREP)/Include/pclassids.h piscdrawwdg.h pisysdep.h \
  pibwdgx.h pibwdggen.h piwdgx.h piwdggen.h pimsghandler.h picmap.h \
- picmapx.h picmapgen.h pigraphx.h pigraphgen.h psfile.h pigraphps.h \
- pistdwdgx.h pistdwdggen.h piwindowx.h piwindowgen.h picontainerx.h \
- picontainergen.h pidrawer.h pigraphuc.h
-$(OBJ)pioptmenugen.o: pioptmenugen.cc pioptmenugen.h pisysdep.h \
- picontainerx.h picontainergen.h piwdgx.h piwdggen.h pimsghandler.h \
- pimenux.h pimenugen.h
+ picmapx.h picmapgen.h pigraphx.h pigraphgen.h pigraphuc.h psfile.h \
+ pigraphps.h pistdwdgx.h pistdwdggen.h piwindowx.h piwindowgen.h \
+ picontainerx.h picontainergen.h pidrawer.h
+$(OBJ)pioptmenugen.o: pioptmenugen.cc pioptmenugen.h pisysdep.h pimenux.h \
+ pimenugen.h piwdgx.h piwdggen.h pimsghandler.h
 $(OBJ)pioptmenux.o: pioptmenux.cc pisysdep.h pioptmenux.h pioptmenugen.h \
- picontainerx.h picontainergen.h piwdgx.h piwdggen.h pimsghandler.h \
- pimenux.h pimenugen.h pistdwdgx.h pistdwdggen.h
+ pimenux.h pimenugen.h piwdgx.h piwdggen.h pimsghandler.h pistdwdgx.h \
+ pistdwdggen.h piapplx.h piapplgen.h picontainerx.h picontainergen.h \
+ pimenubarx.h pimenubargen.h picons.h pibwdgx.h pibwdggen.h picmap.h \
+ picmapx.h picmapgen.h pigraphx.h pigraphgen.h pigraphuc.h psfile.h \
+ $(EROSDEVREP)/Include/defs.h pigraphps.h
 $(OBJ)piperiodx.o: piperiodx.cc piwdgx.h piwdggen.h pimsghandler.h \
  piperiodx.h $(EROSDEVREP)/Include/periodic.h \
@@ -171,9 +184,9 @@
 $(OBJ)pipixmapgen.o: pipixmapgen.cc pipixmapgen.h pisysdep.h pibwdgx.h \
  pibwdggen.h piwdgx.h piwdggen.h pimsghandler.h picmap.h picmapx.h \
- picmapgen.h pigraphx.h pigraphgen.h psfile.h \
+ picmapgen.h pigraphx.h pigraphgen.h pigraphuc.h psfile.h \
  $(EROSDEVREP)/Include/defs.h pigraphps.h
 $(OBJ)pipixmapx.o: pipixmapx.cc pipixmapx.h pipixmapgen.h pisysdep.h \
  pibwdgx.h pibwdggen.h piwdgx.h piwdggen.h pimsghandler.h picmap.h \
- picmapx.h picmapgen.h pigraphx.h pigraphgen.h psfile.h \
+ picmapx.h picmapgen.h pigraphx.h pigraphgen.h pigraphuc.h psfile.h \
  $(EROSDEVREP)/Include/defs.h pigraphps.h
 $(OBJ)piscdrawwdg.o: piscdrawwdg.cc $(EROSDEVREP)/Include/generalfit.h \
@@ -187,7 +200,7 @@
  $(EROSDEVREP)/Include/cvector.h piscdrawwdg.h pisysdep.h pibwdgx.h \
  pibwdggen.h piwdgx.h piwdggen.h pimsghandler.h picmap.h picmapx.h \
- picmapgen.h pigraphx.h pigraphgen.h psfile.h pigraphps.h pistdwdgx.h \
- pistdwdggen.h piwindowx.h piwindowgen.h picontainerx.h \
- picontainergen.h pidrawer.h pigraphuc.h
+ picmapgen.h pigraphx.h pigraphgen.h pigraphuc.h psfile.h pigraphps.h \
+ pistdwdgx.h pistdwdggen.h piwindowx.h piwindowgen.h picontainerx.h \
+ picontainergen.h pidrawer.h
 $(OBJ)pistdwdggen.o: pistdwdggen.cc pistdwdggen.h pisysdep.h piwdgx.h \
  piwdggen.h pimsghandler.h
@@ -214,9 +227,7 @@
  $(EROSDEVREP)/Include/pixelmap.h \
  $(EROSDEVREP)/Include/transfo.h $(EROSDEVREP)/Include/poly.h \
- $(EROSDEVREP)/Include/zfidu.h piscdrawwdg.h pisysdep.h pibwdgx.h \
- pibwdggen.h piwdgx.h piwdggen.h pimsghandler.h picmap.h picmapx.h \
- picmapgen.h pigraphx.h pigraphgen.h psfile.h pigraphps.h pistdwdgx.h \
- pistdwdggen.h piwindowx.h piwindowgen.h picontainerx.h \
- picontainergen.h pidrawer.h pigraphuc.h
+ $(EROSDEVREP)/Include/zfidu.h pidrawer.h pibwdggen.h pisysdep.h \
+ piwdgx.h piwdggen.h pimsghandler.h picmap.h picmapx.h picmapgen.h \
+ pigraphx.h pigraphgen.h pigraphuc.h psfile.h
 $(OBJ)piup.o: piup.cc $(EROSDEVREP)/Include/ctimer.h \
  $(EROSDEVREP)/Include/peida.h $(EROSDEVREP)/Include/defs.h \
@@ -258,6 +269,6 @@
 $(OBJ)pixtbase.o: pixtbase.cc pixtbaseP.h pibwdgx.h pisysdep.h pibwdggen.h \
  piwdgx.h piwdggen.h pimsghandler.h picmap.h picmapx.h picmapgen.h \
- pigraphx.h pigraphgen.h psfile.h $(EROSDEVREP)/Include/defs.h \
- pigraphps.h pixtbase.h
+ pigraphx.h pigraphgen.h pigraphuc.h psfile.h \
+ $(EROSDEVREP)/Include/defs.h pigraphps.h pixtbase.h
 $(OBJ)psfile.o: psfile.cc psfile.h $(EROSDEVREP)/Include/defs.h \
  pisysdep.h pigraphgen.h piwdgx.h piwdggen.h pimsghandler.h picmap.h \
Index: /trunk/SophyaPI/PI/parradapter.cc
===================================================================
--- /trunk/SophyaPI/PI/parradapter.cc	(revision 110)
+++ /trunk/SophyaPI/PI/parradapter.cc	(revision 111)
@@ -37,6 +37,6 @@
 void P2DArrayAdapter::XYfromxy(int ix, int iy, float& x, float& y)
 {
-x = ix+0.5;
-y = iy+0.5; 
+x = ix;
+y = iy; 
 }
 
@@ -44,5 +44,5 @@
 int P2DArrayAdapter::CheckDyn(float& min, float& max, float& moy, float& sig, int& nbnul, int& nbsat, int vit)
 {
-TIMEF ; 
+// TIMEF ; 
 double m = 0.;
 double s = 0.;
@@ -100,5 +100,5 @@
 void P2DArrayAdapter::ComputeLut_PicHisto(float& min, float& max, int nbsig, float fracmax)
 {
-TIMEF ; 
+// TIMEF ; 
 int MINNBIN = 64;
 int MAXNBIN = 1024;
@@ -221,5 +221,5 @@
                 int xwsz, int ywsz, unsigned char * opix, int * oxsp, int * oysp)
 {
-TIMEF ; 
+// TIMEF ; 
 unsigned char *pix, *pp, ucp;
 int zmm=1;
Index: /trunk/SophyaPI/PI/parradapter.h
===================================================================
--- /trunk/SophyaPI/PI/parradapter.h	(revision 110)
+++ /trunk/SophyaPI/PI/parradapter.h	(revision 111)
@@ -23,4 +23,6 @@
                                 int sx=-1, int sy=-1);
 
+  inline void     GetAxesConfiguration(bool& invx, bool& invy, bool& exy)
+                               { invx = invX; invy = invY; exy = eXY; }
 // Doit etre defini par les classes derivees
   virtual float   Value(int ix, int iy) = 0;   
@@ -34,4 +36,7 @@
                          { int ix, iy;  IJ2xy(i, j, ix, iy); 
                            XYfromxy(ix, iy, x, y); }
+  inline  void    Coord(int i, int j, float& x, float& y)
+                       { int ix, iy;  float f; IJ2xy(i, j, ix, iy); 
+                       XYfromxy(ix, iy, x, y); if (eXY) {f=x; x=y; y=f; } }
   inline  float   operator() (int i, int j) 
                          { int ix, iy;  IJ2xy(i, j, ix, iy); 
Index: /trunk/SophyaPI/PI/pi3ddrw.cc
===================================================================
--- /trunk/SophyaPI/PI/pi3ddrw.cc	(revision 111)
+++ /trunk/SophyaPI/PI/pi3ddrw.cc	(revision 111)
@@ -0,0 +1,9 @@
+#include "pi3ddrw.h"
+
+PI3DDrawer::PI3DDrawer()
+        : PIDrawer()
+{
+}
+PI3DDrawer::~PI3DDrawer()
+{
+}
Index: /trunk/SophyaPI/PI/pi3ddrw.h
===================================================================
--- /trunk/SophyaPI/PI/pi3ddrw.h	(revision 111)
+++ /trunk/SophyaPI/PI/pi3ddrw.h	(revision 111)
@@ -0,0 +1,9 @@
+#ifndef PI3DDRW_H_SEEN
+#define PI3DDRW_H_SEEN
+#include "pidrawer.h"
+class PI3DDrawer : PIDrawer
+{
+PI3DDrawer();
+virtual ~PI3DDrawer();
+};
+#endif
Index: /trunk/SophyaPI/PI/piapplx.cc
===================================================================
--- /trunk/SophyaPI/PI/piapplx.cc	(revision 110)
+++ /trunk/SophyaPI/PI/piapplx.cc	(revision 111)
@@ -17,4 +17,7 @@
 //  Voir fichier pimenux.cc , Pour resoudre certains conflits avec les WindowManagers
 void SetTopWdgForMenuX(SysDWdg mtw);
+
+static PIApplication* cur_piapp = NULL;
+PIApplication* PIApplicationGetApp() { return cur_piapp; }
 
 /* --Methode-- */
@@ -65,4 +68,5 @@
   }
 
+cur_piapp = this;
 mState = -1;
 SetReady();
@@ -83,4 +87,5 @@
 delete topwdg;
 XtCloseDisplay(mdsp);
+cur_piapp = NULL;
 return;
 }
Index: /trunk/SophyaPI/PI/piapplx.h
===================================================================
--- /trunk/SophyaPI/PI/piapplx.h	(revision 110)
+++ /trunk/SophyaPI/PI/piapplx.h	(revision 111)
@@ -34,3 +34,5 @@
 typedef PIApplicationX PIApplication;
 
+//  Pour recuperer un objet PIApplication 
+PIApplication* PIApplicationGetApp();
 #endif
Index: /trunk/SophyaPI/PI/pibwdggen.cc
===================================================================
--- /trunk/SophyaPI/PI/pibwdggen.cc	(revision 110)
+++ /trunk/SophyaPI/PI/pibwdggen.cc	(revision 111)
@@ -198,5 +198,5 @@
 /* --Methode-- */
 int PIBaseWdgGen::AddDrawer(PIDrawer* drw, PIGrCoord x1, PIGrCoord y1,  
-                            PIGrCoord x2, PIGrCoord y2, bool psz, bool ad)
+                            PIGrCoord x2, PIGrCoord y2, bool psz, bool clip, bool ad)
 {
 if (drw == NULL)   return(0);
@@ -205,5 +205,6 @@
 did.x1 = x1;  did.y1 = y1;
 did.x2 = x2;  did.y2 = y2;
-did.autoszp = did.autolim = false;   did.elastic = psz;
+did.autoszp = did.autolim = false;   
+did.elastic = psz;  did.clip = clip;
 did.id = mDrwId;  did.ad = ad; 
 did.drw = drw;
@@ -214,5 +215,5 @@
 
 /* --Methode-- */
-int PIBaseWdgGen::AddDrawer(PIDrawer* drw, bool autolim, bool ad)
+int PIBaseWdgGen::AddDrawer(PIDrawer* drw, bool autolim, bool clip, bool ad)
 {
 if (drw == NULL)   return(0);
@@ -221,5 +222,6 @@
 did.x1 = 0.;  did.y1 = 0.;
 did.x2 = 1.;  did.y2 = 1.;
-did.autoszp = true;   did.autolim = autolim;   did.elastic = false;
+did.autoszp = true;   did.autolim = autolim;   
+did.elastic = false;   did.clip = clip;
 did.id = mDrwId;  did.ad = ad; 
 did.drw = drw;
@@ -333,9 +335,8 @@
 // L'ordre des operations ici est importante 
   if ( (*it).autolim )  
-     (*it).drw->SetLimits(mDrXmin, mDrXmax, mDrYmin, mDrYmax, mDXdir, mDYdir);
+     (*it).drw->SetLimits(mDrXmin, mDrXmax, mDrYmin, mDrYmax, mDXdir, mDYdir);     
   guc = (*it).drw->SetDrwWdg(this, drx0, dry0, drdx, drdy, g);
-  g->SetClipRectangle(drx0, dry0, drdx , drdy);
+  if ((*it).clip)  { g->SetClipRectangle(drx0, dry0, drdx , drdy);  fgc = true; }
   (*it).drw->SelGraAtt(guc);
-  fgc = true;
   if (sxy) {
     guc->GrC2UC(x0, y0, xmin, ymin);
@@ -395,8 +396,8 @@
       }
 // L'ordre des operations ici est importante 
-    if ( (*it).autolim )  
+    if ( (*it).autolim ) 
        (*it).drw->SetLimits(mDrXmin, mDrXmax, mDrYmin, mDrYmax, mDXdir, mDYdir);
     guc = (*it).drw->SetDrwWdg(this, drx0, dry0, drdx, drdy, g);
-    g->SetClipRectangle(drx0, dry0, drdx , drdy);
+    if ((*it).clip)  g->SetClipRectangle(drx0, dry0, drdx , drdy);
     (*it).drw->SelGraAtt(guc);
     guc->GrC2UC(0, 0, xmin, ymin);
@@ -406,5 +407,5 @@
     (*it).drw->Draw(guc, xmin, ymin, xmax, ymax);
     g->RestoreGraphicAtt();    
-    g->ClearClipRectangle();
+    if ((*it).clip)  g->ClearClipRectangle();
     break;
   }
Index: /trunk/SophyaPI/PI/pibwdggen.h
===================================================================
--- /trunk/SophyaPI/PI/pibwdggen.h	(revision 110)
+++ /trunk/SophyaPI/PI/pibwdggen.h	(revision 111)
@@ -87,6 +87,6 @@
           int        AddDrawer(PIDrawer* drw, PIGrCoord x1, PIGrCoord y1, 
                                PIGrCoord x2, PIGrCoord y2, 
-                               bool psz=true, bool ad=false);
-          int        AddDrawer(PIDrawer* drw, bool autolim=false, bool ad=false);
+                               bool psz=true, bool clip=true, bool ad=false);
+          int        AddDrawer(PIDrawer* drw, bool autolim=false, bool clip=true, bool ad=false);
           void       MoveResizeDrawer(int id, PIGrCoord x1, PIGrCoord y1, 
                                       PIGrCoord x2, PIGrCoord y2, bool psz=true);
@@ -103,5 +103,5 @@
 
 // Devrait etre protected - mis ici a cause de cxx  11/07/97  Reza
-  struct BWDrwId { int id; PIGrCoord x1, y1, x2, y2; bool autoszp, autolim, elastic, ad;  PIDrawer* drw; };
+  struct BWDrwId { int id; PIGrCoord x1, y1, x2, y2; bool autoszp, autolim, elastic, clip, ad;  PIDrawer* drw; };
 
   virtual PIGraphic*  WindowGraphic();
Index: /trunk/SophyaPI/PI/picontainergen.cc
===================================================================
--- /trunk/SophyaPI/PI/picontainergen.cc	(revision 110)
+++ /trunk/SophyaPI/PI/picontainergen.cc	(revision 111)
@@ -141,4 +141,10 @@
 }
 
+/* --Methode-- */
+int PIContainerGen::NbChilds()
+{
+return(mNCh);
+}
+
 
 /* --Methode-- */
Index: /trunk/SophyaPI/PI/picontainergen.h
===================================================================
--- /trunk/SophyaPI/PI/picontainergen.h	(revision 110)
+++ /trunk/SophyaPI/PI/picontainergen.h	(revision 111)
@@ -26,4 +26,5 @@
   virtual void         ChildAdd(PIWdgGen * child);
   virtual void         ChildDel(PIWdgGen * child);
+  virtual int          NbChilds();
 
   void                 SetAutoDelChilds(bool ad = false);
Index: /trunk/SophyaPI/PI/pidrawer.cc
===================================================================
--- /trunk/SophyaPI/PI/pidrawer.cc	(revision 110)
+++ /trunk/SophyaPI/PI/pidrawer.cc	(revision 111)
@@ -11,5 +11,5 @@
   SetLimits(-1, 1, -1, 1, kAxeDirLtoR, kAxeDirDownUp);
   limitsFixed = 0;
-  SetAxesFlags(kAxesDflt);
+  SetAxesFlags();   // Pas de trace d'axes par defaut 
   mDndfg = false;  // Pour controle de l'appel de Detach() si delete
 
@@ -36,4 +36,14 @@
                     int axrl, int ayud)
 {
+  if (axrl == kAxeDirAuto) {
+    float ff;
+    if (xmax < xmin)  { axrl = kAxeDirRtoL;   ff=xmin;  xmin=xmax;  xmax=ff; }
+    else  axrl = kAxeDirLtoR;
+  }
+  if (ayud == kAxeDirAuto) {
+    float ff;
+    if (ymax < ymin)  { ayud = kAxeDirUpDown;   ff=ymin;  ymin=ymax;  ymax=ff; }
+    else  ayud = kAxeDirDownUp;
+  }
   if (xmax <= xmin || ymax <= ymin)
     return; // $CHECK$ exception ?
@@ -176,5 +186,5 @@
 
 void
-PIDrawer::SetAxesFlags(int flags)
+PIDrawer::SetAxesFlags(unsigned int flags)
 {
   axesFlags = flags;
@@ -189,11 +199,8 @@
 
 void
-PIDrawer::DrawAxes(PIGraphicUC* g, int flags)
+PIDrawer::DrawAxes(PIGraphicUC* g)
 {
   g->NoClip();
-  if (flags == -1)
-    flags = axesFlags;
-    
-  
+  unsigned int flags = axesFlags;
   if (flags & kStdAxes) {
   
@@ -358,2 +365,82 @@
 }
 
+
+/*  --------------------------------------------------------------  */
+/*  ------------------- Classe PIElDrawer ------------------------  */
+/*  --------------------------------------------------------------  */
+
+/* --Methode-- */
+PIElDrawer::PIElDrawer()
+{
+mEn = 0;
+}
+
+/* --Methode-- */
+PIElDrawer::~PIElDrawer()
+{
+}
+
+/* --Methode-- */
+void  PIElDrawer::Draw(PIGraphicUC* g, float /*xmin*/, float /*ymin*/, float /*xmax*/, float /*ymax*/)
+{
+DrawAxes(g);   // Trace des axes 
+
+DrwElList::iterator it;
+for (it = mElist.begin(); it != mElist.end(); it++)
+  {
+  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;
+    }
+  }
+}
+
+
+/* --Methode-- */
+int PIElDrawer::ElAdd(int typ, PIGrCoord x, PIGrCoord  y, PIGrCoord dx, PIGrCoord dy, char* s)
+{
+DrwEl dre;
+mEn++;
+dre.eid = mEn;  dre.etyp = typ;
+dre.ex = x;   dre.ey = y;
+dre.edx = dx;  dre.edy = dy;
+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 110)
+++ /trunk/SophyaPI/PI/pidrawer.h	(revision 111)
@@ -15,5 +15,6 @@
   kMinTicks    = 0x0080,
   kLabels      = 0x1000,
-  kAxesDflt    = kStdAxes | kTicks | kLabels
+  kAxesDflt    = kStdAxes | kTicks | kLabels,       // Axes trace par defaut
+  kAxesNone    = 0                                  // Pas de trace d axe  
 };
 
@@ -27,6 +28,6 @@
                                int axrl=kAxeDirSame, int ayud=kAxeDirSame);
 
-  virtual void       DrawAxes(PIGraphicUC* g, int flags = -1);
-  virtual void       SetAxesFlags(int flags=kAxesDflt);
+  virtual void       DrawAxes(PIGraphicUC* g);
+  virtual void       SetAxesFlags(unsigned int flags=kAxesNone);
     
   virtual void       Draw(PIGraphicUC* g, float xmin, float ymin, float xmax, float ymax); 
@@ -87,5 +88,5 @@
   
   int limitsFixed;
-  int axesFlags;
+  unsigned int axesFlags;
   
   PIBaseWdgGen* mBWdg;
@@ -106,3 +107,54 @@
 
 
+//  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       Draw(PIGraphicUC* g, float xmin, float ymin, float xmax, float ymax); 
+
+  inline int         ElAddLine(PIGrCoord x1, PIGrCoord y1, PIGrCoord x2, PIGrCoord y2)
+    { return( ElAdd(PIDEL_Line, x1, y1, x2, y2, NULL) ); }  
+  inline int         ElAddText(PIGrCoord x, PIGrCoord y, char* s)
+    { return( ElAdd(PIDEL_Text, x, y, 0, 0, s) ); }  
+  inline int         ElAddRect(PIGrCoord x, PIGrCoord y, PIGrCoord dx, PIGrCoord dy)
+    { return( ElAdd(PIDEL_Rect, x, y, dx, dy, NULL) ); }  
+  inline int         ElAddFRect(PIGrCoord x, PIGrCoord y, PIGrCoord dx, PIGrCoord dy)
+    { return( ElAdd(PIDEL_FRect, x, y, dx, dy, NULL) ); }  
+  inline int         ElAddCirc(PIGrCoord x, PIGrCoord y, PIGrCoord r)
+    { return( ElAdd(PIDEL_Circ, x, y, r, r, NULL) ); }  
+  inline int         ElAddFCirc(PIGrCoord x, PIGrCoord y, PIGrCoord r)
+    { return( ElAdd(PIDEL_FCirc, x, y, r, r, NULL) ); }  
+
+  void               ElDel(int id);
+  void               ElDelAll();
+
+protected:
+  int                ElAdd(int typ, PIGrCoord x, PIGrCoord y, PIGrCoord dx, PIGrCoord dy, char* s);
+#ifdef __DECCXX
+public:
 #endif
+  struct DrwEl{
+    int eid, etyp;
+    PIGrCoord ex,ey;
+    PIGrCoord edx,edy;
+    string es;
+  };
+#ifdef __DECCXX
+protected:
+#endif
+  typedef list<DrwEl> DrwElList;
+
+  DrwElList mElist;
+  int mEn;
+
+};
+
+#endif
Index: /trunk/SophyaPI/PI/pigraph3d.cc
===================================================================
--- /trunk/SophyaPI/PI/pigraph3d.cc	(revision 111)
+++ /trunk/SophyaPI/PI/pigraph3d.cc	(revision 111)
@@ -0,0 +1,12 @@
+#include <stdio.h>
+#include "pigraph3d.h"
+
+PIGraphic3D::PIGraphic3D(PIGraphicGen* g, PIGrCoord x0, PIGrCoord y0, PIGrCoord dx, PIGrCoord dy)
+        : PIGraphicUC(g, x0, y0, dx, dy)
+{
+printf("PIGraphic3D::PIGraphic3D : Rien n'est code ! \n");
+}
+
+PIGraphic3D::~PIGraphic3D()
+{
+}
Index: /trunk/SophyaPI/PI/pigraph3d.h
===================================================================
--- /trunk/SophyaPI/PI/pigraph3d.h	(revision 111)
+++ /trunk/SophyaPI/PI/pigraph3d.h	(revision 111)
@@ -0,0 +1,15 @@
+#ifndef PIGRAPHIC3D_H_SEEN
+#define PIGRAPHIC3D_H_SEEN
+
+#include "pisysdep.h"
+#include "pigraphuc.h"
+
+
+class PIGraphic3D : PIGraphicUC 
+{
+                     PIGraphic3D(PIGraphicGen* g, PIGrCoord x0, PIGrCoord y0, PIGrCoord dx, PIGrCoord dy);
+  virtual           ~PIGraphic3D();
+
+};
+
+#endif
Index: /trunk/SophyaPI/PI/pigraphuc.cc
===================================================================
--- /trunk/SophyaPI/PI/pigraphuc.cc	(revision 110)
+++ /trunk/SophyaPI/PI/pigraphuc.cc	(revision 111)
@@ -44,5 +44,17 @@
                          int axrl, int ayud)
 {
-  if (xmax <= xmin || ymax <= ymin)
+
+  if (axrl == kAxeDirAuto) {
+    float ff;
+    if (xmax < xmin)  { axrl = kAxeDirRtoL;   ff=xmin;  xmin=xmax;  xmax=ff; }
+    else  axrl = kAxeDirLtoR;
+  }
+  if (ayud == kAxeDirAuto) {
+    float ff;
+    if (ymax < ymin)  { ayud = kAxeDirUpDown;   ff=ymin;  ymin=ymax;  ymax=ff; }
+    else  ayud = kAxeDirDownUp;
+  }
+
+  if (xmax <= xmin  || ymax <= ymin)
     return; // $CHECK$ exception ?
   if (axrl == kAxeDirLtoR)  aXdir = false;
Index: /trunk/SophyaPI/PI/pigraphuc.h
===================================================================
--- /trunk/SophyaPI/PI/pigraphuc.h	(revision 110)
+++ /trunk/SophyaPI/PI/pigraphuc.h	(revision 111)
@@ -9,6 +9,7 @@
   kAxeDirLtoR     = 1,
   kAxeDirRtoL     = 2,
-  kAxeDirDownUp   = 3,
-  kAxeDirUpDown   = 4
+  kAxeDirDownUp   = 4,
+  kAxeDirUpDown   = 8,
+  kAxeDirAuto     = 255
 };
 
Index: /trunk/SophyaPI/PI/piimage.cc
===================================================================
--- /trunk/SophyaPI/PI/piimage.cc	(revision 110)
+++ /trunk/SophyaPI/PI/piimage.cc	(revision 111)
@@ -10,7 +10,22 @@
 
 #include "piimage.h"
-
 #include "imageop.h"
 
+// --------------------------------------------------------------------------------
+// ----------------------------- Classe PIImage -----------------------------------
+// --------------------------------------------------------------------------------
+// Variable globale pour la gestion de l'image courante 
+PIImage* PIImage::cur_piimage = NULL;
+/* --Methode-- */
+PIImage* PIImage::CurrentPIImage() 
+{ 
+return(cur_piimage); 
+}
+
+/* --Methode-- */
+void PIImage::SetCurrentPIImage(PIImage* curimg) 
+{ 
+cur_piimage = curimg;
+}
 
 /* --Methode-- */
@@ -45,8 +60,13 @@
 zmgv = 1;
 
+mdrw = new PIElDrawer();
+gvdrw = new PIElDrawer();
+AddDrawer(mdrw, true, false, false);
+
 SetColMap(CMAP_COLRJ32);
 
 SetBackgroundColor(PI_Black);
 
+ActivateKeyboard();
 ActivateButton(1);
 ActivateMove(1);
@@ -56,4 +76,5 @@
 ActivateMove(3);
 
+cur_piimage = this;
 }
 
@@ -78,6 +99,9 @@
   }
 if (lut) delete lut;
-if (aisup)  delete img;   // Suppression automatique d'image
+delete mdrw;
+delete gvdrw;
+if (aisup && img)  delete img;   // Suppression automatique d'image
 if (trtw)  delete trtw;
+if (this == cur_piimage)  cur_piimage = NULL;
 }
 
@@ -122,4 +146,17 @@
 }
 
+/* --Methode-- */
+void PIImage::ChangeAxesConfiguration(bool ix, bool iy, bool xy, bool refr)
+{
+if (!img) return;
+bool invx, invy, exy;
+img->GetAxesConfiguration(invx, invy, exy);
+if (ix)  invx = !invx;
+if (iy)  invy = !invy;
+if (xy)  exy = !exy;
+img->ConfigureAxes(invx, invy, exy);
+ComputeGloVPixmap();
+if (refr) Apply();
+}
 
 /* --Methode-- */
@@ -282,4 +319,6 @@
 void PIImage::SetColMap(CMapId cmap, bool refr)
 {
+if ( (cmap == CMAP_GREY32) || (cmap == CMAP_GREYINV32) )  mdrw->SetColAtt(PI_Red);
+else mdrw->SetColAtt(PI_White);
 PIPixmap::SetColMap(cmap, refr);
 if (zow)  zow->SetColMap(cmap, refr);
@@ -297,4 +336,5 @@
   ComputePixmap();
   Send(Msg(), PIMsg_Active);
+  cur_piimage = this;
   }
 if (zow != NULL)   ComputeZoomPixmap();
@@ -343,4 +383,34 @@
 
 /* --Methode-- */
+void PIImage::Keyboard(int key, PIKeyModifier kmod)
+{
+if (kmod == PIKM_Alt) {
+  if (key == 'V' || key == 'v') RequestSelection();  // Pour coller (copier/coller)  
+  if (key == 'Z' || key == 'z') mdrw->ElDelAll();   // Pour supprimer tous les signes 
+  }
+
+else if (kmod == PIKM_Blank) {
+  switch (key) {
+    case PIK_Up :
+      SetPave(xpav, ypav-1, true, false);
+      break;
+    case PIK_Down :
+      SetPave(xpav, ypav+1, true, false);
+      break;
+    case PIK_Left :
+      SetPave(xpav-1, ypav, true, false);
+      break;
+    case PIK_Right :
+      SetPave(xpav+1, ypav, true, false);
+      break;
+    default :
+      break;
+  }
+}
+
+}
+
+
+/* --Methode-- */
 void PIImage::But1Press(int x, int y)
 {
@@ -348,4 +418,5 @@
 
 Send(Msg(), PIMsg_Active);
+cur_piimage = this;
 if (img == NULL)  return;
 if ( PosW2Img(x, y, &xp, &yp) )  return;
@@ -386,4 +457,5 @@
 
 Send(Msg(), PIMsg_Active);
+cur_piimage = this;
 if (img == NULL)  return;
 if ( PosW2Img(x, y, &xpv0, &ypv0) )  {  xmv0 = -1;  return; }
@@ -452,4 +524,5 @@
 
 Send(Msg(), PIMsg_Active);
+cur_piimage = this;
 if (img == NULL)  return;
 if ( PosW2Img(x, y, &xp, &yp) )  { xmv0 = -1;  return; }
@@ -505,4 +578,17 @@
 
 /* --Methode-- */
+void PIImage::PasteSelection(unsigned int typ, void *pdata, unsigned int l)
+{
+if (typ != PICP_string) return;
+int ll = (l<128) ? l+1 : 128;
+char pc[128];
+strncpy(pc, (char*)pdata, ll-1);  pc[ll-1] = '\0';
+float fx, fy;
+img->Coord(xpav, ypav, fx, fy); 
+mdrw->ElAddText(fx, fy, pc );
+mdrw->Refresh();
+}
+
+/* --Methode-- */
 void PIImage::ComputePixmap()
 {
@@ -510,9 +596,28 @@
 
 if (img == NULL)  return;
-xwsz = this->XSize();
-ywsz = this->YSize();
+xwsz = XSize();
+ywsz = YSize();
 
 pixm = img->ComputePixmap(lut, offx, offy, zoom, xwsz, ywsz, pixm, &xspxm, &yspxm);
-SetPixmap(pixm, xspxm, yspxm); 
+int xw1, yw1, xw2, yw2;
+xw1 = (xwsz-xspxm)/2;
+if (xw1 < 0) xw1 = 0;
+yw1 = (ywsz-yspxm)/2;
+if (yw1 < 0) yw1 = 0;
+xw2 = xspxm+xw1;
+yw2 = yspxm+yw1;
+SetDefaultDrawRectangle(xw1, yw1, xw2, yw2, false);
+printf("--DBG-- ComputePixmap() %d %d $ %d %d :: %d %d , %d %d \n", xwsz, ywsz, xspxm, yspxm, xw1, yw1, xw2, yw2);
+int x1,y1, x2,y2;
+ofx = xw1;  ofy = yw1;
+PosW2Img(xw1, yw1, &x1, &y1);
+PosW2Img(xw2, yw2, &x2, &y2);
+float fx1,fy1, fx2, fy2; 
+img->Coord(x1,y1, fx1, fy2);  // fy1 et fy2 echange expres pour utiliser kAxeDirAuto  
+img->Coord(x2,y2, fx2, fy1);  // En effet Image de haut vers bas, Axes de bas vers haut par defaut 
+SetDefaultDrawerLimits(fx1, fx2, fy1, fy2, kAxeDirAuto, kAxeDirAuto);
+printf("--DBG2-- ComputePixmap() %g %g  %g %g  \n", fx1, fx2, fy1, fy2);
+xcurs = ycurs = -1;
+SetPixmap(pixm, xspxm, yspxm, true, xw1, yw1); 
 // Refresh();
 return; 
@@ -524,5 +629,5 @@
 {
 unsigned int xwsz, ywsz;
-int ofx, ofy;
+int lofx, lofy;
 int zm;
 
@@ -537,16 +642,16 @@
 if (zm > 0)
   {
-  ofx = xpav-(xwsz/2/zm);
-  ofy = ypav-(ywsz/2/zm);
+  lofx = xpav-(xwsz/2/zm);
+  lofy = ypav-(ywsz/2/zm);
   }
 else 
   {
-  ofx = xpav+(xwsz*zm/2);
-  ofy = ypav+(ywsz*zm/2);
-  }
-if (ofx < 0)  ofx = 0;
-if (ofy < 0)  ofy = 0;
-
-zpixm = img->ComputePixmap(lut, ofx, ofy, zm, xwsz, ywsz, zpixm, &xszpxm, &yszpxm);
+  lofx = xpav+(xwsz*zm/2);
+  lofy = ypav+(ywsz*zm/2);
+  }
+if (lofx < 0)  lofx = 0;
+if (lofy < 0)  lofy = 0;
+
+zpixm = img->ComputePixmap(lut, lofx, lofy, zm, xwsz, ywsz, zpixm, &xszpxm, &yszpxm);
 zow->SetColMap(GetColMapId(), false);
 zow->SetPixmap(zpixm, xszpxm, yszpxm); 
@@ -578,5 +683,5 @@
 if (zmx > 1)  zmx = -zmx;
 gpixm = img->ComputePixmap(lut, 0, 0, zmx, xwsz, ywsz, gpixm, &xsgpxm, &ysgpxm);
-printf("DEBUG-ComputeGloVPixmap()  %d-%d , (%d,%d) , %d-%d \n", xwsz, ywsz, zmx, zmy, xsgpxm, ysgpxm);
+// printf("DEBUG-ComputeGloVPixmap()  %d-%d , (%d,%d) , %d-%d \n", xwsz, ywsz, zmx, zmy, xsgpxm, ysgpxm);
 return;
 }
@@ -588,18 +693,28 @@
 int x,y, dx,dy;
 
+int xw1, yw1, xw2, yw2;
+xw1 = (gvw->XSize()-xsgpxm)/2;
+if (xw1 < 0) xw1 = 0;
+yw1 = (gvw->YSize()-ysgpxm)/2;
+if (yw1 < 0) yw1 = 0;
+xw2 = xsgpxm+xw1;
+yw2 = ysgpxm+yw1;
+
 if (zoom > 0) zm = zmgv*zoom;
 else zm = (float)zmgv/(float)(-zoom);
-x = offx/zmgv+1;
-y = offy/zmgv+1;
+x = offx/zmgv+1+xw1;
+y = offy/zmgv+1+yw1;
 dx =  (int) ( (float)XSize()/zm-1. );  
 dy =  (int) ( (float)YSize()/zm-1. );  
 
-
-gvw->ElDelAll();
-gvw->WindowGraphic()->SelForeground(PI_Yellow);
-gvw->WindowGraphic()->SelLine(PI_NormalLine);
-gvw->ElAddRect(x,y,dx,dy);
+gvw->DeleteDrawers();
+gvdrw->ElDelAll();
+gvdrw->SetLimits(xw1, xw2, yw1, yw2, kAxeDirLtoR, kAxeDirUpDown);
+gvdrw->SetColAtt(PI_Yellow);
+gvdrw->SetLineAtt(PI_NormalLine);
+gvdrw->ElAddRect(x,y,dx,dy);
+gvw->AddDrawer(gvdrw, xw1, yw1, xw2, yw2, false); 
 gvw->SetColMap(GetColMapId(), false);
-gvw->SetPixmap(gpixm, xsgpxm, ysgpxm); 
+gvw->SetPixmap(gpixm, xsgpxm, ysgpxm, true, xw1, yw1); 
 gvw->SetUserData((void *)this, 0);
 gvw->SetMsg(Msg()+626);
@@ -624,24 +739,34 @@
 {
 
-if ((xcurs>=0) && (ycurs>=0))
-  PIPixmap::Draw(g, xcurs-CURSHSIZE, ycurs-CURSHSIZE, CURSHSIZE*2, CURSHSIZE*2); 
-
-if ((xc >= 0) && (yc >= 0)) 
-  {
-  xcurs = xc;   ycurs = yc;
-  if (winovis)  return;      // $CHECK$ Reza A enlever si possible 17/6/96
-  if (zoom < 3)  g->SelLine(PI_NormalLine);
-  else g->SelLine(PI_ThickLine);
-  if ( (GetColMapId() == CMAP_GREY32) || (GetColMapId() == CMAP_GREYINV32) )
-    g->SelForeground(PI_Red);
-  else g->SelForeground(PI_White);
-  g->SelGOMode(PI_GOCopy);
+if (winovis)  return;      // $CHECK$ Reza A enlever si possible 17/6/96
+
+g->SelGOMode(PI_GOXOR);
+if (GetColMapId() == CMAP_COLRJ32)
+g->SelForeground(PI_Yellow);
+else g->SelForeground(PI_Magenta);
+
+if (zoom < 3)  g->SelLine(PI_NormalLine);
+else g->SelLine(PI_ThickLine);
+
+if ((xcurs>=0) && (ycurs>=0)) {
+//  PIPixmap::Draw(g, xcurs-CURSHSIZE, ycurs-CURSHSIZE, CURSHSIZE*2, CURSHSIZE*2); 
   g->DrawLine(xcurs-CURSHSIZE, ycurs, xcurs-4, ycurs);
   g->DrawLine(xcurs+4, ycurs, xcurs+CURSHSIZE, ycurs);
   g->DrawLine(xcurs, ycurs-CURSHSIZE, xcurs, ycurs-4);
   g->DrawLine(xcurs, ycurs+4, xcurs, ycurs+CURSHSIZE);
+}
+if ((xc >= 0) && (yc >= 0)) 
+  {
+  xcurs = xc;   ycurs = yc;
+  g->DrawLine(xcurs-CURSHSIZE, ycurs, xcurs-4, ycurs);
+  g->DrawLine(xcurs+4, ycurs, xcurs+CURSHSIZE, ycurs);
+  g->DrawLine(xcurs, ycurs-CURSHSIZE, xcurs, ycurs-4);
+  g->DrawLine(xcurs, ycurs+4, xcurs, ycurs+CURSHSIZE);
   }
 else { xcurs = ycurs = -1; }
 
+g->SelGOMode(PI_GOCopy);
+g->SelLine(PI_NormalLine);
+g->SelForeground(PI_White);
 return;
 }
@@ -667,5 +792,5 @@
 int PIImage::PosW2Img(int xiw, int yiw, int * xp, int * yp)
 {
-
+xiw -= ofx;  yiw -= ofy;   // Offset d'affichage du pixmap
 if (zoom > 0)
   {
@@ -699,4 +824,5 @@
   }
 
+*xiw += ofx;  *yiw += ofy;    // Offset d'affichage du pixmap
 if (*xiw > XSize())  *xiw = -1;
 if (*yiw > YSize())  *yiw = -1;
Index: /trunk/SophyaPI/PI/piimage.h
===================================================================
--- /trunk/SophyaPI/PI/piimage.h	(revision 110)
+++ /trunk/SophyaPI/PI/piimage.h	(revision 111)
@@ -3,6 +3,6 @@
 // LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA
 
-#ifndef PIIMAGEBASE_H_SEEN
-#define PIIMAGEBASE_H_SEEN
+#ifndef PIIMAGE_H_SEEN
+#define PIIMAGE_H_SEEN
 
 #include "parradapter.h"
@@ -10,4 +10,5 @@
 #include "pisysdep.h"
 
+#include "pidrawer.h"
 #include PIPIXMAP_H
 #include PISTDWDG_H
@@ -27,8 +28,12 @@
 
   virtual long    kind() {return ClassId; }
-  virtual void    Process(PIMessage msg, PIMsgHandler* sender, void* data=NULL);
 
+//  Tableau des pixels et changement de configuration des axes 
   void SetImage(P2DArrayAdapter* pim, bool ad = true, bool refr=true);
+  void ChangeAxesConfiguration(bool ix, bool iy, bool xy, bool refr=true);
+  inline void   SetDrawAxesFlags(unsigned int flags=kBoxAxes | kExtTicks | kLabels)
+                       { mdrw->SetAxesFlags(flags); mdrw->Refresh(); }
 
+// Fenetre de Zoom, text, ...
   void SetZoomWin(PIPixmap * zw, bool refr=true);
   void SetGloVWin(PIPixmap * zw, bool refr=true);
@@ -36,4 +41,5 @@
   void ShowCursor(bool sc=true); 
 
+//  Gestion du choix de LUT, facteur d agrandissement, table de couleur
   void SetLut(float min, float max, int typlut=kLutType_Lin,
               int lauto=0, bool refr=true);
@@ -44,8 +50,8 @@
   float GetZoomF();
 
+  virtual void SetColMap(CMapId cmap, bool refr=true);
+
   void SetOffset(int ox, int oy, bool refr=true);
   void SetPave(int x, int y, bool refr=true, bool cent=true);
-
-  virtual void SetColMap(CMapId cmap, bool refr=true);
 
   inline P2DArrayAdapter * Image() { return(img); }
@@ -62,4 +68,5 @@
   virtual void Draw(PIGraphic* g, int x0, int y0, int dx, int dy);
 
+  virtual void Keyboard(int key, PIKeyModifier kmod);
   virtual void But1Press(int x, int y);
   virtual void But1Release(int x, int y);
@@ -72,6 +79,12 @@
   virtual void Ptr3Move(int x, int y);
 
-private:
-      
+  virtual void PasteSelection(unsigned int typ, void *pdata, unsigned int l);
+
+//  Pour acces par les ImgTools (LutWind, ...)
+  static PIImage* CurrentPIImage();
+  static void SetCurrentPIImage(PIImage* curimg);
+
+protected:
+  virtual void    Process(PIMessage msg, PIMsgHandler* sender, void* data=NULL);
   void ComputePixmap();
   void ComputeZoomPixmap();
@@ -100,4 +113,5 @@
   LUT * lut;
   int offx, offy;
+  PIElDrawer* mdrw;
 // Fenetre de zoom
   int zoom;
@@ -110,4 +124,5 @@
   unsigned char * gpixm;
   int xsgpxm, ysgpxm;
+  PIElDrawer* gvdrw;
 // Fenetre/champ de texte
   PILabel * txw;
@@ -122,4 +137,6 @@
   int xszpav, yszpav;
 
+//  PIImage courante 
+  static PIImage* cur_piimage;
 };
 
Index: /trunk/SophyaPI/PI/pipixmapgen.cc
===================================================================
--- /trunk/SophyaPI/PI/pipixmapgen.cc	(revision 110)
+++ /trunk/SophyaPI/PI/pipixmapgen.cc	(revision 111)
@@ -21,5 +21,4 @@
 mPpos[0] = mPpos[0] = 0;
 cmap = new PIColorMap(CMAP_GREY32);
-mEn = 0;
 ActivateButton(1);
 }
@@ -70,68 +69,4 @@
 
 
-/* --Methode-- */
-int PIPixmapGen::ElAdd(int typ, int x, int y, int dx, int dy, char* s)
-{
-DrwEl dre;
-mEn++;
-dre.eid = mEn;  dre.etyp = typ;
-dre.ex = x;   dre.ey = y;
-dre.edx = dx;  dre.edy = dy;
-if (s)  dre.es = s;
-mElist.push_back(dre);
-return(mEn);
-}
-
-/* --Methode-- */
-void  PIPixmapGen::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  PIPixmapGen::ElDelAll()
-{
-mElist.erase(mElist.begin(), mElist.end());
-return;
-}
-
-/* --Methode-- */
-void  PIPixmapGen::DrawElements(PIGraphicGen* g)
-{
-char* txt;
-DrwElList::iterator it;
-for (it = mElist.begin(); it != mElist.end(); it++)
-  {
-  switch ( (*it).etyp )
-    {
-    case PIDEL_Line :
-      g->DrawLine((*it).ex, (*it).ey, (*it).edx, (*it).edy ); 
-      break;
-    case PIDEL_Text :
-      txt = (char*) ((*it).es.c_str());
-      g->DrawString((*it).ex, (*it).ey, txt ); 
-      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;
-    }
-  }
-return;
-}
-
 
 // Fin des methodes de la classe 
Index: /trunk/SophyaPI/PI/pipixmapgen.h
===================================================================
--- /trunk/SophyaPI/PI/pipixmapgen.h	(revision 110)
+++ /trunk/SophyaPI/PI/pipixmapgen.h	(revision 111)
@@ -16,8 +16,4 @@
   enum {ClassId = 5100};
 
-  enum { PIDEL_Line = 1, PIDEL_Text = 2,
-         PIDEL_Rect = 3, PIDEL_FRect = 4, 
-         PIDEL_Circ = 5, PIDEL_FCirc = 6 } ; 
-
                 PIPixmapGen(PIContainerGen *par, char *nom,
                          int sx=10, int sy=10, int px=0, int py=0);
@@ -36,24 +32,5 @@
   inline  int   YPPos() { return mPpos[1]; }
 
-  inline int    ElAddLine(int x1, int y1, int x2, int y2)
-    { return( ElAdd(PIDEL_Line, x1, y1, x2, y2, NULL) ); }  
-  inline int    ElAddText(int x, int y, char* s)
-    { return( ElAdd(PIDEL_Text, x, y, 0, 0, s) ); }  
-  inline int    ElAddRect(int x, int y, int dx, int dy)
-    { return( ElAdd(PIDEL_Rect, x, y, dx, dy, NULL) ); }  
-  inline int    ElAddFRect(int x, int y, int dx, int dy)
-    { return( ElAdd(PIDEL_FRect, x, y, dx, dy, NULL) ); }  
-  inline int    ElAddCirc(int x, int y, int r)
-    { return( ElAdd(PIDEL_Circ, x, y, r, r, NULL) ); }  
-  inline int    ElAddFCirc(int x, int y, int r)
-    { return( ElAdd(PIDEL_FCirc, x, y, r, r, NULL) ); }  
-
-  void          ElDel(int id);
-  void          ElDelAll();
-
 protected:
-  int           ElAdd(int typ, int x, int y, int dx, int dy, char* s);
-  virtual void  DrawElements(PIGraphicGen* g);
-
   unsigned char *pixmap;
   int nx, ny;
@@ -61,20 +38,4 @@
   PIColorMap* cmap;
 
-#ifdef __DECCXX
-public:
-#endif
-  struct DrwEl{
-    int eid, etyp;
-    int ex,ey;
-    int edx,edy;
-    string es;
-  };
-#ifdef __DECCXX
-protected:
-#endif
-  typedef list<DrwEl> DrwElList;
-
-  DrwElList mElist;
-  int mEn;
   int mPpos[2];
 };  
Index: /trunk/SophyaPI/PI/pipixmapx.cc
===================================================================
--- /trunk/SophyaPI/PI/pipixmapx.cc	(revision 110)
+++ /trunk/SophyaPI/PI/pipixmapx.cc	(revision 111)
@@ -68,5 +68,4 @@
     g->DrawPixmap(0, 0, pixmap, nx, ny, cmap);
   /*  Il faut faire quelque chose Sinon ??! */ 
-    DrawElements(g);
   }
 else  Draw(g, 0, 0, XSize(), YSize());
@@ -113,5 +112,4 @@
  
 XPutImage(mdsp, xw, mygc, myximg, ox, oy, x0, y0, dx, dy);
-DrawElements(g);
 XFlush(mdsp);
 return;
Index: /trunk/SophyaPI/PI/piscdrawwdg.cc
===================================================================
--- /trunk/SophyaPI/PI/piscdrawwdg.cc	(revision 110)
+++ /trunk/SophyaPI/PI/piscdrawwdg.cc	(revision 111)
@@ -6,5 +6,5 @@
 :PIBaseWdg(par, nom, sx, sy, px, py)
 {
-  mBDrw = new PIDrawer;
+  mBDrw = new PIElDrawer;
   SetLimits(-1.,1.,-1.,1.,kAxeDirLtoR,kAxeDirDownUp);
   SetAxesFlags(kBoxAxes | kExtTicks | kLabels);  
@@ -12,5 +12,6 @@
   xEndDrag = yEndDrag = xBegDrag = yBegDrag = 0;
   SetDefaultDrawRectangle(0.12, 0.12, 0.88, 0.88, true);
-
+  AddDrawer(mBDrw, true, false, false);
+  
   mTrlb = mTxw = NULL;
   mTrW = NULL;
@@ -36,5 +37,4 @@
   if (xmax <= xmin || ymax <= ymin)
     return; // $CHECK$ exception ?
-  mBDrw->SetLimits(xmin, xmax, ymin, ymax, axrl, ayud);
   SetDefaultDrawerLimits(xmin, xmax, ymin, ymax, axrl, ayud);
   mPPos[0] = 0.5*(XMin()+XMax());
@@ -46,35 +46,4 @@
     yMaxS = ymax;
   }
-}
-
-void
-PIScDrawWdg::Resize()
-{
-  //  SetSpan();
-  //  Refresh();  $CHECK$ Faut-il appeler ? Reza 08/02/98
-}
-
-PIGraphicUC*
-PIScDrawWdg::SetSpan(PIGraphicGen* g)
-{
-  int x0, y0, dx, dy;
-  x0 = (int)(XSize()*0.12);
-  y0 = (int)(YSize()*0.12);
-  dx = (int)(XSize()*0.76+0.5);
-  dy = (int)(YSize()*0.76+0.5);
-  return(mBDrw->SetDrwWdg(this, x0, y0, dx, dy, g));
-}
-
-void
-PIScDrawWdg::DrawAxes(PIGraphicUC* g, int flags)
-{
-  mBDrw->DrawAxes(g, flags);
-}
-
-
-void
-PIScDrawWdg::SetAxesFlags(int flags)
-{
-  mBDrw->SetAxesFlags(flags);
 }
   
@@ -113,5 +82,5 @@
   EraseWindow();
   if (! LimitsFixed() ) {  //  On met a jour les limites a partir du premier Drawer
-    PIDrawer* drw = GetDrawer(0);
+    PIDrawer* drw = GetDrawer(1);
     if (drw != NULL)   {    
       drw->UpdateSize();
@@ -120,7 +89,4 @@
     else SetLimits(0., 1., 0., 1.);
     }
-  PIGraphicUC* guc = SetSpan(g);
-  DrawAxes(guc);
-  DrawSelf(guc, -9.e19, -9.e19, 9.e19, 9.e19);
 }
 
@@ -128,7 +94,7 @@
 PIScDrawWdg::Draw(PIGraphic* g, int x0, int y0, int dx, int dy)
 {
-  EraseWindow();
+//  EraseWindow();
   if (! LimitsFixed() ) {  //  On met a jour les limites a partir du premier Drawer
-    PIDrawer* drw = GetDrawer(0);
+    PIDrawer* drw = GetDrawer(1);
     if (drw != NULL)   {    
       drw->UpdateSize();
@@ -137,24 +103,8 @@
     else SetLimits(0., 1., 0., 1.);
     }
-  float xmin,xmax,ymin,ymax;
-  PIGraphicUC* guc = SetSpan(g);
-  guc->GrC2UC(x0, y0, xmin, ymin);
-  guc->GrC2UC(x0+dx, y0+dy, xmax, ymax);
-  if (xmin > xmax) swap(xmin,xmax);
-  if (ymin > ymax) swap(ymin,ymax);
-  DrawAxes(guc);
-  DrawSelf(guc, xmin, ymin, xmax, ymax);
-}
-
-
-void
-PIScDrawWdg::DrawSelf(PIGraphicUC*, float /*xmin*/, float /*ymin*/, float /*xmax*/, float /*ymax*/)
-{
-return;
 }
 
 
 // Gestion affichage coordonnees du point 
-
 
 string   PIScDrawWdg::GetClickText(float x, float y) 
Index: /trunk/SophyaPI/PI/piscdrawwdg.h
===================================================================
--- /trunk/SophyaPI/PI/piscdrawwdg.h	(revision 110)
+++ /trunk/SophyaPI/PI/piscdrawwdg.h	(revision 111)
@@ -22,19 +22,13 @@
 
   virtual long       kind() {return ClassId; }
-
-  virtual void       Resize();
   
   virtual void       Draw(PIGraphic* g);
   virtual void       Draw(PIGraphic* g, int x0, int y0, int dx, int dy);
-  virtual void       DrawSelf(PIGraphicUC* g, float xmin, float ymin, float xmax, float ymax);
   
   void               SetLimits(float xmin, float xmax, float ymin, float ymax, 
                                int axrl=kAxeDirSame, int ayud=kAxeDirSame, bool tmp=false);
-
-  void               SetAxesFlags(int flags=kAxesDflt);
-  void               DrawAxes(PIGraphicUC* g, int flags = -1);
+  inline void        SetAxesFlags(unsigned int flags=kAxesDflt) { mBDrw->SetAxesFlags(flags); }
 
   int                AddScDrawer(PIDrawer*, bool ad=false);   // Ajoute un Drawer en auto 
-
   PIDrawer*          BaseDrawer() { return mBDrw; };
 
@@ -62,10 +56,8 @@
   
 protected:
-       PIGraphicUC*  SetSpan(PIGraphicGen* g);
-
   float xMinS, xMaxS, yMinS, yMaxS; // Sauvegarde pour zoom
   float mPPos[2];               // Position click souris X,Y
 
-  PIDrawer* mBDrw;
+  PIElDrawer* mBDrw;
   
   int xBegDrag, yBegDrag;
Index: /trunk/SophyaPI/PI/pistdwdggen.cc
===================================================================
--- /trunk/SophyaPI/PI/pistdwdggen.cc	(revision 110)
+++ /trunk/SophyaPI/PI/pistdwdggen.cc	(revision 111)
@@ -10,5 +10,5 @@
 //	Composant graphique simple permettant d'afficher une étiquette (texte).
 //	"PILabelGen" définit l'interface (classe virtuelle pure). Les objets 
-//	instanciés doivent être de la classe "PILabel" déclaré dans le fichier
+//	instanciés doivent être de la classe "PILabel" déclarée dans le fichier
 //	entête "PISTDWDG_H".
 //--
@@ -24,5 +24,5 @@
 // PILabel(PIContainerGen* par, char* nom, int sx=10, int sy=10, int px=0, int py=0)
 //	Création d'un objet PILabel ayant un contenu (étiquette) identique à "nom".
-// SetLabel(string const& lab)
+// void SetLabel(string const& lab)
 //	Modifie l'étiquette affichée par l'objet 
 //--
@@ -47,5 +47,5 @@
 //	Composant graphique de type bouton .
 //	"PIButtonGen" définit l'interface (classe virtuelle pure). Les objets 
-//	instanciés doivent être de la classe "PIButton" déclaré dans le fichier
+//	instanciés doivent être de la classe "PIButton" déclarée dans le fichier
 //	entête "PISTDWDG_H". Lors de l'activation, le message de l'objet complété
 //	par le modifier "PIMsg_Click" est envoyé ("Send()"). Le champ "data" 
@@ -61,7 +61,7 @@
 //--
 //++
-// PIButton(PIContainerGen* par, char* nom, PIMessage msg = PIMsg_Click, int sx=10, int sy=10, int px=0, int py=0)
+// PIButton(PIContainerGen* par, char* nom, PIMessage msg, int sx=10, int sy=10, int px=0, int py=0)
 //	Création d'un objet PIButton avec une étiquette identique à "nom".
-// SetLabel(string const& lab)
+// void SetLabel(string const& lab)
 //	Modifie l'étiquette affichée par l'objet bouton.
 //--
@@ -83,4 +83,38 @@
 
 /************* PITextGen ************/
+//++
+// Class	PIText
+// Lib		PI
+// include	pistdwdggen.h
+//
+//	Composant graphique de type champ texte.
+//	"PITextGen" définit l'interface (classe virtuelle pure). Les objets 
+//	instanciés doivent être de la classe "PIText" déclarée dans le fichier
+//	entête "PISTDWDG_H". Si un message non nul a été associé a l'objet 
+//	par "PIWdg::SetMsg(PIMessage msg)", le message correspondant complété
+//	par le modifier "PIMsg_DataChanged" est envoyé ("Send()") lors de 
+//	de la validation du champ texte (touche Retour-Chariot). Le champ "data" 
+//	contient le pointeur "NULL".
+//--
+//++
+// Links	Parents
+// PIWdg
+//--
+
+//++
+// Titre	Constructeur, méthodes
+//--
+//++
+//  PIText(PIContainerGen* par, char* nom, int sx=10, int sy=10, int px=0, int py=0)
+//	Création d'un objet PIText.
+// void SetText(string const& txt)
+//	Modifie  le contenu du champ texte.
+// string  GetText() const
+//	Renvoie le contenu du champ texte.
+// void  SetMutiLineMode(bool mlm=false)
+//	Active ("mlm=true") ou désactive ("mlm=false") la possibilité d'édition multiligne.
+// void  SetTextEditable(bool te=true)
+//	Permet de rendre le contenu du champ texte non-éditable ("te=false")
+//--
 
 PITextGen::PITextGen(PIContainerGen *par, char *nom,
@@ -107,6 +141,70 @@
 {}
 
+//++
+// Class	PICheckBox
+// Lib		PI
+// include	pistdwdggen.h
+//
+//	Composant graphique de type CheckBox.
+//	"PICheckBoxGen" définit l'interface (classe virtuelle pure). Les objets 
+//	instanciés doivent être de la classe "PICheckBox" déclarée dans le fichier
+//	entête "PISTDWDG_H". Lors du changement d'état, le message de l'objet  
+//	complété par le modifier "PIMsg_DataChanged" est envoyé ("Send()").
+//	Le champ "data" contient un pointeur sur une variable de type "bool"
+//	qui contient l'état de l'objet lors de l'appel à "Send()".
+//--
+//++
+// Links	Parents
+// PIWdg
+//--
+
+//++
+// Titre	Constructeur, méthodes
+//--
+//++
+// PICheckBox(PIContainerGen* par, char* nom,  PIMessage msg, int sx=10, int sy=10, int px=0, int py=0);
+//	Création d'un objet PICheckBox.
+// void SetState(bool st=false)
+//	Modifie l'état de l'objet.
+// bool GetState()
+//	Renvoie l'état de l'objet.
+//--
+
 
 /************* PIScaleGen ************/
+//++
+// Class	PIScale
+// Lib		PI
+// include	pistdwdggen.h
+//
+//	Composant graphique de type échelle ou curseur. (La valeur représentée 
+//	par l'objet peut être modifiée à l'aide d'un curseur).
+//	"PIScaleGen" définit l'interface (classe virtuelle pure). Les objets 
+//	instanciés doivent être de la classe "PIScale" déclarée dans le fichier
+//	entête "PISTDWDG_H". Lors du changement de valeur, le message de l'objet  
+//	complété par le modifier "PIMsg_DataChanged" est envoyé ("Send()").
+//	Le champ "data" contient un pointeur sur une variable de type "int"
+//	qui contient la valeur associée  à l'objet lors de l'appel à "Send()".
+//--
+//++
+// Links	Parents
+// PIWdg
+//--
+
+//++
+// Titre	Constructeur, méthodes
+//--
+//++
+// PIScale(PIContainerGen* par, char* nom, PIMessage msg, bool horiz=true, int sx=100, int sy=10, int px=0, int py=0)
+//	Création d'un objet PIScale. si "horiz==true", l'objet scale est affiché dans le sens horizontal, 
+//	sinon dans le sens vertical.
+// void  SetMinMax(int min, int max)
+//	Modifie les valeurs extrêmes de l'échelle. L'objet est créé avec des bornes par défaut de 1 à 100.
+// void SetValue(int v)
+//	Modifie la valeur courante de l'échelle.
+// int GetValue()
+//	Renvoie la valeur courante de l'échelle.
+//--
+
 
 PIScaleGen::PIScaleGen(PIContainerGen *par, char *nom, PIMessage msg, 
@@ -121,4 +219,45 @@
 
 /************* PIScrollBarGen ************/
+//++
+// Class	PIScrollBar
+// Lib		PI
+// include	pistdwdggen.h
+//
+//	Composant graphique de type ascenseur. 
+//	"PIScrollBarGen" définit l'interface (classe virtuelle pure). Les objets 
+//	instanciés doivent être de la classe "PIScrollBar" déclarée dans le fichier
+//	entête "PISTDWDG_H". Lors du changement de valeur, le message de l'objet  
+//	complété par le modifier "PIMsg_DataChanged" est envoyé ("Send()").
+//	La méthode "ActivateDrag()" permet d'activer l'envoi de message en 
+//	cours de déplacement du curseur. Dans ce cas, le modifier 
+//	"PIMsg_Drag" est appliqué.
+//	Le champ "data" contient un pointeur sur une variable de type "int"
+//	qui contient la position courante du curseur.
+//--
+//++
+// Links	Parents
+// PIWdg
+//--
+
+//++
+// Titre	Constructeur, méthodes
+//--
+//++
+// PIScrollBar(PIContainerGen* par, char* nom, PIMessage msg, bool vert=true, int sx=10, int sy=100, int px=0, int py=0)
+//	Création d'un objet PIScrollBar. si "vert==true", l'objet est affiché dans le sens vertical, 
+//	sinon dans le sens horizontal.
+// void  ActivateDrag(bool acd=false)
+//	Active ("acd=true") ou désactive ("mlm=false") l'envoi de messages lors du mouvement du curseur.
+// void SetMinMax(int min, int max)
+//	Modifie les valeurs extrêmes de l'ascenseur. L'objet est créé avec des bornes par défaut de 1 à 100.
+// void SetValue(int v)
+//	Modifie la position courante de l'ascenseur.
+// int GetValue()
+//	Renvoie la position courante de l'ascenseur.
+// void  SetSlSize(int sz)
+//	Modifie la taille de l'ascenseur.
+// int  GetSlSize()
+//	Renvoie la taille de l'ascenseur.
+//--
 
 PIScrollBarGen::PIScrollBarGen(PIContainerGen *par, char *nom, PIMessage msg, 
Index: /trunk/SophyaPI/PI/pistdwdgx.cc
===================================================================
--- /trunk/SophyaPI/PI/pistdwdgx.cc	(revision 110)
+++ /trunk/SophyaPI/PI/pistdwdgx.cc	(revision 111)
@@ -356,5 +356,5 @@
 
 XtSetValues(XtWdg(), warg, n);
-SetMinMax(1, 10);
+SetMinMax(1, 100);
 SetValue(1);
 XtAddCallback(XtWdg(), XmNvalueChangedCallback, 
