[net.graphics] Here it is! A summary of Core & related systems

edds@unc.UUCP (Tom Edds) (05/15/84)

   Several months ago I sent out a request for information on implementations 
of CORE.  This being my first inquiry to the net, I was amazed at all
the helpful responses I got, including information not only on CORE, but 
also on systems based on the GKS standard, and some other tidbits. 
   Last week I sent out an inquiry to see who was interested in what I'd 
found; again, I was surprised by the number of responses. 
   Following a suggestion made by several people, I am posting this 
rather than mailing it. 


Here is the summary:

      --------------------------------------------------------------
   
   One well-known implementation of the the Core standard is GWCORE, 
done at George Washington University. It is written in  FORTRAN, and 
includes a FORTRAN driver for TEK 401x devices, and a C Driver for a 
RAMTEK 9400. 
   A detailed description of the Core System was given in an article by 
Jim Foley, (who is at GWU) in the Aug. 82 issue of Computer Graphics World.
  More current information comes from the February issue of the Klein 
Newsletter on Computer Graphics:
....
GWU Offers Enhanced Version of Its CORE Subroutine Package

Claiming distribution at 100 locations, The George Washington University, 
unveils an enhanced version of its device-independent, 3-D SIGGRAPH-CORE 
graphics subroutine package, called GW Core.  The package incorporates 
that standard's output Level 3C, having 3-D output primitives; image, 
modeling, and viewing transformations; segments; and raster extensions.  
It also incorporates Level 3 synchronous and asynchronous input functions.  
GW Core runs under VMS on VAX computers, UNIX, and other operating systems.  
Fee for single CPU use: $1,000 US (for colleges $500 US).
Contact Chuck McMath, Research Associate, Department
of Electrical Engineering and Computer Science,
The George Washington University, Washington, D.C 20052 (202/676-5923).
 
      --------------------------------------------------------------

   Here is another:

I have a C-language version of the SIGGRAPH Core at a basic level (2-D only,
no segmentation, some input primitives).  The program runs under 4.1bsd UNIX
and supports about nine different devices with more to come:  AED-512 frame
buffer, Ikonas frame buffer, Raster Technologies model one frame buffer,
ID100-V graphics terminal, Versatec V-80 plotter, Ramtek color printer,
Symbolics laser printer, CIF (for putting graphics on your VLSI chips), and
normal video terminals with TERMCAP cursor control.  Release status is not
known yet, but further information will be available soon.  Documentation is
available now.
        Steve Rubin   <Strubin at SRI-KL>

   However, note this comment:

   There is one in existance, developed (I believe) by steve rubin at fairchild
("flairvax" on usenet).  Having used both that package, and the original
core graphics package done by G. Washington U., I would question if you
really want to use CORE.  CORE is -increadably- clumsy with raster and 
bitmapped graphics; and is already becoming archaic.  It usually isn't that
hard to design your own portable graphics package, and it's usually less of a
headache than dealing with all the oddities of individual CORE implementations.

ps- the flair CORE implentation was oriented towards doing graphics for VLSI
design, and was missing some of the CORE features not relating to those applications.

       --------------------------------------------------------------
   Another one came from Michael Wayne Young <Michael.Young at CMU-CS-A>:

I have such a package in the works for 4.1BSD; it's a SIGGRAPH "Core" system
written for any version 7 or better system (which of course includes System
IIII or 4.1BSD running on Vaxen).  It currently supports level 1 input and
level 1 output; that is, full 3D viewing, no segmentation, no input.  It
supports the definition of various attributes (such as color, which is what
you're interested in); it's up to the device driver to decide how much to
actually implement though, and the devices I've had are primarily monochrome
(4010 series, hp2648, Tek 4025), but some support color (an AED 512, a Dec
Gigi terminal, and an hp7221 plotter [4 pens]).

Currently, all of level 1 i/o is complete; it is currently in use in part 
of a larger graphics system (only in size, not complexity...) at the 
University of Delaware.

A fairly sophisticated device assignment feature is provided (but not 
mandated); it allows various device types to be handled on any output file 
(discriminated at runtime), with various device options (like screen window, 
startup color, device defaults).  It also allows output to be piped to a 
command, if that's your interest.  [I've used that a lot to build device 
drivers without having a device available.]

