Index: /trunk/SophyaPI/PI/pidrawer.cc
===================================================================
--- /trunk/SophyaPI/PI/pidrawer.cc	(revision 1886)
+++ /trunk/SophyaPI/PI/pidrawer.cc	(revision 1887)
@@ -559,5 +559,5 @@
 
   if (mFSz == PI_NotDefFontSize) 
-    g->SelFontSz(xMajTickLen*3., mFAtt);
+    g->SelFontSz(xMajTickLen*4., mFAtt);  // Passage de x3. a x4. - Reza Janvier 2002
 
   // Choix du bon format pour les labels des axes;
@@ -590,5 +590,5 @@
 
   if (mFSz == PI_NotDefFontSize) 
-    g->SelFontSz(xMajTickLen*3., mFAtt);
+    g->SelFontSz(xMajTickLen*4., mFAtt);    // Passage de x3. a x4. - Reza Janvier 2002
 
   // Choix du bon format pour les labels des axes;
Index: /trunk/SophyaPI/PI/pidrwtools.cc
===================================================================
--- /trunk/SophyaPI/PI/pidrwtools.cc	(revision 1886)
+++ /trunk/SophyaPI/PI/pidrwtools.cc	(revision 1887)
@@ -227,4 +227,7 @@
 mOpt[5]->AppendItem("Dotted-Line", 608);
 mOpt[5]->AppendItem("ThickDotted", 609);
+mOpt[5]->AppendItem("ThinDashDott", 610);
+mOpt[5]->AppendItem("DashDot-Line", 611);
+mOpt[5]->AppendItem("ThickDashDott", 612);
 mOpt[5]->SetValue(600);
 mOpt[5]->SetBinding(PIBK_elastic, PIBK_elastic, PIBK_elastic, PIBK_elastic);
@@ -335,6 +338,7 @@
                             PI_TriangleMarker, PI_FTriangleMarker,
                             PI_StarMarker, PI_FStarMarker };
