Index: /trunk/SophyaPI/PI/pibwdgx.cc
===================================================================
--- /trunk/SophyaPI/PI/pibwdgx.cc	(revision 153)
+++ /trunk/SophyaPI/PI/pibwdgx.cc	(revision 154)
@@ -66,9 +66,18 @@
 // J'active le backing store pour la fenetre X
 XSetWindowAttributes xswa;
-Window mwi;
-mwi = XtWindow(XtWdg());
+if (!XtIsRealized(XtWdg())) XtRealizeWidget( XtWdg() ) ;
+
+Window mwi = XtWindow(XtWdg());
+
+/*
+XWindowAttributes xwa;
+XGetWindowAttributes(PIXDisplay(), mwi, &xwa);
+printf("PIBaseWdgX::FinishCreate()  BS= %d  (No=%d Map=%d Always=%d) planes=%lx \n", 
+       xwa.backing_store, NotUseful, WhenMapped, Always, (long)xwa.backing_planes);
+*/
 xswa.backing_store = WhenMapped;
-xswa.backing_planes = ~0;
-XChangeWindowAttributes(PIXDisplay(), XtWindow(XtWdg()), CWBackingPlanes|CWBackingStore, &xswa);
+// xswa.backing_planes = ~0;
+// XChangeWindowAttributes(PIXDisplay(), XtWindow(XtWdg()), CWBackingPlanes|CWBackingStore, &xswa);
+XChangeWindowAttributes(PIXDisplay(), mwi, CWBackingStore, &xswa);
 } 
 
Index: /trunk/SophyaPI/PI/picontainergen.cc
===================================================================
--- /trunk/SophyaPI/PI/picontainergen.cc	(revision 153)
+++ /trunk/SophyaPI/PI/picontainergen.cc	(revision 154)
@@ -61,5 +61,5 @@
 PIContainerGen::PIContainerGen(PIContainerGen *par, char *nom, 
                                int sx, int sy, int px, int py)
-: PIWdg(par, nom, sx, sy, px, py) , stvis(0) 
+: PIWdg(par, nom, sx, sy, px, py)  
 {
 mNCh = 0;
@@ -68,4 +68,6 @@
 mChilds = new (PIWdg* [NCHALGRP]);
 mMxCh = NCHALGRP;
+stvis = false;
+stfcr = false;
 }
 
@@ -93,5 +95,5 @@
 void PIContainerGen::Show()
 {
-stvis = 1;
+stvis = true;
 Manage();
 return;
@@ -101,5 +103,5 @@
 void PIContainerGen::Hide()
 {
-stvis = 0;
+stvis = false;
 UnManage();
 return;
@@ -107,7 +109,8 @@
 
 /* --Methode-- */
-int PIContainerGen::Visible()
+bool PIContainerGen::Visible()
 {
-return(stvis);
+if (Parent())  return(stvis && Parent()->Visible());
+else return(stvis && IsVisible());
 }
 
@@ -125,4 +128,7 @@
   }  
 mChilds[mNCh] = child;   mNCh++; 
+// Reza 13/10/98 : il faut que child->FinishCreate() 
+// soit appele pour les PIWdg ajoute quand le  container est deja affiche et son FinishCreate() appele
+if (stfcr)  child->FinishCreate(); 
 return;
 }
@@ -162,2 +168,12 @@
 return;
 }
+
+/* --Methode-- */
+void PIContainerGen::FinishCreate()
+{
+if (stfcr)  return;
+int k;
+for(k=0; k<mNCh; k++)  mChilds[k]->FinishCreate();
+stfcr = true;
+}
+
Index: /trunk/SophyaPI/PI/picontainergen.h
===================================================================
--- /trunk/SophyaPI/PI/picontainergen.h	(revision 153)
+++ /trunk/SophyaPI/PI/picontainergen.h	(revision 154)
@@ -22,5 +22,5 @@
   virtual void         Show();
   virtual void         Hide();
-  virtual int          Visible();
+  virtual bool         Visible();
 
   virtual void         ChildAdd(PIWdg* child);
@@ -29,10 +29,12 @@
   virtual PIWdg*       GetChild(int n);
 
