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

Share this page on social media
 

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
 
Download Search Geometry version 0.2 in .zip format.
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);

// Adding data to Isosurface
for(int i=0; i<10; i++){
	PVector pt = new PVector( random(100), random(100), random(100) );
	iso.addPoint(pt);

	// Add a point with a weighting factor
	// iso.addPoint(pt, random(0,1)); 
}

// 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 );
	iso.addPoint(pt);
  
	// Add a point with a weighting factor
	// iso.addPoint(pt, random(0,1)); 
}
  
// Plot Isocontour
fill(255,0,0);
iso.plot( max(mouseX/800.0, 0.05) );

Examples

The following examples show simple uses of the library.
 
Processing Isosurface
Sample Iso-Surface #1
Processing Isocontour Map
Sample Iso-Contour Map

Documentation and Source

JavaDoc can be viewed here.

Contributors

@ProxyMark Mark Collins is co-director of Proxy, an innovation-focused design firm working across a range of scales and platforms. Mark is as an adjunct assistant professor at the Columbia University Graduate School of Architecture where he co-directs the Cloud Lab.

@proxyToru Toru Hasegawa is co-director of Proxy. Toru investigates the culture of innovation and technology in architecture as an adjunct assistant professor at the Columbia University Graduate School of Architecture Toru is a co-director of the Cloud Lab.

 
Please direct all inquiries to inquiry @ thecloudlab dot org
Copyright 2010 thecloudlab.org