Alan N. Shapiro, Autonomy in the Digital Society

Blog and project archive about media theory, science fiction theory, and creative coding

Virtual and Physical Geometric Objects with Processing, by Christos Voutichtis

Comments Off on Virtual and Physical Geometric Objects with Processing, by Christos Voutichtis

I want to use the creative coding environment Processing to experiment with and understand the crossover between virtual geometric objects on the screen and physical geometric objects to be generated by 3D printers and other material production devices for trans-architectural art projects.

I write code in a Processing sketch to parameterize the possibilities that the user has for the direct visual design in the canvas space.  I also use the interactive graphical user interface library ControlP5.

Each user interface element (slider, listbox, image box, wave slider) allows the user to modify some properties of his drawing capabilities.

The aesthetic issue that my current work is dealing with is the crystal shape.

It is less about the crystal principle itself. It is much more about a zoom of all the things already surrounding us, but which cannot be seen with the eye.

What happens if suddenly the non-reachable is achievable? What influence does it provoke in our surrounding area?

How strongly does this fact influence the original formal character of a room  and what does it do to the room?

Christos1

import controlP5.*;
import processing.pdf.*;
import java.util.Calendar;
import java.util.Vector;

import processing.core.PImage;

ControlP5 controlP5;

boolean savePDF = false;

int myColorBackground = color(0, 0, 0);

PShape[] currentShape;
PImage[] currentImage;
int ShapeOrImage = 0;
int EventFrom2DSlider = 0;

int tileCount = 5;
float tileWidth, tileHeight, heightRatio = 1;
float drawHeight;
float shapeSize = 90;
float newShapeSize = shapeSize;
float shapeAngle = 0;
float maxDist;
int lod;
float falloff;

color shapeColor = color(0, 130, 164);
int fillMode = 0;
int sizeMode = 0;
int seed = 0;

ControlWindow controlWindow;

public int slider1Value = 128; public int slider2Value = 288; public int slider3Value = 100; public int slider4Value = 25; public int slider5Value = 40; public int slider6Value = 40; public int slider7Value = 40;
public int slider8Value = 40;

PImage brushImage[] = new PImage[4];
String[] image_file = {
“THE IMAGE”, “THE GRID”, “THE VECTOR”
};

ListBox l;
ImageList l2;
ArrayList<MyListBoxItemIcon> icons;
Slider2D s;
int cnt = 0;

Christos2

When reality is suddenly disturbed in its familiar and self-defined orthogonal dimensions, reflecting the context of a society that already includes the era of hyperreality, an exaggerated reality, a culture of simulation and simulacra that, in a way, is built of shapes, when one room copies the next one in a logic of cloning, and this “clone” copies itself endlessly, reflecting the delusive reality of a society that is half good and half bad yet does not know itself to be in that condition, then it is not possible to stop this automatic process that hinders any kind of insight, analysis or comparison with other anthropological circumstances.

The doorway to an alternate perception opened by the fractal structure.

