Index: /branches/eam_branches/ipp-20140610/Ohana/src/kapa2/src/DrawObjects.c
===================================================================
--- /branches/eam_branches/ipp-20140610/Ohana/src/kapa2/src/DrawObjects.c	(revision 36939)
+++ /branches/eam_branches/ipp-20140610/Ohana/src/kapa2/src/DrawObjects.c	(revision 36940)
@@ -608,4 +608,26 @@
     }
   }
+  if (object[0].ptype == 12) {	/* filled triangle (down) */
+    XPoint points[4];
+    for (i = 0; i < object[0].Npts; i++) {
+      if (!(finite(x[i]) && finite(y[i]))) continue;
+      sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+      sy = x[i]*myi + y[i]*myj + by + YCENTER;
+      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
+	  (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) {
+	if (scaleColor) {
+	  if (!finite(z[i])) continue;
+	  int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
+	  XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel);
+	}
+	D = scaleSize ? dz*z[i] : ds;
+	points[0].x = sx - D;  points[0].y = sy - 0.58*D;  
+	points[1].x = sx + D;  points[1].y = sy - 0.58*D;  
+	points[2].x = sx;      points[2].y = sy + 1.15*D;  
+	points[3].x = sx - D;  points[3].y = sy - 0.58*D;  
+	XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin);
+      }
+    }
+  }
   if (object[0].ptype == 100) {	/* connect a pair of points */
 
Index: /branches/eam_branches/ipp-20140610/Ohana/src/kapa2/src/bDrawObjects.c
===================================================================
--- /branches/eam_branches/ipp-20140610/Ohana/src/kapa2/src/bDrawObjects.c	(revision 36939)
+++ /branches/eam_branches/ipp-20140610/Ohana/src/kapa2/src/bDrawObjects.c	(revision 36940)
@@ -540,4 +540,26 @@
 	FillCircle (buffer, sx, sy, D);
 	// out-of-range points skipped by bDrawLineHorizontal
+      }
+    }
+  }
+  if (object[0].ptype == 12) {	/* filled triangle (down) */
+    for (i = 0; i < object[0].Npts; i++) {
+      if (!(finite(x[i]) && finite(y[i]))) continue;
+      sx = x[i]*mxi + y[i]*mxj + bx;
+      sy = x[i]*myi + y[i]*myj + by;
+      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
+	  (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
+      {
+	if (scaleColor) {
+	  if (!finite(z[i])) continue;
+	  int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
+	  buffer->bColor_R = pixel1[pixel];
+	  buffer->bColor_G = pixel2[pixel];
+	  buffer->bColor_B = pixel3[pixel];
+	}
+	D = scaleSize ? dz*z[i] : ds;
+	// FillTriangle (buffer, sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D);
+	FillTriangle (buffer, sx, sy + 0.58*D, D, 1.73*D);
+	// out-of-range points skipped by bDrawPoint
       }
     }
