RFC 965

Format for a graphical communication protocol

๐Ÿ“… published December 1985, from ietf

RFC 965 โœจ

Part 1 of 11 ๐ŸŽ€

Okay bestie, so RFC 965 is a December 1985 doc from the Network Working Group, written by Lorenzo Aguilar at SRI International. It's called "A Format for a Graphical Communication Protocol" ๐Ÿฆ‹ The header doesn't list a category or say what it obsoletes or updates, so there's nothing to report on that front ๐Ÿ’…

Status of This Memo ๐ŸŒธ

This paper lays out the requirements for a graphical format that could be the base of a graphical on-line communication protocol. The proposal is an Interactive Graphical Communication Format built on the GKSM session metafile. Distribution of this memo is unlimited ๐Ÿ’–

ABSTRACT ๐Ÿ”ฅ

This paper lays out the requirements for a graphical format that could be the base of a graphical on-line communication protocol. The argument is that on-line graphical communication is basically like graphical session capture, which is why we propose an Interactive Graphical Communication Format using the GKSM session metafile ๐Ÿงš

We go through the things we think complement the GKSM metafile as a format for on-line interactive exchanges. One big application area is multi-media on-line conferencing, so we also present a conferencing software architecture for processing the proposed format. We're making this format spec available to anyone planning multi-media conferencing systems, as a contribution toward a graphical communication protocol that lets these systems interoperate ๐Ÿซถ

We hope this encourages discussion of multimedia data exchange and proposals for solutions. At SRI, we stay open to exploring alternatives, and we'll keep up our research and development work in this problem area โœจ

ACKNOWLEDGEMENTS ๐ŸŽ€

The author wants to thank Andy Poggio of SRI, who made lots of insightful, valuable suggestions that trimmed and improved level U. His expertise in multi-media communication systems and his encouragement were a seriously positive input to the creation of this IGCF ๐Ÿ‘‘ Dave Worthington of SRI also joined the project discussions about this IGCF. Thanks are also due to Tom Powers, chairman of ANSI X3H33, who opened the forum for presenting an earlier version of this paper, which gave us the invaluable feedback of the X3H33 members ๐Ÿ™Œ Jon Postel of ISI recommended a bunch of changes that made this paper more coherent and accessible ๐Ÿ“š

Most of the work in this paper was sponsored by the U.S. Navy, Naval Electronic Systems Command, Washington D.C., under Contract No. N00039-83-K-0623 ๐Ÿ’ผ

I. INTRODUCTION ๐Ÿฆ‹

A. Use of a Graphical Communication Protocol ๐Ÿ’œ

In computer communications, a protocol is a procedure run by two cooperating processes so they can reach a meaningful exchange of information. A graphical communication protocol is needed to exchange interactive vector graphics information, possibly alongside other media like voice, text, and video ๐ŸŽฌ In this multi-media environment, computer vector graphics is a key player, because it takes full advantage of the processing power of communicating computers and human users. That makes it way more compact than digital images, which aren't generated from data structures containing positional information. Vector graphical communication trades heavy storage and processing at the communicating ends for a low volume of exchanged data, since workstations with graphical hardware swap graphics commands along with large data structures at the transmitter and receivers. So one command can cause huge changes in the data displayed at both the sending and receiving ends ๐Ÿคฏ

It helps to place this protocol at one of the functional levels of the ISO Open Systems Interconnection Reference Model [1]. In that model, graphical protocol functionality mainly belongs in the application level, though some of it fits in the presentation level. We can tell apart these components of a communication protocol:

  • a) a data format
  • b) rules to interpret transmitted data
  • c) state information tables
  • d) message exchange rules

A format for a graphical protocol should provide the layout of the transmitted data and show how the formatted data are tied to interpretation rules. The format you pick shapes the state tables you need to keep for correctly processing the data stream. The graphical format has only a minor influence on the exchange rules, which should provide for efficient use of transmission capacity to carry data in that format ๐Ÿ“ฆ Besides the graphical format, other parts of a graphical protocol also decide the state tables and exchange rules. This paper focuses on the data format and doesn't discuss message exchange. Still, we do talk about a simple software architecture for generating and interpreting data streams written in our proposed format. We also give an example of applying the proposed format (in Appendix B), which shows the kinds of message exchanges needed to set up a communication session and trade graphical information ๐Ÿงฉ

People in the computer communication field know how important widely accepted protocols are for meaningful communication. Those who need interactive graphical communication today are stuck with no standard for computer graphics communication among application programs ๐Ÿ˜ค Still, we can build on work the computer graphics standard bodies have already done. In fact, ISO and ANSI have already appended the GKSM session metafile specification to the Graphical Kernel System (GKS) standard, and it has lots of the features an on-line graphical protocol needs ๐ŸŒˆ

Here's an example of graphical communication that shows how real-time the interaction is and how graphics can be used alongside other media. With audio-graphics conferencing, a group of people at two or more locations can hold an electronic meeting. They can talk over voice channels while sharing a graphics space where they display, point at, and manipulate vector graphics pictures [2, 3, 4, 5, 6, 7] ๐ŸŽค

The conference voice channels can come from a variety of transmission technologies. The shared graphics space can run on workstations that display the pictures and allow graphical interaction and communication with other locations. Operations on pictures involve changes to the underlying data structures, but we only care about graphical database updating to the extent that it supports the communication ๐Ÿ–ผ๏ธ

To play back a recorded graphical session, we need to know the rate at which graphical elements must be shown and graphical operations recreated. We don't include a way to indicate session timing in a format, because our main goal is mixed-media communication environments. There, play-out timing has to match across media so they stay coordinated, so we leave timing mechanisms to conference-control modules ๐Ÿ•ฐ๏ธ We also leave it to conference control processes to decide how a conferee station emulates a graphical capability it lacks. One example is showing color on monochrome displays ๐Ÿ–ค

B. Relationship to Other Work ๐Ÿง 

There are a bunch of actual and proposed standards for graphics information exchange. Below, we explain why, right now, none of them can be the basis of an on-line protocol. Some may become suitable as they evolve, though. Plus, experience from early on-line graphics communication systems will show what standard extensions are needed to support more advanced systems. That insight could also be used to modify the format proposed here, which we see as an initial approach to the problem. Down the road, the format in this paper could be replaced by one of those extended standards ๐Ÿ”ฎ

The North American Presentation Level Protocol Syntax, NAPLPS, specifies a data syntax and application semantics for one-way teletext information dissemination and two-way videotex database access and transaction services. The two-way videotex operational model is built on the idea of a consumer and an information provider or service operator. Because of that asymmetry, almost all graphical information is assumed to flow from the provider toward the consumer. In the other direction, the consumer mostly manipulates and sends alphanumeric information. Even though this standard includes geometric drawing primitives, a user can't directly modify shapes drawn with those primitives ๐Ÿ˜ญ

Right now NAPLPS doesn't include interaction concepts like picture transformations or detectability, which are basic to a shared graphical workspace. It also doesn't support key graphics input devices like mice, joysticks, stylus, rotating balls, or light pens, which are needed for simple, efficient editing of the shared workspace ๐Ÿ–ฑ๏ธ

We want user-to-user graphical communication with the sophistication and ease of interaction you get from today's interactive graphics packages. Computer vector graphics can deliver both, because its paradigm includes an application program that keeps track of a huge number of possible state changes in the displayed picture. On top of that, the application drives a powerful graphics package, like GKS or ACM Core. In the videotex paradigm, the provider application only allows limited changes to the displayed image, mostly database retrieval requests. And that paradigm has no separate graphics package. Both the graphics functionality and the data format get squished into a coding specification, like NAPLPS ๐Ÿ™„

Here we're mainly interested in business and industrial applications where vector graphics information flows two ways, or multi-way, among users. Those users will have workstations with serious processing and storage capacity and high-resolution monitors. Plus, the communication will run on a distributed architecture that doesn't depend on a central server host, unlike the provider application host in videotex ๐Ÿข๐Ÿ’…


Okay bestie, so the consumer end of videotex right now is basically cheap microprocessor decoders or personal computer boards, usually hooked up to low-res standard TV sets and PC displays ๐Ÿ“บ It's giving budget setup ๐Ÿ’€ But sophisticated decoders and high-resolution graphics devices are already affordable, so the videotex standards need some big revisions to keep up โœจ Especially, they should treat the receiving devices as able to host a programmable customer-application process ๐Ÿงš Once that happens, videotex protocols will be applicable to our intended problem areas [8]. Iconic glow-up ๐Ÿ’…

The Computer Graphics Metafile [9] is about to become an international and North American standard for graphics picture interchange ๐ŸŽ€ Obsessed for it, but here's the tea: the CGM, also referred as VDM, is a picture-capture metafile. It only records the final result of a graphics session ๐Ÿ™ˆ It is not meant to record the picture-creation process, and that process is the whole point for the interactive applications we're going after. Plus, the CGM is currently aimed at a minimum support of GKS functionality, so it'll be some time before it has some of the elements needed for on-line interaction ๐Ÿซ  If, after those additions, the CGM gets augmented for session capture, it would become a logical candidate for a protocol format ๐Ÿฆ‹

Next up is the Computer Graphics Interface, CGI also referred as VDI [10] ๐ŸŒˆ The CGI is a standard functional and syntactical specification of the control and data exchange between device-independent graphics software and one or more device-dependent graphics device drivers. Its major use is communication between an application host and a graphics device, but the asymmetry between its intended communicating ends makes it hard to use CGI for our purposes ๐Ÿ˜ญ

Now, we want to take advantage of intelligence and storage at the communicating ends so we can get powerful information-conveying effects over narrow-bandwidth channels ๐Ÿ’œ That means the format we want has to include items for communication between two applications. The CGI streams, on the other hand, are processed by device-dependent drivers rather than by applications. The CGI spec does include application data elements, but only so they can be stored in a metafile. The drivers don't interpret them. Applications that read the metafile do, some time after the metafile was created โญ

