diff options
author | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
commit | ab8cc85adde879fb963c94d15675783f2cf4b183 (patch) | |
tree | c202482327f474583b750b2c45dedfc4e4312b1d /src/graph/viewman/fun3D.c.pamphlet | |
download | open-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz |
Initial population.
Diffstat (limited to 'src/graph/viewman/fun3D.c.pamphlet')
-rw-r--r-- | src/graph/viewman/fun3D.c.pamphlet | 396 |
1 files changed, 396 insertions, 0 deletions
diff --git a/src/graph/viewman/fun3D.c.pamphlet b/src/graph/viewman/fun3D.c.pamphlet new file mode 100644 index 00000000..bb88e710 --- /dev/null +++ b/src/graph/viewman/fun3D.c.pamphlet @@ -0,0 +1,396 @@ +\documentclass{article} +\usepackage{axiom} +\begin{document} +\title{\$SPAD/src/graph/viewman fun3D.c} +\author{The Axiom Team} +\maketitle +\begin{abstract} +\end{abstract} +\eject +\tableofcontents +\eject +\section{License} +<<license>>= +/* +Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of The Numerical ALgorithms Group Ltd. nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +@ +<<*>>= +<<license>> + +#define _FUN3D_C +#include "axiom-c-macros.h" +#include "useproto.h" + +#include <stdlib.h> +#include <unistd.h> +#include <stdio.h> +#include <string.h> + +#include "viewman.h" +#include "mode.h" +#include "actions.h" + +#include "util.H1" +#include "sockio-c.H1" +#include "fun3D.H1" +#include "make3D.H1" +#include "readView.H1" + +void +#ifdef _NO_PROTO +funView3D(viewCommand) + int viewCommand; +#else +funView3D(int viewCommand) +#endif +{ + + int code; + int viewPID; + float f1,f2,f3,f4; + int i1,i2; + viewManager *viewport; + + viewPID = get_int(spadSock); + + viewport = viewports; + while ((viewport) && (viewport->PID != viewPID)) + viewport = viewport->nextViewport; + + if (viewport) { + send_int(spadSock,1); /* acknowledge to spad */ + + viewmanEvent.xclient.window = viewport->viewWindow; + + code = write(viewport->viewOut,&viewCommand,intSize); + switch (viewCommand) { + case rotate: + f1 = get_float(spadSock); + f2 = get_float(spadSock); + code = write(viewport->viewOut,&f1,floatSize); + code = write(viewport->viewOut,&f2,floatSize); + break; + + case zoom: + f1 = get_float(spadSock); + code = write(viewport->viewOut,&f1,floatSize); + break; + + case zoomx: + f1 = get_float(spadSock); + f2 = get_float(spadSock); + f3 = get_float(spadSock); + code = write(viewport->viewOut,&f1,floatSize); + code = write(viewport->viewOut,&f2,floatSize); + code = write(viewport->viewOut,&f3,floatSize); + break; + + case translate: + f1 = get_float(spadSock); + f2 = get_float(spadSock); + code = write(viewport->viewOut,&f1,floatSize); + code = write(viewport->viewOut,&f2,floatSize); + break; + + case modifyPOINT: + i1 = get_int(spadSock); + f1 = get_float(spadSock); + f2 = get_float(spadSock); + f3 = get_float(spadSock); + f4 = get_float(spadSock); + code = write(viewport->viewOut,&i1,intSize); + code = write(viewport->viewOut,&f1,floatSize); + code = write(viewport->viewOut,&f2,floatSize); + code = write(viewport->viewOut,&f3,floatSize); + code = write(viewport->viewOut,&f4,floatSize); + break; + + case hideControl: + i1 = get_int(spadSock); + code = write(viewport->viewOut,&i1,intSize); + break; + + case axesOnOff: + case perspectiveOnOff: + case region3D: + case clipRegionOnOff: + case clipSurfaceOnOff: + i1 = get_int(spadSock); + code = write(viewport->viewOut,&i1,intSize); + break; + + case eyeDistanceData: + case hitherPlaneData: + f1 = get_float(spadSock); + code = write(viewport->viewOut,&f1,floatSize); + break; + + case colorDef: + i1 = get_int(spadSock); + i2 = get_int(spadSock); + code = write(viewport->viewOut,&i1,intSize); + code = write(viewport->viewOut,&i2,intSize); + break; + + case moveViewport: + i1 = get_int(spadSock); + i2 = get_int(spadSock); + code = write(viewport->viewOut,&i1,intSize); + code = write(viewport->viewOut,&i2,intSize); + break; + + case resizeViewport: + i1 = get_int(spadSock); + i2 = get_int(spadSock); + code = write(viewport->viewOut,&i1,intSize); + code = write(viewport->viewOut,&i2,intSize); + break; + + case transparent: + case opaqueMesh: + case render: + break; + + case lightDef: + f1 = get_float(spadSock); + f2 = get_float(spadSock); + f3 = get_float(spadSock); + code = write(viewport->viewOut,&f1,floatSize); + code = write(viewport->viewOut,&f2,floatSize); + code = write(viewport->viewOut,&f3,floatSize); + break; + + case translucenceDef: + f1 = get_float(spadSock); + code = write(viewport->viewOut,&f1,floatSize); + break; + + + case changeTitle: + s1 = get_string(spadSock); + i1 = strlen(s1); + code = write(viewport->viewOut,&i1,intSize); + code = write(viewport->viewOut,s1,i1); + break; + + case writeView: + s1 = get_string(spadSock); + i1 = strlen(s1); + code = write(viewport->viewOut,&i1,intSize); + code = write(viewport->viewOut,s1,i1); + /* write out the types of things to be written */ + i2 = get_int(spadSock); + code = write(viewport->viewOut,&i2,intSize); + while (i2) { + i2 = get_int(spadSock); + code = write(viewport->viewOut,&i2,intSize); + } + break; + + case diagOnOff: + i1 = get_int(spadSock); + code = write(viewport->viewOut,&i1,intSize); + break; + + case outlineOnOff: + i1 = get_int(spadSock); + code = write(viewport->viewOut,&i1,intSize); + break; + + case spadPressedAButton: + i1 = get_int(spadSock); + code = write(viewport->viewOut,&i1,intSize); + break; + } /* switch */ + /*** get acknowledge from viewport */ + + code = readViewport(viewport,&acknow,intSize); + send_int(spadSock,1); /* acknowledge to spad */ + } else { /* if (viewport) */ + send_int(spadSock,-1); /* send error value in acknowledge to spad */ + } + +} +void +#ifdef _NO_PROTO +forkView3D(typeOfViewport) + int typeOfViewport; +#else +forkView3D(int typeOfViewport) +#endif +{ + + viewManager *viewport; + int childPID, code; + int i; + + view3DStruct doView3D; + int pipe0[2],pipe1[2]; + int *anIndex; + + char envAXIOM[100],runView[100]; + int j,k; + LLPoint *anLLPoint; + LPoint *anLPoint; + +#ifdef DEBUG + fprintf(stderr,"Pipe calls for 3D\n"); +#endif + check(pipe(pipe0)); + check(pipe(pipe1)); + +#ifdef DEBUG + fprintf(stderr,"Fork routine for 3D\n"); +#endif + switch(childPID = check(fork())) { + + case -1: + printf("Cannot create a new process - you probably have too many things running already.\n"); + return; + + case 0: + /***************************** + * child process * + *****************************/ + /* map pipes from viewport manager to standard input and output */ +#ifdef DEBUG + fprintf(stderr,"Mapping pipes to standard I/O in 3D\n"); +#endif + check(dup2(pipe0[0],0)); + check(dup2(pipe1[1],1)); + close(pipe0[0]); + close(pipe0[1]); + close(pipe1[0]); + close(pipe1[1]); + +#ifdef DEBUG + fprintf(stderr,"Executing ThreeDimensionalViewport process\n"); +#endif + sprintf(envAXIOM,"%s",getenv("AXIOM")); + sprintf(runView,"%s%s",envAXIOM,"/lib/view3D"); + check(execl(runView,runView,NULL)); + fprintf(stderr,"The viewport manager could not execute view3D.\nCheck that view3D is on your PATH.\n"); + exit(-1); + + default: + /****************************** + * parent process * + ******************************/ + if (!(viewport = (viewManager *)malloc(sizeof(viewManager)))) { + printf("Ran out of memory trying to create a new viewport process.\n"); + return; + } + viewport->viewType = typeOfViewport; + viewport->PID = childPID; + + /* set up pipes to child process */ + close(pipe0[0]); + close(pipe1[1]); + viewport->viewIn = pipe1[0]; + viewport->viewOut = pipe0[1]; + + /* add new viewport to global list */ + viewport->nextViewport = viewports; + viewports = viewport; + + if (viewport->viewIn <0) { + fprintf(stderr, + "The viewport manager could not create connection to a 3D viewport window. Try again.\n"); + return; + } else { + + code = readViewport(viewport,&acknow,intSize); + + if (code < 0) { + fprintf(stderr, + "The viewport manager could not read from a 3D viewport window\ncode=%d\nack=%d\n",code,acknow); + return; + } + } + + makeView3DFromSpadData(&doView3D,typeOfViewport); + + /* tell the child that parent is a viewport manager */ + i = no; + write(viewport->viewOut,&i,sizeof(int)); + + write(viewport->viewOut,&doView3D,sizeof(view3DStruct)); + + i = strlen(doView3D.title)+1; + write(viewport->viewOut,&i,intSize); /* tell the length of the title to child */ + write(viewport->viewOut,doView3D.title,i); /* tell the title to the child */ + write(viewport->viewOut,&(doView3D.lightVec[0]),floatSize); + write(viewport->viewOut,&(doView3D.lightVec[1]),floatSize); + write(viewport->viewOut,&(doView3D.lightVec[2]),floatSize); + + /* send generalized 3D components */ + write(viewport->viewOut,&(doView3D.numOfPoints),intSize); + for (i=0; i<doView3D.numOfPoints; i++) { + write(viewport->viewOut,&(refPt(doView3D,i)->x),floatSize); + write(viewport->viewOut,&(refPt(doView3D,i)->y),floatSize); + write(viewport->viewOut,&(refPt(doView3D,i)->z),floatSize); + write(viewport->viewOut,&(refPt(doView3D,i)->c),floatSize); + } + write(viewport->viewOut,&(doView3D.lllp.numOfComponents),intSize); + anLLPoint = doView3D.lllp.llp; + for (i=0; i<doView3D.lllp.numOfComponents; i++,anLLPoint++) { + write(viewport->viewOut,&(anLLPoint->prop.closed),intSize); + write(viewport->viewOut,&(anLLPoint->prop.solid),intSize); + write(viewport->viewOut,&(anLLPoint->numOfLists),intSize); + anLPoint = anLLPoint->lp; + for (j=0; j<anLLPoint->numOfLists; j++,anLPoint++) { + write(viewport->viewOut,&(anLPoint->prop.closed),intSize); + write(viewport->viewOut,&(anLPoint->prop.solid),intSize); + write(viewport->viewOut,&(anLPoint->numOfPoints),intSize); + anIndex = anLPoint->indices; + for (k=0; k<anLPoint->numOfPoints; k++,anIndex++) + write(viewport->viewOut,anIndex,intSize); + } /* for LPoints in LLPoints (j) */ + } /* for LLPoints in LLLPoints (i) */ + + /*** get acknowledge from viewport */ + code = readViewport(viewport,&(viewport->viewWindow),sizeof(Window)); + sleep(1); /* wait a second...*/ + send_int(spadSock,viewport->PID); /* acknowledge to spad */ + + } /* switch */ + +} /* forkView3D() */ + + +@ +\eject +\begin{thebibliography}{99} +\bibitem{1} nothing +\end{thebibliography} +\end{document} |