Index: /branches/eam_branches/ipp-20101205/Ohana/src/kapa2/src/PSObjects.c
===================================================================
--- /branches/eam_branches/ipp-20101205/Ohana/src/kapa2/src/PSObjects.c	(revision 30232)
+++ /branches/eam_branches/ipp-20101205/Ohana/src/kapa2/src/PSObjects.c	(revision 30233)
@@ -164,5 +164,5 @@
   float *x, *y;
   double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
-  double sx0, sy0, sx1, sy1, sxa;
+  double sx0, sy0, sx1, sy1, sxa, sya, sxo, syo;
   double X0, X1, Y0, Y1;
 
@@ -189,4 +189,58 @@
   for (i = 0; (i < object[0].Npts) && !(finite(x[i]) && finite(y[i])); i++);
   if (i >= object[0].Npts) return;
+
+  /* first valid data point */
+  sx0 = x[i]*mxi + y[i]*mxj + bx;
+  sy0 = x[i]*myi + y[i]*myj + by;
+  sx0 = MIN (MAX (sx0, X0), X1);
+  sy0 = MAX (MIN (sy0, Y0), Y1);
+  
+  /* find the second valid datapoint */
+  for (i++; (i < object[0].Npts) && !(finite(x[i]) && finite(y[i])); i++);
+  if (i >= object[0].Npts) return;
+
+  /* second valid data point */
+  sx1 = x[i]*mxi + y[i]*mxj + bx;
+  sy1 = x[i]*myi + y[i]*myj + by;
+  sx1 = MIN (MAX (sx1, X0), X1);
+  sy1 = MAX (MIN (sy1, Y0), Y1);
+  
+  /* connect first point to second point */
+  sxa = sx0 - 0.5*(sx1 - sx0);
+  sya = MAX (sy0, Y0);
+  DrawLine (sx0, sy0, sxa, sy0);
+  DrawLine (sxa, sy0, sxa, sya);
+  
+  /* draw segment equal distance behind first point and down to x-axis */
+  sxa = 0.5*(sx0 + sx1);
+  DrawLine (sx0, sy0, sxa, sy0);
+  DrawLine (sxa, sy0, sxa, sy1);
+  DrawLine (sxa, sy1, sx1, sy1);
+  sx0 = sx1;
+  sy0 = sy1;
+  
+  /* continue with rest of points */
+  sxo = syo = 0;
+  for (i++; i < object[0].Npts; i++) {
+    if (!(finite(x[i]) && finite(y[i]))) continue;
+    sx1 = x[i]*mxi + y[i]*mxj + bx;
+    sy1 = x[i]*myi + y[i]*myj + by;
+    sx1 = MIN (MAX (sx1, X0), X1);
+    sy1 = MAX (MIN (sy1, Y0), Y1);
+    sxa = 0.5*(sx0 + sx1);
+    DrawLine (sx0, sy0, sxa, sy0);
+    DrawLine (sxa, sy0, sxa, sy1);
+    DrawLine (sxa, sy1, sx1, sy1);
+    sxo = sx0; syo = sy0;
+    sx0 = sx1; sy0 = sy1;
+  }
+  
+  /* draw segment equal distance after last point and down to x-axis */
+  sxa = sx1 + 0.5*(sx1 - sxo);
+  sya = MAX (sy1, Y0);
+  DrawLine (sx1, sy1, sxa, sy1);
+  DrawLine (sxa, sy1, sxa, sya);
+
+# if (0)
   sx0 = x[i]*mxi + y[i]*mxj + bx;
   sy0 = x[i]*myi + y[i]*myj + by;
@@ -207,4 +261,5 @@
     sx0 = sx1; sy0 = sy1;
   }
+# endif
 }
 
Index: /branches/eam_branches/ipp-20101205/Ohana/src/kapa2/src/bDrawObjects.c
===================================================================
--- /branches/eam_branches/ipp-20101205/Ohana/src/kapa2/src/bDrawObjects.c	(revision 30232)
+++ /branches/eam_branches/ipp-20101205/Ohana/src/kapa2/src/bDrawObjects.c	(revision 30233)
@@ -154,5 +154,5 @@
   float *x, *y;
   double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
-  double sx0, sy0, sx1, sy1, sxa;
+  double sx0, sy0, sx1, sy1, sxa, sya, sxo, syo;
   double X0, X1, Y0, Y1;
 
@@ -179,4 +179,58 @@
   for (i = 0; (i < object[0].Npts) && !(finite(x[i]) && finite(y[i])); i++);
   if (i >= object[0].Npts) return;
+
+  /* first valid data point */
+  sx0 = x[i]*mxi + y[i]*mxj + bx;
+  sy0 = x[i]*myi + y[i]*myj + by;
+  sx0 = MIN (MAX (sx0, X0), X1);
+  sy0 = MAX (MIN (sy0, Y0), Y1);
+  
+  /* find the second valid datapoint */
+  for (i++; (i < object[0].Npts) && !(finite(x[i]) && finite(y[i])); i++);
+  if (i >= object[0].Npts) return;
+
+  /* second valid data point */
+  sx1 = x[i]*mxi + y[i]*mxj + bx;
+  sy1 = x[i]*myi + y[i]*myj + by;
+  sx1 = MIN (MAX (sx1, X0), X1);
+  sy1 = MAX (MIN (sy1, Y0), Y1);
+  
+  /* connect first point to second point */
+  sxa = sx0 - 0.5*(sx1 - sx0);
+  sya = MAX (sy0, Y0);
+  DrawLine (buffer, sx0, sy0, sxa, sy0);
+  DrawLine (buffer, sxa, sy0, sxa, sya);
+  
+  /* draw segment equal distance behind first point and down to x-axis */
+  sxa = 0.5*(sx0 + sx1);
+  DrawLine (buffer, sx0, sy0, sxa, sy0);
+  DrawLine (buffer, sxa, sy0, sxa, sy1);
+  DrawLine (buffer, sxa, sy1, sx1, sy1);
+  sx0 = sx1;
+  sy0 = sy1;
+  
+  /* continue with rest of points */
+  sxo = syo = 0;
+  for (i++; i < object[0].Npts; i++) {
+    if (!(finite(x[i]) && finite(y[i]))) continue;
+    sx1 = x[i]*mxi + y[i]*mxj + bx;
+    sy1 = x[i]*myi + y[i]*myj + by;
+    sx1 = MIN (MAX (sx1, X0), X1);
+    sy1 = MAX (MIN (sy1, Y0), Y1);
+    sxa = 0.5*(sx0 + sx1);
+    DrawLine (buffer, sx0, sy0, sxa, sy0);
+    DrawLine (buffer, sxa, sy0, sxa, sy1);
+    DrawLine (buffer, sxa, sy1, sx1, sy1);
+    sxo = sx0; syo = sy0;
+    sx0 = sx1; sy0 = sy1;
+  }
+  
+  /* draw segment equal distance after last point and down to x-axis */
+  sxa = sx1 + 0.5*(sx1 - sxo);
+  sya = MAX (sy1, Y0);
+  DrawLine (buffer, sx1, sy1, sxa, sy1);
+  DrawLine (buffer, sxa, sy1, sxa, sya);
+
+# if (0)
   sx0 = x[i]*mxi + y[i]*mxj + bx;
   sy0 = x[i]*myi + y[i]*myj + by;
@@ -197,4 +251,5 @@
     sx0 = sx1; sy0 = sy1;
   }
+# endif
 }
 