The CGI also has elements for obtaining graphical input, plus elements for inquiring graphics device capabilities, characteristics, and states. Later, in Section III, we explain why those two classes of elements are unnecessary for the communication protocol we need ๐Ÿ“ As the CGI evolves it will undergo significant changes, and in the future it may become a very suitable kernel for the graphics protocol we seek. Honestly, the CGI will be the communication protocol between graphical application hosts and graphics terminals ๐Ÿ‘‘ At SRI we're tracking its evolution, and we're interested in defining a format based on the CGI ๐Ÿซถ

Last but not least, the Initial Graphics Exchange Specification [11] isn't aimed at our primary area of interest ๐Ÿ™ˆ IGES defines standard file and language formats for storing and transmitting product-definition data. That data can be used, in part, to generate engineering drawings and other graphical representations of engineering products. Besides the CAD orientation of IGES, the graphical output function may be secondary to other goals, like transmitting numerical-control machine instructions ๐Ÿ”ง

2. OPERATIONAL REQUIREMENTS AND USABILITY โœจ

okay so this part is where the authors get real about what an IGCF (interactive graphical communication format) actually NEEDS to do to be useful. the main goal is laying the groundwork for a vector graphics format that can be the basis for an on-line graphical communication protocol ๐ŸŽ€ bestie, they call it an "interactive graphical communication format," or IGCF, and we're going to see what it has to be like. let's gooo ๐Ÿ’…

A. Interoperation of Heterogeneous Systems ๐ŸŒˆ

okay first up, an IGCF MUST let systems talk to each other even when they're totally different, like different hardware AND different graphics software interfaces. this is literally the foundation ๐Ÿ˜ญ it's what lets similar graphics apps on dissimilar machines actually vibe together. examples they give are graphics editors, CAD systems, and graphical database retrieval programs, talking to other editors, CAD programs, and graphical databases respectively. main character energy for interoperability ๐Ÿ‘‘

B. Picture Capture ๐Ÿ“ธ

an IGCF MUST be usable for exchanging static pictures (aka picture capture), but it MUST NOT be limited to only recording the final picture ๐Ÿ™ˆ there's gonna be picture swapping during the convo, and people will want to save the state of a picture at different points during a live graphics session. they also foresee IGCF libraries full of object definitions and pictures you can drop into new pictures, which is so iconic ๐Ÿงš

metafiles have been the go-to for capturing pictures for ages, so there's a strong reason to base an IGCF on a metafile standard. that way it stays compatible with a big pile of metafile sources and consumers ๐Ÿซถ

C. Prompt Transmission โฉ

in stuff like audiographics conferencing, the real-time feel is everything ๐Ÿ˜ญ so object creations and manipulations MUST be sent as they happen, not just as a final result. a lot of the info can go out while something's still being built or moved, maybe alongside voice. but since both building AND moving have to be sent, you can't send infinite in-between states, that's just not economical ๐Ÿ’€

so the third requirement is that IGCF elements give fine "granularity" to show the dynamics of building and moving stuff โœจ they think basic building blocks like polygons, markers, polylines, and text strings are enough, and those MUST... well, transmitted only when they're completed. partial constructions do NOT need to be sent ๐Ÿฆ‹

wait the hard part is manipulations. an IGCF should have segment transformations, segment highlighting, and segment visibility on/off, but the transmitter has to decide how often to sample an ongoing transformation and send its current state. that choice depends on how much bandwidth is available ๐ŸŒธ

D. Low Traffic Volume ๐Ÿ“‰

in a lot of the apps they're imagining, graphics go over narrow bandwidth channels, so minimizing traffic is essential ๐Ÿ“ a bunch of requirements get placed on an IGCF to take advantage of how graphics communication works, all to keep traffic low.

an IGCF can cut traffic by including the basic geometric objects that so many other objects are built from โœจ and it SHOULD... no wait, the text says an IGCF "should permit" reusing objects to create more complex ones, so: an IGCF SHOULD allow objects to be used to build more complex objects. reuse is super common, so this saves traffic AND storage ๐Ÿ’œ

E. Preservation of Application Semantic Units ๐Ÿ†

an IGCF MUST include elements that represent graphical objects matching real-world entities in the target application. for example, in a Navy app the things that matter are carriers, submarines, planes, and so on ๐Ÿšข they want to send these semantic units across systems and treat them as single objects, because lots of apps are built around creating and operating units like that.

if an IGCF has elements for these units, traffic drops, because the entity definitions only get sent once and then get reused, and the entities get manipulated as whole units instead of piece by piece ๐Ÿซถ

there's a small set of main operations you can apply to a graphical object, and an IGCF MUST have elements that represent those operations ๐Ÿ’… unlike dumb terminals that just get screen refresh info from a host, the authors picture intelligent workstations that swap encoded operations, interpret them, and apply them to objects stored locally. the smart-device glow-up is real ๐ŸŒˆ

F. Transmission Batching ๐Ÿ“ฆ

okay so we already said it's good to show users the real-time tempo of graphics exchanges. the good news is you don't have to send every IGCF element right away to do that ๐Ÿฆ‹ IGCF elements should be split into two groups: those that change what's shown on screen, and those that don't. both can change the stored graphical data, though.

only the elements that change the displayed picture need to go out immediately, because those are the ones a human actually sees and reacts to โœจ the second group can be batched and queued until an element from the first group gets submitted. the authors call the first class update Group-1, and the second update Group-2 ๐Ÿ’œ

this split is a big deal for packet communications, since every packet carries a hefty load of overhead control traffic ๐Ÿ˜ญ so it is mandatory... well, the text says batching client data into a packet MUST be done as much as possible to cut total traffic. the batch size can change based on network traffic and how fast conference hosts respond ๐ŸŒธ during congestion the units may need to grow, so there are fewer messages, and when things calm down they can shrink again, so there are more messages ๐ŸŽ€

G. Simple Translation Between IGCF and User Interface ๐Ÿ”„

remember requirement one? an IGCF MUST let related heterogeneous graphics apps interoperate ๐ŸŒท the goal is communication between human users, or between a human and a database. so there has to be a mapping between user interface commands and IGCF elements. using the commands themselves as the IGCF elements is a no-go, ngl, because then the exchange would depend on the systems talking, and every pair would need its own ad-hoc protocol ๐Ÿ’€

there's another usability thing: there MUST be a simple mapping between IGCF elements and the actions behind the UI commands used for graphical communication ๐Ÿ’– this has to be simple because every communicating system needs a translator, and ideally that translator is super simple. including command sequence delimiters in the IGCF apparently helps, since they let you keep less state info while processing an IGCF stream ๐Ÿงš

they've checked the mapping from one set of audiographics conferencing commands to the IGCF in this paper โœ… going from UI commands to IGCF is direct and efficient ๐Ÿฆ‹ going the other way, IGCF to UI commands, is harder. they expect that to speed things up, they'll have to map IGCF elements to calls to lower-level subroutines that carry out the UI actions. it's conceptually no more complex than translating to the commands themselves, but it's gonna take a lot more programming ๐Ÿ˜ญ๐Ÿ”ฅ

III. ELEMENTS OF AN IGCF โœจ

IGCF Element Classes

okay so, here's the lineup ๐Ÿ’… we think an IGCF should have these classes of elements so it can swap vector graphics under the requirements from the last section. The classes match the usual function classes in computer graphics interfaces, and each one holds elements for interface primitives and attributes. We're not listing every element in each class ๐Ÿซถ because the proposed IGCF already shows them all off.

heads up, two categories are missing from the list: functions for querying the status of a graphics system, and input functions ๐Ÿ‘€. The reason is that an IGCF only needs elements for actions that change the state of the communicating graphics systems, and inquire functions obviously don't change anything. Input functions do cause a local change at the sending end, but the input command itself doesn't need to be sent. The receivers just need the input data, in IGCF representation, and they can process it however they want, maybe even simulating the local input action ๐Ÿงš

Control

Elements for workstation: initialization, control and transformation; and elements for normalization transformation. (The normalization and workstation transformations can be used to implement zooming.) ๐Ÿ”

Primitive attributes

Elements for primitive, segment, and workstation attributes. ๐ŸŽ€

Output primitives

Elements for output primitives. ๐ŸŒธ

Segmentation

Elements for basic segmentation and workstation independent segment storage. ๐Ÿงฉ

Object manipulations can be implemented with segment transformations. Object insertion can be implemented using segment recall and segment visibility. Object deletion can be implemented using segment deletion and segment visibility. Object selection can use segment highlighting as feedback to the user. It's giving organized ๐Ÿ’œ

Dynamics

A considerable part of the graphical information exchanged through an IGCF will be in the form of pointer movements over a background picture, so this one is a big deal ๐Ÿ˜ญ Pointer tracking is used to transmit points sampled from a graphical pointer trace, so the movement of the pointer at the sender site can be reproduced at the receivers. This can be done either by just moving the cursor or by tracing its movement with a line. Rubber band echoes are used to signal areas, routes, and scopes in a highly dynamic way. These are indicated by an echo reference point and a feedback point. โœจ

Hierarchical object definitions

The requirement for preserving application semantics meant an IGCF needs a way to represent objects that stand for application entities, and to manipulate those entities as graphical units ๐Ÿฆ‹ Plus, the low-traffic-volume requirement called for reusing already existing objects to create new ones. Iconic efficiency ๐Ÿ‘‘

One way to meet these requirements is to include object hierarchies in an IGCF. In such a hierarchy, an object is a set of output primitives associated with a set of attribute values, or a set of lower-level objects, each associated with a composition of transformations [12].

Graphics segments can be used to implement objects at the lowest level of a hierarchy. The definition of a higher-level object can be represented by sequences of IGCF elements describing the definition process. That definition can be made by instantiating lower-level objects with specific transformation parameters. So an IGCF must incorporate brackets to mark the beginning and end of object definitions, object instantiations, and object redefinitions. Structured, no cap ๐Ÿ“ฆ

To go with the object definition mechanism, an IGCF must permit the use of a flexible alphabet for creating object identifiers, which ensures an identifier is unique within a hierarchy. Building the object identifiers isn't part of an IGCF; an IGCF only has to represent them. An identifier also has to be independent of a communication session and of a particular graphics system, so identifiers created at a host during one session can be used in other sessions, possibly involving other hosts, to recall the objects they label. Main character identifiers ๐ŸŒˆ

