schmidt@dduck.ctt.bellcore.com (Robert O Schmidt) (02/02/90)
I am looking to build a graphical user interface and am looking
for the best platform (both hardware and software).
I like object-oriented systems so am posting this to both
comp.ai.shells and comp.graphics.
The task at hand is manipulating geographic (map) information
in the form of line segments. ie, a street is a line that
has a name and address range associated with it.
Requirements:
1. need to be able to display on order 10000 lines at once.
certainly, this must be done programmatically.
2. operations listed below must be do-able in short timeframes
(<5 sec) even given 10000 lines on the screen.
3. need infinite zoom, need to be able to display the outline
of the entire USA but on the same screen, zoom in on one
street in a given town. line widths must automatically
re-scale for various zoom factors.
4. flexible zoom.. that is, multiple ways of zooming...
say, a "magnify by 2" command as well as a means of selecting
an arbitrary part of the screen to zoom in on automatically.
A "zoom fit all" function to fit all images occurring on the
virtual bitplain onto the output window would be nice.
5. the system must deal with 9 digit integer coordinates (ie,
the line from (74237764, 124556725) to (74237770, 124556790)
[a system working in decimal coordinates would work.... if
the precision is not lost... ie, i can do division to get
(74.237764, 124.556725) to (74.237770, 124.556790) but the
line must be depicted with total precision, given the correct
zoom]
6. lines must be able to have labels associated with them. (ie,
to show a street segments name) These text fields must do
automatic scaling given the zoom factor in use... ie, if the
whole USA is shown, the text should be suppressed, but if
if only a small area with a few streets is shown, then the labels
should be big and legible.
7. lines must be mousable.... mouse functions must include:
a) moving a whole line
b) moving a lines endpoint (rubber-banding).
c) simply select a line and returning it to a program (preferably
as an object)
d) means for affixing methods to a line, a simple example:
mouse a line, middle-click to get a menu... select "highlight"
8. any changes to a line (ie, it is position is changed by a move command)
must appear in the the line's definition, not just on the screen.
optimally, the line is an object that knows how to draw itself and
collects any changes to its graphical representation.
9. a means for "panning" about in the virtual bitplain..... scroll
bars would be nice, but other methods may be workable.
10. Most important: i dont want to do any programming to get this
functionality. no mouse control functions... no zoom functions..
no font-resize functions..... All i want to do is create an object
to represent the line, shove in the endpoints, shove in the text
and see it on the screen and then be able to play with it (zoom,
move endpoint..... etc)
---------------------
I have found one system that offers all of the above functionality
with the exception of performance: Intellicorps' KEE.
KEE is wonderful..... with a single statement I create an object of
type "lines", enter a few values in creating this object (the
window to use, the font-size, the label string, the endpoints) and presto,
it shows up in the output window and can immediately be played with.
any changes to the line's graphical representation (ie, moving an endpoint)
are reflected immediately in the "lines" object.
The problem with KEE is performance. I use a TI Explorer II (and have
tried a II+) with 56Mb core and performance has not been satisfactory.
10000 lines can be drawn, but it takes forever (hours.... possibly days).
deleting the window can take just as long. a screen full of objects
can take several seconds to update (after, say a zoom)
furthermore, an Explorer II is an expensive platform on which to present
deliverables. Yes, i know kee runs on (mega configured) PCs and Suns
and with mac-ivory or micro-explorer, on Macintoshes.... i dont
expect usable performance on these platforms.
Thus, i am seeking alternate possibilities.... i have looked at
CLUE/CLX/CLUE on the TI and it is too primitive (is, must do massive
programming) Also, it seems X limits me to a 16 bit coordinate schemes
(ie, max virtual bitplain values +/- 128k)... not good enough for
9 digit integers.
the symbolics CLUE/CLIM environment may well also have this 16 bit
limitation (dont know if it uses this X standard)......
in any case, the use of CLUE or CLIM will necessitate some programming
for screen manipulation.
So, Finally, I ask: has anyone seen a system that does all of this
without costing megabucks but in a manner suitable for production
work.... ie, robust and bugless.
Any ideas (including where to look) would be most welcome.
thanks
Robert Schmidt
schmidt@flash.bellcore.com