Index: trunk/Ohana/src/opihi/dvo/gimages.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/gimages.c	(revision 12750)
+++ trunk/Ohana/src/opihi/dvo/gimages.c	(revision 12753)
@@ -80,4 +80,5 @@
   int TriangleUp   = wordhash ("TRP-");
   int TriangleDn   = wordhash ("TRM-");
+  int TrianglePts  = wordhash ("TRI-");
 
   Nfound = 0;
Index: trunk/Ohana/src/opihi/dvo/images.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/images.c	(revision 12750)
+++ trunk/Ohana/src/opihi/dvo/images.c	(revision 12753)
@@ -114,4 +114,5 @@
   int TriangleUp   = wordhash ("TRP-");
   int TriangleDn   = wordhash ("TRM-");
+  int TrianglePts  = wordhash ("TRI-");
 
   npts = NPTS = 200;
@@ -155,4 +156,13 @@
       x[1] = +0.5*image[i].NX; y[1] = +0.5*image[i].NY;
       x[2] = -0.5*image[i].NX; y[2] = +0.5*image[i].NY;
+      goto got_type;
+    }
+    // For 'TrianglePts' (TRI-), we are using the Mx,My, etc terms to save the coordinates
+    // this means triangular images cannot carry photometric zero-point variations
+    if (typehash == TrianglePts) {
+      Npts = 3;
+      x[0] = image[i].Mx;   y[0] = image[i].My;
+      x[1] = image[i].Mxxx; y[1] = image[i].Mxyy;
+      x[2] = image[i].Mxxy; y[2] = image[i].Myyy;
       goto got_type;
     }
@@ -228,5 +238,4 @@
     if (Npts == 0) continue;
 
-    // if any of the points is on the screen, plot the image
     status = FALSE;
     for (j = 0; j < Npts; j++) {
@@ -239,4 +248,7 @@
     Xvec.elements[N+2*Npts-1] = Xvec.elements[N];
     Yvec.elements[N+2*Npts-1] = Yvec.elements[N];
+    if (!status) continue;
+    // if none of the points are on the visible side of the projection, do not plot the image
+
     InPic = FALSE;
     for (j = 0; j < 2*Npts; j+=2) {
@@ -247,18 +259,18 @@
 	InPic = TRUE;
     }
-    if (!status && HIDDEN) status = TRUE;
-    if (InPic && status) {
-      plist[n] = i;
-      n++;
-      if (n > npts - 1) {
-	npts += 200;
-	REALLOCATE (plist, int, npts);
-      }
-      N+=2*Npts;
-      if (N + 16 >= NPTS) {  /* need to leave room for 8 point image */
-	NPTS += 400;
-	REALLOCATE (Xvec.elements, float, NPTS);
-	REALLOCATE (Yvec.elements, float, NPTS);
-      }
+    // if (!status && HIDDEN) status = TRUE;
+    if (!InPic) continue;
+
+    plist[n] = i;
+    n++;
+    if (n > npts - 1) {
+      npts += 200;
+      REALLOCATE (plist, int, npts);
+    }
+    N+=2*Npts;
+    if (N + 16 >= NPTS) {  /* need to leave room for 8 point image */
+      NPTS += 400;
+      REALLOCATE (Xvec.elements, float, NPTS);
+      REALLOCATE (Yvec.elements, float, NPTS);
     }
   }
