dataView.c

 #include <math.h>
#include <stdio.h>
#include "../dxToC/loadDx.h"
#include "../renderer/renderer.h"
#include "asciiSM.h"

void printASCII(char *, int, int, float, struct rendrInfo);

void viewObjCenterLocs(struct rendrInfo rI)
{
   int i;
   float xPt, yPt, zPt, perspctv;
   char asciiStr[1024];
   int asciiLocX, asciiLocY;
   float asciiLocZ;
  
   for (i = 0; i < ptDatBlockSzCnt-1; i++)
   {
      sprintf(asciiStr, "%i", ptDatBlockSz[i]);
     
      xPt = ptDat[ptDatBlockSz[i]];
      yPt = ptDat[ptDatBlockSz[i]+1];
      zPt = ptDat[ptDatBlockSz[i]+2];
      perspctv = rI.perspctv / (rI.perspctv - zPt);
     
      if (!rI.ortho)
      {
         xPt = xPt * perspctv;
         yPt = yPt * perspctv;
         zPt = zPt * perspctv;
      }
     
      asciiLocX = round(xPt + rI.xCenter);
      asciiLocY = round(yPt + rI.yCenter);
      asciiLocZ = zPt;
     
      printASCII(asciiStr, asciiLocX, asciiLocY, asciiLocZ, rI);
     
      if (asciiLocY+1 < rI.yWin)
      if (asciiLocX+1 < rI.xWin)
      if (asciiLocY >= 0)
      if (asciiLocX >= 0)
      {
         rI.scrnBuff[asciiLocX][asciiLocY] = 0x444444;
         rI.scrnBuff[asciiLocX+1][asciiLocY] = 0x444444;
         rI.scrnBuff[asciiLocX][asciiLocY+1] = 0x444444;
         rI.scrnBuff[asciiLocX+1][asciiLocY+1] = 0x444444;
      }
   }
}


void viewPtLocs(struct rendrInfo rI)
{
   int i;
   float xPt, yPt, zPt, perspctv;
   int lineCnt;
   int pt;
   char asciiStr[1024];
   int asciiLocX, asciiLocY;
   float asciiLocZ;
  
  
   for (i = 0; i < lineDatBlockSzCnt-1; i++)
   for (lineCnt = lineDatBlockSz[i]; lineCnt < lineDatBlockSz[i+1]; lineCnt++)
   {
      pt = lineDat[lineCnt+1] * 3 + (12 * (i+1));
     
      sprintf(asciiStr, "%i", pt);
     
      xPt = ptDat[pt];
      yPt = ptDat[pt+1];
      zPt = ptDat[pt+2];
      perspctv = rI.perspctv / (rI.perspctv - zPt);
     
      if (!rI.ortho)
      {
         xPt = xPt * perspctv;
         yPt = yPt * perspctv;
         zPt = zPt * perspctv;
      }
     
      asciiLocX = round(xPt + rI.xCenter);
      asciiLocY = round(yPt + rI.yCenter);
      asciiLocZ = zPt;
     
     
      printASCII(asciiStr, asciiLocX, asciiLocY, asciiLocZ, rI);
     
      if (asciiLocY+1 < rI.yWin)
      if (asciiLocX+1 < rI.xWin)
      if (asciiLocY >= 0)
      if (asciiLocX >= 0)
      {
         rI.scrnBuff[asciiLocX][asciiLocY] = 0x444444;
         rI.scrnBuff[asciiLocX+1][asciiLocY] = 0x444444;
         rI.scrnBuff[asciiLocX][asciiLocY+1] = 0x444444;
         rI.scrnBuff[asciiLocX+1][asciiLocY+1] = 0x444444;
      }
     
      lineCnt = lineCnt + 2;
   }
}


void viewLineLocs(struct rendrInfo rI)
{
   int i;
   float xPt, yPt, zPt, perspctv;
   int lineCnt;
   int pt1, pt2;
   char asciiStr[1024];
   int asciiLocX, asciiLocY;
   float asciiLocZ;
  
  
   for (i = 0; i < lineDatBlockSzCnt-1; i++)
   for (lineCnt = lineDatBlockSz[i]; lineCnt < lineDatBlockSz[i+1]; lineCnt++)
   {
      pt1 = lineDat[lineCnt+1] * 3 + (12 * (i+1));
      pt2 = lineDat[lineCnt+2] * 3 + (12 * (i+1));
     
      sprintf(asciiStr, "%i", lineCnt);
     
      xPt = (ptDat[pt2] - ptDat[pt1]) / 2 + ptDat[pt1];
      yPt = (ptDat[pt2+1] - ptDat[pt1+1]) / 2 + ptDat[pt1+1];
      zPt = (ptDat[pt2+2] - ptDat[pt1+2]) / 2 + ptDat[pt1+2];
      perspctv = rI.perspctv / (rI.perspctv - zPt);
     
      if (!rI.ortho)
      {
         xPt = xPt * perspctv;
         yPt = yPt * perspctv;
         zPt = zPt * perspctv;
      }
     
      asciiLocX = round(xPt + rI.xCenter);
      asciiLocY = round(yPt + rI.yCenter);
      asciiLocZ = zPt;
     
     
      printASCII(asciiStr, asciiLocX, asciiLocY, asciiLocZ, rI);
     
      if (asciiLocY+1 < rI.yWin)
      if (asciiLocX+1 < rI.xWin)
      if (asciiLocY >= 0)
      if (asciiLocX >= 0)
      {
         rI.scrnBuff[asciiLocX][asciiLocY] = 0x444444;
         rI.scrnBuff[asciiLocX+1][asciiLocY] = 0x444444;
         rI.scrnBuff[asciiLocX][asciiLocY+1] = 0x444444;
         rI.scrnBuff[asciiLocX+1][asciiLocY+1] = 0x444444;
      }
     
      lineCnt = lineCnt + 2;
   }
}


