im trying to save file as file.x old microsoft style .x files
this code writes but it comes out as an error
i compiled it with visual c using glut
i need to be able to both read and write .x files such as wdf.x <---
here is the code sorry about spaghetti code
===========================================
#ifdef WIN32
#include <windows.h>
#endif
#if defined(__APPLE__) || defined(MACOSX)
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <GLUT/glut.h>
#else
#include <GL/gl.h>
#include <GL/glu.h>
#include <gl/glut.h>
#endif
#include <stdio.h>
#include <stdlib.h>
int xt,yt,zt =0.0f;
int xtc =1.0;
#define MAX_VERTS 900000
float angle = 0;
float anglf = 0;
float anglg = 0;
float n =0.0;
GLfloat z= -0.2f;
GLfloat hl= 0.0f;
GLfloat zm= -0.2f;
GLfloat zp= 0.2f;
GLuint mousex, mousey, mousez = 0;
static GLfloat Scale = 0.0f;
static int i= 2;
int j= 2.0;
static int numVerts = 2;
static struct {GLfloat x, y, z;} verts[MAX_VERTS][2];
static GLboolean dragMouse = GL_FALSE;
enum {X, Y, Z};
enum {NOLIST, PLANE}; /* display lists */
enum {VERTS};
/* load data structure from file */
enum {WRITE, END};
void reshape(int w, int h) {
glViewport(0,0, w,h);
glLoadIdentity();
glOrtho(0,w, h,0, -1,1); /* flip y-axis around */
glMatrixMode(GL_MODELVIEW);
} // not used jmcd
void glRotateAxis(void){
glTranslatef(0.0f,0.0f,0.0f);
//glScalef(Scale, Scale, Scale);
glRotatef(angle,0.0f,+1.0f,+1.0f); //on center rotation by jmcd
glTranslatef(0.0f,0.0f,0.0f);
}
void glRotateAxisB(void){
glTranslatef(0.0f,0.0f,0.0f);
//glScalef(Scale, Scale, Scale);
glRotatef(angle,0.0f,-1.0f,-1.0f); //on center rotation by jmcd
glTranslatef(0.0f,0.0f,0.0f);
}
void glScaleIt(void)
{
glScalef(Scale, Scale, Scale);
}
void display(void) {
glClear(GL_COLOR_BUFFER_BIT); /* clear frame buffer */
//glPointSize(3.0f);
glColor3f(2.0, 7.0, 3.0); /* set current color to Pastashio Green */
glMatrixMode(GL_PROJECTION);
//glTranslatef(0.0f,0.0f,0.0f);
//glRotatef(angle,1.0f,1.0f,0.0f); //on center rotation by jmcd
//glTranslatef(0.0f,0.0f,0.0f);
//glRotatef(anglf,0.0f,1.0f,0.0f);
//glRotatef(anglg,0.0f,0.0f,1.0f);
//glRotatef(10-.01,0.0f, 1.0f, 0.0f);
glBegin(GL_POINTS); //glBegin(GL_LINES); GL_POINTS
if (numVerts > 1) {
int i;
for (i = 0; i < numVerts; i++)
glVertex3d(verts[0].x, verts[0].y, verts[0].z);
if(dragMouse)
// numVerts++;
i++;
glVertex3f((GLfloat) verts[1].x=mousex, (GLfloat) verts[1].y=mousey, (GLfloat) verts[1].z=mousez);
//glVertex3d(verts[1].x, verts[1].y, verts[1].z);
//if(dragMouse == GL_TRUE)
glEnd();
}
glutPostRedisplay();
glFlush(); /* make sure all GL commands are executed */
}
void writer(char *fname)
{
FILE *fp;
GLfloat x, y, z ;
int state = WRITE;
int jtrig = 0.0;
int i= 2.0;
fp = fopen(fname, "wb");
if (!fp) {
printf("can't open file %s\n", fname);
}
// glNewList(PLANE, GL_COMPILE);
state = WRITE;
while(!feof(fp))
{
switch(state)
{
case WRITE:
if (n == 0.0)
x = verts[0].x;
y = verts[0].y;
z = verts[0].z;
fprintf(fp, " %f %f %f", verts[0].x, verts[0].y, verts[0].z);
printf ("xyz : %f.\n",x,y,z);
printf ("numverts : %f.\n",numVerts);
//printf(fp, " %f %f %f", verts[j][0].x, verts[j][0].y, verts[j][0].z);
fprintf (fp, "%f \r\n",0);
// j++;
if(i == numVerts)
state = END;
i++;
n= 1.0;
break;
if (n == 1.0)
x = verts[1].x;
y = verts[1].y;
z = verts[1].z;
fprintf(fp, " %f %f %f", verts[1].x, verts[1].y, verts[1].z);
printf ("xyz : %f.\n",x,y,z);
printf ("numverts : %f.\n",numVerts);
//printf(fp, " %f %f %f", verts[j][0].x, verts[j][0].y, verts[j][0].z);
fprintf (fp, "%f \r\n",0);
// j++;
if(i == numVerts)
state = END;
i++;
n= 0.0;
break;
//fclose(fp);
if(i < numVerts)
state = WRITE;
if (x == 0.0)
fclose(fp);
break;
case END:
fclose(fp);
state = NULL;
state = END;
break;
}
}
}
void loader(char *fname)
{
FILE *fp;
GLfloat x, y, z;
int state = END;
int read;
n = 0;
numVerts = 2.0;
i = 2.0;
fp = fopen(fname, "r");
if (!fp) {
printf("can't open file %s\n", fname);
exit(1);
}
// glNewList(PLANE, GL_COMPILE);
state = VERTS;
while(!feof(fp))
{
switch(state)
{
case END:
// read = fscanf(fp, "");
// if(read < 0) /* hit eof */
// break;
state = VERTS;
// glBegin(GL_LINE_STRIP);
break;
case VERTS:
if( n = 0.0)
fscanf(fp, " %f %f %f ", verts[0].x, verts[0].y, verts[0].z);
// fscanf(fp, " %f %f %f", &x, &y, &z);
printf("xyz : %f./n",verts[0].x,verts[0].y,verts[0].z); ////////////////////////////////////// printf("xyz : %f./n",x,y,z); /////
verts[0].x = x;
verts[0].y = y;
verts[0].z = z; // watch 148
n = 1.0;
i++;
// numVerts = i;
if( n = 1.0)
fscanf(fp, " %f %f %f ", verts[1].x, verts[1].y, verts[1].z);
printf("xyz : %f./n",verts[0].x,verts[0].y,verts[0].z); ////////////////////////////////////// printf("xyz : %f./n",x,y,z); /////
verts[1].x = x;
verts[1].y = y;
verts[1].z = z; // watch 148
n = 0.0;
i++;
// numVerts = i; @@@@@@@@@@@@@@@@@@@@@JMCD NOW!!@@@@@@@@@@@@@@
if(x = 0.0);
state = END;
if (x !=0.0)
state = VERTS;
{
// fscanf(fp, "");
//glEnd();
// state = END;
}
break;
}
}
// glEndList();
fclose(fp);
}
void keyboard(unsigned char key, int x, int y) {
switch (key){
case 'd':
hl=zm;
z= hl;
glutPostRedisplay();
break;
case 'f':
hl=zp;
z= hl;
glutPostRedisplay();
break;
case 'l':
loader("./data/wdf.x");
glutPostRedisplay();
// glFlush();
break;
case 'w':
writer("./data/wdf.x");
glutPostRedisplay();
// glFlush();
break;
case 'u':
numVerts--;
i--;
printf("xyz : %d./n", x,y,z);
glutPostRedisplay();
break;
case 'c':
hl=0.0f;
z= hl;
glutPostRedisplay();
break;
break;
case 's':
numVerts=2;
i=2;
glutPostRedisplay();
break;
case 'r':
numVerts++;
i++;
printf("xyz: %d./n", x,y,z);
glutPostRedisplay();
break;
case 'p':
Scale = 0.4f;
glScaleIt();
break;
case 'o':
Scale += 0.4f;
glScaleIt();
break;
case 'a':
angle += .001f;
printf ("angle : %f.\n", angle);
glRotateAxisB();
break;
case 'z':
angle += .001f;
printf ("angle : %f.\n", angle);
glRotateAxis(); //this whole thing is right, x below also all correct
// glutPostRedisplay();
break;
case 'x':
angle -= .001f;
glRotateAxis();
//glutPostRedisplay();
break;
case 'k':
angle -= .1;
glRotatef(angle,1.0,0.0,0.0);
glutPostRedisplay();
break;
case 'y':
angle += .1;
glRotatef(angle,0.0,1.0,0.0);
glutPostRedisplay();
break;
case 'g':
angle -= .1;
glRotatef(angle,0.0,-1.0,0.0);
glutPostRedisplay();
break;
// case 'n':
// numVerts--;
//glutPostRedisplay(); /* request a redisplay */
// break;
/* case 'q':
case 'Q':
exit(0);
break;*/
}
}
void mouse(int button, int state, int x, int y) {
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN )
if (numVerts < MAX_VERTS) {
dragMouse = GL_TRUE;
// printf ("Mouse in play routine : %d,%d,%d.\n", x,y,z); //jmcd take out later !!!
verts[0].x = x;
verts[0].y = y;
verts[0].z = hl; // watch 148
printf ("Index I: %d.\n", i);
printf ("dragMouse : %d.\n", dragMouse);
printf ("numVerts : %d.\n", numVerts); //jmcd jmk 1
printf ("hl : %f.\n", hl);
printf ("z : %f.\n", z);
if (xtc = 1.0)
xt = verts[0].x;
yt = verts[0].y;
zt = verts[0].z;
// fwrite(fp, " %f %f %f",xt,yt,zt);
printf("xt : %i./n ", xt);
printf("yt : %i./n ", yt);
printf("zt : %i./n ", zt);
xtc++;
numVerts++;
i++;
glutPostRedisplay(); /* request a redisplay */
}
}
void mouseMotion(int x, int y) {
if (GLUT_UP == TRUE) {
dragMouse = GL_TRUE;
if(dragMouse) { //dragmouse achieved at 11:40 AM //D //8:32 AM
mousex = x;
mousey = y;
mousez = z;
// glMatrixMode(GL_MODELVIEW);
glutPostRedisplay();
}
printf ("hl : %f.\n", hl);
//glVertex3f((GLfloat) verts[0].x, (GLfloat) verts[0].y, (GLfloat) verts[0].z);
//i++;
}
// glutPostRedisplay(); /* request a redisplay */
}
#define ESC 27
//void keyboard(unsigned char key, int x, int y) {if (key == ESC) exit(0);}
int main(int argc, char *argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowSize(500,500);
glutInitWindowPosition(10,10);
glutCreateWindow("Polyline Editor");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutPassiveMotionFunc(mouseMotion);
glutKeyboardFunc(keyboard);
glClearColor(0.0, 0.0, 0.0, 1.0);
glutMainLoop();
return 0;
}
thank you in advance
sincerly JakePlow