-  void                 SetAutoDelChilds(bool ad = false);
+          void         SetAutoDelChilds(bool ad = false);
+  virtual void	       FinishCreate(); // appelle FinishCreate() pour les descendants 
+
 protected:
-  int                  stvis;
+  bool                 stvis, stfcr;  // Statut visible ou pas, FinishCreate appele ou pas
   PIWdg                ** mChilds;
   int                  mNCh, mMxCh;
-  bool                 mPaSup,mACSup;
+  bool                 mPaSup, mACSup;
 };
 
Index: /trunk/SophyaPI/PI/picontainerx.cc
===================================================================
--- /trunk/SophyaPI/PI/picontainerx.cc	(revision 153)
+++ /trunk/SophyaPI/PI/picontainerx.cc	(revision 154)
@@ -29,10 +29,4 @@
 {}
 
-/* --Methode-- */
-void PIContainerX::FinishCreate()
-{
-int k;
-for(k=0; k<mNCh; k++)  mChilds[k]->FinishCreate();
-}
 
 /* --Methode-- */
Index: /trunk/SophyaPI/PI/picontainerx.h
===================================================================
--- /trunk/SophyaPI/PI/picontainerx.h	(revision 153)
+++ /trunk/SophyaPI/PI/picontainerx.h	(revision 154)
@@ -16,6 +16,4 @@
                            int sx=10, int sy=10, int px=0, int py=0);
 
-  virtual void	      FinishCreate(); // appelle FinishCreate() pour les descendants 
-
   virtual  	      ~PIContainerX();
 
Index: /trunk/SophyaPI/PI/pigraph3d.cc
===================================================================
--- /trunk/SophyaPI/PI/pigraph3d.cc	(revision 153)
+++ /trunk/SophyaPI/PI/pigraph3d.cc	(revision 154)
@@ -57,4 +57,7 @@
 // (Teta,Phi) = Direction de visee 
 // Les angles d'Euler correspondants sont Teta, Phi+Pi/2
+// Le Pi/2 vient que les rotations d'euler se font dans l'ordre
+//  Autour de oZ d'angle Phi, autour de oN (nouvel axe X) d'angle Teta
+//  Autour du nouvel axe Z (x3) d'angle Psi
   double cf = cos((double)fO+M_PI_2);
   double sf = sin((double)fO+M_PI_2);
@@ -110,4 +113,7 @@
 // (Teta,Phi) = Direction de visee 
 // Les angles d'Euler correspondants sont Teta, Phi+Pi/2
+// Le Pi/2 vient que les rotations d'euler se font dans l'ordre
+//  Autour de oZ d'angle Phi, autour de oN (nouvel axe X) d'angle Teta
+//  Autour du nouvel axe Z (x3) d'angle Psi
   cf = cos((double)fO+M_PI_2);
   sf = sin((double)fO+M_PI_2);
@@ -201,5 +207,5 @@
   xc = x-xO;   yc = y-yO;    zc = z-zO;
   xp = RE[0][0]*xc+RE[0][1]*yc+RE[0][2]*zc;
-  yp = RE[1][0]*xc+RE[1][1]*yc+RE[1][2]*zc;
+  yp = RE[1][0]*xc+RE[1][1]*yc+RE[1][2]*zc;  
   zp = RE[2][0]*xc+RE[2][1]*yc+RE[2][2]*zc;
 }
@@ -211,5 +217,5 @@
   float xp, yp, zp;
   xc = x-xO;   yc = y-yO;    zc = z-zO;
-  xp = RE[0][0]*xc+RE[0][1]*yc+RE[0][2]*zc;
+  xp = RE[0][0]*xc+RE[0][1]*yc+RE[0][2]*zc;   
   yp = RE[1][0]*xc+RE[1][1]*yc+RE[1][2]*zc;
   zp = RE[2][0]*xc+RE[2][1]*yc+RE[2][2]*zc;
Index: /trunk/SophyaPI/PI/pisurfdr.cc
===================================================================
--- /trunk/SophyaPI/PI/pisurfdr.cc	(revision 153)
+++ /trunk/SophyaPI/PI/pisurfdr.cc	(revision 154)
@@ -171,7 +171,7 @@
   PIColors fgc; 
 