We also leave it to the communicating systems to implement mechanisms for resolving duplicate identifiers when merging two hierarchies created in different sessions. In this paper we'll only give a warning: segment numbers do not qualify as identifiers, because they depend on the session and on the state of the system where they were created. Don't be that person ๐Ÿ™ˆ

In addition to object definition and instantiation, an IGCF should have elements representing operations on objects. The operations identified so far are: transformation, deletion, display, disappearance, expose, and hide. Expose is used to uncover objects on a screen that are hidden by other objects, and hide is used to place an object behind others on a screen. ๐Ÿซง


IV. A PROPOSED IGCF โœจ

A. Using the GKSM as a Basis

An IGCF must be usable to transmit all graphical actions in a conference session. This suggests basing an IGCF on a standard session-capture graphics metafile, which ensures compatibility with a large user population ๐Ÿค We based the proposed IGCF, PIGCF, on the GKSM session-capture metafile specification, because GKSM contains many of the elements identified for an IGCF [14]. On top of that, the audit trail orientation of GKSM lets you record interactive communication sessions for later play out, and we expect that to be a feature people use a lot ๐ŸŽฌ

The GKSM is a proper subset of our PIGCF, so any graphical system built to handle the PIGCF can read a GKSM metafile. Going the other way, applications using the PIGCF should have an option to constrain session recording to just the GKSM part, possibly suppressing some session events. Doing this means we can ship a GKSM metafile to any correspondent who has GKSM interpretation software. Or, an application with a GKSM interpreter but without a PIGCF interpreter can read a PIGCF file by interpreting only the GKSM part and ignoring the rest. Compatibility is everything ๐Ÿ’–

Even though the GKSM was specified for the GKS system, we believe it's a sound and general basis for all of our 2-D applications. We don't think the GKSM specification is parochial to GKS systems. It contains all the most useful items you'd want in a metafile ๐Ÿ“ In the future we expect to tackle applications that need 3-D, like interactive repair and maintenance aids. When GKS is augmented with 3-D capabilities [13], we will extend the PIGCF with any necessary elements. Future-proof era ๐Ÿš€

We know the GKSM specification isn't part of the GKS standard itself. It's an appendix recommending such a metafile format. Still, all the GKS vendor implementations we know of, at this time, support GKSM metafile output and interpretation. If this trend continues, as we expect, we'll be able to exchange graphical files with a large base of GKS installations. There will be a lot of them, since GKS will be adopted as an standard by ISO and by many national standard bodies in the near future ๐ŸŒ

B. Positional Information Coordinates

Following the GKSM convention, the PIGCF positional information is in normalized device coordinates, NDC. So the originator of a conference must indicate the workstation window for the conference. This window is the sub-rectangle of the NDC space that encloses the area of interest for the conference. In most cases, the participating workstations will take this window as their own. However, the graphical systems should provide for the possibility of a workstation choosing a different workstation window, which may contain the conference window or just overlap it. Except for special cases, a conference originator should not state a conference workstation viewport. This way, each workstation can display its workstation viewport in the most convenient portion of the screen ๐ŸชŸโœจ

There will be conferences where the participating workstations maintain positional information in world coordinates, WC. It might be necessary to reconstruct the world dimensions after transmission, because those dimensions have a relevant meaning for the application, like sizes of components or distances. In this case, a workstation will have to map from WC to NDC before transmitting, and from NDC to WC after receiving. At the start, the conference originator has to specify the world window and the NDC viewport used in the conference, so the conferencing workstations can do those mappings. The presentation layer could handle these mappings, in terms of the ISO Open Systems Interconnection Reference Model, in a way that's transparent to the communicating application programs ๐Ÿง 

Most of the time, all workstations will have the same world windows and NDC viewports. However, the graphical systems will provide for the possibility of a workstation choosing a different window or viewport. Such a workstation will have to record the conference ones, though, so it can do the mappings we just talked about. Some graphical systems, like the ACM Core, don't provide for a workstation transformation. In those systems, the NDC viewport is considered to be the workstation window for those mappings ๐ŸŒท

C. Layers of the PIGCF

There are two levels in the PIGCF: a lower level L and an upper one U ๐Ÿชœ The lower level L is just the GKSM metafile specification, as defined in Appendix E of the proposed GKS ANSI standard [14]. We've excerpted most of Appendix E of [14] at the end of this RFC as our Appendix A. All level L elements belong to the update Group-1, except for the following: SET DEFERRAL STATE, the output primitive attribute elements, the workstation attribute elements, CLIPPING RECTANGLE, CREATE SEGMENT, CLOSE SEGMENT, RENAME SEGMENT, SET SEGMENT PRIORITY, and SET DETECTABILITY. ๐Ÿ“

The upper level U is made up of the elements we believe complement the GKSM for general on-line graphical exchanges. This layering follows the graphics metafile level-structure described in Enderle et. al [15]. Under this structure, an application oriented metafile can be based on graphical metafiles. Layers on layers ๐Ÿง

D. PIGCF Elements in the Level U

The level U items are encoded as GKSM user item elements, so a PIGCF file still counts as a GKSM metafile from start to finish ๐ŸŽ€ We use the same formatting conventions as the GKSM spec, so if those feel unfamiliar, read the beginning of the appendix first, bestie ๐Ÿ“– The items in the second update group are the two for object definition, the two for object redefinition, the two for object instantiation, the two for normalization transformation, SELECT COMPONENT, and RECALL LIBRARY. Everything else is in the first update group ๐Ÿ’–

Items for Object Definition โœจ

BEGIN DEFINITION ๐ŸŒธ

| 'GKSM 120' | L |

Marks the start of an object definition sequence.

END DEFINITION ๐Ÿฆ‹

| 'GKSM 121' | L | I |

Marks the end of an object definition sequence.

I(Nc): object identifier
( N preceding c, i, r means an arbitrary number
  of characters, integers, or reals.)

Objects defined interactively get shown on the screen, so they're automatically instantiated, no cap ๐Ÿ‘€ If you only want to keep the definition and not the image, a DISAPPEAR item has to follow it ๐Ÿ™ˆ

BEGIN REDEFINITION ๐Ÿงš

| 'GKSM 122' | L | I |

Marks the start of an object redefinition sequence.

I(Nc): object identifier

END REDEFINITION ๐Ÿ’œ

| 'GKSM 123' | L |

Marks the end of an object redefinition sequence.

Items for Object Instantiation ๐Ÿซถ

BEGIN INSTANTIATION โญ

| 'GKSM 124' | L | I |

Marks the start of an object instantiation sequence.

I(Nc): Object identifier

END INSTANTIATION ๐Ÿ“

| 'GKSM 125' | L |

Marks the end of an object instantiation sequence.

Items for Object Manipulation ๐Ÿ’…

TRANSFORM OBJECT ๐Ÿ”ฅ

| 'GKSM 126' | L | C | I | M |

Applies transformation M to object I. The whole vibe is giving matrix math ๐Ÿงฎ

C: number of characters in identifier
I(Nc): object id
M(6r): upper and center rows of a 3x3 matrix representing
       a 2D homogeneous transformation [12].
       M 11 M 12 M 13 M 21 M 22 M 23

DELETE OBJECT ๐Ÿ—‘๏ธ

| 'GKSM 127' | L | I |
I(Nc): object identifier

DISPLAY OBJECT ๐Ÿ‘‘

| 'GKSM 128' | L | I |

Turns on visibility of object I, so it shows up โœจ

I(Nc): object identifier

DISAPPEAR OBJECT ๐ŸŒˆ

| 'GKSM 129' | L | I |

Turns off visibility of object I, so it goes poof ๐Ÿ’€

I(Nc): object identifier

EXPOSE OBJECT ๐ŸŽ€

| 'GKSM 130' | L | I |

Redisplays object I on top of any objects it overlaps ๐Ÿฆ‹

I(c):  object identifier

HIDE OBJECT ๐Ÿ™ˆ

| 'GKSM 131' | L | I |

Redisplays object I behind any objects it overlaps. Main character energy for the background, ngl ๐ŸŒธ

I(c):  object identifier

SELECT COMPONENT ๐Ÿ’–

| 'GKSM 132' | L | I | P |

Selects component P of object I.

I(c):  object identifier
P(i):  pick id of component

This is used to select a group of output primitives identified by P in a segment associated with I. It's a whole group energy moment ๐Ÿซถ

ERASE COMPONENT ๐Ÿงน

| 'GKSM 133' | L | I | P |

Erases component P of object I.

I(c):  object identifier
P(i):  pick id of component

This erases a group of output primitives identified by P in a segment associated with I. This element can be used only within a REDEFINE OBJECT sequence. Not me trying to erase outside a REDEFINE OBJECT sequence ๐Ÿ’€

Items for Normalization Transformation ๐Ÿ”ฎ

SET WINDOW ๐ŸชŸ

| 'GKSM 134' | L | W |

Defines the boundaries of the world window for the normalization transformation.

W(4r): limits of world window (XMIN, XMAX, YMIN, YMAX )

SET VIEWPORT ๐Ÿ–ผ๏ธ

| 'GKSM 135' | L | V |

Defines the boundaries of the NDC viewport for the normalization transformation.

V(4r): limits of NDC viewport (XMIN, XMAX, YMIN, YMAX )

Items for Other Operations ๐ŸŒŸ

ABORT ๐Ÿ›‘

| 'GKSM 136' | L |

Aborts the ongoing operation sent in the PIGCF stream. This gives you a way out of unwanted or erroneous operations ๐Ÿ™…โ€โ™€๏ธ Only the innermost operation of a nested sequence gets aborted. If you need to escape several levels of nesting, send successive aborts, iykyk ๐Ÿ˜ญ

POINTER TRACKING ๐Ÿ–ฑ๏ธ

| 'GKSM 137' | L | T | P |

Updates the graphical pointer position to P.

T(i):  0 causes only cursor to be moved
       1 causes cursor movement to be traced with
         a line
P(p):  a point sampled from graphical pointer
       movement trace

RUBBER BAND ๐ŸŽˆ

| 'GKSM 138' | L | T | P |

Echoes a rubber band of type T with given reference and feedback points. The first occurrence of this item in a sequence carries the coordinates of the echo reference point. Later occurrences carry updates to a pointer position that indicates an echo feedback point, so it's literally a whole storyline โœจ

