GeoPrO: Description

Top
Up


Overview

Keywords: Computational Geometry, Distributed Visualization, Oriented Projective Plane

The GeoPrO environment is a system intended to provide distributed visualization for computational geometry applications as well as to serve as a tool for teaching computational geometry. Currently, it supports only 2 dimensional data. The geometric objects are represented, by the Geometric Description Protocol (GDP), by means of points with 2 dimensional signed homogeneous coordinates, thus, fully supporting the Oriented Projective Geometry (OPG) [5][6].

Roughly, it comprises a Kernel program (the server), that holds the geometric data in multiple contexts, and programming interfaces, that allow the implementation of programs able to connect to the kernel through client/server Internet TCP/IP channels. There are two types of clients: the applications and the visualizers. Their scope is a single context, not the whole kernel. There may be many clients connected to a context, whereas a client can be connected to only one context. For instance, in a classroom, many students may visualize the same data in distinct visualizers running on different machines by connecting to the same context. A context is essentially a collection of two types of information: objects and requests. Usually, applications insert and remove objects from the context they are connected to and visualizers receive one copy of each object and may render them according to its own features. In addition to this basic visualization procedure, the environment allows the visualizers to work as sources of objects. One application may insert a request in the context for an object of a specific type. All the visualizers connected to that context may respond to the request. As an example, an application inserts in the context a request for a set of points. A user enters the points with the interface of some visualizer and then respond to the request. The application will receive a copy of the object and may, for instance, construct the Convex Hull of the set of points and insert it in the context as a set of line segments (see the sample image).

The clients communicate with the kernel with a fixed set of messages like: "insert the object x" or "respond to the request y". The environment uses the XDR [8] protocol to encode the basic data types in the messages. This allows the implementation of applications and visualizers for different architectures. Moreover, the use of the TCP/IP protocol makes possible the distributed visualization over an heterogeneous network.

The Kernel

The kernel is an interface-less program written in C++ that holds the data and accepts connections from applications and visualizers. It has four major classes: an application catalog; a visualizer catalog; a context catalog and an event handler. Each application or visualizer entry in the corresponding catalog has a pointer to a context entry in the context catalog. Each context entry has two other catalogs: an object catalog and a request catalog. The event handler basically "listens" to the socket channels for new connections and to existing connections for new messages.

The Application Interface

The application interface is a class available in C++ and JAVA that allows the implementation of programs able to connect to the kernel through the Internet. An application can send the following messages to the kernel:

bullet connection to a given context
bullet insertion of an object
bullet removal of an object
bullet insertion of a request for an object
bullet disconnection

The kernel can send the following message to and application:

bullet answer to a request

We have implemented some computational geometry algorithms as GeoPrO applications. You may see some sample images here.

The Visualizer Interface

The visualizer interface is also available in C++ and JAVA. A visualizer can send the following messages to the kernel:

bullet connection to a given context
bullet answer to a request for an object
bullet disconnection

The kernel can send the following message to and visualizer:

bullet insertion of an object
bullet removal of an object
bullet insertion of a request
bullet removal of a request

We have implemented two visualizers for the GeoPrO: the sphereView and the flatModel. The sphereView renders the objects in the spherical model of the OPG. It is a passive visualizer, in the sense that it only shows the objects and, therefore, cannot answer to an request. Nevertheless, this model provides the most interesting geometric intuition about the OPG. The flatModel visualizer renders the objects in the two-sided plane model of the OPG. It allows the user to enter the basic objects with the mouse much like a "graphic editor". Both visualizers are written in C++ and use the OpenGL Graphic Library [7] for basic graphic rotines. You may see some sample images here

The Geometric Description Protocol

All the objects in the GeoPrO environment are described by a fixed set of basic objects. The basic objects are:

bullet set of points
bullet set of lines
bullet set of line segments
bullet set of circles
bullet set of polygonal lines
bullet set of polygons
bullet set of conic arcs
bullet set of conics

These objects are all represented by 2 dimensional points with signed homogeneous coordinates. For instance, a line segment is represented by its endpoints and a line by two distinct points on it. The conic and conic arcs are represented, respectively, by 3 and 5 points as described in [4]. The protocol also specifies the non-geometric object group, to allow easy manipulation of more complex geometric structures like planar subdivisions.

The JAVA Kernel Manager

The kernel also accepts connections from a third type of client: the manager. It was implemented in JAVA and provides full control of the kernel to an administrator. Its interface presents all the active clients and contexts of the kernel. The administrator can open a context and view all its active objects and requests.

 

He can (among other things):
bullet create a context
bullet destroy a context
bullet destroy objects
bullet save objects of the context into a disk file
bullet load saved objects from a disk file

Current and Future Work

We are currently working on:

bullet A JAVA visualizer for the flat model of OPG
bullet Improvements on the flatModel visualizer concerning editing features

We plan to migrate all the environment to JAVA as soon as it becomes a standarized language. The design of the GeoPrO kernel fits perfectly the features of that programming language. Moreover, the portability of the system would be greatly improved.

References

bullet You may read about GeoPrO in:

This thesis: [1] C. N. Gon. Computação Exata em Geometria Projetiva Orientada e Tratamento de Degenerações, Master's Thesis, IC - UNICAMP, june - 1996.

This paper: [2] P. J. de Rezende and C. N. Gon. Um Ambiente Distribuído de Visualização com Suporte para Geometria Projetiva Orientada. Proceedings of the IX SIBGRAPI, pages 71-78 , Caxambu 1996.

bullet You may read about applications of GeoPrO in:

This thesis: [3] G. A. Pinto. Generalizações do Diagrama de Voronoi construídas através de Cônicas no Plano Projetivo Orientado e suas Visualizações. Master's Thesis, IC - UNICAMP, march - 1998.

This paper: [4] G. A. Pinto and P. J. de Rezende. Representation of Conics in the Oriented Projective Plane. proceedings of the X SIBGRAPI, pages 71-78, published by IEEE, Campos do Jordão 1997.

bullet You may read more about the oriented projective plane T2 in:

This book: [5] P. J. de Rezende and J. Stolfi. Fundamentos de Geometria Computacional. UFPE-DI, IV Escola de Computação, 1994.

This book: [6] J. Stolfi. Oriented Projective Geometry: A Framework for Geometric Computations. Acad. Press, Inc., 1991.

bullet You may read about OpenGL and the Sun programming environment in:

This book: [7] OpenGL Architecture Review Board, OpenGL Programming Guide. Addison-Wesley, 1993.

This book: [8] R. Palkovic, SunPro: The Sun programming environment - a Sun Technical Report . Sun Microsystems, 1987.

 

(c) 1998-2008 Pedro J. de Rezende. Last modified: 2008.08.06.