-  if (mLAtt == PI_NotDefLineAtt)    g3->SelLine(PI_ThinLine);
 
   if (mCmapid == CMAP_OTHER) {   // Trace avec des lignes
+    if (mLAtt == PI_NotDefLineAtt)    g3->SelLine(PI_ThinLine);
     fgc = ( mFCol == PI_NotDefColor ) ? PI_Black : mFCol;
     for(l=0;l<k;l++) {
@@ -218,4 +218,5 @@
       g3->DrawFPolygon3D(xg,yg,zg,5);
 // On trace 
+      if (mLAtt == PI_NotDefLineAtt)   continue;
       g3->SelForeground(fgc);
       g3->DrawPolygon3D(xg,yg,zg,5);
Index: /trunk/SophyaPI/PI/piwindowx.cc
===================================================================
--- /trunk/SophyaPI/PI/piwindowx.cc	(revision 153)
+++ /trunk/SophyaPI/PI/piwindowx.cc	(revision 154)
@@ -148,6 +148,5 @@
     XSetTransientForHint(mdsp, XtWindow(PIXtTopWdg()), XtWindow(pwm->XtWdg()));
   //  Pour faire les actions sur les fenetres X, sinon fenetre pas cree 
-  int k;
-  for(k=0; k<mNCh; k++)  mChilds[k]->FinishCreate();
+  PIContainerGen::FinishCreate();
   }
 
Index: /trunk/SophyaPI/PI/psfile.cc
===================================================================
--- /trunk/SophyaPI/PI/psfile.cc	(revision 153)
+++ /trunk/SophyaPI/PI/psfile.cc	(revision 154)
@@ -526,30 +526,45 @@
 
 	if(currentPage->orientation == PI_Portrait) {
-	    if( (tw/Dx) < (th/Dy) ) 
+//	    if( (tw/Dx) < (th/Dy) ) 
 //		scale = tw/Dx ;
-                scale = tw/Tw ;
-	    else 
+//                scale = tw/Tw ; 
+//	    else 
 //		scale = th/Dy;
-                scale = th/Th;
+//                scale = th/Th;
+//	    fprintf(mPSFile, 
+//		    "%.2f %.2f %.2f cm %.2f cm %.2f cm %.2f cm newref\n",
+//		    Dx, Dy, 
+//		    Dx*scale, Dy*scale, 
+//		    Tw*scale, Th*scale, 
+//		    0.5*(Tw-tw), -0.5*(Th+th)) ;
+            scale = (tw/Dx)<(th/Dy) ? tw/Dx : th/Dy ; 
+            tw = scale*Dx ; th = scale*Dy ; 
 	    fprintf(mPSFile, 
 		    "%.2f %.2f %.2f cm %.2f cm %.2f cm %.2f cm newref\n",
 		    Dx, Dy, 
-//		    Dx*scale, Dy*scale, 
-		    Tw*scale, Th*scale, 
+		    tw, th, 
 		    0.5*(Tw-tw), -0.5*(Th+th)) ;
 	}
 	if(currentPage->orientation == PI_Landscape) {
 	    /* Idem avec X<->Y */
-	    if( (th/Dx) < (th/Dy) ) 
+//	    if( (th/Dx) < (th/Dy) ) 
 //		scale = th/Dx;
-                scale = th/Tw;
-	    else
+//                scale = th/Tw;
+//	    else
 //		scale = tw/Dy ;
-                scale = tw/Th;
+//                scale = tw/Th;
+//	    fprintf(mPSFile,
+//	       "-90 rotate %.2f %.2f %.2f cm %.2f cm %.2f cm %.2f cm newref\n",
+//	       Dx, Dy,
+//	       Dx*scale, Dy*scale, 
+//	       Th*scale, Tw*scale, 
+//	       0.5*(Th-th), 0.5*(Tw-tw));
+
+            scale = (th/Dx)<(tw/Dy) ? th/Dx : tw/Dy ; 
+            th = scale*Dx ; tw = scale*Dy ; 
 	    fprintf(mPSFile,
 	       "-90 rotate %.2f %.2f %.2f cm %.2f cm %.2f cm %.2f cm newref\n",
 	       Dx, Dy,
-//	       Dx*scale, Dy*scale, 
-	       Th*scale, Tw*scale, 
+	       th, tw,
 	       0.5*(Th-th), 0.5*(Tw-tw));
 	}