T(i):  echo type
       ( 0 echo reference point;
       > 0 echo feedback:
         1 = line,
         2 = rectangle,
         3 = circle )
P(r):  echo reference point (T = 0),
       or echo feedback point (T > 0)

The reference and feedback points work like this:

T = 1 - reference is one end of line, feedback is
        other end.
T = 2 - reference is one corner of rectangle, feedback
        is opposite corner.
T = 3 - reference is center of circle, feedback is
        perimeter point.

RECALL LIBRARY ๐Ÿ“š

| 'GKSM 139' | L | F |

Recalls the graphical library in file F.

F(i):  name of file containing library

The graphical pictures in F, along with all their components, become available for use during the communication session. The pictures are assumed to be recorded with the PIGCF, and their components have to be displayed with DISPLAY OBJECT elements or similar actions so that the pictures become visible ๐ŸŒท

V. AN ARCHITECTURE FOR PIGCF PROCESSING โœจ

okay so this section is a little architecture daydream ๐Ÿงš It shows one example of how PIGCF gets made and read inside a multimedia conferencing system, using GKS as the graphics interface. Please don't treat this as the official, only-way-to-do-it blueprint ๐Ÿ™ˆ It's just an exercise to show how the format fits into the bigger conferencing picture. Picking GKS keeps the example simple ๐Ÿ’… but other graphics packages work too, you'd just add modules that can read and write the PIGCF level L items.

Figure 1 is the programmer's-eye view of the graphics pipeline ๐ŸŽ€ The conferencing app updates its data structures and calls device-independent graphics services through a language binding. Those services call device-dependent graphics services, which talk to device drivers to take input and put pictures on the screen. The app also handles a bunch of other stuff, like conference management and the other media streams, but we don't need to dig into that for this example ๐Ÿซถ

Figure 2 is the glow-up ๐Ÿฆ‹ The basic pipeline now has the modules for making, sending, receiving, and reading PIGCF streams. The app has one module that reads the lower and higher levels of PIGCF, and another that generates the upper level U. The device-independent graphics services hold the modules that generate and read the lower level, L. This mirrors what people already do, which is putting the generate and interpret functions inside the graphics package. There's also a transmit module that sends outgoing PIGCF streams to remote workstations, and a receive module that takes incoming streams from remote stations. In real life the transmit and receive modules get split into several processes that make up a layered protocol architecture ๐ŸŒˆ One process grabs both levels of PIGCF and writes them into a conference record metafile so you can look back later ๐Ÿ“ผ A router process takes PIGCF traffic and forwards it to and from the modules we just talked about. The router will probably get swapped out for separate communication interfaces between each pair of modules that trade PIGCF ๐Ÿ’œ

Thick arrows = outgoing PIGCF, thin arrows = incoming PIGCF. Let's follow the outgoing path, starting at the app โœจ The app handles local user actions and turns them into data structure updates, level U PIGCF elements, and calls to device-independent graphics subroutines. Those calls, among other things, generate level L PIGCF (GKSM) elements ๐Ÿ’–

The router merges both level streams in the order they were generated ๐Ÿ“ It sends the result to the local copy of the conference record and to the transmission module. The transmission module batches Group-2 PIGCF items until a Group-1 item shows up ๐Ÿง It also timestamps the PIGCF stream so the receiver can line up its playback with the playback of other media ๐Ÿ•ฐ๏ธ PIGCF can be split into traffic categories and sent over different communication facilities, depending on what each category needs. For example, real-time service for pointer updates, highly reliable transmission for new object definitions, or low-priority service for graphical library transfers ๐Ÿš€ Last but not least, the transmit module has to acknowledge incoming PIGCF, and any other media traffic too ๐Ÿซถ

The receive module is the entry point for incoming PIGCF streams. Those streams can come in different traffic categories that need merging ๐Ÿ”€ It checks the timestamps so PIGCF items can sync up with related data in other media, like voice ๐ŸŽ™๏ธ It's also possible to add a high-level error-correction function here, one that validates the streams using state and context info about PIGCF syntax and semantics ๐Ÿง  The receive module passes streams to the router, and the router forwards them to three processes. One sends level L items to the GKSM interpreter, which makes the matching changes to the displayed picture ๐Ÿ–ผ๏ธ Another sends level L and level U items to the conference record, plus to the PIGCF interpretation code in the app. The level U items update both the data structures that model object hierarchies and the picture of those hierarchies, by running graphics services. U items also update graphics cursors and may recall new graphics libraries ๐Ÿ“š The app has to process level L items too, because they can signal updates to the data structures. That happens if, say, the structures store attribute values for the object hierarchies ๐Ÿ’… The app lines these actions up with other media effects using the timestamps. Conference record playback happens offline ๐Ÿ“ผ Record items come in through the router and then get processed just like incoming PIGCF ๐Ÿฆ‹

                 +------------+        +-------------+
                 |APPLICATION |        |    OTHER    |
                 |    DATA    |        |    MEDIA    |
                 |STRUCTURES  |        |-------------|
                 +-----|------+        |  CONFERENCE |
                       |---------->    | APPLICATION |
                                       |   GRAPHICS  |
                       |---------->    |             |
                 +-----|------+        |             |
                 |  LANGUAGE  |        +-------------+
                 |  BINDING   |
                 +-----|------+        +-------------+
                       |---------->    |   DEVICE-   |
                 +------------+        | INDEPENDENT |
                 |  DEVICE    |        |   GRAPHICS  |
                 |  DEPENDENT |  <---> |   SERVICES  |
                 |  GRAPHICS  |        |             |
                 |  SERVICES  |        |             |
                 +-----|------+        |             |
                       |               |             |
                       v               |             |
                 +------------+        |             |
                 |    DEVICE  |        |             |
                 |  DRIVERS   |        |             |
                 +------------+        +-------------+

                 FIGURE 1 - THE BASIC GRAPHICS PIPELINE
                        IN A CONFERENCING SYSTEM
+------------+    +------------+                 +------------------+
|APPLICATION |    |   OTHER    |                 |    TRANSMIT      |
|   DATA     |    |   MEDIA    |                 |       ACK        |=>
| STRUCTURES |    |------------|     +-----+     | SEPARATE TRAFFIC |=>
+-----|------+    | CONFERENCE |     |     |===> |    BATCHING      |=>
      |---------->|APPLICATION |     |     |     |   TIMESTAMPING   |
                  |  GRAPHICS  |     |     |     +------------------+
      |---------->|------------|     |     |
      |           | PIGCF L, U | <---|     |     +------------------+
+-----|------|    | INTERPRETER|     |     |     |     RECEIVE      |
| LANGUAGE   |    +------------+     |  R  |     |  MERGE TRAFFIC   |<-
| BINDING    |    | PIGCF U    |===> |  O  | <---| CHECK TIMESTAMPS |<-
+-----|------+    |  GENERATOR |     |  U  |     | ERROR CORRECTION |<-
      |           +------------+     |  T  |     |                  |
      ------------------|            |  E  |     +------------------+
+------------+    +-----V------+     |  R  |
|  DEVICE    |    |  DEVICE    |     |     |     +------------------+
| DEPENDENT  |    |INDEPENDENT |     |     |====>|                  |
| GRAPHICS   |<-->|  GRAPHICS  |     |     |---->|    CONFERENCE    |
| SERVICES   |    |  SERVICES  |     |     |     |       RECORD     |
|            |    |            |     |     |     |                  |
+-----|------+    |------------|     |     |     +------------------+
      |           |    GKSM    |     |     |
      v           | INTERPRETER|<--- |     |       <--- INCOMING PIGCF
+------------+    +------------+     |     |
|   DEVICE   |    |    GKSM    |     |     |       ===> OUTGOING PIGCF
| DRIVERS    |    | GENERATOR  |===> |     |
+------------+    +------------+     +-----+

FIGURE 2 - A CONFERENCING SOFTWARE ARCHITECTURE FOR PROCESSING PIGCF

VI. CONCLUSIONS ๐ŸŽ€

okay bestie, the big takeaway: teleconferencing and other multi-media apps are going to be part of the communication toolkit organizations have in the near future ๐Ÿ“ž That's going to push graphics and computer communication folks to tackle application-to-application graphics communication ๐ŸŒ The heart of that is a protocol, and the heart of the protocol is a data format ๐Ÿ’œ We laid out the operational requirements for that kind of protocol and proposed a format that meets them โœจ

Right now, none of the existing or emerging graphics standards can serve as the protocol, or as the format for it ๐Ÿ˜ญ But that could change as the standards evolve ๐ŸŒธ We're keeping an eye on standards development and we'll look into using some of them as a format basis, especially the CGI ๐Ÿ‘€ Still, the computer communication community really needs experience with multi-media conferencing implementations ๐Ÿ”ฅ For these apps to actually happen, a graphics communication protocol can be built on either an official standard or a de-facto standard that's likely to get wide use, which helps assure interoperability with a broad user base ๐Ÿซถ We think that using the GKSM session metafile is moving us in the right direction ๐Ÿงš

Designing the software architecture for generating and reading the proposed PIGCF surfaced some problems we'll have to face as we keep working toward a complete graphics protocol ๐Ÿ™ˆ This work is part of SRI's ongoing multimedia communications program ๐Ÿฆ‹ Within that program we're building a simple multi-media conferencing prototype and we'll design a more complete one later ๐Ÿ’… Experience from both efforts will be super valuable input for the protocol architecture design ๐Ÿ‘‘

APPENDIX A โœจ

Okay bestie, this is an excerpt from a draft proposal called "Draft Proposal: Graphical Kernel System" [14], and it is giving graphics history ๐ŸŽ€

E.2 Metafile Based on ISO DIS7942 ๐Ÿ’–

Okay so this metafile is basically a log of the exact sequence of function calls made to GKS ๐Ÿ“ผ It covers the entire range of GKS output functions, from level m all the way up to level 2, which is so complete it's iconic ๐Ÿ‘‘ It's perfect for apps where you want to 'play back' the graphics actions, maybe with some selective editing done by the interpreter ๐ŸŽฌ