void viewColorLocs(struct rendrInfo rI)
{
   int i;
   float xPt, yPt, zPt, perspctv;
   int lineCnt;
   int colorCnt, colorNum;
   int pt1, pt2;
   char asciiStr[1024];
   int asciiLocX, asciiLocY;
   float asciiLocZ;
  
   colorCnt = 0;
  
   for (i = 0; i < lineDatBlockSzCnt-1; i++)
   for (lineCnt = lineDatBlockSz[i]; lineCnt < lineDatBlockSz[i+1]; lineCnt++)
   {
      pt1 = lineDat[lineCnt+1] * 3 + (12 * (i+1));
      pt2 = lineDat[lineCnt+2] * 3 + (12 * (i+1));
     
      if (colorCnt < colorListBlockSz[colorListBlockSzCnt-1])
      {
         if (lineCnt == lineDatBlockSz[i])
         colorCnt = colorListBlockSz[i];
         else
         if (lineCnt > colorList[colorCnt+1])
         colorCnt = colorCnt + 3;
        
         if (colorCnt < colorListBlockSz[colorListBlockSzCnt-1]) // added 3 to colorCnt
         if (lineCnt >= colorList[colorCnt+1])
         if (lineCnt <= colorList[colorCnt+2])
         colorNum = colorCnt;
      }
     
      sprintf(asciiStr, "%i", colorNum);
     
      xPt = (ptDat[pt2] - ptDat[pt1]) / 2 + ptDat[pt1];
      yPt = (ptDat[pt2+1] - ptDat[pt1+1]) / 2 + ptDat[pt1+1];
      zPt = (ptDat[pt2+2] - ptDat[pt1+2]) / 2 + ptDat[pt1+2];
      perspctv = rI.perspctv / (rI.perspctv - zPt);
     
      if (!rI.ortho)
      {
         xPt = xPt * perspctv;
         yPt = yPt * perspctv;
         zPt = zPt * perspctv;
      }
     
      asciiLocX = round(xPt + rI.xCenter);
      asciiLocY = round(yPt + rI.yCenter);
      asciiLocZ = zPt;
     
     
      printASCII(asciiStr, asciiLocX, asciiLocY, asciiLocZ, rI);
     
      if (asciiLocY+1 < rI.yWin)
      if (asciiLocX+1 < rI.xWin)
      if (asciiLocY >= 0)
      if (asciiLocX >= 0)
      {
         rI.scrnBuff[asciiLocX][asciiLocY] = 0x444444;
         rI.scrnBuff[asciiLocX+1][asciiLocY] = 0x444444;
         rI.scrnBuff[asciiLocX][asciiLocY+1] = 0x444444;
         rI.scrnBuff[asciiLocX+1][asciiLocY+1] = 0x444444;
      }
     
      lineCnt = lineCnt + 2;
   }
}


void printASCII(char *asciiStr, int asciiX, int asciiY, float asciiZ, struct rendrInfo rI)
{
   #define asciiWidth 613
   #define asciiHeight 13
   int i, x, y;
   int asciiChar;
  
   asciiY = asciiY - 12;
   asciiX = asciiX + 1;
   i = 0;
  
   while ((int)asciiStr[i])
   {
      asciiChar = (int)asciiStr[i]-33;
     
      if (asciiChar != -1)
      for (y = asciiY+2; y < asciiHeight+asciiY; y++) //added the 2 -- y = asciiY+2;
      for (x = asciiSMPos[asciiChar]; x <= asciiSMPos[asciiChar+1]; x++)
      if ((x-(asciiSMPos[asciiChar])+asciiX >= 0) && (y >= 0))
      if ((x-(asciiSMPos[asciiChar])+asciiX < rI.xWin) && (y < rI.yWin))
      if (asciiZ >= rI.zIndex[x-(asciiSMPos[asciiChar])+asciiX][y])
      {
         rI.scrnBuff[x-(asciiSMPos[asciiChar])+asciiX][y] = asciiSM[(y-asciiY)*asciiWidth + x];
         rI.zIndex[x-(asciiSMPos[asciiChar])+asciiX][y] = asciiZ;
      }
     
      if (asciiChar == -1)
      asciiX = asciiX + 5; // Space Length
      else
      asciiX = asciiX + (asciiSMPos[asciiChar+1] - asciiSMPos[asciiChar]);
      i++;
   }
}

Project Homepage: