int writeViewport (int thingsToWrite) { int i, j, k, ii, code, *anIndex; LLPoint *anLLPoint; LPoint *anLPoint; viewTriple *aPt; XWindowAttributes vwInfo; FILE *viewDataFile; char viewDirName[80], viewDataFilename[80], viewBitmapFilename[80], viewPixmapFilename[80], command[80]; XGetWindowAttributes(dsply,viewport->titleWindow,&vwInfo); sprintf(viewDirName,"%s%s",filename,".VIEW"); sprintf(command,"%s%s%s","rm -r ",viewDirName," > /dev/null 2>&1"); code = system(command); sprintf(command,"%s%s%s","mkdir ",viewDirName," > /dev/null 2>&1"); system(command); if (0) { fprintf(stderr," Error: Cannot create %s\n",viewDirName); return(-1); } else { /*** Create the data file ***/ sprintf(viewDataFilename,"%s%s",viewDirName,"/data"); if ((viewDataFile = fopen(viewDataFilename,"w")) == NULL) { fprintf(stderr," Error: Cannot create %s\n",viewDataFilename); perror("fopen"); return(-1); } else { /*** write out the view3DStruct stuff ***/ fprintf(viewDataFile,"%d\n",viewData.typeOf3D); fprintf(viewDataFile,"%g %g %g %g %g %g\n", viewData.xmin,viewData.xmax,viewData.ymin,viewData.ymax, viewData.zmin,viewData.zmax); fprintf(viewDataFile,"%s\n",viewport->title); fprintf(viewDataFile,"%g %g %g %g %g %g %g %g\n",viewport->deltaX, viewport->deltaY,viewport->scale, viewport->scaleX,viewport->scaleY,viewport->scaleZ, viewport->theta,viewport->phi); fprintf(viewDataFile,"%d %d %d %d\n",vwInfo.x,vwInfo.y,vwInfo.width, vwInfo.height); fprintf(viewDataFile,"%d %d %d %d %d %d %d\n",viewport->haveControl, viewData.style, viewport->axesOn, viewport->hueOffset,viewport->numberOfHues, viewport->diagonals, viewData.outlineRenderOn); fprintf(viewDataFile,"%g %g %g %g\n",viewport->lightVector[0], viewport->lightVector[1], viewport->lightVector[2], viewport->translucency); fprintf(viewDataFile,"%d %g\n",viewData.perspective, viewData.eyeDistance); /* write out the generalized 3D components */ fprintf(viewDataFile,"%d\n",viewData.numOfPoints); for (i=0; i<viewData.numOfPoints; i++) { aPt = refPt3D(viewData,i); fprintf(viewDataFile,"%g %g %g %g\n",aPt->x, aPt->y, aPt->z, aPt->c); } fprintf(viewDataFile,"%d\n",viewData.lllp.numOfComponents); anLLPoint = viewData.lllp.llp; for (i=0; i<viewData.lllp.numOfComponents; i++,anLLPoint++) { fprintf(viewDataFile,"%d %d\n",anLLPoint->prop.closed, anLLPoint->prop.solid); fprintf(viewDataFile,"%d\n",anLLPoint->numOfLists); anLPoint = anLLPoint->lp; for (j=0; j<anLLPoint->numOfLists; j++,anLPoint++) { fprintf(viewDataFile,"%d %d\n",anLPoint->prop.closed, anLPoint->prop.solid); fprintf(viewDataFile,"%d\n",anLPoint->numOfPoints); anIndex = anLPoint->indices; for (k=0; k<anLPoint->numOfPoints; k++,anIndex++) { fprintf(viewDataFile,"%d\n",*anIndex); } /* for points in LPoints (k) */ } /* for LPoints in LLPoints (j) */ } /* for LLPoints in LLLPoints (i) */ fclose(viewDataFile); } /* else was able to open file under the given filename */ /* write out special files */ for (ii=1; ii<numBits; ii++) { /* write.h is one-based */ if (thingsToWrite & (1<<ii)) { switch (ii) { case Bitmap: /*** Create the pixmap (bitmaps need leaf name) ***/ sprintf(viewBitmapFilename,"%s%s%s",viewDirName,"/","image.bm"); XGetWindowAttributes(dsply,viewport->viewWindow,&vwInfo); code = XWriteBitmapFile(dsply,viewBitmapFilename, viewport->titleWindow,vwInfo.width, vwInfo.height+vwInfo.border_width+20,-1,-1); break; case Pixmap: /*** Create the pixmap (bitmaps need leaf name) ***/ sprintf(viewPixmapFilename,"%s%s%s",viewDirName,"/","image.xpm"); XGetWindowAttributes(dsply,viewport->viewWindow,&vwInfo); write_pixmap_file(dsply,scrn,viewPixmapFilename, viewport->titleWindow,0,0,vwInfo.width, vwInfo.height+titleHeight); break; case Image: /*** Create the image (bitmaps need leaf name) ***/ writeImage = yes; sprintf(viewPixmapFilename,"%s%s%s",viewDirName,"/","image.xpm"); XResizeWindow(dsply,viewport->titleWindow,300,300+titleHeight); XResizeWindow(dsply,viewport->viewWindow,300,300); viewport->hueTop = totalHues-1; viewport->hueOffset = 0; viewport->numberOfHues = viewport->hueTop - viewport->hueOffset; firstTime = 1; if (viewData.style == transparent) { viewData.style = render; viewData.outlineRenderOn = 1; } else { if (viewData.style == render) viewData.outlineRenderOn = 1; } drawViewport(Xoption); writeTitle(); XGetWindowAttributes(dsply,viewport->viewWindow,&vwInfo); write_pixmap_file(dsply,scrn,viewPixmapFilename, viewport->titleWindow,0,0,vwInfo.width, vwInfo.height+titleHeight); viewport->monoOn = 1; maxGreyShade = XInitShades(dsply,scrn); firstTime = 1; drawViewport(Xoption); writeTitle(); sprintf(viewBitmapFilename,"%s%s%s",viewDirName,"/","image.bm"); code = XWriteBitmapFile(dsply,viewBitmapFilename, viewport->titleWindow,vwInfo.width, vwInfo.height+vwInfo.border_width+20,-1,-1); writeImage = no; break; case Postscript: /*** Create postscript output for viewport (in axiom3D.ps) ***/ sprintf(PSfilename,"%s%s",viewDirName,"/axiom3D.ps"); if (PSInit(viewport->viewWindow,viewport->titleWindow) == psError) return(-1); drawViewport(PSoption); /* write new script file in /tmp */ if (PSCreateFile(viewBorderWidth,viewport->viewWindow, viewport->titleWindow, viewport->title) == psError) return(-1); /* concat script & proc into axiom3D.ps */ break; } /* switch on ii */ } /* if thingsToWrite >> ii */ } /* for ii */ return(0); } /* else create directory okay */ }
int XInitSpadFill(Display *dsply, int scr, Colormap * mapOfColors, int * hues, int *solid, int * dithered, int * shades) { int maxDither; XColor BlackColor, WhiteColor; XColor retColor; int maxSolid; SpadFillInit = 1; /* * First thing I should do is get the GC's */ stippleGC = XCreateGC(dsply, RootWindow(dsply, scr), 0, NULL); solidGC = XCreateGC(dsply, RootWindow(dsply, scr), 0, NULL); XSetArcMode(dsply, solidGC, ArcPieSlice); XSetArcMode(dsply, stippleGC, ArcPieSlice); cmap = DefaultColormap(dsply, scr); *mapOfColors = cmap; XAllocNamedColor(dsply, cmap, "Black", &BlackColor, &retColor); XAllocNamedColor(dsply, cmap, "White", &WhiteColor, &retColor); black = BlackColor.pixel; white = WhiteColor.pixel; /* * Now I check to see if I am on a monochrome display. If so then I * simply set totalHues to be one, and total Shades to be 2. I also have * to allocate balck and white colors. This I put into the first two * memory locations of spadcolors. * * was if(DisplayPlanes(dsply, scr) < 2) changed temporarily to < 8 * because of problems with screens with 4 planes . Now if we don't have * 8 planes to play with we switch to monochrome */ if (DisplayPlanes(dsply, scr) < 8) { *dithered = totalDithered = maxGreyShade = XInitShades(dsply, scr); maxDither = *dithered - 1; spadColors = (unsigned long *) malloc(2 * sizeof(unsigned long)); spadColors[0] = BlackColor.pixel; spadColors[1] = WhiteColor.pixel; *hues = totalHues = 1; *solid = totalSolid = 2; *shades = totalColors = totalShades = totalDithered; return (totalColors); } /* * Now I have to get all the spad colors as every good spad program * should Now I should initialize the dithering routines */ *dithered = totalDithered = XInitDither(dsply, scr, stippleGC, black, white); maxDither = *dithered - 1; if ((maxSolid = makeColors(dsply, scr, &cmap, &spadColors, &totalSolid)) > 0) { *solid = totalSolid + 2; *hues = totalHues = maxSolid / totalSolid; *shades = totalShades = (totalSolid + 1) * (totalDithered - 1) + 1; totalColors = totalHues * totalShades; return (totalColors); } else { /* * makeColors managed to fail -- switch to mono */ *dithered = totalDithered = maxGreyShade = XInitShades(dsply, scr); maxDither = *dithered - 1; spadColors = (unsigned long *) malloc(2 * sizeof(unsigned long)); spadColors[0] = BlackColor.pixel; spadColors[1] = WhiteColor.pixel; *hues = totalHues = 1; *solid = totalSolid = 2; *shades = totalColors = totalShades = totalDithered; return (totalColors); } }