There are two encodings specified for this metafile. One is inefficient for lots of apps, so ngl, it's a little bit of a vibe check ๐Ÿ’€ The second one allows an unspecified binary format. The rest of this IGCF appendix gives the full details of these metafile structures and encodings ๐Ÿฆ‹

E.2.1 File Format and Data Format

The GKS metafile is built up as a sequence of logical data items. The file starts with a file header in a fixed format, and it describes the origin of the metafile (author and installation), the format of the items that follow, and the number representation ๐ŸŒธ The file ends with an end item that marks the logical end of the file. In between those two items, the following information is recorded, sort of like an audit trail ๐Ÿงš

  • a) workstation control items and message items;
  • b) output primitive items, describing elementary graphics objects;
  • c) attribute information, including output primitive attributes; segment attributes, and workstation attributes;
  • d) segment items, describing the segment structure and dynamic segment manipulations;
  • e) user items.

The overall structure of the GKS metafile is laid out like this, and it's giving diagram energy ๐Ÿ”ฅ

            FILE:     |file  |item|---|item|---|end |
                      |header| 1  |   | i  |   |item|

            ITEM:     |item   |item data record|
                      |header |                |

            ITEM      |'GKSM'  |identification|length of item data|

            HEADER:   |optional|    number    |       in bytes    |

All data items except the file header have an item header, and that item header contains:

  • a) the character string 'GKSM' (optional), which is present to improve legibility of the file and to provide an error control facility;
  • b) the item type identification number, which indicates the kind of information contained in the item;
  • c) the length of the item data record.

The lengths of these fields in the item header are implementation dependent, and they are specified in the file header ๐Ÿ’… The content of the item data record is fully described below for each item type.

The metafile contains characters, integer numbers, and real numbers, marked (c), (i), (r) in the item description. Characters in the metafile are represented according to ISO 646 and ISO 2022. Numbers are represented according to ISO 6093, using format F1 for integers and format F2 for reals. (Remark: Formats F1 and F2 can be written and read via FORTRAN formats I and F respectively ๐Ÿค“)

Real numbers describing coordinates and length units are stored as normalized device coordinates. The workstation transformation, if it's specified in the application program for a workstation writing a metafile of this format, is not performed. Instead, WORKSTATION WINDOW and WORKSTATION VIEWPORT are stored in data items for later usage ๐Ÿ“ฆ Real numbers may also be stored as integers. In that case, the transformation parameters are specified in the file header so that integers can be properly transformed into normalized device coordinates โœจ

For reasons of economy, numbers can be stored using an internal binary format. Since no standard exists for binary number representation, this format limits the portability of the metafile ๐Ÿ˜ญ The specification of such a binary number representation is outside the scope of this document.

When exchanging metafiles between different installations, the physical structure of data sets on specific storage media should be standardized. Such a definition is outside the scope of this standard ๐Ÿซถ

E.3 Generation of Metafiles

Table E1 is a list, sorted by class, of all GKS functions that apply to workstations of category MO, and it shows their effects on this GKSM. In the table, GKSM-OUT is a workstation identifier for a workstation writing a metafile of this format ๐Ÿ“

The concepts of clipping rectangle and clipping indicator are wrapped up in one metafile item that specifies a clipping rectangle. This item is written to the metafile on activate workstation with the values (0, 1, 0, 1) if the clipping indicator is OFF, or with the viewport of the current normalization transformation if the clipping indicator is ON. If the viewport of the current normalization transformation is redefined, or a different normalization transformation is selected while the clipping indicator is ON, a further clipping rectangle item is written. If the clipping indicator is changed to OFF, a clipping rectangle item (0, 1, 0, 1) is written. If the clipping indicator is changed to ON, an item containing the viewport of the current normalization transformation is written. This is analogous to the handling of clipping in segments (see 4.7.6 [14]) ๐Ÿฆ‹

Here's Table E1, and honestly it's the whole vibe of this appendix ๐ŸŒˆ

GKS functions which apply to workstations        GKSM item created
of category MO                                   or effect
========================================================================

Control functions

OPEN WORKSTATION (GKSM-OUT,...)                  - (file header)
                                                 1 (CONDITIONAL)
CLOSE WORKSTATION (GKSM-OUT)                     0 (end item)
ACTIVATE WORKSTATION (GKSM-OUT)                  (61, 21-44)
                                                 ensure attributes
                                                 current;
                                                 enable output

DEACTIVATE WORKSTATION (GKSM-OUT)                disable output
CLEAR WORKSTATION (GKSM-OUT,...)                 1
                                                 2
REDRAW ALL SEGMENTS ON WORKSTATION (GKSM-OUT)
UPDATE WORKSTATION (GKSM-OUT,...)                3
SET DEFERRAL STATE (GKSM-OUT,...)                4
MESSAGE (GKSM-OUT,...)                           5 (message)
ESCAPE                                           6
________________________________________________________________________

Output Primitives

POLYLINE                                         11
POLYMARKER                                       12
TEXT                                             13
FILL AREA                                        14
CELL ARRAY                                       15
GENERALIZED DRAWING PRIMITIVE                    16
________________________________________________________________________

Output Attributes

SET POLYLINE INDEX                               21
SET LINETYPE                                     22
SET LINEWIDTH SCALE FACTOR                       23
SET POLYLINE COLOUR INDEX                        24
SET POLYMARKER INDEX                             25
SET MARKER TYPE                                  26
SET MARKER SIZE SCALE FACTOR                     27
SET POLYMARKER COLOUR INDEX                      28
SET TEXT INDEX                                   29
SET TEXT FONT AND PRECISION                      30
SET CHARACTER EXPANSION FACTOR                   31
SET CHARACTER SPACING                            32
SET TEXT COLOUR INDEX                            33
SET CHARACTER HEIGHT                             34
SET CHARACTER UP VECTOR                          34
SET TEXT PATH                                    35
SET TEXT ALIGNMENT                               36
SET FILL AREA INDEX                              37
SET FILL AREA INTERIOR STYLE                     38
SET FILL AREA STYLE INDEX                        39
SET FILL AREA COLOUR INDEX                       40

SET PATTERN SIZE                                 41
SET PATTERN REFERENCE POINT                      42
SET ASPECT SOURCE FLAGS                          43
SET PICK IDENTIFIER                              44
________________________________________________________________________

Workstation Attributes

SET POLYLINE REPRESENTATION (GKSM-OUT,...)       51
SET POLYMARKER REPRESENTATION (GKSM-OUT,...)     52
SET TEXT REPRESENTATION (GKSM-OUT,...)           53
SET FILL AREA REPRESENTATION (GKSM-OUT,...)      54
SET PATTERN REPRESENTATION (GKSM-OUT,...)        55
SET COLOUR REPRESENTATION (GKSM-OUT,...)         56
________________________________________________________________________

Transformation Functions

SET WINDOW of current normalization              34, 41, 42
transformation
SET VIEWPOINT of current normalization           61, 34, 41, 42
transformation
SELECT NORMALIZATION TRANSFORMATION              61, 34, 41, 42
SET CLIPPING INDICATOR                           61
SET WORKSTATION WINDOW (GKSM-OUT,...)            71
SET WORKSTATION WINDOW VIEWPORT (GKSM-OUT,...)   72

Note:  item 61 (CLIPPING RECTANGLE) is described more fully in E.2.2.

Note: When the current normalization transformation is altered, items
corresponding to attributes containing coordinate information are sent
(items 34, 41, and 42).
________________________________________________________________________

Segment Functions

CREATE SEGMENT                                   81
CLOSE SEGMENT                                    82
RENAME SEGMENT                                   83
DELETE SEGMENT                                   84

DELETE SEGMENT FROM WORKSTATION (GKSM-OUT,...)   84
ASSOCIATE SEGMENT WITH WORKSTATION               81, (21-44), (11-16),
(GKSM-OUT,...)                                   (61), 82
COPY SEGMENT TO WORKSTATION (GKSM-OUT,...)       (21-44), (11-16), (61)

INSERT SEGMENT                                   (21-44), (11-16), (61)
________________________________________________________________________
Segment Attributes

SET SEGMENT TRANSFORMATION                       91

SET VISIBILITY                                   92
SET HIGHLIGHTING                                 93
SET SEGMENT PRIORITY                             94
SET DETECTABILITY                                95
________________________________________________________________________

Metafile Functions

WRITE ITEM TO GKSM                               > 100

E.4. Interpretation of Metafiles โœจ

E.4.1. Introduction ๐Ÿฆ‹

okay so the way GKS explains metafile interpretation is in 4.9 [14] ๐Ÿ’…. The effects of INTERPRET ITEM for every kind of metafile item are covered in the sections below, and the items are grouped by what class of functionality they belong to ๐Ÿซถ.

E.4.2. Control Items ๐ŸŽ€

Interpreting items in this class is explained under the definition of each item in E.5. ([14] says "E.2.4" instead of "E.5", which we think is an error ๐Ÿ™ˆ).

E.4.3. Output Primitives ๐Ÿ’–

Interpreting these items makes output that matches the primitive functions, with one twist: point coordinates are expressed in NDC ๐Ÿงš. The primitive attributes bound to a primitive are the ones that came from interpreting primitive attribute items in this same metafile (see E.4.4) โœจ.

E.4.4. Output Primative Attributes ๐ŸŒธ

Interpreting these items sets values that get used when displaying primitives that come later from this same metafile (see E.4.3) ๐Ÿ’œ. No changes are made to entries in the GKS state list, so the state list stays exactly as it was ๐Ÿ“.

E.4.5. Workstation Attributes ๐Ÿ’…

Interpreting these items does the same thing as calling the matching GKS functions in Table E1 ๐Ÿ”ฅ. Those GKS functions run on all active workstations ๐ŸŒˆ.

E.4.6. Transformations ๐Ÿฆ‹

Interpreting a clipping rectangle item sets the values used for clipping output primitives that come later from this metafile ๐Ÿ’–. No changes are made to entries in the GKS state list ๐Ÿซถ. Interpreting the other items in this class (WORKSTATION WINDOW and WORKSTATION VIEWPORT) invokes the matching GKS functions on all active workstations โญ.

E.4.7. Segment Manipulation ๐Ÿ‘‘

