Index: trunk/SophyaPI/PI/pi3ddrw.cc
===================================================================
--- trunk/SophyaPI/PI/pi3ddrw.cc	(revision 2138)
+++ trunk/SophyaPI/PI/pi3ddrw.cc	(revision 2164)
@@ -46,4 +46,7 @@
 //                double& teta, double& phi, double& psi, double& dax, double& day, double& co, double& dco)
 //	Renvoie la définition de la Vue-3D. Retourne "true " si définie par "Set3DView_Obs()"
+// void Set3DBox(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax)
+//	Définition de la boite 3D.
+//
 // void Draw3DBoxe(PIGraphic3D* g3, double xx1, double xx2, double yy1, double yy2,  -
 //                 double zz1, double zz2, double xl1, double xl2, -
@@ -62,6 +65,5 @@
   lCO = 10.;  dlCO = 3.;  
   v3D_obs = false;
-  x3Min = y3Min = z3Min = -1.;  
-  x3Max = y3Max = z3Max = 1.;
+  Set3DBox(-1., 1., -1., 1., -1., 1.);
 }
 
@@ -103,4 +105,12 @@
   co = lCO;     dco = dlCO;
   return(v3D_obs);
+}
+/* --Methode-- */
+void PIDrawer3D::Set3DBox(double xmin, double xmax, double ymin, double ymax,
+			  double zmin, double zmax)
+{
+  x3Min = xmin;  x3Max = xmax;
+  y3Min = ymin;  y3Max = ymax;
+  z3Min = zmin;  z3Max = zmax;
 }
 
@@ -221,2 +231,123 @@
 }
 
+/*  --------------------------------------------------------------  */
+/*  ------------------- Classe PIElDrawer3D ------------------------  */
+/*  --------------------------------------------------------------  */
+
+//++
+// Class	PIElDrawer3D
+// Lib		PI
+// include	p3ddrw.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
+// PIDrawer3D
+//--
+//++
+// Links	Voir aussi
+// PIElDrawer
+// PIElDrwMgr
+//--
+
+//++
+// Titre	Constructeurs et méthodes
+//--
+
+//++
+// PIElDrawer3D()
+//	Constructeur
+//--
+
+/* --Methode-- */
+PIElDrawer3D::PIElDrawer3D()
+{
+  ShowTitles();
+}
+
+/* --Methode-- */
+PIElDrawer3D::~PIElDrawer3D()
+{
+}
+
+
+//++
+//  void  SetTitles(string tt, string tb)
+//  void  SetTitles(string tt, string tb, PIGraphicAtt const& att)
+//	Ajout de titres haut ("tt") et bas ("tb")
+//--
+
+
+/* --Methode-- */
+int PIElDrawer3D::DecodeOptionString(vector<string> & opt, bool rmdecopt)
+{
+  int nopt0 = opt.size();
+  if (nopt0 < 1)  return(0);  
+  int ndec1 = PIDrawer::DecodeOptionString(opt, rmdecopt);
+  if ((nopt0 - ndec1) < 1) return(ndec1);  // si tout a ete decode
+  vector<string> udopt;
+  unsigned int k = 0;
+  int ndec = opt.size();
+  for( k=0; k<opt.size(); k++ ) {
+    string opts = opt[k];
+    if (opts == "title") ShowTitles(true);
+    else if (opts == "notitle") ShowTitles(false);
+
+    else {
+      ndec--;
+      if (rmdecopt)  udopt.push_back(opts);
+    }
+  }  
+
+  if (rmdecopt)  opt = udopt;
+  return(ndec+ndec1);
+}
+
+
+/* --Methode-- */
+void  PIElDrawer3D::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 ( showTitles && ((titleT.length() > 0) || (titleB.length() > 0)) ) {
+  PIGraphicAtt grs = GetGraphicAtt();
+  UpdateGraphicAtt(titleAtt);
+  SelGraAtt(g); 
+
+  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) {
+      if (g->isAxeYDirUpDown()) fy = g->DeltaUCY(YMin(), -fh);
+      else fy = g->DeltaUCY(YMax(), fh);
+      g->DrawString((XMax()+XMin())*0.5, fy, titleT.c_str(), PI_HorizontalCenter | PI_VerticalBottom);
+//      printf(" PIElDrawer3D::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((XMax()+XMin())*0.5, fy, titleB.c_str(), PI_HorizontalCenter | PI_VerticalBottom);
+//      printf(" PIElDrawer3D::Draw()/DBG (%g , %g) %s  - %g \n", fx, fy, titleT.c_str(), fh);
+    }
+  SetGraphicAtt(grs);
+  }
+
+ SelGraAtt(g);
+// Trace des elements
+ ElDrwMgr().DrawElements(g, xmin, ymin, xmax, ymax);
+
+}
+
