vectaport

scientific and spatial data application exploration


// six petals, drawn in comterp.
// the script is the picture.
colors(3 10);  // Red
closedspline(160,160, 160,40, 220,55, 264,100, 160,160)
colors(6 10);  // Green
closedspline(160,160, 264,100, 288,160, 264,220, 160,160)
colors(5 10);  // Yellow
closedspline(160,160, 264,220, 220,265, 160,280, 160,160)
colors(4 10);  // Orange
closedspline(160,160, 160,280, 100,265, 56,220, 160,160)
colors(7 10);  // Blue
closedspline(160,160, 56,220, 32,160, 56,100, 160,160)
colors(2 10);  // Brown
closedspline(160,160, 56,100, 100,55, 160,40, 160,160)
colors(1 10);  // Black circle, around it
ellipse(160,160, 120,120)

Drawn in comterp — the script on the right is the picture on the left. Earth and hearth below, water and greenery across the middle, hill and light above.

Vectaport builds free C++ frameworks for direct-manipulation graphical editors — and the language that drives them. A picture and the commands that make it are one thing: type the commands, get the picture; serialize the picture, get the commands back. The same expression works at a prompt, over a socket, or between two editors drawing together across a network.


every edit is a line you can type

// fill the petals, but not the circle:
s = $$select                       // stream the selection
while((v=next(s)) != nil
  if(class(v)==`ClosedSplineComp   // each petal...
     :then select(v); pattern(2)))  // ...solid fill

Select, move, scale, rotate, copy, paste, frame to frame — every move in the editor is an expression. The flower above was filled by the lines above: stream the selection, keep the splines, fill each. A flipbook is a loop, and an edit is a substitution.


and the drawing is shared

If every edit is a command, a command is a thing you can send. DrawServ is the drawing editor made distributed: two or more editors on different machines working the same drawing at once. Each graphic carries its own identity across the network, and edits propagate as the commands that made them — draw, move, recolor — so a stroke on one screen lands on the others. The same expression that draws is the expression that travels.


ivtools — the C++ frameworks underneath it all: idraw, drawtool, comdraw, DrawServ.  ·  vhclmaps — USGS and military map display with a vehicle-motion simulation viewpoint; the moving viewpoint is the thing that showed DrawServ was possible.  ·  ipl — a simulation environment for scalable asynchronous software; coordination by flow and completion.  ·  flowtran — ComTerp grown into a flowgraph composition language

apt-get install ivtools-bin ivtools-dev   // debian / ubuntu
brew install ivtools                      // macos (for now)