home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-08-11 | 65.9 KB | 2,545 lines |
- Newsgroups: comp.sources.misc
- From: casey@gauss.llnl.gov (Casey Leedom)
- Subject: v38i108: lic - LLNL Line Integral Convolution, v1.2, Part05/10
- Message-ID: <1993Aug12.013850.14159@sparky.sterling.com>
- X-Md4-Signature: fa57ed27a0dfb0a6ea8b2945d6efcaa1
- Sender: kent@sparky.sterling.com (Kent Landfield)
- Organization: Sterling Software
- Date: Thu, 12 Aug 1993 01:38:50 GMT
- Approved: kent@sparky.sterling.com
-
- Submitted-by: casey@gauss.llnl.gov (Casey Leedom)
- Posting-number: Volume 38, Issue 108
- Archive-name: lic/part05
- Environment: UNIX
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then feed it
- # into a shell via "sh file" or similar. To overwrite existing files,
- # type "sh file -c".
- # Contents: lic.1.2/avs/LIC.c lic.1.2/doc/siggraph93/paper.ps.A
- # Wrapped by kent@sparky on Wed Aug 11 19:38:04 1993
- PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
- echo If this archive is complete, you will see the following message:
- echo ' "shar: End of archive 5 (of 10)."'
- if test -f 'lic.1.2/avs/LIC.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lic.1.2/avs/LIC.c'\"
- else
- echo shar: Extracting \"'lic.1.2/avs/LIC.c'\" \(14330 characters\)
- sed "s/^X//" >'lic.1.2/avs/LIC.c' <<'END_OF_FILE'
- X/*
- X * $Header: /d/sisal/a/casey/tmp/lic/avs/RCS/LIC.c,v 1.18 1993/08/11 17:25:35 casey Exp $
- X */
- X
- X/*
- X * Copyright (c) 1993 The Regents of the University of California.
- X * All rights reserved.
- X *
- X * Redistribution and use in source and binary forms, with or without
- X * modification, are permitted provided that the following conditions
- X * are met:
- X * 1. Redistributions of source code must retain the above copyright
- X * notice, this list of conditions and the following disclaimer.
- X * 2. Redistributions in binary form must reproduce the above copyright
- X * notice, this list of conditions and the following disclaimer in the
- X * documentation and/or other materials provided with the distribution.
- X * 3. All advertising materials mentioning features or use of this software
- X * must display the following acknowledgement:
- X * This product includes software developed by the University of
- X * California, Lawrence Livermore National Laboratory and its
- X * contributors.
- X * 4. Neither the name of the University nor the names of its contributors
- X * may be used to endorse or promote products derived from this software
- X * without specific prior written permission.
- X *
- X * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- X * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- X * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- X * SUCH DAMAGE.
- X */
- X
- X#ifndef lint
- X static char rcsid[] = "$Header: /d/sisal/a/casey/tmp/lic/avs/RCS/LIC.c,v 1.18 1993/08/11 17:25:35 casey Exp $";
- X static char copyright[] =
- X "Copyright (c) 1993 The Regents of the University of California.\n"
- X "All rights reserved.\n";
- X#endif
- X
- X
- X/*
- X * AVS coroutine module interface to the LIC library. Only handles
- X * two-dimensional input and output fields.
- X */
- X
- X
- X#include <stdlib.h>
- X#include <unistd.h>
- X#include <errno.h>
- X#include <string.h>
- X#include <stdio.h>
- X#include <time.h>
- X#include <sys/times.h>
- X#include <sys/types.h>
- X
- X#include <math.h>
- X
- X#include <avs/avs.h>
- X#include <avs/field.h>
- X
- X#include <lic.h>
- X
- X
- X#ifndef M_PI
- X# define M_PI 3.141592653589793116
- X#endif
- X
- X
- X#ifdef OUTPUT_INTERMEDIATE_RESULTS
- X AVSfield_char *OutputImage;
- X#endif
- X
- X
- X#define LIC_ANIMATION_FRAMES 10 /* number of frames in an animation */
- X
- X
- X/*
- X * Local support routines.
- X */
- Xstatic int DescribeModule(void);
- Xstatic void UpdateStatus(double percent);
- Xstatic void ReportError(const char *message);
- X
- X
- Xint
- Xmain(int argc, char *argv[])
- X /*
- X * LIC AVS coroutine module main.
- X */
- X{
- X long clk_tck = sysconf(_SC_CLK_TCK);
- X
- X /*
- X * Tell AVS who and what we are.
- X */
- X AVScorout_init(argc, argv, DescribeModule);
- X
- X /*
- X * Loop forever waiting on module inputs and parameter changes. For each
- X * loop where both inputs are available, run LIC over them with the
- X * current parameters.
- X */
- X while (TRUE)
- X {
- X float ncells;
- X int p;
- X LIC *LICinstance;
- X
- X /*
- X * AVS interface input parameters.
- X */
- X AVSfield_char *itexture, *oimage;
- X AVSfield_float *ifield;
- X int length;
- X float *frequency;
- X int Vlength;
- X int Vspeed;
- X char *filter_name, *normalization_name;
- X int animate;
- X int Dr, Dg, Db, Da;
- X
- X /*
- X * Decoded AVS parameters and dummy placeholder.
- X */
- X char *dummy;
- X LIC_Filter filter;
- X int normalization;
- X
- X /* Wait for either a parameter change or input change */
- X AVScorout_wait();
- X
- X /* Fetch the module inputs */
- X (void)AVScorout_input(&itexture, &ifield,
- X &dummy, &filter_name,
- X &dummy, &normalization_name,
- X &dummy, &length, &frequency, &Vlength, &Vspeed,
- X &dummy, &animate,
- X &dummy, &Dr, &Dg, &Db, &Da,
- X &dummy);
- X
- X
- X /* decode filter type -- BOX is the default */
- X if (strcmp(filter_name, "Box") == 0)
- X filter = LIC_Box;
- X else if (strcmp(filter_name, "Ripple") == 0)
- X filter = LIC_Ripple;
- X else if (strcmp(filter_name, "Ramp") == 0)
- X filter = LIC_Ramp;
- X else if (strcmp(filter_name, "Selection") == 0)
- X filter = LIC_Select;
- X else
- X filter = LIC_Box;
- X
- X /* decode normalization type -- VARIABLE is the default */
- X if (strcmp(normalization_name, "Variable") == 0)
- X normalization = LIC_VARIABLE;
- X else if (strcmp(normalization_name, "Fixed") == 0)
- X normalization = LIC_FIXED;
- X else
- X normalization = LIC_VARIABLE;
- X
- X if (AVSparameter_changed("Filter type"))
- X {
- X /* change visibility of interface options based on filter type */
- X if (filter == LIC_Ripple)
- X {
- X AVSparameter_visible("Frequency", TRUE);
- X AVSparameter_visible("Variable speed filtering", TRUE);
- X AVSparameter_visible("Animate", TRUE);
- X }
- X else
- X {
- X AVSparameter_visible("Frequency", FALSE);
- X AVSparameter_visible("Variable speed filtering", FALSE);
- X AVSparameter_visible("Animate", FALSE);
- X }
- X }
- X
- X /* Don't really compute until we have both our input streams */
- X if (itexture == NULL || ifield == NULL)
- X continue;
- X
- X ncells = MAXX(ifield) * MAXY(ifield);
- X
- X /*
- X * Allocate space for output image, label it and set its extents.
- X */
- X {
- X int dims[2];
- X float min_extent[2], max_extent[2];
- X
- X dims[0] = MAXX(ifield);
- X dims[1] = MAXY(ifield);
- X oimage = (AVSfield_char *)
- X AVSdata_alloc("field 2D 4-vector 2-space byte", dims);
- X AVSfield_set_labels((AVSfield *)oimage, "alpha;red;green;blue", ";");
- X min_extent[0] = 0.0;
- X max_extent[0] = (float) MAXX(oimage) - 1.0;
- X min_extent[1] = 0.0;
- X max_extent[1] = (float) MAXY(oimage) - 1.0;
- X AVSfield_set_extent((AVSfield *)oimage, min_extent, max_extent);
- X# ifdef OUTPUT_INTERMEDIATE_RESULTS
- X OutputImage = oimage;
- X# endif
- X }
- X
- X /*
- X * Allow animation if and only if using the ripple filter ...
- X */
- X animate = animate && (filter == LIC_Ripple);
- X
- X /*
- X * Create an instance of the Line Integral Convolver object
- X */
- X LICinstance =
- X LIC_Create(itexture->data, MAXX(itexture), MAXY(itexture), 1,
- X ifield->data, MAXX(ifield), MAXY(ifield), 1,
- X oimage->data,
- X filter,
- X normalization,
- X FALSE,
- X (double)length,
- X (double)*frequency,
- X Vlength,
- X Vspeed && (filter == LIC_Ripple),
- X Dr, Dg, Db, Da,
- X UpdateStatus,
- X ReportError);
- X
- X
- X /*
- X * Loop over all the phases if the animate flag is true
- X * else only do one iteration with p == 0.
- X */
- X for (p = 0; animate ? p < LIC_ANIMATION_FRAMES : p == 0; p++)
- X {
- X#if defined(HAS_OLD_TIMES)
- X time_t t0;
- X#endif
- X clock_t t0_clk, tN_clk;
- X struct tms t0_tms, tN_tms;
- X double wall, cpu;
- X char PerformanceString[256];
- X
- X LIC_ChangePhase(LICinstance, (double)p/LIC_ANIMATION_FRAMES * 2*M_PI);
- X
- X /*
- X * Build integral tables here so the build isn't computed as part
- X * of time to compute the image.
- X */
- X LIC_BuildIntegralTables(LICinstance);
- X
- X /*
- X * Set the LIC performance counters to zero and grab the start
- X * time.
- X */
- X LICinstance->TotalLoopCount = 0;
- X LICinstance->TotalLength = 0;
- X#if defined(HAS_OLD_TIMES)
- X t0 = time(NULL);
- X#endif
- X t0_clk = times(&t0_tms);
- X
- X /*
- X * Do the Line Integral Convolutions over the entire input data set
- X */
- X LIC_ComputeImage(LICinstance);
- X
- X /*
- X * Grab termination time and output performance statistics.
- X */
- X tN_clk = times(&tN_tms);
- X#if defined(HAS_OLD_TIMES)
- X wall = (double)(time(NULL) - t0);
- X#else
- X wall = (double)(tN_clk - t0_clk )/clk_tck;
- X#endif
- X cpu = (double)(tN_tms.tms_utime - t0_tms.tms_utime)/clk_tck;
- X if (wall == 0.0)
- X wall = 1.0e-6;
- X if (cpu == 0.0)
- X cpu = 1.0e-6;
- X sprintf(PerformanceString,
- X "Performance statistics\n"
- X "--------------------------------\n"
- X "Iteration = %d\n"
- X "CPU utilization = %d%%\n"
- X "CPU time (seconds) = %.2f\n"
- X "Cells processed per second = %.2f\n"
- X "Ave loop count = %.2f\n"
- X "Ave length = %.2f\n",
- X p,
- X (int)(cpu/wall*100),
- X cpu,
- X ncells / cpu,
- X (float)LICinstance->TotalLoopCount / ncells / 2,
- X (float)LICinstance->TotalLength / ncells / 2);
- X AVSmodify_parameter("Performance stats", AVS_VALUE,
- X PerformanceString, 0, 0);
- X
- X /* Flush AVS's output port */
- X AVScorout_output(oimage);
- X }
- X
- X /*
- X * Destroy the LIC object, free the output image memory and loop
- X * back for another round of watching our inputs and parameters ...
- X */
- X LIC_Destroy(LICinstance);
- X AVSdata_free("field", (char *)oimage);
- X }
- X /*NOTREACHED*/
- X}
- X
- X
- Xstatic int
- XDescribeModule(void)
- X /*
- X * AVS LIC coroutine module description.
- X */
- X{
- X AVSset_module_name("LIC", MODULE_MAPPER);
- X
- X /*
- X * Create ports for the required input and output fields.
- X */
- X AVScreate_input_port("Input Texture", "field 4-vector byte", OPTIONAL);
- X AVScreate_input_port("Input Field", "field 2D 2-vector float", OPTIONAL);
- X AVScreate_output_port("Output Image", "field 2D 4-vector 2-space byte");
- X
- X /*
- X * Create input parameters to widgets.
- X * -----------------------------------
- X */
- X
- X /*
- X * Basic filter type and normalization.
- X */
- X AVSadd_parameter("Label 1", "string_block", "Filter type", 0, 0);
- X AVSadd_parameter("Filter type", "choice", "Box", "Box!Ripple!Ramp!Select", "!");
- X AVSadd_parameter("Label 2", "string_block", "Normalization type", 0, 0);
- X AVSadd_parameter("Normalization type", "choice", "Variable",
- X "Fixed!Variable", "!");
- X
- X /*
- X * Filter control: length, frequency, variable length and variable speed.
- X */
- X AVSadd_parameter("Label 3", "string_block", "Filter control", 0, 0);
- X AVSadd_parameter("Length", "integer", 10, 0, 1000);
- X AVSadd_float_parameter("Frequency", 3.0, 0.001, 100.0);
- X AVSadd_parameter("Variable length filtering", "boolean", FALSE, FALSE,
- X TRUE);
- X AVSadd_parameter("Variable speed filtering", "boolean", FALSE, FALSE,
- X TRUE);
- X
- X /*
- X * Animation control.
- X */
- X AVSadd_parameter("Label 4", "string_block", "Animation control", 0, 0);
- X AVSadd_parameter("Animate", "boolean", FALSE, FALSE, TRUE);
- X
- X /*
- X * Default pixel value for zero vectors.
- X */
- X AVSadd_parameter("Label 5", "string_block", "Default pixel value", 0, 0);
- X AVSadd_parameter("Red", "integer", -1, -1, 255);
- X AVSadd_parameter("Green", "integer", -1, -1, 255);
- X AVSadd_parameter("Blue", "integer", -1, -1, 255);
- X AVSadd_parameter("Alpha", "integer", -1, -1, 255);
- X
- X /*
- X * Performance display.
- X */
- X AVSadd_parameter("Performance stats", "string_block",
- X "Performance statistics\n"
- X "-----------------------------",
- X 0, 0);
- X
- X /*
- X * Create widgets and bind them to the above parameters.
- X * -----------------------------------------------------
- X */
- X
- X#define MM(widget, pos, vis, type) \
- X " manipulator $Module:\"" widget "\"" \
- X " -w " type " -p $Module -xy " pos " " vis "\n"
- X
- X#define MM_LABEL( widget, pos, vis) MM(widget, pos, vis, "textblock")
- X#define MM_RADIO( widget, pos, vis) MM(widget, pos, vis, "radio_buttons")
- X#define MM_TOGGLE(widget, pos, vis) MM(widget, pos, vis, "toggle")
- X#define MM_INT( widget, pos, vis) MM(widget, pos, vis, "typein_integer")
- X#define MM_REAL( widget, pos, vis) MM(widget, pos, vis, "typein_real")
- X
- X AVSadd_parameter_prop(0, "layout", "string_block",
- X "panel $Module -w panel -p \"Top Level Stack\" -wh 210,800 -xy 0,50\n"
- X MM_LABEL ("Label 1", "10,12", "-show")
- X MM_RADIO ("Filter type", "10,39", "-show")
- X MM_LABEL ("Label 2", "10,135", "-show")
- X MM_RADIO ("Normalization type", "10,164", "-show")
- X MM_LABEL ("Label 3", "10,223", "-show")
- X MM_INT ("Length", "10,248", "-show")
- X MM_REAL ("Frequency", "150,248", "-hide")
- X MM_TOGGLE("Variable length filtering", "10,274", "-show")
- X MM_TOGGLE("Variable speed filtering", "10,299", "-hide")
- X MM_LABEL ("Label 4", "10,332", "-show")
- X MM_TOGGLE("Animate", "10,358", "-hide")
- X MM_LABEL ("Label 5", "10,397", "-show")
- X MM_INT ("Red", "10,423", "-show")
- X MM_INT ("Green", "10,449", "-show")
- X MM_INT ("Blue", "10,475", "-show")
- X MM_INT ("Alpha", "10,501", "-show")
- X MM_LABEL ("Performance stats", "10,530", "-show"));
- X
- X#undef MM_LABEL
- X#undef MM_RADIO
- X#undef MM_TOGGLE
- X#undef MM_INT
- X#undef MM_REAL
- X#undef MM
- X
- X /*
- X * The width and hieght should be controlled by the previous call,
- X * but an AVS "layout" bug prevents this, so we do it by hand.
- X */
- X
- X#define WH(param, w, h) \
- X AVSadd_parameter_prop(param, "width", "integer", w); \
- X AVSadd_parameter_prop(param, "height", "integer", h);
- X
- X WH(0, 4, 1); WH(1, 2, 2); WH(2, 4, 1); WH(3, 3, 4);
- X WH(4, 4, 1); WH(5, 2, 1); WH(6, 2, 1); WH(7, 5, 1);
- X WH(8, 5, 1); WH(9, 4, 1); WH(10, 3, 1); WH(11, 4, 1);
- X WH(12, 3, 1); WH(13, 3, 1); WH(14, 3, 1); WH(15, 3, 1);
- X WH(16, 4, 6);
- X
- X#undef WH
- X
- X return(1);
- X}
- X
- X
- Xstatic void
- XUpdateStatus(double percent)
- X /*
- X * Update callback routine, used by LIC_Compute to keep the user
- X * informed of computation progress.
- X */
- X{
- X char str[32];
- X
- X sprintf(str, "Convolving %6.2f%%", percent);
- X AVSmodule_status(str, (int)percent);
- X
- X# ifdef OUTPUT_INTERMEDIATE_RESULTS
- X AVScorout_output(OutputImage);
- X# endif
- X}
- X
- X
- Xstatic void
- XReportError(const char *message)
- X /*
- X * Report a LIC error by having AVS display it for us.
- X */
- X{
- X (void)AVSerror((char *)message);
- X}
- END_OF_FILE
- if test 14330 -ne `wc -c <'lic.1.2/avs/LIC.c'`; then
- echo shar: \"'lic.1.2/avs/LIC.c'\" unpacked with wrong size!
- fi
- # end of 'lic.1.2/avs/LIC.c'
- fi
- if test -f 'lic.1.2/doc/siggraph93/paper.ps.A' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lic.1.2/doc/siggraph93/paper.ps.A'\"
- else
- echo shar: Extracting \"'lic.1.2/doc/siggraph93/paper.ps.A'\" \(47609 characters\)
- sed "s/^X//" >'lic.1.2/doc/siggraph93/paper.ps.A' <<'END_OF_FILE'
- X%!
- X%%BoundingBox: (atend)
- X%%Pages: (atend)
- X%%DocumentFonts: (atend)
- X%%EndComments
- X%
- X% FrameMaker PostScript Prolog 3.0, for use with FrameMaker 3.0
- X% Copyright (c) 1986,87,89,90,91 by Frame Technology Corporation.
- X% All rights reserved.
- X%
- X% Known Problems:
- X% Due to bugs in Transcript, the 'PS-Adobe-' is omitted from line 1
- X/FMversion (3.0) def
- X% Set up Color vs. Black-and-White
- X /FMPrintInColor systemdict /colorimage known
- X systemdict /currentcolortransfer known or def
- X% Uncomment this line to force b&w on color printer
- X% /FMPrintInColor false def
- X/FrameDict 195 dict def
- Xsystemdict /errordict known not {/errordict 10 dict def
- X errordict /rangecheck {stop} put} if
- X% The readline in 23.0 doesn't recognize cr's as nl's on AppleTalk
- XFrameDict /tmprangecheck errordict /rangecheck get put
- Xerrordict /rangecheck {FrameDict /bug true put} put
- XFrameDict /bug false put
- Xmark
- X% Some PS machines read past the CR, so keep the following 3 lines together!
- Xcurrentfile 5 string readline
- X00
- X0000000000
- Xcleartomark
- Xerrordict /rangecheck FrameDict /tmprangecheck get put
- XFrameDict /bug get {
- X /readline {
- X /gstring exch def
- X /gfile exch def
- X /gindex 0 def
- X {
- X gfile read pop
- X dup 10 eq {exit} if
- X dup 13 eq {exit} if
- X gstring exch gindex exch put
- X /gindex gindex 1 add def
- X } loop
- X pop
- X gstring 0 gindex getinterval true
- X } def
- X } if
- X/FMVERSION {
- X FMversion ne {
- X /Times-Roman findfont 18 scalefont setfont
- X 100 100 moveto
- X (FrameMaker version does not match postscript_prolog!)
- X dup =
- X show showpage
- X } if
- X } def
- X/FMLOCAL {
- X FrameDict begin
- X 0 def
- X end
- X } def
- X /gstring FMLOCAL
- X /gfile FMLOCAL
- X /gindex FMLOCAL
- X /orgxfer FMLOCAL
- X /orgproc FMLOCAL
- X /organgle FMLOCAL
- X /orgfreq FMLOCAL
- X /yscale FMLOCAL
- X /xscale FMLOCAL
- X /manualfeed FMLOCAL
- X /paperheight FMLOCAL
- X /paperwidth FMLOCAL
- X/FMDOCUMENT {
- X array /FMfonts exch def
- X /#copies exch def
- X FrameDict begin
- X 0 ne dup {setmanualfeed} if
- X /manualfeed exch def
- X /paperheight exch def
- X /paperwidth exch def
- X /yscale exch def
- X /xscale exch def
- X currenttransfer cvlit /orgxfer exch def
- X currentscreen cvlit /orgproc exch def
- X /organgle exch def /orgfreq exch def
- X setpapername
- X manualfeed {true} {papersize} ifelse
- X {manualpapersize} {false} ifelse
- X {desperatepapersize} if
- X end
- X } def
- X /pagesave FMLOCAL
- X /orgmatrix FMLOCAL
- X /landscape FMLOCAL
- X/FMBEGINPAGE {
- X FrameDict begin
- X /pagesave save def
- X 3.86 setmiterlimit
- X /landscape exch 0 ne def
- X landscape {
- X 90 rotate 0 exch neg translate pop
- X }
- X {pop pop}
- X ifelse
- X xscale yscale scale
- X /orgmatrix matrix def
- X gsave
- X } def
- X/FMENDPAGE {
- X grestore
- X pagesave restore
- X end
- X showpage
- X } def
- X/FMFONTDEFINE {
- X FrameDict begin
- X findfont
- X ReEncode
- X 1 index exch
- X definefont
- X FMfonts 3 1 roll
- X put
- X end
- X } def
- X/FMFILLS {
- X FrameDict begin
- X array /fillvals exch def
- X end
- X } def
- X/FMFILL {
- X FrameDict begin
- X fillvals 3 1 roll put
- X end
- X } def
- X/FMNORMALIZEGRAPHICS {
- X newpath
- X 0.0 0.0 moveto
- X 1 setlinewidth
- X 0 setlinecap
- X 0 0 0 sethsbcolor
- X 0 setgray
- X } bind def
- X /fx FMLOCAL
- X /fy FMLOCAL
- X /fh FMLOCAL
- X /fw FMLOCAL
- X /llx FMLOCAL
- X /lly FMLOCAL
- X /urx FMLOCAL
- X /ury FMLOCAL
- X/FMBEGINEPSF {
- X end
- X /FMEPSF save def
- X /showpage {} def
- X FMNORMALIZEGRAPHICS
- X [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall
- X fx fy translate
- X rotate
- X fw urx llx sub div fh ury lly sub div scale
- X llx neg lly neg translate
- X } bind def
- X/FMENDEPSF {
- X FMEPSF restore
- X FrameDict begin
- X } bind def
- XFrameDict begin
- X/setmanualfeed {
- X%%BeginFeature *ManualFeed True
- X statusdict /manualfeed true put
- X%%EndFeature
- X } def
- X/max {2 copy lt {exch} if pop} bind def
- X/min {2 copy gt {exch} if pop} bind def
- X/inch {72 mul} def
- X/pagedimen {
- X paperheight sub abs 16 lt exch
- X paperwidth sub abs 16 lt and
- X {/papername exch def} {pop} ifelse
- X } def
- X /papersizedict FMLOCAL
- X/setpapername {
- X /papersizedict 14 dict def
- X papersizedict begin
- X /papername /unknown def
- X /Letter 8.5 inch 11.0 inch pagedimen
- X /LetterSmall 7.68 inch 10.16 inch pagedimen
- X /Tabloid 11.0 inch 17.0 inch pagedimen
- X /Ledger 17.0 inch 11.0 inch pagedimen
- X /Legal 8.5 inch 14.0 inch pagedimen
- X /Statement 5.5 inch 8.5 inch pagedimen
- X /Executive 7.5 inch 10.0 inch pagedimen
- X /A3 11.69 inch 16.5 inch pagedimen
- X /A4 8.26 inch 11.69 inch pagedimen
- X /A4Small 7.47 inch 10.85 inch pagedimen
- X /B4 10.125 inch 14.33 inch pagedimen
- X /B5 7.16 inch 10.125 inch pagedimen
- X end
- X } def
- X/papersize {
- X papersizedict begin
- X /Letter {lettertray letter} def
- X /LetterSmall {lettertray lettersmall} def
- X /Tabloid {11x17tray 11x17} def
- X /Ledger {ledgertray ledger} def
- X /Legal {legaltray legal} def
- X /Statement {statementtray statement} def
- X /Executive {executivetray executive} def
- X /A3 {a3tray a3} def
- X /A4 {a4tray a4} def
- X /A4Small {a4tray a4small} def
- X /B4 {b4tray b4} def
- X /B5 {b5tray b5} def
- X /unknown {unknown} def
- X papersizedict dup papername known {papername} {/unknown} ifelse get
- X end
- X /FMdicttop countdictstack 1 add def
- X statusdict begin stopped end
- X countdictstack -1 FMdicttop {pop end} for
- X } def
- X/manualpapersize {
- X papersizedict begin
- X /Letter {letter} def
- X /LetterSmall {lettersmall} def
- X /Tabloid {11x17} def
- X /Ledger {ledger} def
- X /Legal {legal} def
- X /Statement {statement} def
- X /Executive {executive} def
- X /A3 {a3} def
- X /A4 {a4} def
- X /A4Small {a4small} def
- X /B4 {b4} def
- X /B5 {b5} def
- X /unknown {unknown} def
- X papersizedict dup papername known {papername} {/unknown} ifelse get
- X end
- X stopped
- X } def
- X/desperatepapersize {
- X statusdict /setpageparams known
- X {
- X paperwidth paperheight 0 1
- X statusdict begin
- X {setpageparams} stopped pop
- X end
- X } if
- X } def
- X/savematrix {
- X orgmatrix currentmatrix pop
- X } bind def
- X/restorematrix {
- X orgmatrix setmatrix
- X } bind def
- X/dmatrix matrix def
- X/dpi 72 0 dmatrix defaultmatrix dtransform
- X dup mul exch dup mul add sqrt def
- X/freq dpi 18.75 div 8 div round dup 0 eq {pop 1} if 8 mul dpi exch div def
- X/sangle 1 0 dmatrix defaultmatrix dtransform exch atan def
- X/DiacriticEncoding [
- X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
- X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
- X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
- X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
- X/.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl
- X/numbersign /dollar /percent /ampersand /quotesingle /parenleft
- X/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
- X/two /three /four /five /six /seven /eight /nine /colon /semicolon
- X/less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K
- X/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash
- X/bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h
- X/i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar
- X/braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute
- X/Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis
- X/atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis
- X/iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve
- X/ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex
- X/udieresis /dagger /.notdef /cent /sterling /section /bullet
- X/paragraph /germandbls /registered /copyright /trademark /acute
- X/dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef
- X/yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
- X/ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown
- X/exclamdown /logicalnot /.notdef /florin /.notdef /.notdef
- X/guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde
- X/Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright
- X/quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis
- X/fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl
- X/periodcentered /quotesinglbase /quotedblbase /perthousand
- X/Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute
- X/Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve
- X/Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron
- X/breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron
- X] def
- X/ReEncode {
- X dup
- X length
- X dict begin
- X {
- X 1 index /FID ne
- X {def}
- X {pop pop} ifelse
- X } forall
- X 0 eq {/Encoding DiacriticEncoding def} if
- X currentdict
- X end
- X } bind def
- X/graymode true def
- X /bwidth FMLOCAL
- X /bpside FMLOCAL
- X /bstring FMLOCAL
- X /onbits FMLOCAL
- X /offbits FMLOCAL
- X /xindex FMLOCAL
- X /yindex FMLOCAL
- X /x FMLOCAL
- X /y FMLOCAL
- X/setpattern {
- X /bwidth exch def
- X /bpside exch def
- X /bstring exch def
- X /onbits 0 def /offbits 0 def
- X freq sangle landscape {90 add} if
- X {/y exch def
- X /x exch def
- X /xindex x 1 add 2 div bpside mul cvi def
- X /yindex y 1 add 2 div bpside mul cvi def
- X bstring yindex bwidth mul xindex 8 idiv add get
- X 1 7 xindex 8 mod sub bitshift and 0 ne
- X {/onbits onbits 1 add def 1}
- X {/offbits offbits 1 add def 0}
- X ifelse
- X }
- X setscreen
- X {} settransfer
- X offbits offbits onbits add div FMsetgray
- X /graymode false def
- X } bind def
- X/grayness {
- X FMsetgray
- X graymode not {
- X /graymode true def
- X orgxfer cvx settransfer
- X orgfreq organgle orgproc cvx setscreen
- X } if
- X } bind def
- X /HUE FMLOCAL
- X /SAT FMLOCAL
- X /BRIGHT FMLOCAL
- X /Colors FMLOCAL
- XFMPrintInColor
- X
- X {
- X /HUE 0 def
- X /SAT 0 def
- X /BRIGHT 0 def
- X % array of arrays Hue and Sat values for the separations [HUE BRIGHT]
- X /Colors
- X [[0 0 ] % black
- X [0 0 ] % white
- X [0.00 1.0] % red
- X [0.37 1.0] % green
- X [0.60 1.0] % blue
- X [0.50 1.0] % cyan
- X [0.83 1.0] % magenta
- X [0.16 1.0] % comment / yellow
- X ] def
- X
- X /BEGINBITMAPCOLOR {
- X BITMAPCOLOR} def
- X /BEGINBITMAPCOLORc {
- X BITMAPCOLORc} def
- X /BEGINBITMAPTRUECOLOR {
- X BITMAPTRUECOLOR } def
- X /BEGINBITMAPTRUECOLORc {
- X BITMAPTRUECOLORc } def
- X /K {
- X Colors exch get dup
- X 0 get /HUE exch store
- X 1 get /BRIGHT exch store
- X HUE 0 eq BRIGHT 0 eq and
- X {1.0 SAT sub setgray}
- X {HUE SAT BRIGHT sethsbcolor}
- X ifelse
- X } def
- X /FMsetgray {
- X /SAT exch 1.0 exch sub store
- X HUE 0 eq BRIGHT 0 eq and
- X {1.0 SAT sub setgray}
- X {HUE SAT BRIGHT sethsbcolor}
- X ifelse
- X } bind def
- X }
- X
- X {
- X /BEGINBITMAPCOLOR {
- X BITMAPGRAY} def
- X /BEGINBITMAPCOLORc {
- X BITMAPGRAYc} def
- X /BEGINBITMAPTRUECOLOR {
- X BITMAPTRUEGRAY } def
- X /BEGINBITMAPTRUECOLORc {
- X BITMAPTRUEGRAYc } def
- X /FMsetgray {setgray} bind def
- X /K {
- X pop
- X } def
- X }
- Xifelse
- X/normalize {
- X transform round exch round exch itransform
- X } bind def
- X/dnormalize {
- X dtransform round exch round exch idtransform
- X } bind def
- X/lnormalize {
- X 0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop
- X } bind def
- X/H {
- X lnormalize setlinewidth
- X } bind def
- X/Z {
- X setlinecap
- X } bind def
- X /fillvals FMLOCAL
- X/X {
- X fillvals exch get
- X dup type /stringtype eq
- X {8 1 setpattern}
- X {grayness}
- X ifelse
- X } bind def
- X/V {
- X gsave eofill grestore
- X } bind def
- X/N {
- X stroke
- X } bind def
- X/M {newpath moveto} bind def
- X/E {lineto} bind def
- X/D {curveto} bind def
- X/O {closepath} bind def
- X /n FMLOCAL
- X/L {
- X /n exch def
- X newpath
- X normalize
- X moveto
- X 2 1 n {pop normalize lineto} for
- X } bind def
- X/Y {
- X L
- X closepath
- X } bind def
- X /x1 FMLOCAL
- X /x2 FMLOCAL
- X /y1 FMLOCAL
- X /y2 FMLOCAL
- X /rad FMLOCAL
- X/R {
- X /y2 exch def
- X /x2 exch def
- X /y1 exch def
- X /x1 exch def
- X x1 y1
- X x2 y1
- X x2 y2
- X x1 y2
- X 4 Y
- X } bind def
- X/RR {
- X /rad exch def
- X normalize
- X /y2 exch def
- X /x2 exch def
- X normalize
- X /y1 exch def
- X /x1 exch def
- X newpath
- X x1 y1 rad add moveto
- X x1 y2 x2 y2 rad arcto
- X x2 y2 x2 y1 rad arcto
- X x2 y1 x1 y1 rad arcto
- X x1 y1 x1 y2 rad arcto
- X closepath
- X 16 {pop} repeat
- X } bind def
- X/C {
- X grestore
- X gsave
- X R
- X clip
- X } bind def
- X /FMpointsize FMLOCAL
- X/F {
- X FMfonts exch get
- X FMpointsize scalefont
- X setfont
- X } bind def
- X/Q {
- X /FMpointsize exch def
- X F
- X } bind def
- X/T {
- X moveto show
- X } bind def
- X/RF {
- X rotate
- X 0 ne {-1 1 scale} if
- X } bind def
- X/TF {
- X gsave
- X moveto
- X RF
- X show
- X grestore
- X } bind def
- X/P {
- X moveto
- X 0 32 3 2 roll widthshow
- X } bind def
- X/PF {
- X gsave
- X moveto
- X RF
- X 0 32 3 2 roll widthshow
- X grestore
- X } bind def
- X/S {
- X moveto
- X 0 exch ashow
- X } bind def
- X/SF {
- X gsave
- X moveto
- X RF
- X 0 exch ashow
- X grestore
- X } bind def
- X/B {
- X moveto
- X 0 32 4 2 roll 0 exch awidthshow
- X } bind def
- X/BF {
- X gsave
- X moveto
- X RF
- X 0 32 4 2 roll 0 exch awidthshow
- X grestore
- X } bind def
- X/G {
- X gsave
- X newpath
- X normalize translate 0.0 0.0 moveto
- X dnormalize scale
- X 0.0 0.0 1.0 5 3 roll arc
- X closepath fill
- X grestore
- X } bind def
- X/A {
- X gsave
- X savematrix
- X newpath
- X 2 index 2 div add exch 3 index 2 div sub exch
- X normalize 2 index 2 div sub exch 3 index 2 div add exch
- X translate
- X scale
- X 0.0 0.0 1.0 5 3 roll arc
- X restorematrix
- X stroke
- X grestore
- X } bind def
- X /x FMLOCAL
- X /y FMLOCAL
- X /w FMLOCAL
- X /h FMLOCAL
- X /xx FMLOCAL
- X /yy FMLOCAL
- X /ww FMLOCAL
- X /hh FMLOCAL
- X /FMsaveobject FMLOCAL
- X /FMoptop FMLOCAL
- X /FMdicttop FMLOCAL
- X/BEGINPRINTCODE {
- X /FMdicttop countdictstack 1 add def
- X /FMoptop count 4 sub def
- X /FMsaveobject save def
- X userdict begin
- X /showpage {} def
- X FMNORMALIZEGRAPHICS
- X 3 index neg 3 index neg translate
- X } bind def
- X/ENDPRINTCODE {
- X count -1 FMoptop {pop pop} for
- X countdictstack -1 FMdicttop {pop end} for
- X FMsaveobject restore
- X } bind def
- X/gn {
- X 0
- X { 46 mul
- X cf read pop
- X 32 sub
- X dup 46 lt {exit} if
- X 46 sub add
- X } loop
- X add
- X } bind def
- X /str FMLOCAL
- X/cfs {
- X /str sl string def
- X 0 1 sl 1 sub {str exch val put} for
- X str def
- X } bind def
- X/ic [
- X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
- X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
- X 0
- X {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx}
- X {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx}
- X {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12}
- X {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh}
- X {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh}
- X {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl}
- X {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl}
- X {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl}
- X {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl}
- X ] def
- X /sl FMLOCAL
- X /val FMLOCAL
- X /ws FMLOCAL
- X /im FMLOCAL
- X /bs FMLOCAL
- X /cs FMLOCAL
- X /len FMLOCAL
- X /pos FMLOCAL
- X/ms {
- X /sl exch def
- X /val 255 def
- X /ws cfs
- X /im cfs
- X /val 0 def
- X /bs cfs
- X /cs cfs
- X } bind def
- X400 ms
- X/ip {
- X is
- X 0
- X cf cs readline pop
- X { ic exch get exec
- X add
- X } forall
- X pop
- X
- X } bind def
- X/wh {
- X /len exch def
- X /pos exch def
- X ws 0 len getinterval im pos len getinterval copy pop
- X pos len
- X } bind def
- X/bl {
- X /len exch def
- X /pos exch def
- X bs 0 len getinterval im pos len getinterval copy pop
- X pos len
- X } bind def
- X/s1 1 string def
- X/fl {
- X /len exch def
- X /pos exch def
- X /val cf s1 readhexstring pop 0 get def
- X pos 1 pos len add 1 sub {im exch val put} for
- X pos len
- X } bind def
- X/hx {
- X 3 copy getinterval
- X cf exch readhexstring pop pop
- X } bind def
- X /h FMLOCAL
- X /w FMLOCAL
- X /d FMLOCAL
- X /lb FMLOCAL
- X /bitmapsave FMLOCAL
- X /is FMLOCAL
- X /cf FMLOCAL
- X/wbytes {
- X dup
- X 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse
- X } bind def
- X/BEGINBITMAPBWc {
- X 1 {} COMMONBITMAPc
- X } bind def
- X/BEGINBITMAPGRAYc {
- X 8 {} COMMONBITMAPc
- X } bind def
- X/BEGINBITMAP2BITc {
- X 2 {} COMMONBITMAPc
- X } bind def
- X/COMMONBITMAPc {
- X /r exch def
- X /d exch def
- X gsave
- X translate rotate scale /h exch def /w exch def
- X /lb w d wbytes def
- X sl lb lt {lb ms} if
- X /bitmapsave save def
- X r
- X /is im 0 lb getinterval def
- X ws 0 lb getinterval is copy pop
- X /cf currentfile def
- X w h d [w 0 0 h neg 0 h]
- X {ip} image
- X bitmapsave restore
- X grestore
- X } bind def
- X/BEGINBITMAPBW {
- X 1 {} COMMONBITMAP
- X } bind def
- X/BEGINBITMAPGRAY {
- X 8 {} COMMONBITMAP
- X } bind def
- X/BEGINBITMAP2BIT {
- X 2 {} COMMONBITMAP
- X } bind def
- X/COMMONBITMAP {
- X /r exch def
- X /d exch def
- X gsave
- X translate rotate scale /h exch def /w exch def
- X /bitmapsave save def
- X r
- X /is w d wbytes string def
- X /cf currentfile def
- X w h d [w 0 0 h neg 0 h]
- X {cf is readhexstring pop} image
- X bitmapsave restore
- X grestore
- X } bind def
- X /proc1 FMLOCAL
- X /proc2 FMLOCAL
- X /newproc FMLOCAL
- X/Fmcc {
- X /proc2 exch cvlit def
- X /proc1 exch cvlit def
- X /newproc proc1 length proc2 length add array def
- X newproc 0 proc1 putinterval
- X newproc proc1 length proc2 putinterval
- X newproc cvx
- X} bind def
- X/ngrayt 256 array def
- X/nredt 256 array def
- X/nbluet 256 array def
- X/ngreent 256 array def
- X /gryt FMLOCAL
- X /blut FMLOCAL
- X /grnt FMLOCAL
- X /redt FMLOCAL
- X /indx FMLOCAL
- X /cynu FMLOCAL
- X /magu FMLOCAL
- X /yelu FMLOCAL
- X /k FMLOCAL
- X /u FMLOCAL
- X/colorsetup {
- X currentcolortransfer
- X /gryt exch def
- X /blut exch def
- X /grnt exch def
- X /redt exch def
- X 0 1 255 {
- X /indx exch def
- X /cynu 1 red indx get 255 div sub def
- X /magu 1 green indx get 255 div sub def
- X /yelu 1 blue indx get 255 div sub def
- X /k cynu magu min yelu min def
- X /u k currentundercolorremoval exec def
- X nredt indx 1 0 cynu u sub max sub redt exec put
- X ngreent indx 1 0 magu u sub max sub grnt exec put
- X nbluet indx 1 0 yelu u sub max sub blut exec put
- X ngrayt indx 1 k currentblackgeneration exec sub gryt exec put
- X } for
- X {255 mul cvi nredt exch get}
- X {255 mul cvi ngreent exch get}
- X {255 mul cvi nbluet exch get}
- X {255 mul cvi ngrayt exch get}
- X setcolortransfer
- X {pop 0} setundercolorremoval
- X {} setblackgeneration
- X } bind def
- X /tran FMLOCAL
- X/fakecolorsetup {
- X /tran 256 string def
- X 0 1 255 {/indx exch def
- X tran indx
- X red indx get 77 mul
- X green indx get 151 mul
- X blue indx get 28 mul
- X add add 256 idiv put} for
- X currenttransfer
- X {255 mul cvi tran exch get 255.0 div}
- X exch Fmcc settransfer
- X} bind def
- X/BITMAPCOLOR {
- X /d 8 def
- X gsave
- X translate rotate scale /h exch def /w exch def
- X /bitmapsave save def
- X colorsetup
- X /is w d wbytes string def
- X /cf currentfile def
- X w h d [w 0 0 h neg 0 h]
- X {cf is readhexstring pop} {is} {is} true 3 colorimage
- X bitmapsave restore
- X grestore
- X } bind def
- X/BITMAPCOLORc {
- X /d 8 def
- X gsave
- X translate rotate scale /h exch def /w exch def
- X /lb w d wbytes def
- X sl lb lt {lb ms} if
- X /bitmapsave save def
- X colorsetup
- X /is im 0 lb getinterval def
- X ws 0 lb getinterval is copy pop
- X /cf currentfile def
- X w h d [w 0 0 h neg 0 h]
- X {ip} {is} {is} true 3 colorimage
- X bitmapsave restore
- X grestore
- X } bind def
- X/BITMAPTRUECOLORc {
- X gsave
- X translate rotate scale /h exch def /w exch def
- X /bitmapsave save def
- X
- X /is w string def
- X
- X ws 0 w getinterval is copy pop
- X /cf currentfile def
- X w h 8 [w 0 0 h neg 0 h]
- X {ip} {gip} {bip} true 3 colorimage
- X bitmapsave restore
- X grestore
- X } bind def
- X/BITMAPTRUECOLOR {
- X gsave
- X translate rotate scale /h exch def /w exch def
- X /bitmapsave save def
- X /is w string def
- X /gis w string def
- X /bis w string def
- X /cf currentfile def
- X w h 8 [w 0 0 h neg 0 h]
- X { cf is readhexstring pop }
- X { cf gis readhexstring pop }
- X { cf bis readhexstring pop }
- X true 3 colorimage
- X bitmapsave restore
- X grestore
- X } bind def
- X/BITMAPTRUEGRAYc {
- X gsave
- X translate rotate scale /h exch def /w exch def
- X /bitmapsave save def
- X
- X /is w string def
- X
- X ws 0 w getinterval is copy pop
- X /cf currentfile def
- X w h 8 [w 0 0 h neg 0 h]
- X {ip gip bip w gray} image
- X bitmapsave restore
- X grestore
- X } bind def
- X/ww FMLOCAL
- X/r FMLOCAL
- X/g FMLOCAL
- X/b FMLOCAL
- X/i FMLOCAL
- X/gray {
- X /ww exch def
- X /b exch def
- X /g exch def
- X /r exch def
- X 0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul
- X b i get .114 mul add add r i 3 -1 roll floor cvi put } for
- X r
- X } bind def
- X/BITMAPTRUEGRAY {
- X gsave
- X translate rotate scale /h exch def /w exch def
- X /bitmapsave save def
- X /is w string def
- X /gis w string def
- X /bis w string def
- X /cf currentfile def
- X w h 8 [w 0 0 h neg 0 h]
- X { cf is readhexstring pop
- X cf gis readhexstring pop
- X cf bis readhexstring pop w gray} image
- X bitmapsave restore
- X grestore
- X } bind def
- X/BITMAPGRAY {
- X 8 {fakecolorsetup} COMMONBITMAP
- X } bind def
- X/BITMAPGRAYc {
- X 8 {fakecolorsetup} COMMONBITMAPc
- X } bind def
- X/ENDBITMAP {
- X } bind def
- Xend
- X /ALDsave FMLOCAL
- X /ALDmatrix matrix def ALDmatrix currentmatrix pop
- X/StartALD {
- X /ALDsave save def
- X savematrix
- X ALDmatrix setmatrix
- X } bind def
- X/InALD {
- X restorematrix
- X } bind def
- X/DoneALD {
- X ALDsave restore
- X } bind def
- X%%EndProlog
- X%%BeginSetup
- X(3.0) FMVERSION
- X1 1 612 792 0 1 21 FMDOCUMENT
- X0 0 /Helvetica-Bold FMFONTDEFINE
- X1 0 /Times-Roman FMFONTDEFINE
- X2 0 /Times-Bold FMFONTDEFINE
- X3 0 /Times-Italic FMFONTDEFINE
- X4 1 /Symbol FMFONTDEFINE
- X5 0 /AvantGarde-Book FMFONTDEFINE
- X6 0 /AvantGarde-BookOblique FMFONTDEFINE
- X7 0 /AvantGarde-DemiOblique FMFONTDEFINE
- X32 FMFILLS
- X0 0 FMFILL
- X1 0.1 FMFILL
- X2 0.3 FMFILL
- X3 0.5 FMFILL
- X4 0.7 FMFILL
- X5 0.9 FMFILL
- X6 0.97 FMFILL
- X7 1 FMFILL
- X8 <0f1e3c78f0e1c387> FMFILL
- X9 <0f87c3e1f0783c1e> FMFILL
- X10 <cccccccccccccccc> FMFILL
- X11 <ffff0000ffff0000> FMFILL
- X12 <8142241818244281> FMFILL
- X13 <03060c183060c081> FMFILL
- X14 <8040201008040201> FMFILL
- X16 1 FMFILL
- X17 0.9 FMFILL
- X18 0.7 FMFILL
- X19 0.5 FMFILL
- X20 0.3 FMFILL
- X21 0.1 FMFILL
- X22 0.03 FMFILL
- X23 0 FMFILL
- X24 <f0e1c3870f1e3c78> FMFILL
- X25 <f0783c1e0f87c3e1> FMFILL
- X26 <3333333333333333> FMFILL
- X27 <0000ffff0000ffff> FMFILL
- X28 <7ebddbe7e7dbbd7e> FMFILL
- X29 <fcf9f3e7cf9f3f7e> FMFILL
- X30 <7fbfdfeff7fbfdfe> FMFILL
- X%%EndSetup
- X%%Page: "1" 1
- X%%BeginPaperSize: Letter
- X%%EndPaperSize
- X612 792 0 FMBEGINPAGE
- X0 9 Q
- X0 X
- X0 K
- X(ABSTRACT) 54 560.71 T
- X1 F
- X-0.1 (Imaging vector \336elds has applications in science, art, image pro-) 63 550.67 P
- X1.2 (cessing and special ef) 54 540.67 P
- X1.2 (fects. An ef) 135.54 540.67 P
- X1.2 (fective new approach is to use) 179.45 540.67 P
- X1.04 (linear and curvilinear \336ltering techniques to locally blur textures) 54 530.67 P
- X0.26 (along a vector \336eld. This approach builds on several previous tex-) 54 520.67 P
- X0.25 (ture generation and \336ltering techniques[8, 9, 1) 54 510.67 P
- X0.25 (1, 14, 15, 17, 23]. It) 221.38 510.67 P
- X0.41 (is, however) 54 500.67 P
- X0.41 (, unique because it is local, one-dimensional and inde-) 95.49 500.67 P
- X1.04 (pendent of any prede\336ned geometry or texture. The technique is) 54 490.67 P
- X1.42 (general and capable of imaging arbitrary two- and three-dimen-) 54 480.67 P
- X0.37 (sional vector \336elds. The local one-dimensional nature of the algo-) 54 470.67 P
- X0.53 (rithm lends itself to highly parallel and ef) 54 460.67 P
- X0.53 (\336cient implementations.) 206.59 460.67 P
- X0.15 (Furthermore, the curvilinear \336lter is capable of rendering detail on) 54 450.67 P
- X1.2 (very intricate vector \336elds. Combining this technique with other) 54 440.67 P
- X-0.2 (rendering and image processing techniques \321 like periodic motion) 54 430.67 P
- X0.76 (\336ltering \321 results in richly informative and striking images. The) 54 420.67 P
- X(technique can also produce novel special ef) 54 410.67 T
- X(fects.) 210.08 410.67 T
- X2 F
- X3.8 (CR categories and subject descriptors:) 63 400.62 P
- X1 F
- X3.8 ( I.3.3 [Computer) 226.48 400.62 P
- X1.33 (Graphics]: Picture/Image generation; I.3.7 [Computer Graphics]:) 54 390.62 P
- X1.15 (Three-Dimensional Graphics and Realism; I.4.3 [Image Process-) 54 380.62 P
- X(ing]: Enhancement.) 54 370.62 T
- X1.12 (Keywords: convolution, \336ltering, rendering, visualization, tex-) 63 360.57 P
- X-0.19 (ture synthesis, \337ow \336elds, special ef) 54 350.57 P
- X-0.19 (fects, periodic motion \336ltering.) 182.97 350.57 P
- X0 F
- X(1. INTRODUCTION) 54 333.52 T
- X1 F
- X-0.02 (Upon \336rst inspection, imaging vector \336elds appears to have lim-) 63 323.48 P
- X1.4 (ited application \321 con\336ned primarily to scienti\336c visualization.) 54 313.48 P
- X1.52 (However) 54 303.48 P
- X1.52 (, much of the form and shape in our environment is a) 86.58 303.48 P
- X0.88 (function of not only image intensity and color) 54 293.48 P
- X0.88 (, but also of direc-) 224.83 293.48 P
- X1.98 (tional information such as edges. Painters, sculptors, photogra-) 54 283.48 P
- X0.28 (phers, image processors[16] and computer graphics researchers[9]) 54 273.48 P
- X2.23 (have recognized the importance of direction in the process of) 54 263.48 P
- X0.9 (image creation and form. Hence, algorithms that can image such) 54 253.48 P
- X1.3 (directional information have wide application across both scien-) 54 243.48 P
- X(ti\336c and artistic domains.) 54 233.48 T
- X2.66 (Such algorithms should possess a number of desirable and) 63 223.43 P
- X1.53 (sometimes con\337icting properties including: accuracy) 54 213.43 P
- X1.53 (, locality of) 249.75 213.43 P
- X0.21 (calculation, simplicity) 54 203.43 P
- X0.21 (, controllability and generality) 133.52 203.43 P
- X0.21 (. Line Integral) 242.41 203.43 P
- X-0.16 (Convolution \050LIC\051 is a new technique that possesses many of these) 54 193.43 P
- X1.98 (properties. Its generality allows for the introduction of a com-) 54 183.43 P
- X1.95 (pletely new family of periodic motion \336lters which have wide) 317.29 561.43 P
- X1.07 (application \050see section 4.1\051. It represents a con\337uence of signal) 317.29 551.43 P
- X0.01 (and image processing and a variety of previous work done in com-) 317.29 541.43 P
- X(puter graphics and scienti\336c visualization.) 317.29 531.43 T
- X0 F
- X(2. BACKGROUND) 317.29 513.08 T
- X1 F
- X0.18 (There are currently few techniques which image vector \336elds in) 326.29 501.73 P
- X-0.02 (a general manner) 317.29 491.73 P
- X-0.02 (. These techniques can be quite ef) 378.64 491.73 P
- X-0.02 (fective for visu-) 499.92 491.73 P
- X0.33 (alizing vector data. However) 317.29 481.73 P
- X0.33 (, they break down when operating on) 421.75 481.73 P
- X1.26 (very dense \336elds and do not generalize to other applications. In) 317.29 471.73 P
- X0.96 (particular) 317.29 461.73 P
- X0.96 (, lar) 351.37 461.73 P
- X0.96 (ge vector \336elds \050512x512 or greater\051 strain existing) 366.14 461.73 P
- X(algorithms.) 317.29 451.73 T
- X1.65 (Most vector visualization algorithms use spatial resolution to) 326.29 440.39 P
- X-0.11 (represent the vector \336eld. These include sampling the \336eld, such as) 317.29 430.39 P
- X1.93 (with stream lines[12] or particle traces, and using icons[19] at) 317.29 420.39 P
- X2.01 (every vector \336eld coordinate. Stream lines and particle tracing) 317.29 410.39 P
- X-0.21 (techniques depend critically on the placement of the \322streamers\323 or) 317.29 400.39 P
- X0.4 (the particle sources. Depending on their placement, eddies or cur-) 317.29 390.39 P
- X0.57 (rents in the data \336eld can be missed. Icons, on the other hand, do) 317.29 380.39 P
- X0.49 (not miss data, but use up a considerable amount of spatial resolu-) 317.29 370.39 P
- X(tion limiting their usefulness to small vector \336elds.) 317.29 360.39 T
- X1.4 (Another general approach is to generate textures via a vector) 326.29 349.04 P
- X1.29 (\336eld. V) 317.29 339.04 P
- X1.29 (an W) 344.55 339.04 P
- X1.29 (ijk\325) 364.69 339.04 P
- X1.29 (s) 376.68 339.04 P
- X3 F
- X1.29 (spot noise) 383.72 339.04 P
- X1 F
- X1.29 ( algorithm[23] uses a vector \336eld to) 421.22 339.04 P
- X0.7 (control the generation of bandlimited noise. The time complexity) 317.29 329.04 P
- X1.01 (of the two types of implementation techniques presented by V) 317.29 319.04 P
- X1.01 (an) 548.8 319.04 P
- X0.31 (W) 317.29 309.04 P
- X0.31 (ijk are relatively high. Furthermore the technique, by de\336nition,) 325.41 309.04 P
- X0.17 (depends heavily on the form of the texture \050spot noise\051 itself. Spe-) 317.29 299.04 P
- X-0.19 (ci\336cally) 317.29 289.04 P
- X-0.19 (, it does not easily generalize to other forms of textures that) 345.66 289.04 P
- X0.57 (might be better suited to a particular class of vector data \050such as) 317.29 279.04 P
- X(\337uid \337ow versus electromagnetic\051.) 317.29 269.04 T
- X1.5 (Reaction dif) 326.29 257.69 P
- X1.5 (fusion techniques[20, 24] also provide an avenue) 371.81 257.69 P
- X0.19 (for visualizing vector \336elds since the controlling dif) 317.29 247.69 P
- X0.19 (ferential equa-) 504.94 247.69 P
- X0.94 (tions are inherently vector in nature. It is possible to map vector) 317.29 237.69 P
- X1.6 (data onto these dif) 317.29 227.69 P
- X1.6 (ferential equations to come up with a vector) 388.08 227.69 P
- X0.28 (visualization technique. Here too however) 317.29 217.69 P
- X0.28 (, the time complexity of) 470.05 217.69 P
- X(these algorithms limit their general usefulness.) 317.29 207.69 T
- X2.59 (Three-dimensional vector \336elds can be visualized by three-) 326.29 196.35 P
- X3.01 (dimensional texture generation techniques such as texels and) 317.29 186.35 P
- X0.16 (hypertextures described in [1) 317.29 176.35 P
- X0.16 (1, 15]. Both techniques take a texture) 422.02 176.35 P
- X-0.16 (on a geometrically de\336ned surface and project the texture out some) 317.29 166.35 P
- X-0.18 (distance from the surface. By de\336nition these techniques are bound) 317.29 156.35 P
- X-0.12 (to the surface and do not compute an image for the entire \336eld as is) 317.29 146.35 P
- X0.75 (done by V) 317.29 136.35 P
- X0.75 (an W) 355.22 136.35 P
- X0.75 (ijk[23]. This is limiting in that it requires a priori) 374.82 136.35 P
- X0.99 (knowledge to place the surface. Like particle streams and vector) 317.29 126.35 P
- X1.56 (streamers these visualization techniques are critically dependent) 317.29 116.35 P
- X(on the placement of the sampling surface.) 317.29 106.35 T
- X-0.05 (The technique presented by Haeberli[9] for algorithmicly gener-) 326.29 95 P
- X0.31 (ating \322paintings\323 via vector) 317.29 85 P
- X0.31 (-like brush strokes can also be thought) 417.13 85 P
- X3.7 (of as a vector visualization technique. Craw\336s and Max[5]) 317.29 75 P
- X54 576 558 738 R
- X7 X
- XV
- X0 18 Q
- X0 X
- X(Imaging V) 74.57 726 T
- X(ector Fields Using Line Integral Convolution) 159.56 726 T
- X3 12 Q
- X(Brian Cabral) 273.85 690 T
- X(Leith \050Casey\051 Leedom*) 250.04 673 T
- X1 F
- X(Lawrence Livermore National Laboratory) 205.26 639 T
- X54 139.03 293.98 175.03 R
- X7 X
- XV
- X54 160.03 293.98 175.03 C
- X63 173.03 207 173.03 2 L
- X0.5 H
- X2 Z
- X0 X
- X0 K
- XN
- X0 0 612 792 C
- X1 8 Q
- X0 X
- X0 K
- X(* Authors\325 current e-mail addresses are:) 54 154.7 T
- X3 F
- X(cabral@llnl.gov) 184.11 154.7 T
- X1 F
- X( and) 236.56 154.7 T
- X3 F
- X(casey@gauss.llnl.gov) 60 145.7 T
- X1 F
- X(.) 129.02 145.7 T
- X54 72 293.98 126 C
- X54 72 293.98 126 R
- X7 X
- X0 K
- XV
- X0 0 612 792 C
- XFMENDPAGE
- X%%EndPage: "1" 2
- X%%Page: "2" 2
- X612 792 0 FMBEGINPAGE
- X1 9 Q
- X0 X
- X0 K
- X-0.13 (describe a three-dimensional variation on this in which blurred cyl-) 54 732 P
- X0.6 (inders represent three-dimensional brush strokes whose directions) 54 722 P
- X0.23 (and colors are controlled by a three-dimensional vector \336eld. Both) 54 712 P
- X2.33 (techniques represent a conceptual extension of traditional icon) 54 702 P
- X1.07 (placement, where the icons are more sophisticated shapes. How-) 54 692 P
- X2.52 (ever) 54 682 P
- X2.52 (, these techniques break down as the density of the \336eld) 69.11 682 P
- X(increases since they require spatial resolution to work.) 54 672 T
- X-0.13 (What is needed is a technique that can image dense vector \336elds,) 63 661.02 P
- X0.69 (is independent of both prede\336ned sampling placement constraints) 54 651.02 P
- X0.86 (and texture generation techniques and can work in two and three) 54 641.02 P
- X1.9 (dimensions. Such a technique would be very general and have) 54 631.02 P
- X(wide application.) 54 621.02 T
- X0 F
- X(3. DDA CONVOLUTION) 54 603.05 T
- X1 F
- X0.48 (One approach is a generalization of traditional DDA line draw-) 63 592.07 P
- X0.19 (ing techniques[1] and the spatial convolution algorithms described) 54 582.07 P
- X0.81 (by V) 54 572.07 P
- X0.81 (an W) 71.53 572.07 P
- X0.81 (ijk[23] and Perlin[14]. Each vector in a \336eld is used to) 91.19 572.07 P
- X-0.03 (de\336ne a long, narrow) 54 562.07 P
- X-0.03 (, DDA generated \336lter kernel tangential to the) 129.7 562.07 P
- X-0.09 (vector and going in the positive and negative vector direction some) 54 552.07 P
- X1.41 (\336xed distance,) 54 542.07 P
- X3 F
- X1.41 (L) 110.98 542.07 P
- X1 F
- X1.41 (. A texture is then mapped one-to-one onto the) 115.98 542.07 P
- X1.68 (vector \336eld. The input texture pixels under the \336lter kernel are) 54 532.07 P
- X1.78 (summed, normalized by the length of the \336lter kernel,) 54 522.07 P
- X3 F
- X1.78 (2L) 265.97 522.07 P
- X1 F
- X1.78 (, and) 275.46 522.07 P
- X0.8 (placed in an output pixel image for the vector position. Figure 1,) 54 512.07 P
- X(illustrates this operation for a single vector in a \336eld.) 54 502.07 T
- X-0.03 (This ef) 63 491.1 P
- X-0.03 (fectively \336lters the underlying texture as a function of the) 88.02 491.1 P
- X1.01 (vector \336eld. The images in \336gure 2 are rendered using the DDA) 54 481.1 P
- X0.18 (convolution algorithm. On the left is a simple circular vector \336eld;) 54 471.1 P
- X-0.22 (to its right is the result of a computational \337uid dynamics code. The) 54 461.1 P
- X0.13 (input texture image in these examples is white noise. Although the) 54 451.1 P
- X0.02 (description above implies a box \336lter) 54 441.1 P
- X0.02 (, any arbitrary \336lter shape can) 187.29 441.1 P
- X0.03 (be used for the \336lter convolution kernel. It is important to note that) 54 431.1 P
- X0.11 (this algorithm is very sensitive to symmetry of the DDA algorithm) 54 421.1 P
- X0.13 (and \336lter) 54 411.1 P
- X0.13 (. If the algorithm weights the forward direction more than) 85.84 411.1 P
- X0.1 (the backward direction, the circular \336eld in \336gure 2 appears to spi-) 54 401.1 P
- X1.03 (ral inward implying a vortical behavior that is not present in the) 54 391.1 P
- X(vector \336eld.) 54 381.1 T
- X0 F
- X(3.1 LOCAL FIELD BEHA) 54 363.12 T
- X(VIOR) 158.2 363.12 T
- X1 F
- X0.81 (The DDA approach, while ef) 63 352.14 P
- X0.81 (\336cient, is inherently inaccurate. It) 170.66 352.14 P
- X2.46 (assumes that the local vector \336eld can be approximated by a) 54 342.14 P
- X0.85 (straight line. For points in vector \336elds where the local radius of) 317.29 587 P
- X0.54 (curvature is lar) 317.29 577 P
- X0.54 (ge, this assumption is valid. However) 372.12 577 P
- X0.54 (, where there) 509.53 577 P
- X-0.15 (are complex structures smaller than the length of the DDA line, the) 317.29 567 P
- X-0.14 (local radius of curvature is small and is not well approximated by a) 317.29 557 P
- X0.34 (straight line. In a sense, DDA convolution renders the vector \336eld) 317.29 547 P
- X1.44 (unevenly) 317.29 537 P
- X1.44 (, treating linear portions of the vector \336eld more accu-) 349.65 537 P
- X1.39 (rately than small scale vortices. While this graceful degradation) 317.29 527 P
- X0.46 (may be \336ne or even desirable for special ef) 317.29 517 P
- X0.46 (fects applications, it is) 475.53 517 P
- X0.34 (problematic for visualizing vector \336elds such as the ones in \336gure) 317.29 507 P
- X(2, since detail in the small scale structures is lost.) 317.29 497 T
- X0.07 (V) 326.29 485.88 P
- X0.07 (an W) 331.78 485.88 P
- X0.07 (ijk\325) 350.7 485.88 P
- X0.07 (s spot noise algorithm[23] also suf) 362.69 485.88 P
- X0.07 (fers from this prob-) 486.94 485.88 P
- X1.51 (lem since the spots are elliptically stretched along a line in the) 317.29 475.88 P
- X1.26 (direction of the local \336eld. If the ellipse major axis exceeds the) 317.29 465.88 P
- X1.17 (local length scale of the vector \336eld, the spot noise will inaccu-) 317.29 455.88 P
- X0.07 (rately represent the vector \336eld. An accurate measure of local \336eld) 317.29 445.88 P
- X1.01 (behavior would require a global analysis of the \336eld. Such tech-) 317.29 435.88 P
- X-0.14 (niques currently do not exist for arbitrary vector \336elds, would most) 317.29 425.88 P
- X2.24 (likely be expensive to calculate[13] and are an area of active) 317.29 415.88 P
- X(research[7].) 317.29 405.88 T
- X0 F
- X(4. LINE INTEGRAL CONVOLUTION) 317.29 387.76 T
- X1 F
- X0.94 (The local behavior of the vector \336eld can be approximated by) 326.29 376.63 P
- X-0.01 (computing a local stream line that starts at the center of pixel \050) 317.29 366.63 P
- X3 F
- X-0.01 (x) 541.83 366.63 P
- X1 F
- X-0.01 (,) 545.82 366.63 P
- X3 F
- X-0.01 (y) 550.3 366.63 P
- X1 F
- X-0.01 (\051) 554.29 366.63 P
- X1.11 (and moves out in the positive and negative directions.) 317.29 356.63 P
- X1 7 Q
- X0.86 (1) 519.63 360.23 P
- X1 9 Q
- X1.11 ( The for-) 523.12 356.63 P
- X(ward coordinate advection is given by equation \0501\051.) 317.29 346.63 T
- X317.29 126 557.29 141 C
- X326.29 139 470.29 139 2 L
- X0.5 H
- X2 Z
- X0 X
- X0 K
- XN
- X0 0 612 792 C
- X1 6 Q
- X0 X
- X0 K
- X0.32 (1.) 317.29 123.87 P
- X1 8 Q
- X0.43 (V) 323.61 120.67 P
- X0.43 (ector \336eld lattice and image coordinates are usually speci\336ed in a left-) 328.49 120.67 P
- X-0.1 (handed coordinate system while vector components are usually speci\336ed in) 317.29 111.67 P
- X0.28 (a right-handed coordinate system. In this case, the) 317.29 102.67 P
- X3 F
- X0.28 (y) 481.62 102.67 P
- X1 F
- X0.28 (-component of the lat-) 485.17 102.67 P
- X-0.06 (tice coordinate in equation \0501\051 must be re\337ected about the vertical center of) 317.29 93.67 P
- X0.38 (the lattice to operate in a consistent coordinate system. This re\337ection has) 317.29 84.67 P
- X(been omitted to preserve simplicity of presentation.) 317.29 75.67 T
- X317.29 72 557.29 593 C
- X317.3 141 557.27 343.63 C
- X3 9 Q
- X0 X
- X0 K
- X(P) 347.44 331.08 T
- X1 7 Q
- X(0) 353.28 327.96 T
- X3 9 Q
- X(x) 376.1 331.08 T
- X1 F
- X(0) 389.52 331.08 T
- X(.) 394.01 331.08 T
- X(5) 396.26 331.08 T
- X3 F
- X(y) 405.25 331.08 T
- X1 F
- X(0) 418.68 331.08 T
- X(.) 423.17 331.08 T
- X(5) 425.42 331.08 T
- X4 F
- X(+) 411.49 331.08 T
- X(,) 400.76 331.08 T
- X(+) 382.34 331.08 T
- X(\050) 372.21 331.08 T
- X(\051) 430.3 331.08 T
- X(=) 361.28 331.08 T
- X3 F
- X(P) 347.6 300.72 T
- X3 7 Q
- X(i) 353.44 297.59 T
- X3 9 Q
- X(P) 369.32 300.72 T
- X3 7 Q
- X(i) 375.15 297.59 T
- X1 F
- X(1) 384.43 297.59 T
- X4 F
- X(-) 378.85 297.59 T
- X3 9 Q
- X(V) 404.11 309.31 T
- X(P) 421.52 309.31 T
- X3 7 Q
- X(i) 427.36 306.18 T
- X1 F
- X(1) 436.64 306.18 T
- X4 F
- X(-) 431.05 306.18 T
- X4 9 Q
- X(\050) 411.63 309.31 T
- X(\051) 446.52 309.31 T
- X3 F
- X(V) 404.11 294.52 T
- X(P) 421.52 294.52 T
- X3 7 Q
- X(i) 427.36 291.39 T
- X1 F
- X(1) 436.64 291.39 T
- X4 F
- X(-) 431.05 291.39 T
- X4 9 Q
- X(\050) 411.63 294.52 T
- X(\051) 446.52 294.52 T
- X(D) 458.3 300.72 T
- X3 F
- X(s) 464.33 300.72 T
- X3 7 Q
- X(i) 468.17 297.59 T
- X1 F
- X(1) 477.45 297.59 T
- X4 F
- X(-) 471.86 297.59 T
- X4 9 Q
- X(+) 390.18 300.72 T
- X(=) 359.88 300.72 T
- X416.52 305.67 416.52 315.46 2 L
- X0.33 H
- X0 Z
- XN
- X416.52 305.67 419.52 305.67 2 L
- XN
- X444.13 305.67 444.13 315.46 2 L
- XN
- X444.13 305.67 441.13 305.67 2 L
- XN
- X416.52 290.87 416.52 300.67 2 L
- XN
- X416.52 290.87 419.52 290.87 2 L
- XN
- X444.13 290.87 444.13 300.67 2 L
- XN
- X444.13 290.87 441.13 290.87 2 L
- XN
- X399.11 290.87 399.11 300.67 2 L
- XN
- X401.11 290.87 401.11 300.67 2 L
- XN
- X455.02 290.87 455.02 300.67 2 L
- XN
- X453.02 290.87 453.02 300.67 2 L
- XN
- X398.11 302.67 456.77 302.67 2 L
- XN
- X3 F
- X(V) 346.85 270.2 T
- X(P) 364.26 270.2 T
- X4 F
- X(\050) 354.37 270.2 T
- X(\051) 376.14 270.2 T
- X1 F
- X(t) 394.57 270.2 T
- X(h) 397.07 270.2 T
- X(e) 401.56 270.2 T
- X(v) 407.08 270.2 T
- X(e) 411.58 270.2 T
- X(c) 415.57 270.2 T
- X(t) 419.56 270.2 T
- X(o) 422.06 270.2 T
- X(r) 426.55 270.2 T
- X(f) 431.07 270.2 T
- X(r) 434.07 270.2 T
- X(o) 437.06 270.2 T
- X(m) 441.55 270.2 T
- X(t) 450.07 270.2 T
- X(h) 452.57 270.2 T
- X(e) 457.07 270.2 T
- X(i) 462.58 270.2 T
- X(n) 465.08 270.2 T
- X(p) 469.58 270.2 T
- X(u) 474.07 270.2 T
- X(t) 478.57 270.2 T
- X(v) 482.59 270.2 T
- X(e) 487.09 270.2 T
- X(c) 491.08 270.2 T
- X(t) 495.07 270.2 T
- X(o) 497.57 270.2 T
- X(r) 502.06 270.2 T
- X4 F
- X(=) 385.14 270.2 T
- X359.26 269.35 359.26 276.35 2 L
- XN
- X359.26 269.35 362.26 269.35 2 L
- XN
- X373.75 269.35 373.75 276.35 2 L
- XN
- X373.75 269.35 370.75 269.35 2 L
- XN
- X1 F
- X(f) 395.94 259.9 T
- X(i) 398.93 259.9 T
- X(e) 401.43 259.9 T
- X(l) 405.42 259.9 T
- X(d) 407.92 259.9 T
- X(a) 413.94 259.9 T
- X(t) 417.93 259.9 T
- X(l) 421.96 259.9 T
- X(a) 424.46 259.9 T
- X(t) 428.45 259.9 T
- X(t) 430.95 259.9 T
- X(i) 433.45 259.9 T
- X(c) 435.94 259.9 T
- X(e) 439.93 259.9 T
- X(p) 445.45 259.9 T
- X(o) 449.95 259.9 T
- X(i) 454.44 259.9 T
- X(n) 456.94 259.9 T
- X(t) 461.43 259.9 T
- X3 F
- X(P) 476.85 259.9 T
- X3 7 Q
- X(x) 482.68 256.77 T
- X3 9 Q
- X(P) 502.29 259.9 T
- X3 7 Q
- X(y) 508.12 256.77 T
- X4 9 Q
- X(,) 491.79 259.9 T
- X(\050) 466.96 259.9 T
- X(\051) 517.62 259.9 T
- X471.85 256.33 471.85 266.05 2 L
- XN
- X471.85 256.33 474.85 256.33 2 L
- XN
- X489.79 256.33 489.79 266.05 2 L
- XN
- X489.79 256.33 486.79 256.33 2 L
- XN
- X497.29 256.33 497.29 266.05 2 L
- XN
- X497.29 256.33 500.29 256.33 2 L
- XN
- X515.22 256.33 515.22 266.05 2 L
- XN
- X515.22 256.33 512.22 256.33 2 L
- XN
- X536.87 298.39 559.02 307.44 R
- X7 X
- XV
- X1 F
- X0 X
- X(\0501\051) 536.87 301.44 T
- X3 F
- X(s) 356.96 149.79 T
- X3 7 Q
- X(i) 360.8 146.66 T
- X4 9 Q
- X(D) 347.96 149.79 T
- X1 F
- X(m) 376.68 149.79 T
- X(i) 383.67 149.79 T
- X(n) 386.17 149.79 T
- X3 F
- X(s) 397.58 149.79 T
- X3 7 Q
- X(t) 401.42 146.66 T
- X(o) 403.9 146.66 T
- X(p) 407.93 146.66 T
- X3 9 Q
- X(s) 414.21 149.79 T
- X4 F
- X(,) 411.96 149.79 T
- X3 7 Q
- X(b) 418.05 146.09 T
- X(o) 422.08 146.09 T
- X(t) 426.11 146.09 T
- X(t) 428.6 146.09 T
- X(o) 431.08 146.09 T
- X(m) 435.11 146.09 T
- X3 9 Q
- X(s) 442.93 149.79 T
- X3 7 Q
- X(l) 446.77 146.66 T
- X(e) 449.25 146.66 T
- X(f) 452.89 146.66 T
- X(t) 455.38 146.66 T
- X4 9 Q
- X(,) 440.68 149.79 T
- X3 F
- X(s) 460.1 149.79 T
- X3 7 Q
- X(r) 463.94 146.66 T
- X(i) 467.2 146.66 T
- X(g) 469.68 146.66 T
- X(h) 473.71 146.66 T
- X(t) 477.74 146.66 T
- X4 9 Q
- X(,) 457.85 149.79 T
- X(\050) 393.69 149.79 T
- X(\051) 480.08 149.79 T
- X(=) 367.24 149.79 T
- X3 F
- X(s) 320.33 205.78 T
- X3 7 Q
- X(e) 324.17 202.65 T
- X4 9 Q
- X(\245) 348.41 236.08 T
- X1 F
- X(\021) 355.35 236.08 T
- X(i) 357.6 236.08 T
- X(f) 360.09 236.08 T
- X(\021) 363.09 236.08 T
- X3 F
- X(V) 366.86 236.08 T
- X1 F
- X(\021) 372.88 236.08 T
- X(|) 375.13 236.08 T
- X(|) 377.67 236.08 T
- X(\021) 379.47 236.08 T
- X3 F
- X(e) 383.25 236.08 T
- X1 F
- X(\021) 387.77 236.08 T
- X(\021) 390.02 236.08 T
- X(\021) 392.26 236.08 T
- X(\021) 394.51 236.08 T
- X(\021) 396.76 236.08 T
- X(\021) 399 236.08 T
- X(\021) 401.25 236.08 T
- X(\021) 403.5 236.08 T
- X(\021) 405.74 236.08 T
- X(\021) 407.99 236.08 T
- X(\021) 410.24 236.08 T
- X(\021) 412.48 236.08 T
- X(\021) 414.73 236.08 T
- X(\021) 416.98 236.08 T
- X(\021) 419.22 236.08 T
- X(\021) 421.47 236.08 T
- X(\021) 423.72 236.08 T
- X(0) 347.91 213.93 T
- X(\021) 352.94 213.93 T
- X(i) 355.18 213.93 T
- X(f) 357.68 213.93 T
- X(\021) 360.67 213.93 T
- X3 F
- X(P) 371.2 222.44 T
- X3 7 Q
- X(c) 377.04 219.31 T
- X3 9 Q
- X(P) 395.58 222.44 T
- X3 7 Q
- X(c) 401.41 219.31 T
- X4 9 Q
- X(-) 388.39 222.44 T
- X3 F
- X(V) 380.39 207.72 T
- X3 7 Q
- X(c) 386.23 204.59 T
- X1 9 Q
- X(0) 414.7 213.93 T
- X(\021) 419.72 213.93 T
- X(\021) 421.97 213.93 T
- X(\021) 424.22 213.93 T
- X4 F
- X(<) 407.52 213.93 T
- X3 F
- X(P) 354.67 192.5 T
- X3 7 Q
- X(c) 360.51 189.37 T
- X3 9 Q
- X(P) 379.05 192.5 T
- X3 7 Q
- X(c) 384.88 189.37 T
- X4 9 Q
- X(-) 371.86 192.5 T
- X3 F
- X(V) 363.86 177.78 T
- X3 7 Q
- X(c) 369.7 174.65 T
- X1 9 Q
- X(\021) 389.27 183.99 T
- X(o) 391.51 183.99 T
- X(t) 396.01 183.99 T
- X(h) 398.5 183.99 T
- X(e) 403 183.99 T
- X(r) 406.99 183.99 T
- X(w) 409.98 183.99 T
- X(i) 416.47 183.99 T
- X(s) 418.97 183.99 T
- X(e) 422.46 183.99 T
- X4 F
- X(\356) 342.71 176.55 T
- X(\357) 342.71 185.59 T
- X(\357) 342.71 194.71 T
- X(\355) 342.71 203.88 T
- X(\357) 342.71 213 T
- X(\357) 342.71 222.12 T
- X(\354) 342.71 231.2 T
- X(=) 331.77 205.78 T
- X366.2 218.87 366.2 228.59 2 L
- XN
- X366.2 218.87 369.2 218.87 2 L
- XN
- X384.14 218.87 384.14 228.59 2 L
- XN
- X384.14 218.87 381.14 218.87 2 L
- XN
- X365.2 215.87 404.27 215.87 2 L
- XN
- X349.67 188.93 349.67 198.65 2 L
- XN
- X349.67 188.93 352.67 188.93 2 L
- XN
- X367.61 188.93 367.61 198.65 2 L
- XN
- X367.61 188.93 364.61 188.93 2 L
- XN
- X348.67 185.93 387.73 185.93 2 L
- XN
- X1 F
- X(f) 426.5 204.95 T
- X(o) 429.49 204.95 T
- X(r) 433.98 204.95 T
- X3 F
- X(e) 443.89 204.95 T
- X(c) 452.38 204.95 T
- X4 F
- X(,) 447.88 204.95 T
- X(\050) 440.01 204.95 T
- X(\051) 456.76 204.95 T
- X3 F
- X(t) 491.79 225.78 T
- X(o) 494.82 225.78 T
- X(p) 499.84 225.78 T
- X(y) 508.83 225.78 T
- X4 F
- X(,) 504.33 225.78 T
- X(\050) 487.9 225.78 T
- X(\051) 513.22 225.78 T
- X3 F
- X(b) 484.26 212.14 T
- X(o) 489.28 212.14 T
- X(t) 494.3 212.14 T
- X(t) 497.33 212.14 T
- X(o) 500.36 212.14 T
- X(m) 505.38 212.14 T
- X(y) 516.37 212.14 T
- X4 F
- X(,) 511.87 212.14 T
- X(\050) 480.37 212.14 T
- X(\051) 520.75 212.14 T
- X3 F
- X(l) 491.53 198.5 T
- X(e) 494.55 198.5 T
- X(f) 499.07 198.5 T
- X(t) 502.1 198.5 T
- X(x) 509.1 198.5 T
- X4 F
- X(,) 504.6 198.5 T
- X(\050) 487.64 198.5 T
- X(\051) 513.48 198.5 T
- X3 F
- X(r) 488.26 184.86 T
- X(i) 492.29 184.86 T
- X(g) 495.32 184.86 T
- X(h) 500.34 184.86 T
- X(t) 505.36 184.86 T
- X(x) 512.36 184.86 T
- X4 F
- X(,) 507.86 184.86 T
- X(\050) 484.38 184.86 T
- X(\051) 516.74 184.86 T
- X(\356) 473.66 184.84 T
- X(\376) 525.76 184.84 T
- X(\357) 473.66 193.89 T
- X(\357) 525.76 193.89 T
- X(\355) 473.66 203.05 T
- X(\375) 525.76 203.05 T
- X(\357) 473.66 212.18 T
- X(\357) 525.76 212.18 T
- X(\354) 473.66 221.25 T
- X(\374) 525.76 221.25 T
- X(\316) 463.51 204.95 T
- X537.02 203.5 559.16 212.55 R
- X7 X
- XV
- X1 F
- X0 X
- X(\0502\051) 537.02 206.55 T
- X317.29 72 557.29 593 C
- X0 0 612 792 C
- X317.3 598.46 557.28 738 C
- X317.3 598.46 557.28 738 R
- X7 X
- X0 K
- XV
- X317.3 598.46 557.28 616.46 R
- XV
- X5 8 Q
- X0 X
- X(Figur) 317.3 611.13 T
- X(e 2: Cir) 335.4 611.13 T
- X(cular and turbulent \337uid dynamics vector \336elds) 362.12 611.13 T
- X(imaged using DDA convolution over white noise.) 317.3 602.13 T
- X318.02 621.72 556.56 737.28 R
- X7 X
- XV
- X0.1 H
- X2 Z
- X14 X
- XN
- X0 0 612 792 C
- X54 72 293.98 334.51 C
- X54 72 293.98 90 R
- X7 X
- X0 K
- XV
- X5 8 Q
- X0 X
- X(Figur) 54 84.67 T
- X(e 1: The mapping of a vector onto a DDA line and input) 72.09 84.67 T
- X(pixel \336eld generating a single output pixel.) 54 75.67 T
- X0 -5 -30 395 370 239.98 239.98 54 94.54 FMBEGINEPSF
- X%%BeginDocument: /home/u06/cabral/avs/data/final.paper/figure1.eps
- X%!PS-Adobe-3.0 EPSF-3.0
- X%%Creator: LIC
- X%%DocumentFonts: AvantGarde-Book
- X%%BoundingBox: -5 -30 395 370
- X%%Pages: 1
- X%%EndComments
- X%%EndProlog
- X%%Page: 1 1
- X
- Xgsave
- X/AvantGarde-Book findfont 25.0 scalefont setfont
- X
- X/Xrange 200.0 def
- X/Yrange 200.0 def
- X/Xmin 0.0 def
- X/Xmax 200.0 def
- X/Ymin 0.0 def
- X/Ymax 200.0 def
- X/dx 10.0 def
- X/dy 10.0 def
- X
- X/arrow
- X{
- X gsave
- X 300 -300 scale
- X translate
- X atan neg rotate
- X newpath
- X 0.0 0.0 moveto
- X 0.2 0.0 lineto
- X -0.05 0.03 rlineto
- X 0.2 0.0 moveto
- X -0.05 -0.03 rlineto
- X 0.0 setgray
- X 0.01 setlinewidth
- X stroke
- X grestore
- X} def
- X
- X/vector
- X{
- X gsave
- X 300 -300 scale
- X translate
- X atan neg rotate
- X newpath
- X -0.3 0.0 moveto
- X 0.3 0.0 lineto
- X 0.0 setgray
- X 0.005 setlinewidth
- X stroke
- X grestore
- X} def
- X
- X/SetWorld
- X{
- X 144.0 Xrange div 72.0 Yrange div scale
- X} def
- X
- X/verticals
- X{
- X newpath
- X Xmin dx Xmax
- X {
- X Ymin moveto
- X Xmax Ymax rlineto
- X } for
- X stroke
- X} def
- X
- X/horizontals
- X{
- X newpath
- X Ymin dy Ymax
- X {
- X dup moveto
- X Xmax 0 rlineto
- X } for
- X stroke
- X} def
- X
- X/layer
- X{
- X gsave
- X 0 exch translate
- X verticals
- X horizontals
- X grestore
- X} def
- X
- X/outline
- X{
- X gsave
- X 0 exch translate
- X newpath
- X 0 0 moveto
- X Xmax 0 rlineto
- X Xmax Ymax rlineto
- X Xmax neg 0 rlineto
- X Xmax neg Ymax neg rlineto
- X stroke
- X grestore
- X} def
- X
- X/graybox
- X{
- X gsave
- X newpath
- X moveto
- X dx 0 rlineto
- X dx dy rlineto
- X dx neg 0 rlineto
- X dx neg dy neg rlineto
- X closepath
- X setgray
- X fill
- X grestore
- X} def
- X
- X/dropline
- X{
- X gsave
- X newpath
- X dy 2 div add exch
- X dx add exch
- X moveto
- X 0 -250 rlineto
- X setgray
- X stroke
- X grestore
- X} def
- X
- X/randomlayer
- X{
- X gsave
- X 0 exch translate
- X 31601 srand
- X Ymin dy Ymax dy sub
- X {
- X dup
- X dup dx 2 copy pop Xmax dx sub add
- X {
- X exch
- X rand 2 31 exp div
- X 0.5 mul 0.5 add
- X 3 1 roll
- X graybox
- X dup
- X } for
- X } for
- X grestore
- X} def
- X
- X/graylayer
- X{
- X gsave
- X 0 exch translate
- X 31601 srand
- X Ymin dy Ymax dy sub
- X {
- X dup
- X dup dx 2 copy pop Xmax dx sub add
- X {
- X exch
- X 0.7
- X 3 1 roll
- X graybox
- X dup
- X } for
- X } for
- X grestore
- X} def
- X
- X
- X/ddalayer
- X{
- X gsave
- X translate
- X
- X 3 1 roll
- X atan dup cos exch sin
- X 3 -1 roll
- X
- X dup
- X 4 1 roll
- X
- X /y1 5 1 roll mul neg 4 -1 roll exch truncate def
- X /x1 3 1 roll mul neg truncate def
- X /y2 y1 neg def
- X /x2 x1 neg def
- X
- X /yy y1 def
- X /xx x1 1 sub def
- X
- X /Dy y2 y1 sub abs def
- X /Dx x2 x1 sub abs def
- X
- X /e Dy 2 mul Dx sub def
- X
- X 1 1 Dx
- X {
- X 0.4 xx dx mul yy dy mul dropline
- X
- X 0.65 xx dx mul yy dy mul graybox
- X
- X e 0 gt {/yy yy 1 add def
- X /e 2 Dy mul 2 Dx mul sub e add def}
- X {/e 2 Dy mul e add def} ifelse
- X /xx xx 1 add def
- X } for
- X
- X grestore
- X} def
- X
- X/label
- X{
- X gsave
- X 0.0 setgray
- X 3 1 roll
- X moveto
- X Xmax Ymax rmoveto
- X 0.5 1.0 scale
- X show
- X grestore
- X} def
- X
- X/centerline
- X{
- X gsave
- X
- X dup
- X 3 2 roll
- X dup
- X 4 1 roll
- X exch
- X
- X 0 setgray
- X newpath
- X moveto
- X 0 155 rlineto
- X stroke
- X
- X 0.55 setgray
- END_OF_FILE
- if test 47609 -ne `wc -c <'lic.1.2/doc/siggraph93/paper.ps.A'`; then
- echo shar: \"'lic.1.2/doc/siggraph93/paper.ps.A'\" unpacked with wrong size!
- elif test -f 'lic.1.2/doc/siggraph93/paper.ps.B' && test -f 'lic.1.2/doc/siggraph93/paper.ps.C'; then
- echo shar: Combining \"'lic.1.2/doc/siggraph93/paper.ps'\" \(170079 characters\)
- cat 'lic.1.2/doc/siggraph93/paper.ps.A' 'lic.1.2/doc/siggraph93/paper.ps.B' 'lic.1.2/doc/siggraph93/paper.ps.C' > 'lic.1.2/doc/siggraph93/paper.ps'
- if test 170079 -ne `wc -c <'lic.1.2/doc/siggraph93/paper.ps'`; then
- echo shar: \"'lic.1.2/doc/siggraph93/paper.ps'\" combined with wrong size!
- else
- rm lic.1.2/doc/siggraph93/paper.ps.A lic.1.2/doc/siggraph93/paper.ps.B lic.1.2/doc/siggraph93/paper.ps.C
- fi
- fi
- # end of 'lic.1.2/doc/siggraph93/paper.ps.A'
- fi
- echo shar: End of archive 5 \(of 10\).
- cp /dev/null ark5isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 10 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still must unpack the following archives:
- echo " " ${MISSING}
- fi
- exit 0
- exit 0 # Just in case...
-