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

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

#include <stdio.h>
#include <math.h>
#include "3d.h"
#include "hinge.h"
#include "hui.h"
#include "lang.h"
#include "ooglutil.h"
#include "pickfunc.h"

static Lake *inlake;

DEFPICKFUNC("(pick COORDSYS GEOMID G V E F P VI EI FI)",
	    coordsys,
	    id,
	    point, pn,
	    vertex, vn,
	    edge, en,
	    face, fn, 10,
	    ppath, ppn, 50,
	    vi,
	    ei, ein,
	    fi,
{
  handle_pick(id, &point, vn>0, &vertex, en>0, edge);
  return Lt;
})

#if 0
LObject *Lpicked(Lake *lake, LList *args)
/* (picked name (gotx goty gotz) (vx vy vz) (e0x e0y e0z e1z e1y e1z))
   all arguments are optional;  v and e lists may be empty */
{
  LObject *arg;
  char *name = NULL;
  Point3 g,v,e[2];
  int gn=3, vn=3, en=6, picked;

  LDECLARE(("picked", lake, args,
	    LARG_OPTIONAL,
	    LARG_STRING, &name,
	    LARG_HOLD, LARG_FLOAT_ARRAY, &g, &gn,
	    LARG_HOLD, LARG_FLOAT_ARRAY, &v, &vn,
	    LARG_HOLD, LARG_FLOAT_ARRAY, e, &en,
	    LARG_END));

  handle_pick(name, &g, vn>0, &v, en>0, e);
  return Lt;
}
#endif

void
handle_pick(char *name, HPoint3 *got,
	    int vert, HPoint3 *v, int edge, HPoint3 e[])
{
  int n;
  
  if (name) {
    if (sscanf(name, "geom%d", &n) != 1) return;
    TmCopy(TT[n], BaseT);
    if (edge) {
      DefineAxis(&e[0], &e[1]);
    }
    ShowAxis();
  }
  
  if (haveaxis) {
    int faceno, edgetest;
    char buf[80];
    
    
    faceno = -1;
    if (!edge && !vert) {
      faceno = WhichFace(got, *(TT[n]), pl);
      if (faceno >= 0) {
	edgetest = PolyContainsEdge( currentedge,
				    *(TT[n]), &(pl->p[faceno]) );
	if (edgetest) {
	  TmCopy(TT[n], BaseT);
	  HingeIt(edgetest);
	}
      }
      
    }
    
    if (faceno >= 0) {
      sprintf(buf, "face %1d of geom %1d; edgetest->%1d\n",
	      faceno, n, edgetest);
    } else {
      sprintf(buf, "no face\n");
    }
    hui_message(buf);
  }
}


LangInit()
{
  inlake = LakeDefine(stdin, stdout, NULL);

  LInit();
  LDefun("pick",  Lpick, Hpick);
}


void
Input()
{
  LObject *lit, *val;
  lit = LSexpr(inlake);
  val = LEval(lit);
  LFree(lit);
  LFree(val);
}

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