Interpreting these items does the same thing as calling the matching GKS functions in Table E1. (Item 84 causes an invocation of DELETE SEGMENT ๐Ÿ’€.)

E.4.8. Segment Attributes โœจ

Interpreting these items does the same thing as calling the matching GKS functions in Table E1 ๐ŸŽ€.

E.5. Control Items ๐Ÿ’–

FILE HEADER ๐Ÿ“œ

| GKSM | N | D | V | H | T | L | I | R | F | RI | ZERO | ONE |

Okay bestie, every field in the file header item has a fixed length ๐Ÿ”’. Numbers get formatted according to ISO 6093 - Format F1 ๐Ÿงฎ.

General Information:

GKSM    4 bytes   containing string 'GKSM'
N       40 bytes  containing name of author/installation
D       8 bytes   date (year/month/day, e.g., 79/12/31)
V       2 bytes   version number: the metafile described here has
                  version number 1
H       2 bytes   integer specifying how many bytes of the string 'GKSM'
                  are repeated at the beginning of each record.
                  Possible values:  0, 1, 2, 3, 4

T       2 bytes   length of item type indicator field
L       2 bytes   length of item data record length indicator field
I       2 bytes   length of field for each integer in the
                  item data record (applied to all data marked (i)
                  in the item description)
R       2 bytes   length of field for each real in the item data record
                  (applies to all data marked (r) in the item
                  description).

Specification of Number Representation:

F       2 bytes   Possible values:  1, 2.  This applies to all data
                  in the items marked (i) or (r) and to item type
                  and item data record length:
                  1:  all numbers are formatted according to ISO 6093
                  2:  all numbers (except in the file header) are
                  stored in an internal binary format
RI      2 bytes   Possible values:  1, 2.  This is the number
                  representation for data marked (r):
                  1 = real, 2 = integer
ZERO    11 bytes  integer equivalent to 0.0, if RI = 2
ONE     11 bytes  integer equivalent to 1.0, if RI = 2

After the file header, which is fixed format, every value in the items that follow is in the format the file header defines โœจ. For the descriptions below, we assume this setting:

H = 4; T = 3; F = 1

Besides formats (c), (i) and (r), which were already described, (p) stands for a point made of a pair of real numbers (2r) ๐ŸŒŸ. You can put an expression in front of the single letter to say how many values of that type there are ๐Ÿ”ข.

{Explanatory comments have been added to some item specifications; these are not part of the GKS Appendix E and they are enclosed in braces {}. A complete definition of the generation and interpretation of the GKSM items is given by the definition of the corresponding GKS functions [14].}

END ITEM ๐Ÿ›‘

| 'GKSM 0' | L |

This is the last item of every GKS Metafile. It sets the condition for the error ๐Ÿšจ.

CLEAR WORKSTATION ๐Ÿงน

| 'GKSM 1' | L | C |

This asks for CLEAR WORKSTATION on all active workstations ๐Ÿซง.

C(i):  clearing control flag
       (0 = CONDITIONAL, 1 = ALWAYS)

REDRAW ALL SEGMENTS ON WORKSTATION ๐Ÿ”

| 'GKSM  3' | L | R |

This asks for UPDATE WORKSTATION on all active workstations ๐Ÿ’ซ.

R(i):  regeneration flag
       (0 = PERFORM, 1 = SUSPEND)

DEFERRAL STATE โณ

| 'GKSM  4' | L | D | R |

This asks for SET DEFERRAL STATE on all active workstations ๐ŸŽฏ.

D(i): deferral mode
      (0 = ASAP, 1 = BNIG, 2 = BNIL, 3 = ASTI)

R(i):  implicit regeneration mode
       (0 = ALLOWED, 1 = SUPPRESSED)

{This item provides control over the occurrence of the visual effect of GKS functions in order to optimize the use of workstation capabilities according to application needs.}

MESSAGE ๐Ÿ’Œ

| 'GKSM  5' | L | N | T |

This asks for MESSAGE on all active workstations ๐Ÿ“จ.

N(i):   number of characters in string
T(Nc):  string with N characters.

{The message is not part of a metafile output primitives; the message is only for interpretation by workstation operators.}

ESCAPE ๐Ÿš€

| 'GKSM  6' | L | FI | L | M | I | R |

This asks for ESCAPE ๐Ÿ™Œ.

FI(i):  function identifier
L(i):   length of integer data in data record
M(i):   length of real data in data record
I(Li):  integer data
R(Mr):  real data.

{This item permits the invocation of a specific non-standard escape function FI. The execution of the function with the given parameters must not alter the GKS state list nor produce geometrical output.}

โš ๏ธ Heads up: the escape function has to leave the GKS state list alone and must not produce geometrical output. That rule matters a lot ๐Ÿซ .

E.6. Items for Output Primitives ๐ŸŽจ

POLYLINE ๐Ÿ“ˆ

| 'GKSM 11' | L | N | P |
N(i):   number of points of the polyline
P(Np):  list of points

POLYMARKER ๐Ÿ“

| 'GKSM 12' | L | N | P |
N(i):   number of points
P(Np):  list of points.

TEXT ๐Ÿ”ค

| 'GKSM 13' | L | P | N | T |
P(p):   starting point of character string
N(i):   number of characters in string T
T(Nc):  string with N characters from the set of ISO 646

FILL AREA ๐ŸŽจ

| 'GKSM 14' | L | N | P |
N(i):   number of points
P(Np):  list of points.

CELL ARRAY ๐Ÿ–ผ๏ธ

| 'GKSM 15' | L | P | Q | R | N | M | CT |
P(p),Q(p),R(p):  coordinates of corner points of pixel array
                 (P and Q are the images of the points P and
                 Q specified in the function CELL ARRAY and
                 R is another corner)
M(i):            number of rows in array
N(i):            number of columns in array
CT(MNi):         array of colour indices stored row by row

{This item permits passing raster images to GKS. The raster image is defined by the colour index matrix CT, and its World Coordinate position given by points P and Q.}

GENERALIZED DRAWING PRIMITIVE ๐Ÿงฉ

| 'GKSM 16' | L | GI | N | P | L | M | I | R |
GI(i):  GDP identifier
N(i):   number of points
P(Np):  list of points
L(i):   length of integer data in data record
M(i):   length of real data in data record
I(Li):  integer data
R(Mr):  real data.

{This item provides a standard way for drawing additional non-standard output primitives. The generalized drawing primitive GI is drawn according to the point list P and the data record in I and R.}

E.7. Items for Output Primitive Attributes ๐ŸŒท

POLYLINE INDEX ๐Ÿช„

| 'GKSM 21' | L | LT |
LT(i):  linetype

LINEWIDTH SCALE FACTOR ๐Ÿ“

| 'GKSM 23' | L | LW |
LW(r):  linewidth scale factor

{In GKS, the line width is not affected by GKS transformations. However, the effective line width is calculated as the product of the nominal line width times the line width scale factor in effect when a line is drawn.}

POLYLINE COLOUR INDEX ๐ŸŒˆ

| 'GKSM 24' | L | CI |
CI(i):  polyline colour index

POLYMARKER INDEX ๐Ÿ”ท

| 'GKSM 25' | L | I |
I(i):  polymarker index

MARKER TYPE โญ

| 'GKSM 26' | L | MT |
MT(i):  marker type

MARKER SIZE SCALE FACTOR ๐Ÿ“

| 'GKSM 27' | L | MS |
MS(r):  marker size scale factor

{In GKS, the marker size is not affected by GKS transformations. However, the effective marker size is calculated as the product of the nominal marker size times the marker size scale factor in effect when a marker is drawn.}

POLYMARKER COLOUR INDEX ๐Ÿ’œ

| 'GKSM 28' | L | CI |
CI(i):  polymarker colour index

TEXT INDEX ๐Ÿ“

| 'GKSM 29' | L | I |
I(i):  text index

TEXT FONT AND PRECISION ๐Ÿ” 

| 'GKSM 30' | L | F | P |
F(i):  text font
P(i):  text precision
       (0 = STRING, 1 = CHAR, 2 = STROKE)

CHARACTER EXPANSION FACTOR ๐Ÿ”

| 'GKSM 31' | L | CEF |
CEF(r):  character expansion factor

{This item allows the manipulation of the width/height of the character body. The width of the character body is scaled by the CEF factor.}

CHARACTER SPACING ๐Ÿซง

| 'GKSM 32' | L | CS |
CS(r):  character spacing

TEXT COLOUR INDEX ๐ŸŽ€

| 'GKSM 33' | L | CI |
CI(i):  text colour index

CHARACTER VECTORS ๐Ÿงญ

| 'GKSM 34' | L | CH | CW |
CH(2r):  character height vector
CW(2r):  character width vector

Note: These vectors are the height and width vectors described in 4.4.5 of [14] ๐Ÿ“–.

{The character height vector is parallel to the character up vector and has a length equal to character height. The character height specifies the height of a capital letter. The character width vector is perpendicular to the height vector, in the direction of the character baseline, and has the same length.}

TEXT PATH ๐Ÿ›ค๏ธ

| 'GKSM 35' | L | P |
P(i):  text path
       (0 = LEFT, 1 = RIGHT, 2 = UP, 3 = DOWN)

TEXT ALIGNMENT ๐ŸŒŸ

| 'GKSM 36' | L | H | V |

Okay so we're mid-item for TEXT ALIGNMENT, and the alignment settings are giving main character energy ๐Ÿ’…๐ŸŽ€

H(i):  horizontal character alignment
       (0 = NORMAL, 1 = LEFT, 2 = CENTRE, 3 = RIGHT)
V(i):  vertical character alignment
       (0 = NORMAL, 1 = TOP, 2 = CAP, 3 = HALF, 4 = BASE,
        5 = BOTTOM)

FILL AREA INDEX ๐ŸŒธ

| 'GKSM 37' | L | I |

I(i):  fill area index

FILL AREA INTERIOR STYLE ๐Ÿฆ‹

| 'GKSM 38' | L | S |

S(i):  fill area interior style
       (0 = HOLLOW, 1 = SOLID, 2 = PATTERN, 3 = HATCH)

FILL AREA STYLE INDEX ๐Ÿ’–