void setup() {

size(1440, 900);
background(255);
smooth();

tileWidth = width/float(tileCount);
tileHeight = height/float(tileCount);
maxDist = sqrt(sq(width)+sq(height));

currentShape = new PShape[4];
currentShape[0] = loadShape(“THE GRID1.svg”);
currentShape[1] = loadShape(“THE GRID2.svg”);
currentShape[2] = loadShape(“THE GRID3.svg”);
currentShape[3] = loadShape(“THE GRID4.svg”);

brushImage[0] = loadImage(“Unbenannt-1-01.png”);

brushImage[1] = loadImage(“Unbenannt-1-02.png”);

brushImage[2] = loadImage(“Unbenannt-1-03.png”);
brushImage[3] = loadImage(“Unbenannt-1-04.png”);

lod = 1;
falloff = 0.65;

controlP5 = new ControlP5(this);
PFont p = createFont(“Verdana”, 9);
controlP5.setControlFont(p);

controlP5.setColorActive(0xffff0000);

Slider s1 = controlP5.addSlider(“slider1Value”)
.setRange(0, 255)
.setPosition(70, 80)
.setSize(288, 10);

Slider s2 = controlP5.addSlider(“slider2Value”, 144, 432, 0, 70, 100, 288, 10);
Slider s3 = controlP5.addSlider(“slider3Value”, 0, 200, 0, 70, 120, 288, 10);
Slider s4 = controlP5.addSlider(“slider4Value”, 0, 50, 0, 70, 140, 288, 10);
Slider s5 = controlP5.addSlider(“slider5Value”, 0, 255, 0, 70, 160, 288, 10);
Slider s6 = controlP5.addSlider(“slider6Value”, 0, 255, 0, 70, 180, 288, 10);
Slider s7 = controlP5.addSlider(“slider7Value”, 0, 255, 0, 70, 200, 288, 10);
Slider s8 = controlP5.addSlider(“slider8Value”).setRange(0, 255).setPosition(70, 700).setSize(288, 10);

Christos4

One has often attempted to define via several field studies or experiments what the senses experience directly, to find a certain plausibility, a function or a use.

This is also a part of my work.

It is the room, consisting of fractal structures. The more you immerse yourself into this material of which a room consists, the more the primary material of that space becomes apparent.

l = controlP5.addListBox(“myList”, 70, 240, 288, 200);

l.setItemHeight(15);
l.setBarHeight(15);

l.captionLabel().toUpperCase(true);
l.captionLabel().set(“SELECT DRAWING STYLE: “);
l.captionLabel().style().marginTop = 3;
l.valueLabel().style().marginTop = 3;

for (int i=0;i<image_file.length;i++) {

l.addItem(image_file[i], i);
}
l.setColorBackground(0xffff0000);
l.setColorActive(color(0, 0, 255, 128));

s = controlP5.addSlider2D(“wave”,288,180,1440,900).setPosition(70,300).setSize(288,180).setArrayValue(new float[] {50,50});

l2 = new ImageList(controlP5, “imageList”);
l2.setPosition(70, 525).setSize(288, 400).setItemHeight(30).setBarHeight(20);

l2.captionLabel().toUpperCase(true);
l2.captionLabel().set(“SELECT PAINTBRUSH: “);
l2.captionLabel().style().marginTop = 3;
l2.valueLabel().style().marginTop = 3;

icons = new ArrayList<MyListBoxItemIcon>();

Christos5

It was not possible for me to make things concrete, to find a certain plausibility, a function that my work could rely on.

So I had to try it in a reverse way.

I practice the principle of reversibility.

I do not begin from something already existing which could be recognized as a fractal structure.

Rather I create it myself.

With contemporary software, with writing software code, I found a way to create my own fractal environment, through an absolutely artifical construction of an object, consisting of a fractal logic, which has the ability to create something in an auto-generative process that had not existed before.

This object is ready to handle any parameter and to change with every new condition.

This object also visualizes, based on the coded and abstract realm, everything that is given by any particular context or surrounding environment.

This instance finally establishes the dimension of  the structures or shapes materiality. This is the passage from the virtual/visual to the physical, the crossing of a threshold.

The analysis of fractal mathematics has its primary point of reference in nature.

In my case, there is no such thing as nature and that is why I built it myself.

int shapeSizeValue = slider1Value;

float tileWidthValue = (float) slider2Value;
float slider3ValueFloat = (float) slider3Value;
heightRatio = slider3ValueFloat / 100.0;
float slider4ValueFloat = ((float) slider4Value / 100);

tileWidth = tileWidthValue;

background(100);
smooth();

lod = (int)map(mouseX, 0, width, 0, 8);
falloff = map(mouseY, 0, height, 0.05, 3.5);

Christos6

for (int gridY=0; gridY<tileCount*1.5; gridY++) {

for (int gridX=3; gridX<tileCount*3.0; gridX++) {

float posX = 0.0;
if (EventFrom2DSlider == 1) {
float myPosX = s.getCursorX() + 5;
posX = myPosX * 5;
lod = (int)map(posX, 0, width, 0, 8);
} else {
posX = tileWidth*gridX * 0.5;
}

float sq1 = pow((float)tileWidth, 2.0);

Christos7

if (ShapeOrImage == 0)

shape(currentShape[sel], 0, offset, shapeSize, shapeSize);
else
image(currentImage[sel], 0, offset);
Christos3

void controlEvent(ControlEvent theEvent) {

if (theEvent.isController()) {

if (theEvent.controller().name()==”bang1″) {

controlP5.controller(“toggle1”).setValue(1);
}

if (theEvent.controller().name()==”button1″) {

controlP5.controller(“toggle1″).setValue(0);
}

if (theEvent.controller().name()==”slider1”) {
controlP5.controller(“slider2″).setValue(theEvent.controller().value());
}

if (theEvent.controller().name()==”numberbox1”) {
controlP5.controller(“knob1″).setValue(theEvent.controller().value());
}

if (theEvent.controller().name()==”wave”) {
EventFrom2DSlider = 1;

}

}
if (theEvent.isGroup()) {

if (theEvent.name() == “imageList”) {

int test = (int)theEvent.group().value();

image(brushImage[test], 150, 0.0);

}

if (theEvent.name() == “myList”) {

currentShape = new PShape[4];

int test = (int)theEvent.group().value();
switch (test) {
case 0:
ShapeOrImage = 1;
currentImage = new PImage[4];
currentImage[0] = loadImage(“THE IMAGE1.png”);
currentImage[1] = loadImage(“THE IMAGE2.png”);
currentImage[2] = loadImage(“THE IMAGE3.png”);
currentImage[3] = loadImage(“THE IMAGE4.png”);
break;

case 1:
ShapeOrImage = 0;
currentShape = new PShape[4];
currentShape[0] = loadShape(“THE GRID1.svg”);
currentShape[1] = loadShape(“THE GRID2.svg”);
currentShape[2] = loadShape(“THE GRID3.svg”);
currentShape[3] = loadShape(“THE GRID4.svg”);
break;

case 2:
ShapeOrImage = 0;
currentShape = new PShape[4];
currentShape[0] = loadShape(“THE VECKTOR_7.svg”);
currentShape[1] = loadShape(“THE VECKTOR_4.svg”);
currentShape[2] = loadShape(“THE VECKTOR_6.svg”);
currentShape[3] = loadShape(“THE VECKTOR_7.svg”);
break;
default:
break;
}
}

THE IMAGE1

 

THE IMAGE2

 

THE IMAGE3

 

THE IMAGE4

 

131216_144710_44

Comments are closed.