ftp.nice.ch/pub/next/graphics/3d/geomview.1.4.1.s.tar.gz#/Geomview/src/bin/clipboard/clipgl.c

This is clipgl.c in view mode; [Download] [Up]

#include <stdio.h>
#include <math.h>
#include "mg.h"
#include "mggl.h"
#include "geom.h"
#include "mibload.h"
#include "clip.h"
#include <gl/gl.h>
#include <X11/Xirisw/GlxMDraw.h>

void wininit(Widget, XtPointer,
	GlxDrawCallbackStruct *);
void winexpose(Widget, XtPointer,
	GlxDrawCallbackStruct *);

extern Geom *theObject;

ColorA white = {1.0, 1.0, 1.0, 1.0};
ColorA red = {1.0, 0, 0, 1.0};
ColorA darkgray = {0.2, 0.2, 0.2};
ColorA darkblue = {0, 0, .2, 1.0};
Point lightpos1 = {1, .3, .7, 0.0};
Point lightpos2 = {-0.5, 1.0, 0.5, 0.0};
ColorA lightcol2 = {0.6, 0.6, 0.6, 1.0};
Point lightpos3 = {0.0, -2.0, 1.0, 0.0};
ColorA lightcol3 = {0.4, 0.4, 0.4, 1.0};


Camera		*theCamera;
Appearance	*theAppearance;
LmLighting	*lightingModel;
LtLight		*theLight;
mgcontext	*mgctx;

void clipboard_init(Widget parent)
{
  int           n;
  Arg           args[20];
  Widget	MG_DrawArea;

  static GLXconfig db_rgb_desc[] = {
   { GLX_NORMAL, GLX_RGB, TRUE},
   { GLX_NORMAL, GLX_DOUBLE, FALSE},
   { GLX_NORMAL, GLX_ZSIZE, GLX_NOCONFIG },
   { 0,0,0 }
  };

  n = 0;
  XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  XtSetArg (args[n], XmNleftOffset, 110);n++;
  XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  XtSetArg (args[n], XmNtopOffset, 6);n++;
  XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  XtSetArg (args[n], XmNrightOffset, 7);n++;
  XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  XtSetArg (args[n], XmNbottomOffset, 8);n++;
  XtSetArg (args[n], XmNhighlightThickness, 0); n++;
  XtSetArg (args[n], GlxNglxConfig, db_rgb_desc); n++;

  MG_DrawArea = GlxCreateMDraw(parent, "mg", args, n);

  XtManageChild(MG_DrawArea);

  mmode(MVIEWING);

  XtAddCallback(MG_DrawArea, GlxNginitCallback, wininit, 0);
  XtAddCallback(MG_DrawArea, GlxNexposeCallback, winexpose, 0);

  mgdevice_GL();

  theObject = NULL;

  theCamera = CamCreate( CAM_FOV, 40.0, CAM_END );

  lightingModel = LmCreate( LM_AMBIENT, &darkgray,
			    LM_REPLACELIGHTS, 1,
			    LM_END);

  theLight = LtCreate( LT_COLOR, &white,
		       LT_POSITION, &lightpos1,
		       LT_INTENSITY, 1.0, LT_END);

  LtAppend(lightingModel, theLight);

  theLight = LtCreate( LT_COLOR, &lightcol2,
		       LT_POSITION, &lightpos2,
		       LT_INTENSITY, 1.0, LT_END);

  LtAppend(lightingModel, theLight);

  theLight = LtCreate( LT_COLOR, &lightcol3,
		       LT_POSITION, &lightpos3,
		       LT_INTENSITY, 1.0, LT_END);

  LtAppend(lightingModel, theLight);

  theAppearance = ApCreate( AP_DO, APF_FACEDRAW | APF_SHADING | APF_EDGEDRAW,
			    AP_MtSet, MT_Kd, 1.0, MT_DIFFUSE, &white, MT_END,
			    AP_LGT, lightingModel,
			    AP_SHADING, APF_FLAT, AP_END);

  mgctx = mgctxcreate(MG_GLXDISPLAY, XtDisplay(MG_DrawArea),
	      MG_GLWINID, XtWindow(MG_DrawArea),
	      MG_CAMERA, theCamera, MG_BACKGROUND, &darkblue,
	      MG_APPEAR, theAppearance, MG_END);

/*  theObject = GeomLoad("dodec.quad");*/

}

void wininit(Widget w, XtPointer stuff, GlxDrawCallbackStruct *data)
{

  GLXwinset(XtDisplay(w), data->window);
  fprintf(stderr,"init!\n");
/*  color(GREEN);
  clear();*/

}

void redraw(Widget w)
{
  GLXwinset(XtDisplay(w), XtWindow(w));
  mgreshapeviewport();
  mgworldbegin();
  GeomDraw(theObject);
  mgworldend();
  gflush();
}


void winexpose(Widget w, XtPointer stuff, GlxDrawCallbackStruct *data)
{
  static float p1[] = {0.0, 0.0, 0.0};
  static float p2[] = {800.0, 800.0, 0.0};

  GLXwinset(XtDisplay(w), data->window);
  mgreshapeviewport();
  mgworldbegin();
  GeomDraw(theObject);
  mgworldend();
  gflush();
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.