| 'GKSM 39' | L | SI |

SI(i):  fill area style index

FILL AREA COLOUR INDEX ๐ŸŒˆ

| 'GKSM 40' | L | CI |

CI(i):  fill area colour index

PATTERN SIZE ๐Ÿงš

| 'GKSM 41' | L | PW | PH |

PW(2r):  pattern width vector
PH(2r):  pattern height vector

Okay so one style for filling areas is a pattern made of color cells ๐ŸŽจ The pattern is an array of color indices, and that array gets mapped into a pattern rectangle sized by PW and PH. Iconic โœจ

PATTERN REFERENCE POINT ๐Ÿ“

| 'GKSM 42' | L | P |

P(p):  reference point

Same pattern-of-color-cells energy again ๐Ÿซถ This time the pattern rectangle is anchored by its lower left corner, and that corner is given by P.

ASPECT SOURCE FLAGS ๐Ÿšฉ

| 'GKSM 43' | L | F |

F(13i):  aspect source flags
         (0 = BUNDLED, 1 = INDIVIDUAL)

Ngl this one is so deep ๐Ÿ™ˆ An application can set an output primitive attribute to either bundled or individual. Bundled attributes depend on the workstation, their binding is delayed, and their values can change dynamically. Individual attributes are global, they get bound immediately, and their value is static and can't be manipulated. Not me being like "okay this is a whole personality" ๐Ÿ’€

PICK IDENTIFIER ๐ŸŽ€

| 'GKSM 44' | L | P |

P(i):  pick identifier

E.8 Items for Workstation Attributes ๐Ÿ‘‘

POLYLINE REPRESENTATION โญ

| 'GKSM 51' | L | I | LT | LW | CI |

I(i):   polyline index
LT(i):  linetype number
LW(r):  linewidth scale factor
CI(i):  polyline colour index

POLYMARKER REPRESENTATION ๐Ÿ’œ

| 'GKSM 52' | L | I | MT | MS | CI |

I(i):   polymarker index
MT(i):  marker type
MS(r):  marker size scale factor
CI(i):  polymarker colour index

TEXT REPRESENTATION ๐Ÿ“

| 'GKSM 53' | L | I | F | P | CEF | CS | CI |

I(i):    text index
F(i):    text font
P(i):    text precision
         (0 = STRING, 1 = CHAR, 2 = STROKE)
CEF(r):  character expansion factor
CS(r):   character spacing
CI(i):   text colour index

FILL AREA REPRESENTATION ๐Ÿ”ฅ

| 'GKSM 54' | L | I | S | SI | CI |

I(i):   fill area index
S(i):   fill area interior style
        (0 = HOLLOW, 1 = SOLID, 2 = PATTERN, 3 = HATCH) SI(i):  fill
        area style index
CI(i):  fill area colour index

PATTERN REPRESENTATION ๐ŸŒท

| 'GKSM 55' | L | I | N | M | CT |

I(i):     pattern index
N(i):     number of columns in array*
M(i):     number of rows in array
CT(MNi):  table of colour indices stores row by row

   {* The ANSI document reads "area" instead of "array".}

Okay so this is the pattern one again, and that "one style for filling areas" line keeps popping up ๐Ÿ˜ญ A pattern is defined by a pattern representation, full stop. The table of colour indices gets stored row by row, and the footnote says the ANSI document actually says "area" where this says "array" ๐Ÿ™ˆ

COLOUR REPRESENTATION ๐Ÿฉท

| 'GKSM 56' | L | CI | RGB |

CI(i):    colour index
RGB(3r):  red, green, blue intensities

E.9 Items for Transformations ๐Ÿฆ‹

CLIPPING RECTANGLE โœ‚๏ธ

| 'GKSM 61' | L | C |

C(4r):  limits of clipping rectangle (XMIN, XMAX, YMIN, YMAX)

WORKSTATION WINDOW ๐ŸชŸ

| 'GKSM 71' | L | W |

W(4r):  limits of workstation window (XMIN, XMAX, YMIN, YMAX)

GKS has a workstation transformation that takes a rectangle of the NDC space (that's the workstation window) and maps it onto a rectangle of the device coordinate space (that's the workstation viewport) ๐Ÿ—บ๏ธ Literally so satisfying.

WORKSTATION VIEWPORT ๐ŸŒŸ

| 'GKSM 72' | L | V |

V(4r):  limits of workstation viewport (XMIN, XMAX, YMIN, YMAX)

E.10 Items for Segment Manipulation ๐Ÿงฉ

CREATE SEGMENT ๐Ÿฃ

| 'GKSM 81' | L | S |

S(i):  segment name

CLOSE SEGMENT ๐Ÿšช

| 'GKSM 82' | L |

indicates end of segment

RENAME SEGMENT โœ๏ธ

| 'GKSM 83' | L | SO | SN |

SO(i):  old segment name
SN(i):  new segment name

DELETE SEGMENT ๐Ÿ—‘๏ธ

| 'GKSM 84' | L | S |

S(i):  segment name

E.11 Items for Segment Attributes ๐Ÿ’…

SET SEGMENT TRANSFORMATION ๐Ÿ”ฎ

| 'GKSM 91' | L | S | M |

S(i):   segment name
M(6r):  transformation matrix
        upper and center rows of a 3x3 matrix representing
        a 2D homogeneous transformation [9]
        M 11  M 12  M 13  M 21  M 22  M 23

Lowkey the matrix is the star of this one ๐Ÿคฉ Here's the tea: this differs from the ANSI X3.124 Jan. 5 1984 document, in the matrix elements indicated. The authors believe there is an error in that document, so be careful ๐Ÿ™ƒ

SET VISIBILITY ๐Ÿ‘€

| 'GKSM 92' | L | S | V |

S(i):  segment name
V(i):  visibility
       (0 = VISIBLE, 1 = INVISIBLE)

SET HIGHLIGHTING โœจ

| 'GKSM 93' | L | S | H |

S(i):  segment name
H(i):  highlighting
       (0 = NORMAL, 1 = HIGHLIGHTED)

SET SEGMENT PRIORITY ๐Ÿ†

| 'GKSM 94' | L | S | P |

S(i):  segment name
P(r):  segment priority

SET DETECTABILITY ๐Ÿ•ต๏ธโ€โ™€๏ธ

| 'GKSM 95' | L | S | D |

S(i):  segment name
D(i):  detectability
       (0 = UNDETECTABLE, 1 = DETECTABLE)

E.12 User Items ๐Ÿซถ

USER ITEM ๐Ÿ’ซ

| 'GKSMXXX' | L | D |

XXX   > 100
D:    user data (L bytes)

Okay so the PIGCF level U items get encoded as GKSM USER ITEM elements, which means a PIGCF file still conforms to the GKSM metafile spec. Bestie, that's a whole glow-up ๐ŸŒˆโœจ


Segment Functions ๐Ÿงš

Segment Attributes ๐ŸŽ€

Metafile Functions ๐ŸŒธ

All fields in the file header item have fixed length. Numbers are formated according to ISO 6093 - Format F1. ๐Ÿ”ข

General Information: ๐Ÿ“š

Specification of Number Representation: ๐Ÿ”ข

Appendix B. Example of PIGCF Use in Conferencing ๐ŸŽ€

okay so this section shows off the PIGCF graphical component in an audio-graphics conference ๐Ÿฆ‹ we only show the graphics side of the convo (speech would go alongside it), and we skip most of the parameter negotiation a real conference set-up needs, just for brevity ๐Ÿ’…

picture an on-line audio-graphics conference between a Navy command and control center and a Navy task force ๐Ÿซถ the PIGCF items below don't all belong to one transmission stream. the stream is decided by whichever station transmits them, and identifying that station is the job of the lower-level communication protocols ๐Ÿงš we use the character encoding instead of the binary one for this example, and we only show a few of the groups of items that could get batched together โœจ

the command center (center) sets up a conference with some ships in a task force (platforms) to coordinate intercepting an unidentified ship that got sighted in a conflict area ๐Ÿ˜ญ after recalling graphical libraries, every site can see a map of the sighting area on their screens, plus iconic representations of the task force ships ๐Ÿ—บ๏ธ then the center draws an iconic representation of the unidentified vessel, scales it, and places it at the sighting location, all interactively ๐Ÿ”ฅ

the platforms explain possible courses of action with graphical pointers ๐Ÿ‘‘ the center draws the expected trajectory of the unidentified ship, and the platforms place the task force icons at the expected interception points. then the center zooms into the interception area, and the platforms use rubber bands to talk through interception maneuvers ๐Ÿ’€

now for the PIGCF items exchanged ๐ŸŒˆ the center kicks off the conference graphical set-up with the FILE HEADER item, which sets the basic representation parameters for the graphical info being exchanged. this item gets interpreted according to its definition in E.5 [14]. the most important parameter selections for this example are:

  • i) The items contain 0 characters of the "GKSM" string in the identification field of the item header.
  • ii) The item type indicator field containing the PIGCF item number is three bytes long in each item.
  • iii) The integers are 4 bytes long, and the reals 6 bytes long.
  • iv) The item data record length indicator is 2 bytes long.

we stick to the PIGCF specification field lengths and the settings above ๐Ÿ’– but we add one space before and after each "|" separator to make it more legible, and every item gets preceded by its name so it's easy to identify ๐Ÿ“

FILE HEADER:

      | GKSM | center | 84/11/10 | 1 | 0 | 3 | 2 | 4 | 6 | 1 | 1
      |           |           |

the center states the boundaries of the work station window for the conference โœจ

WORKSTATION WINDOW: | 71 | 24 | 0.0 0.5 0.0 0.375 |

in this example, the conferencing work stations use world coordinates for the internal representation of positional information ๐ŸŒธ so the center states the boundaries of the world window for the normalization transformation used in the conference.

SET WINDOW: | 134 | 28 | 0.0 320.0 0.0 240.0 |

the center shares the location of its local NDC viewport. other conferees can pick different NDC viewports for the same transformation, but their work station window should include the conference's. all systems record the conference: world window, NDC viewport, and work station window ๐Ÿ“

SET VIEWPORT: | 135 | 28 | 0.0 0.5 0.0 0.375 |

