Processing Architecture
Hosted by the GSAPP Cloud Lab
Columbia University Graduate School of Architecture, Planning & Preservation.

### Search Geometry Processing Library

This library provides Processing1 support for isometric contours and surfaces. These shapes are defined "implicitly", are representetative of threshold conditions within a gradient and can be realized at any level of detail. They are often used to represent heights in a topographic map, mesh reconstructions from MRI scans, proteins surface models and pressure lines in weather maps. This implementation works in a meta-ball modeling framework. Future releases will allow direct manipulation of the underlying value tensor, allowing for more flexibility.
1 Processing.org is a framework for algorithmic visualization and computational sketching. It was created at the MIT Media Lab by Ben Fry and Casey Reas.
Tested on Mac OS X and Windows 7 32-bit.
Tested with Processing 1.0
Keywords: Architecture, Geometry, Isosurface, Marching cubes, Marching Squares, Isocontour
Last update on 3/1/2011

Recent Changes:
3/01/2011 Added weighting to point-based stimulus.
2/27/2011 Added support to override voxel data.
2/27/2011 Added visualization of case selection.

### Installation

Unzip and put the extracted SearchGeometry folder into the libraries folder of your processing sketches. Reference and examples are included in the SearchGeometry folder.

### Getting Started

There are a few stages to getting an implicit surface to show up on the screen. First you need to init the surface with bounds information and detail settings. Next, seed the field by adding points to it. The points will push value into nearby vertices (specifically, at an inverse square proportionate to their distance). They will appear to be shrinkwrapped by the resulting surface.

An example Iso Surface:

```//Constructing the IsoSurface
IsoSurface iso = new IsoSurface(this, new PVector(0,0,0), new PVector(100,100,100), 8);

for(int i=0; i<10; i++){
PVector pt = new PVector( random(100), random(100), random(100) );

// Add a point with a weighting factor
}

// Plotting
iso.plot(mouseX/10000.0);```
An example Iso Contour:

```//Construct the Isocontour
IsoContour iso = new IsoContour(this, new PVector(0,0), new PVector(100,100), 10,10);

// Adding Data to the Isocontour
randomSeed(1);
for(int i=0; i<10; i++){
PVector pt = new PVector( random(100), random(100), 0 );

// Add a point with a weighting factor
}

// Plot Isocontour
fill(255,0,0);
iso.plot( max(mouseX/800.0, 0.05) );```

### Examples

The following examples show simple uses of the library.