Beispiel #1
0
int
main(int argc, char **argv)
{

   XGCValues    values;

   XEvent       report;
   int          x0=0, y0=0, width=300, height=200, border=3;

   char         *fontname = "6x13";
   XFontStruct  *dsp_font;

   Window       menu;
   char         *str1 = "     Print out the PostScript file?    ",
                *str0 = "Generate a PostScript file (OUTPUT.ps)?";
   int          m_width, m_height, flag=yes;

   /* open display */
   if ((dsply = XOpenDisplay(NULL)) == NULL) {
     printf("Can't open display NULL\n");
     exit(-1);
   }

   scrn = DefaultScreen(dsply);

   /* access font */
   Gdraws_load_font(&dsp_font, fontname);

   values.background = WhitePixel(dsply, scrn);
   values.foreground = BlackPixel(dsply, scrn);

   gc = XCreateGC(dsply, RootWindow(dsply, scrn),
                  (GCForeground | GCBackground), &values);
   PSGlobalInit();      /* must initiate before using G/PS functions */
   PSCreateContext(gc, "gc", psNormalWidth, psButtCap,
                   psMiterJoin, psWhite, psBlack);
   XSetFont(dsply, gc, dsp_font->fid);
   gc1 = XCreateGC(dsply, RootWindow(dsply, scrn),
                   (GCForeground | GCBackground), &values);
   PSCreateContext(gc1, "gc1", psNormalWidth, psButtCap, psMiterJoin,
                   psWhite, psBlack);
   XSetFont(dsply, gc1, dsp_font->fid);

   if (!(viewport = (viewPoints *)malloc(sizeof(viewPoints)))) {
     fprintf(stderr,"Ran out of memory (malloc) trying to create a viewport.\n");
     exit(-1);
   }

   viewport->titleWindow = XCreateSimpleWindow(dsply, RootWindow(dsply,scrn),
                                               x0, y0, width+6,
                                               height+32+height/4, border,
                                               BlackPixel(dsply, scrn),
                                               WhitePixel(dsply, scrn));

   viewport->viewWindow = XCreateSimpleWindow(dsply, viewport->titleWindow,
                                              x0, y0+20, width, height, border,
                                              BlackPixel(dsply, scrn),
                                              WhitePixel(dsply, scrn));

   strcpy(viewport->title, "what is a test title?");

   m_width = width; m_height = height/4;
   menu = XCreateSimpleWindow(dsply, viewport->titleWindow, x0, y0+20+height+6,
                              m_width, m_height, border,
                              BlackPixel(dsply,scrn), WhitePixel(dsply,scrn));

   XSelectInput(dsply, viewport->viewWindow,
                KeyPressMask|ButtonPressMask|ExposureMask);
   XSelectInput(dsply, viewport->titleWindow, KeyPressMask|ExposureMask);
   XSelectInput(dsply, menu, KeyPressMask|ButtonPressMask|ExposureMask);

   XMapWindow(dsply, viewport->viewWindow);
   XMapWindow(dsply, viewport->titleWindow);
   XFlush(dsply);

   while (yes) {
      XNextEvent(dsply, &report);
      switch (report.type) {

         case Expose:
                if (report.xexpose.window==viewport->titleWindow) {
                  if (GDrawImageString(gc, viewport->titleWindow,
                                       20, 15, viewport->title,
                                       strlen(viewport->title),X) == psError)
                    printf("screen draw image string failed.\n");
                  if (Gdraws_data(X) == psError)
                    printf("screen Gdraws_data failed.\n");
                }
                if (report.xexpose.window==viewport->viewWindow) {
                  if (Gdraws_data(X) == psError)
                    printf("screen Gdraws_data failed.\n");
                }
                else if (report.xexpose.window==menu) {
                  if (flag)
                    Gdraws_draw_menu(menu, str0, m_width, m_height);
                  else
                    Gdraws_draw_menu(menu, str1, m_width, m_height);
                }
                break;

         case ButtonPress:
                if (report.xbutton.window==viewport->viewWindow) {
                  XMapWindow(dsply, menu);
                  XFlush(dsply);
                }
                else if (report.xbutton.window==menu && flag) {
                       XUnmapWindow(dsply, menu);
                       if (Gdraws_pressed_yes(m_width, m_height, report.xbutton.x,
                           report.xbutton.y)) {
                         flag=no;
                         XMapWindow(dsply, menu);
                         PSInit(viewport->viewWindow, viewport->titleWindow);
                         if (Gdraws_data(PS) != psError)
                           PSCreateFile(3,viewport->viewWindow,
                                        viewport->titleWindow,viewport->title);
                         else printf("PS Gdraws_data failed.\n");
                       }
                     }
                else if (report.xbutton.window==menu && !flag) {
                       XUnmapWindow(dsply, menu);
                       if (Gdraws_pressed_yes(m_width, m_height, report.xbutton.x,
                           report.xbutton.y))
                         system("print OUTPUT.ps");
                       flag = yes;
                     }
                break;

         case KeyPress:
                if (report.xkey.window==viewport->viewWindow ||
                    report.xkey.window==viewport->titleWindow) {
                  XFreeGC(dsply, gc);
                  XFreeGC(dsply, gc1);
                  XCloseDisplay(dsply);
                  PSClose();
                  exit(1);
                }
                else if (report.xkey.window==menu) XUnmapWindow(dsply, menu);

         default:
                break;
      }
   }
   return 0;
}
Beispiel #2
0
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 */

}
Beispiel #3
0
int
writeViewport(int thingsToWrite)
{

    FILE              *viewDataFile;
    char              viewDirName[80],
                      viewBitmapFilename[80],viewDataFilename[80],command[80];
    int               i,j,k,code,ii;
    pointListStruct   *aList;
    pointStruct       *aPoint;
    XWindowAttributes vwInfo;

    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");
    if (system(command)) {
        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 view2DStruct stuff ***/
            fprintf(viewDataFile,"%d\n",view2DType);
            fprintf(viewDataFile,"%s\n",viewport->title);
            fprintf(viewDataFile,"%d %d %d %d\n",vwInfo.x,vwInfo.y,
                    vwInfo.width,vwInfo.height);
            for (i=0; i<maxGraphs; i++) {
                fprintf(viewDataFile,"%d\n",graphArray[i].key);
                fprintf(viewDataFile,"%g %g\n",
                        graphStateArray[i].scaleX,graphStateArray[i].scaleY);
                fprintf(viewDataFile,"%g %g\n",
                        graphStateArray[i].deltaX,graphStateArray[i].deltaY);
                fprintf(viewDataFile,"%g %g\n",
                        graphStateArray[i].centerX,graphStateArray[i].centerY);
                fprintf(viewDataFile,"%d %d %d %d %d %d %d\n",
                        graphStateArray[i].pointsOn,graphStateArray[i].connectOn,
                        graphStateArray[i].splineOn,
                        graphStateArray[i].axesOn, graphStateArray[i].axesColor,
                        graphStateArray[i].unitsOn, graphStateArray[i].unitsColor);
                fprintf(viewDataFile,"%d %d\n",
                        graphStateArray[i].showing,graphStateArray[i].selected);
            }
            fclose(viewDataFile);
            for (i=0; i<maxGraphs; i++) {
                if (graphArray[i].key) {
                    sprintf(viewDataFilename,"%s%s%d",viewDirName,"/graph",i);
                    if ((viewDataFile = fopen(viewDataFilename,"w")) == NULL) {
                        fprintf(stderr,"   Error: Cannot create %s\n",viewDataFilename);
                        perror("fopen");
                        return(-1);
                    } else {
                        fprintf(viewDataFile,"%g %g %g %g\n",
                                graphArray[i].xmin,graphArray[i].ymin,
                                graphArray[i].xmax,graphArray[i].ymax);
                        fprintf(viewDataFile,"%g %g\n",
                                graphArray[i].xNorm,graphArray[i].yNorm);
                        fprintf(viewDataFile,"%g %g\n",
                                graphArray[i].originX,graphArray[i].originY);
                        fprintf(viewDataFile,"%g %g\n",
                                graphArray[i].spadUnitX,graphArray[i].spadUnitY);
                        fprintf(viewDataFile,"%g %g\n",
                                graphArray[i].unitX,graphArray[i].unitY);
                        fprintf(viewDataFile,"%d\n",graphArray[i].numberOfLists);
                        for (j=0,aList=graphArray[i].listOfListsOfPoints;
                                j<graphArray[i].numberOfLists;
                                j++, aList++) {
                            fprintf(viewDataFile,"%d\n",aList->numberOfPoints);
                            fprintf(viewDataFile,"%d %d %d\n",
                                    aList->pointColor,aList->lineColor,aList->pointSize);
                            for (k=0,aPoint=aList->listOfPoints;
                                    k<aList->numberOfPoints;
                                    k++,aPoint++)
                                fprintf(viewDataFile,"%g %g %g %g\n",
                                        aPoint->x,aPoint->y,aPoint->hue,aPoint->shade);
                        } /* for j, aList */
                        fclose(viewDataFile);
                    } /* else graph i */
                } /* if */
            } /* for */
        } /* else */

        /* write out special files */
        for (ii=1; ii<numBits; ii++) {   /* write.h is one-based */
            if (thingsToWrite & (1<<ii)) {
                switch (ii) {
                case Pixmap:
                    /*** Create the pixmap (bitmaps need leaf name) ***/
                    sprintf(viewBitmapFilename,"%s%s",viewDirName,"/image.xpm");
                    XGetWindowAttributes(dsply,viewport->viewWindow,&vwInfo);
                    write_pixmap_file(dsply,scrn,viewBitmapFilename,
                                      viewport->titleWindow,0,0,vwInfo.width,
                                      vwInfo.height+titleHeight);
                    break;
                case Bitmap:
                    /*** Create the bitmap (bitmaps need leaf name) ***/
                    sprintf(viewBitmapFilename,"%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 Image:
                    /*** Create the pixmap (bitmaps need leaf name) ***/
                    sprintf(viewBitmapFilename,"%s%s",viewDirName,"/image.xpm");
                    XResizeWindow(dsply,viewport->titleWindow,300,300+titleHeight);
                    XResizeWindow(dsply,viewport->viewWindow,300,300);
                    XGetWindowAttributes(dsply,viewport->viewWindow,&vwInfo);
                    drawViewport(Xoption);
                    writeTitle();
                    write_pixmap_file(dsply,scrn,viewBitmapFilename,
                                      viewport->titleWindow,0,0,vwInfo.width,
                                      vwInfo.height+titleHeight);
                    /*** Create the bitmap (bitmaps need leaf name) ***/
                    mono = 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);
                    mono = 0;
                    break;

                case Postscript:
                    /*** Create postscript output for viewport (in axiom2D.ps) ***/
                    sprintf(PSfilename,"%s%s",viewDirName,"/axiom2D.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 axiom2D.ps */
                    break;

                } /* switch on ii */
            }  /* if thingsToWrite >> ii */
        }  /* for ii */

        return(0);
    }    /* else create directory okay */

}