the center recalls graphical libraries with geographical maps of the crisis area and icons of the task forces in the area. it also displays a graphical object that gives a background picture ๐Ÿฆ‹

RECALL LIBRARY: | 139 | 9 | caribbean | DISPLAY OBJECT: | 128 | 11 | coast_lines | RECALL LIBRARY: | 139 | 10 | task_units |

the center goes on to instantiate one of the task forces in the task_units library. this means recalling some of the library objects and applying transformations to them afterward ๐Ÿ’… since set window, set viewport, and recall library belong to the update Group-2, they can be batched until display object, from update Group-1, is entered. the second recall library can be batched together with the following begin instantiation until display object is produced. the rest of the example has more item sequences that could be batched, but for brevity we don't point out any more of them ๐Ÿซถ

BEGIN INSTANTIATION: | 124 | 15 | US_CONSTITUTION | DISPLAY OBJECT: | 128 | 15 | US_CONSTITUTION | TRANSFORM OBJECT: | 126 | 55 | 15 | US_CONSTITUTION | 0.1 0.0 0.0 0.0 0.1 0.0 | TRANSFORM OBJECT: | 126 | 55 | 15 | US_CONSTITUTION | 0.1 0.0 0.312 0.0 0.1 0.078 | END INSTANTIATION: | 125 | 0 |

BEGIN INSTANTIATION: | 124 | 13 | US_NEW_JERSEY | DISPLAY OBJECT: | 128 | 13 | US_NEW_JERSEY | TRANSFORM OBJECT: | 126 | 53 | 13 | US_NEW_JERSEY | 0.1 0.0 0.0 0.0 0.1 0.0 | TRANSFORM OBJECT: | 126 | 53 | 13 | US_NEW_JERSEY | 0.1 0.0 0.312 0.0 0.1 0.093 | END INSTANTIATION: | 125 | 0 |

next up, the center sets values for two output primitive attributes to get ready for drawing a new icon on the screens ๐ŸŽ€ we assume all the other attributes got default values during the conference set-up.

POLYLINE INDEX: | 21 | 4 | 20 | POLYLINE COLOUR INDEX: | 24 | 4 | 200 |

the following items cover the interactive definition of the unidentified vessel. since it's defined interactively, the vessel image stays visible on the screens after the definition is done ๐Ÿ‘€

BEGIN DEFINITION: | 120 | 0 | POLYLINE: | 11 | 64 | 5 | 0.047 0.063 0.063 0.047 0.125 0.047 0.14 0.063 0.047 0.047 | POLYLINE: | 11 | 52 | 3 | 0.078 0.063 0.078 0.078 0.109 0.078 0.109 0.063 | END DEFINITION: | 121 | 8 | sighting |

then the unidentified vessel "sighting" gets scaled and placed at the sighting site ๐Ÿงš

BEGIN INSTANTIATION: | 124 | 8 | sighting | TRANSFORM OBJECT: | 126 | 48 | 8 | sighting | 0.2 0.0 0.0 0.0 0.2 0.0 | TRANSFORM OBJECT: | 126 | 48 | 8 | sighting | 0.1 0.0 0.156 0.0 0.1 0.016 | END INSTANTIATION: | 125 | 0 |

the center and the platforms use graphical pointer movements to discuss possible routes the unidentified vessel might follow ๐Ÿฆ‹ we only show a few pointer updates. in practice, there would typically be a large number of points transmitted to convey the movement of the pointers over the screens.

from the center:

POINTER TRACKING:  | 137 | 16 |    0 |  0.39  0.032 |
POINTER TRACKING:  | 137 | 16 |    0 |  0.388 0.035 |
POINTER TRACKING:  | 137 | 16 |    0 |  0.388 0.039 |
POINTER TRACKING:  | 137 | 16 |    0 |  0.386 0.04  |

from one of the platforms:

POINTER TRACKING:  | 137 | 16 |    0 |  0.22  0.016 |
POINTER TRACKING:  | 137 | 16 |    0 |  0.222 0.159 |
POINTER TRACKING:  | 137 | 16 |    0 |  0.233 0.157 |
POINTER TRACKING:  | 137 | 16 |    0 |  0.24  0.155 |

the center now draws the expected route the unidentified ship would follow ๐ŸŒˆ this time the pointer trace gets recorded on the screen by drawing a line.

POINTER TRACKING:  | 137 | 16 |    1 |  0.388 0.038 |
POINTER TRACKING:  | 137 | 16 |    1 |  0.386 0.038 |
POINTER TRACKING:  | 137 | 16 |    1 |  0.386 0.052 |
POINTER TRACKING:  | 137 | 16 |    1 |  0.375 0.078 |
POINTER TRACKING:  | 137 | 16 |    1 |  0.369 0.105 |
POINTER TRACKING:  | 137 | 16 |    1 |  0.361 0.125 |
POINTER TRACKING:  | 137 | 16 |    1 |  0.352 0.144 |
POINTER TRACKING:  | 137 | 16 |    1 |  0.351 0.156 |
POINTER TRACKING:  | 137 | 16 |    1 |  0.35  0.16  |

a platform moves the two US ship icons into interception positions ๐Ÿšข

TRANSFORM OBJECT:  | 126 | 55 |   15 | US_CONSTITUTION |
                     1.0   0.0 0.16
                     0.0   1.0 -0.046 |
TRANSFORM OBJECT:  | 126 | 53 |   13 | US_NEW_JERSEY |
                     1.0   0.0 0.113
                     0.0   1.0 -0.034 |

the center zooms into the interception area to get a bigger view for further discussion ๐Ÿ”

WORKSTATION WINDOW: | 71 | 24 | 0.286 0.403 0.077 0.177 |

the two platforms show their striking ranges using circular rubber bands centered at each ship ๐Ÿ’ซ for each platform, we first show the echo reference point and then two echo feedback points. typically there will be a large number of feedback points.

RUBBER BAND:  | 138 | 10 |   0 | 0.335 0.125 |
RUBBER BAND:  | 138 | 10 |   3 | 0.35  0.128 |
RUBBER BAND:  | 138 | 10 |   3 | 0.37  0.128 |

RUBBER BAND:  | 138 | 10 |   0 | 0.384 0.13  |
RUBBER BAND:  | 138 | 10 |   3 | 0.367 0.128 |
RUBBER BAND:  | 138 | 10 |   3 | 0.346 0.129 |

once the interception strategy is agreed on, the center zooms back out to the original, larger picture ๐ŸŒธ

WORKSTATION WINDOW: | 71 | 24 | 0.0 0.5 0.0 0.375 |

The center terminates the conference

END ITEM:  |   0 |  0 |
at the end of a conference, the final pictures stay visible on the screens. the PIGCF items also get recorded in their entirety, so the conference session can be played back if needed ๐ŸŽฌ

the conference record could also be sent to other locations as part of a multi-media message ๐Ÿ’œ


References โœจ

okay bestie, here's the reading list ๐Ÿ“š every single source, with all its details, so you can go deep on whatever you want ๐Ÿค“

  • [1] J. D. Day and H. Zimmermann, "The OSI Reference Model", Proceedings of the IEEE, V 71, N 12; Dec. 1983, pp 1334-1340. ๐ŸŒธ
  • [2] W. Pferd, L. A. Peralta and F. X. Prendergast, "Interactive Graphics Teleconferencing", IEEE Computer, V 12, N 11; Nov. 1979, pp 62-72. ๐Ÿ’œ
  • [3] K. S. Sarin, "Interactive On-Line Conferences", Ph.D. Diss. MIT, Dept. of EE and CS, 1984. ๐ŸŽ“
  • [4] S. Randall, "The Shared Graphic Workspace: Interactive Data Sharing in a Teleconference Environment", Proceedings CompCon 82 Fall, IEEE Computer Society, pp 535-542. โœจ
  • [5] G. Heffron, "Teleconferencing Comes of Age", IEEE Spectrum, Oct. 1984, pp 61-66, pp 61-66. ๐Ÿฆ‹
  • [6] R. W. Hough and R. R. Panko, "Teleconferencing Systems: A State-of-the-Art Survey and Preliminary Analysis", SRI International, Menlo Park California, SRI project 3735, April 1977. ๐Ÿงš
  • [7] C. W. Kelly III, "An Enhanced Presence Video Teleconferencing System" Proc. CompCon 1982, Sept. 20-23 Washington D.C., pp 544-551. ๐ŸŽ€
  • [8] J. Vanglian, "Private Communication", Comments on the suitability of videotex for on-line graphical communication. ๐Ÿ’…
  • [9] ANSI Technical Committee X3H, "Draft Proposal: Virtual Device Metafile", X3.122, X3 Secretariat, CBEMA, Washington, D.C. ๐Ÿ”ฅ
  • [10] American National Standards Committee X3H3, "Virtual Device Interface", X3 - Information Processing Systems, Working Document, Jan. 2, 1985 Available from Computer and Business Equipment Manufacturers Association, Washington D.C. ๐Ÿ“
  • [11] E. Van Deusen, "Graphics Standards Handbook", CC Exchange 1984, P.O. Box 1251, Laguna Beach, CA 92652. ๐ŸŒˆ
  • [12] J. D. Foley and A. Van Dam, "Fundamentals of Interactive Computer Graphics", Addison-Wesley, 1982. ๐Ÿ‘‘
  • [13] American National Standards Committee X3H3, "GKS -- 3D Extensions", X3 - Information Processing Systems, Working Document, Nov. 16 1984 Available from Computer and Business Equipment Manufacturers Association, Washington D.C. โญ
  • [14] ANSI Technical Committee X3H3, "Draft Proposal: Graphical Kernel System", X3.124, X3 Secretariat, CBEMA, Washington, D.C. ๐Ÿซถ
  • [15] G. Enderle, K. Kansy, and G. Pfaff, "Computer Graphics Programming", Springer-Verlag, 1984. ๐ŸŒธ
  • [16] International Organization for Standardization "Information processing - Representation of numerical values in character strings for information interchange", ISO/DIS 6093.2, ISO/TC 97, 1984-01-19; available from ANSI, New York, N.Y. ๐Ÿ’–
๐Ÿ“ฆ where this page comes from