-static PILineAtt line[10] = { PI_NotDefLineAtt, PI_ThinLine, PI_NormalLine, PI_ThickLine, 
+static PILineTypes line[13] = { PI_NotDefLineAtt, PI_ThinLine, PI_NormalLine, PI_ThickLine, 
                               PI_ThinDashedLine, PI_DashedLine, PI_ThickDashedLine, 
+			      PI_ThinDashDottedLine, PI_DashDottedLine, PI_ThickDashDottedLine,
                               PI_ThinDottedLine, PI_DottedLine, PI_ThickDottedLine };
 
@@ -467,5 +471,5 @@
 
 PILineAtt lat = dr->GetLineAtt();
-for(kk=0; kk<10; kk++)
+for(kk=0; kk<13; kk++)
   if (lat == line[kk])   { mOpt[5]->SetValue(600+kk);  break; }
 
@@ -502,6 +506,6 @@
 
   k =  mOpt[5]->GetValue()-600;
-  if ( (k < 0) || (k > 9) )  k = 0;
-  drw->SetLineAtt(line[k]);
+  if ( (k < 0) || (k > 12) )  k = 0;
+  drw->SetLineAtt(PILineAtt(line[k]));
   if (fgref)  mCurBW->Refresh();
   else drw->Refresh();
Index: /trunk/SophyaPI/PI/pigraphgen.cc
===================================================================
--- /trunk/SophyaPI/PI/pigraphgen.cc	(revision 1886)
+++ /trunk/SophyaPI/PI/pigraphgen.cc	(revision 1887)
@@ -14,6 +14,8 @@
 
 /* --Methode-- */
-PILineAtt::PILineAtt(PILineTyp ltyp)
-{
+PILineAtt::PILineAtt(PILineTypes ltyp)
+{
+  _lwidth = 2*8;
+  _ldash=PI_LineSolid; 
   _ljoincap = PI_JoinMiter*PI_CapButt*256;
   switch (ltyp) {
@@ -47,4 +49,13 @@
     case PI_ThickDottedLine : 
       _lwidth = 8*4; _ldash=PI_LineDotted; 
+      break;
+    case PI_DashDottedLine : 
+      _lwidth = 2*8; _ldash=PI_LineDashDotted; 
+      break;
+    case PI_ThinDashDottedLine : 
+      _lwidth = 8; _ldash=PI_LineDashDotted; 
+      break;
+    case PI_ThickDashDottedLine : 
+      _lwidth = 8*4; _ldash=PI_LineDashDotted; 
       break;
     default :
Index: /trunk/SophyaPI/PI/pigraphgen.h
===================================================================
--- /trunk/SophyaPI/PI/pigraphgen.h	(revision 1886)
+++ /trunk/SophyaPI/PI/pigraphgen.h	(revision 1887)
@@ -19,10 +19,11 @@
 enum PILineCap  { PI_CapButt=0, PI_CapRound=1, PI_CapProjecting=2};
 enum PILineDash { PI_LineSolid, PI_LineDashed, PI_LineDotted, 
-		  PI_LineDashedDotted};
+		  PI_LineDashDotted};
 // Predefined line types
-enum PILineTyp { PI_NotDefLineAtt = -1,
-                 PI_NormalLine, PI_ThinLine, PI_ThickLine,
-                 PI_DashedLine, PI_ThinDashedLine, PI_ThickDashedLine,
-                 PI_DottedLine, PI_ThinDottedLine, PI_ThickDottedLine };
+enum PILineTypes { PI_NotDefLineAtt,
+		   PI_NormalLine, PI_ThinLine, PI_ThickLine,
+		   PI_DashedLine, PI_ThinDashedLine, PI_ThickDashedLine,
+		   PI_DottedLine, PI_ThinDottedLine, PI_ThickDottedLine,
+                   PI_DashDottedLine, PI_ThinDashDottedLine, PI_ThickDashDottedLine};
 
 // Marker types
@@ -80,31 +81,34 @@
 class PILineAtt {
 public:
-  inline PILineAtt(int width=1, PILineDash dash=PI_LineSolid, 
-		   PILineJoin join=PI_JoinMiter, PILineCap cap=PI_CapButt)
-  { _lwidth = width*8; _ldash=dash; _ljoincap=join+cap*256; }   
-  inline PILineAtt(double width, PILineDash dash=PI_LineSolid, 
-		   PILineJoin join=PI_JoinMiter, PILineCap cap=PI_CapButt)
-  { _lwidth = (unsigned short)(width*8.); _ldash=dash; _ljoincap=join+cap*256; }   
+  explicit inline PILineAtt(int width=1, PILineDash dash=PI_LineSolid, 
+			    PILineJoin join=PI_JoinMiter, PILineCap cap=PI_CapButt)
+  {_lwidth = (width>0)?width*8:8; _ldash=dash; _ljoincap=join+cap*256; }
+  explicit inline PILineAtt(double width, PILineDash dash=PI_LineSolid, 
+			    PILineJoin join=PI_JoinMiter, PILineCap cap=PI_CapButt)
+  { _lwidth = (width>0)?(unsigned short)(width*8.):8; _ldash=dash; _ljoincap=join+cap*256; } 
   inline PILineAtt(PILineAtt const& b)
-  { _lwidth=b._lwidth; _ldash=b._ldash; _ljoincap=b._ljoincap; }  
+  { _lwidth=b._lwidth; _ldash=b._ldash; _ljoincap=b._ljoincap; }
  
-  PILineAtt(PILineTyp ltyp);
+  explicit PILineAtt(PILineTypes ltyp);
 
   inline ~PILineAtt() {}
 
   inline PILineAtt& operator = (PILineAtt const& b)
-  { _lwidth=b._lwidth; _ldash=b._ldash; _ljoincap=b._ljoincap; return(*this); }   
+  { _lwidth=b._lwidth; _ldash=b._ldash; _ljoincap=b._ljoincap; return(*this); }  
+  inline PILineAtt& operator = (PILineTypes ltyp)
+  { *this=PILineAtt(ltyp);  return(*this); }
+   
   inline bool operator == (PILineAtt const& b)
   { return ((_lwidth==b._lwidth)&&(_ldash==b._ldash)&&(_ljoincap==b._ljoincap)); }
-  inline bool operator == (PILineTyp ltyp)
+  inline bool operator == (PILineTypes ltyp)
   { return ((*this) == PILineAtt(ltyp)); }
   inline bool operator != (PILineAtt const& b)
-  { return (!(_lwidth==b._lwidth)&&(_ldash==b._ldash)&&(_ljoincap==b._ljoincap)); }
-  inline bool operator != (PILineTyp ltyp)
+  { return ((_lwidth!=b._lwidth)||(_ldash!=b._ldash)||(_ljoincap!=b._ljoincap)); }
+  inline bool operator != (PILineTypes ltyp)
   { return ((*this) != PILineAtt(ltyp)); }
 
-  inline int GetLineWidth() const { return (_lwidth/8); }
+  inline int GetLineWidth() const { return ((_lwidth>0)?_lwidth/8:1); }
   inline int GetLineWidthx8() const { return (_lwidth); }
-  inline double GetLineWidthD() const { return ((double)_lwidth/8.); }
+  inline double GetLineWidthD() const { return ((_lwidth>0)?(double)_lwidth/8.:1.); }
   inline PILineDash GetLineDash() const { return _ldash; }
   inline PILineJoin GetLineJoin() const { return (PILineJoin)(_ljoincap%256); }
@@ -180,5 +184,5 @@
   virtual void       SelGOMode(PIGOMode mod=PI_GOCopy)                         = 0;
   virtual void       SelLine(PILineAtt att=PI_NormalLine)                      = 0;
-  inline  void       SelLine(PILineTyp lt) { SelLine(PILineAtt(lt)); }
+  inline  void       SelLine(PILineTypes lt) { SelLine(PILineAtt(lt)); }
   virtual void       SelMarker(int msz=3, PIMarker mrk=PI_DotMarker)           = 0;
   virtual void       SelArrowMarker(int arrsz=5, 
Index: /trunk/SophyaPI/PI/pigraphps.cc
===================================================================
--- /trunk/SophyaPI/PI/pigraphps.cc	(revision 1886)
+++ /trunk/SophyaPI/PI/pigraphps.cc	(revision 1887)
@@ -413,8 +413,7 @@
 
 /* --Methode-- */
-void PIGraphicPS::SetClipRectangle(PIGrCoord /*x0*/, PIGrCoord /*y0*/, PIGrCoord /*dx*/, PIGrCoord /*dy*/)
-{
-/*  $CHECK$  A FAIRE , voir Nicolas  */
-return;
+void PIGraphicPS::SetClipRectangle(PIGrCoord x0, PIGrCoord y0, PIGrCoord dx, PIGrCoord dy)
+{
+  mPSOut->SetClipRectangle((double)x0, (double)y0, (double)dx, (double)dy);
 }
 
@@ -422,6 +421,5 @@
 void PIGraphicPS::ClearClipRectangle()
 { 
-/*  $CHECK$  A FAIRE , voir Nicolas  */
-return;
+  mPSOut->ClearClipRectangle();
 }
 
Index: /trunk/SophyaPI/PI/pigraphuc.cc
===================================================================
--- /trunk/SophyaPI/PI/pigraphuc.cc	(revision 1886)
+++ /trunk/SophyaPI/PI/pigraphuc.cc	(revision 1887)
@@ -410,4 +410,14 @@
 
 /* --Methode-- */
+void PIGraphicUC::DrawCompString(PIGrCoord x, PIGrCoord y, const char* s, 
+				 const char* s_up, const char* s_dn, int pos)
+{
+  if (!mGrC) return;
+  double xf, yf;
+  UC2GrC(x, y, xf, yf);
+  mGrC->DrawCompString(xf, yf, s, s_up, s_dn, pos);
+}
+
+/* --Methode-- */
 void PIGraphicUC::DrawLine(PIGrCoord xc1, PIGrCoord yc1, PIGrCoord xc2, PIGrCoord yc2)
 {
@@ -683,4 +693,14 @@
 
 /* --Methode-- */
+void PIGraphicUC::DrawArrowMarker(PIGrCoord x1, PIGrCoord y1, PIGrCoord x2, PIGrCoord y2)
+{
+  if (!mGrC) return;
+  double xf1, yf1, xf2, yf2;
+  UC2GrC(x1, y1, xf1, yf1);
+  UC2GrC(x2, y2, xf2, yf2);
+  mGrC->DrawArrowMarker(xf1, yf1, xf2, yf2);
+}
+
+/* --Methode-- */
 void PIGraphicUC::DrawPixmap(PIGrCoord x, PIGrCoord y, unsigned char *pix,
                         int sx, int sy, PIColorMap* cmap)
Index: /trunk/SophyaPI/PI/pigraphuc.h
===================================================================
--- /trunk/SophyaPI/PI/pigraphuc.h	(revision 1886)
+++ /trunk/SophyaPI/PI/pigraphuc.h	(revision 1887)
@@ -45,4 +45,6 @@
   virtual void       DrawString(PIGrCoord x, PIGrCoord y, const char* s, int pos = 0);
   virtual void       DrawOpaqueString(PIGrCoord x, PIGrCoord y, const char* s, int pos = 0);
+  virtual void       DrawCompString(PIGrCoord x, PIGrCoord y, const char* s, 
+                                    const char* s_up, const char* s_dn, int pos = 0);
   virtual void       DrawLine(PIGrCoord x1, PIGrCoord y1, PIGrCoord x2, PIGrCoord y2);
   virtual void       DrawBox(PIGrCoord x0, PIGrCoord y0, PIGrCoord dx, PIGrCoord dy);
@@ -61,4 +63,6 @@
   virtual void       DrawMarker(PIGrCoord x0, PIGrCoord y0);
   virtual void       DrawMarkers(PIGrCoord *x, PIGrCoord *y, int n);
+  virtual void       DrawArrowMarker(PIGrCoord x1, PIGrCoord y1, PIGrCoord x2, PIGrCoord y2);
+
   virtual void       DrawPixmap(PIGrCoord x, PIGrCoord y, unsigned char *pix, 
                                 int sx, int sy, PIColorMap* cmap);
Index: /trunk/SophyaPI/PI/pigraphx.cc
===================================================================
--- /trunk/SophyaPI/PI/pigraphx.cc	(revision 1886)
+++ /trunk/SophyaPI/PI/pigraphx.cc	(revision 1887)
@@ -66,5 +66,5 @@
 SelForeground(PI_Black);
 SelBackground(PI_White);
-mLAtt = PI_ThinLine;
+mLAtt = PI_NotDefLineAtt;
  XSetFont(mDisp, DefGC(), myFont.GetXFontId());  // Pour initialiser la fonte ds le GC 
 SelLine();
@@ -482,27 +482,30 @@
 
 switch (att.GetLineDash()) {
- case PI_LineSolid :
-   lstyle = LineSolid;
-   break;
- case PI_LineDashed :
-   lstyle = LineOnOffDash;
-   dash[0] = dash[1] = 6;     
-   dashlen = 2;
-   break;
- case PI_LineDotted :
-   lstyle = LineOnOffDash;
-   dash[0] = 2; dash[1] = 6;  
-   dashlen = 2;
-   break;
- case PI_LineDashedDotted :
-   lstyle = LineOnOffDash;
-   dash[0] = 2; dash[1] = 6;  
-   dash[2] = 6; dash[1] = 6;  
-   dashlen = 4;
-   break;
- default :
-   lstyle = LineSolid;
-   break;
-}
+  case PI_LineSolid :
+    lstyle = LineSolid;
+     break;
+  case PI_LineDashed :
+    lstyle = LineOnOffDash;
+    dash[0] = dash[1] = 6;     
+    dashlen = 2;
+    break;
+  case PI_LineDotted :
+    lstyle = LineOnOffDash;
+    dash[0] = 2; dash[1] = 6;  
+    dashlen = 2;
+    break;
+  case PI_LineDashDotted :
+    lstyle = LineOnOffDash;
+    dash[0] = 2; dash[1] = 2;  
+    dash[2] = 4; dash[3] = 6;  
+    dashlen = 4;
+    break;
+  default :
+    lstyle = LineSolid;
+    break;
+  }
+if (lstyle != LineSolid)   
+  XSetDashes( mDisp, DefGC(), 0, dash, dashlen);
+
 
 int ljoin = JoinMiter;
@@ -538,7 +541,4 @@
 }
 
-if (lstyle != LineSolid) 
-  XSetDashes( mDisp, DefGC(), 0, dash, dashlen);
-  
 XSetLineAttributes(mDisp, DefGC(), lw, lstyle, lcap, ljoin);
 mLAtt = att;
Index: /trunk/SophyaPI/PI/piversion.h
===================================================================
--- /trunk/SophyaPI/PI/piversion.h	(revision 1886)
+++ /trunk/SophyaPI/PI/piversion.h	(revision 1887)
@@ -2,5 +2,5 @@
 #define PIVERSION_H_SEEN
 
-#define PI_VERSIONNUMBER  3.40
+#define PI_VERSIONNUMBER  3.44
 
 #endif
Index: /trunk/SophyaPI/PI/psfile.cc
===================================================================
--- /trunk/SophyaPI/PI/psfile.cc	(revision 1886)
+++ /trunk/SophyaPI/PI/psfile.cc	(revision 1887)
@@ -133,5 +133,5 @@
 /sldash {[6 6] 0 setdash} bind def %% Dashed-Line \n\
 /sldott {[2 6] 0 setdash} bind def %% Dotted-Line \n\
-/sldashdott {[2 6 6 6] 0 setdash} bind def %% Dash-Dotted-Line \n\
+/sldashdott {[2 2 4 6] 0 setdash} bind def %% Dash-Dotted-Line \n\
 /ff {findfont} bind def   /sf {setfont} bind def /scf {scalefont} bind def\n\
 /rl {rlineto} bind def    /tr {translate} bind def\n\
@@ -798,4 +798,8 @@
 	    currentBloc->Tx, currentBloc->Ty,
 	    currentBloc->X0, currentBloc->Y0);
+    // On redefinit la zone de clip
+    fprintf(mPSFile, "%% Define clip region to the entire bloc area \n");
+    fprintf(mPSFile, "initclip newpath 0 0 m %.2f Ux 0 rl 0 %.2f Uy rl %2f Ux 0 rl closepath clip \n",
+	    currentBloc->Dx, currentBloc->Dy, -currentBloc->Dx); 
     // On redefint la fonte par defaut - $CHECK$ Reza 11/12/99
     mFontAtt = PI_RomanFont;
@@ -804,5 +808,7 @@
     double scaledFontSize = (double)mFontSize*currentPage->FontScaleFactor;
     fprintf(mPSFile, "/Courier ff %g FS /curfntsz %g def \n", 
-	    scaledFontSize, scaledFontSize) ; 
+	    scaledFontSize, scaledFontSize) ;
+    mLineAtt = PI_NotDefLineAtt;
+    SelectLine(PILineAtt(PI_NormalLine));
     setFontDone = true;
     currentBloc->tmp = ftell(mPSFile) ;
@@ -830,4 +836,21 @@
     /* Flags */
     currentBloc = NULL ; 
+}
+
+
+void PSFile::SetClipRectangle(double x0, double y0, double dx, double dy)
+{
+  // On redefinit la zone de clip
+  fprintf(mPSFile, "%% SetClipRectangle: Define clip region \n ");
+  fprintf(mPSFile, "newpath %.2f Ux %.2f Uy m %.2f Ux 0 rl 0 %.2f Uy rl %.2f Ux 0 rl closepath clip \n",
+	  x0, y0, dx, dy, -dx); 
+}
+
+void PSFile::ClearClipRectangle()
+{
+  // On redefinit la zone de clip a l'ensemble du bloc
+  fprintf(mPSFile, "%% Define clip region to the entire bloc area \n");
+  fprintf(mPSFile, "initclip newpath 0 0 m %.2f Ux 0 rl 0 %.2f Uy rl %2f Ux 0 rl closepath clip \n",
+	  currentBloc->Dx, currentBloc->Dy, -currentBloc->Dx); 
 }
 
@@ -1150,5 +1173,5 @@
     if (MrkType != PI_NotDefMarker)
 	mMarker = MrkType;
-
+    if ((MrkType == PI_DotMarker) && (MarkerSize<3)) MarkerSize=3;
     if(MarkerSize != mMarkerSize || setFontDone) {
 	mMarkerSize = MarkerSize ;
@@ -1234,5 +1257,8 @@
 {
     
-      fprintf(mPSFile, "%d slw ", att.GetLineWidth()) ;
+  //  if (att.GetLineWidth() != mLineAtt.GetLineWidth()) {
+  double scaledLineWidth = att.GetLineWidthD()*currentPage->FontScaleFactor;
+  fprintf(mPSFile, "%g slw ", scaledLineWidth) ;
+  if (att.GetLineDash() != mLineAtt.GetLineDash()) {
       switch (att.GetLineDash()) {
         case PI_LineSolid :
@@ -1245,5 +1271,5 @@
 	  fprintf(mPSFile, "sldott ");
 	  break;
-        case PI_LineDashedDotted :
+        case PI_LineDashDotted :
 	  fprintf(mPSFile, "sldashdott ");
 	  break;
@@ -1252,5 +1278,6 @@
 	  break;
       }
-
+  }
+  if (att.GetLineJoin() != mLineAtt.GetLineJoin()) {
       switch (att.GetLineJoin()) {
         case PI_JoinMiter :
@@ -1267,5 +1294,6 @@
 	  break;
       }
-
+  }
+  if (att.GetLineCap() != mLineAtt.GetLineCap()) {
       switch (att.GetLineCap()) {
         case PI_CapButt :
@@ -1282,4 +1310,5 @@
 	  break;
       }
+  }
       mLineAtt = att;
 }
Index: /trunk/SophyaPI/PI/psfile.h
===================================================================
--- /trunk/SophyaPI/PI/psfile.h	(revision 1886)
+++ /trunk/SophyaPI/PI/psfile.h	(revision 1887)
@@ -104,4 +104,7 @@
     virtual void  EndBloc();
 
+    virtual void  SetClipRectangle(double x0, double y0, double dx, double dy);
+    virtual void  ClearClipRectangle();
+
     virtual void SelForeground(PIColorMap& cmap, int cid) ; 
     virtual void SelBackground(PIColorMap& cmap, int cid) ; 