It's fully device-independent; the effort involved in building an additional 
device driver is minimal (for me, at least, as nobody else has had to try yet). 
It relies heavily on standard device driver parts, to maintain continuity among drivers.

It's all C code, but is barely accessible from Pascal.  [I have an include file
for Pascal use, but it's been minimally tested.]  Fortran (IV or -77) support 
is not even conjectured yet, as most parameters are passed by value now, and 
I see no need to change that either.  [It'd be a matter of writing a F77-C 
interface.]

What I plan to be doing in the next 1-2 months is finishing up level 2 
(and maybe 3) output; this would add segmentation and the associated visibility
handling.  Batching of updates would become more important.  I am currently 
part-way through this section, but it's not available yet.

I have no current timetable for the inclusion of graphical input; aside from 
simple "locator" input (joystick or cross-hair cursor), none of my devices 
could do anything anyway, so it's not that important.  A possible intermediate
stage is an "escape" function to read this joystick position.

I think what I have is probably sufficient for what you want to do...
moderately tough vector graphics, primarily for plots, in a device-independent
way.  If you have any questions/doubts/whatever, don't hesitate to let me know.

Now, as for the "distribution" of the package:  I'll give it out for free, but
I want to retain copyrights on it. [I.e. not public domain, but free to use.]
What I'd need is a statement from you saying that you were to use the package
for yourselves only, and not to distribute it, plus I guess to pass back
changes to me (although I'm not sticky on that point).  Let me know if this is
the only problem; I'm sure we can arrange something if you're still interested.

			Michael

     (This seemed like an old note; he's probably already done a lot
        of the planned changes.)
 
      --------------------------------------------------------------

      And yet another:

You we asking about implementations of the SIGGRAPH CORE system written in C.

I have an implemention of CORE.  It is level ("basic","no-input","3D").  
I am currently adding the raster extensions to bring it to level ("basic",
"no-input","3D","none").  The implementation is not complete, it lacks the 
following CORE functions:

     map_world_to_ndc_2              map_world_to_ndc_3  
     map_ndc_to_world_2              map_ndc_to_world_3
     set_primitive_attributes_2      set_primitive_attributes_3
     inquire_primitive_attributes_2  inquire_primitive_attributes_3
     set_viewing_parameters          inquire_viewing_parameters 
     inquire_output_capabilities

Most of these could be easily implemented, I just haven't had the time or 
need for them yet.

The system is all written in C and conforms to the '79 proposed standard as 
close as possible.  It currently requires long variable names (the full CORE 
function names are used) and may have 4BSD/VAX dependancies.  I have a short 
naming convention defined (6 letters for FORTRAN) but haven't implemented 
it yet.  (The functions names are really bizarre!)

It supports the following devices:
Tek401x, DEC GIGI (vk100), BBN Bitgraph, SELANAR vt100 graphics (in tek mode),
Tek4662 plotter (with 8 pen option), DEC LXY11 printer/plotter, Houston
Instruments DMP-29 plotter, Vextrix Corp. Vectrix (raster device).  New device 
drivers are easy to add, initially most of the work can be deligated to the 
centralized device dispatcher (which can perform some simulations).

There is currently very little documentation with the system (almost none),
but some prodding could get me to sit down and do the work necessary.

I wrote this package as part of my requirements for an honours degree in CS 
and would be glad to distribute it.  I feel however that I should do some 
further work making a cleaner distribution.  If there is enough interest in 
getting this package I would be glad to do it.

				Hope this helps,
				John McCarthy.

     UUCP.us:  ucbvax!allegra!garfield!john
               ihnp4!garfield!john
     MA BELL:  (709) 737-8330
     SNAIL: Computing Services;Memorial University;St. John's, NFLD.;A1C 5S7

      ------------------------------------------------------     

     Other information about CORE:

    There is a survey of graphics software in Computer Graphics World, 
Vol 5 no 8, August 1982.  The CLICS package was available to the public 
on USENIX a few years ago.  It was written in C but was 2-D with no input 
routines.  It has now been extended and is sold by Garrett Information Systems, Crofton, MD.

                * * * * * *

   One [CORE implementation] of these was written by DOD in C. It is not very 
well written as it was the author's first C project.  It is 2D only, but 
has a reasonable device dependent - device independent interface.

Another is available commercially from Precision Visuals, it is called DI-3000.
It is a 3D implementation of CORE that includes many tools for editting/viewing
metafiles.  They do have versions for UNIX CPU's but you will have to pay
much $$$ for it as it is a commercial product.

The dodcore I have was in a Usenix distribution, I don't remember which one.

                * * * * * *

Contact Joe Pato at Brown University -- they distribute (or did, anyway) a 2D
subset of the CORE standard, I believe available in both C and Pascal.

                * * * * * *

Apollo has this implemented.  I have not personally examined it, but there
are a large number of nice graphics programs and games running on Apollos.

In case you are unfamiliar with Apollo, they have a number of very nice
workstations with bit-mapped high res screen, windowing, multi-processing
and session management, built-in networking and distributed file system
etc.  available for $12K (diskless) - $60K (in color) [before discount].
They run a unix-like op sys designed for windowing and networking; their C
compiler runs unix code, you can run unix (and unix programs) in any
window.  They make any pure unix machine look real shabby.

I doubt you could buy the code from them without a machine to go with it.

                * * * * * *

  Sun Microsystems machines implement the SIGGRAPH CORE system in C.  
I am currently trying to write some image processing and display routines 
in it with partial success. 

    -------------------------------------------------------------

   I also got some good information about GKS systems:

David Rosenthal has written an implementation of GKS (one of the proposed ISO
and US graphics standards) for UNIX.  GKS is functionally similar to a 2-D
SIGGRAPH core system, with several groups working on the 3-D version.  It is
also the case that SUN Microsystems (Jerry Evans, if my memory serves me,
though Bill Joy would know also) is writing a UNIX version of GKS.  You should
also contact Precision Visuals (if you are interested in commercial software),
as I believe they have DI-3000 (SIGGRAPH CORE system) running under UNIX.

    David Rosenthal
    Strichting Mathematicsh Centrum
    Kruislaan 413 1098 SJ Amsterdam
    Postbus 4079 1009 AB Amsterdam
    THE NETHERLANDS
        Phone: (020) 592-9333  (Don't try this unless you speak Dutch.)
        Telex: NETHERLANDS 12571 (this should be checked)
        Uucp: ucbvax!decvax!mcvax!david (sometimes this works)

    Bill Joy
    SUN Microsystems Inc
    2310 Walsh Ave
    Santa Clara, CA  95051

------------------------------------------------------------------------------


Here at The Mathematical Centre, Amsterdam, an implementation of GKS, the
draft International (and ANSI) standard for 2D graphics software, is underway.
It is being made available, but to find out the terms you will have to mail
..decvax!mcvax!paulh (Paul ten Hagen).

I did some of the design, but am not involved in the implementation.  GKS
defines a 3*3 matrix of capabilities, viz:

Output		Input
	None	Synch	Asynch
Basic	Works	Works	Wait 4.2BSD
Segment	Works	Works	Wait 4.2BSD
Full	Untest	Untest	Wait 4.2BSD

Some work is still needed even on the bits that work to make them
fully distributable  (e.g.  clean up makefiles,  translate comments
from Dutch).  At present the interface between the Device Independent
parts and the Device Dependent bits (drivers) is very low-level and
does not exploit the capabilities of advanced devices.  Most testing
uses an AED512.

For information on GKS,  contact the ANSI committee:
	ANSI X3H3
	c/o Dr. Peter R. Bono
	Athena Systems Inc.
	206 South Broad St.
	Pawcatuck,  CT 06379
	203-599-3061
	                           David Rosenthal
        * * * *

     There is also an up to date report on graphics standards in the 
February 1984 issue of Computer Graphics World.

                 Thanks once again for your input; 
                 Happy plotting to you.

       Tom Edds
       edds@unc