Upload
david-schnitman
View
242
Download
1
Tags:
Embed Size (px)
DESCRIPTION
Â
Citation preview
&Points of Inflection Process Book
2
3
This work is not copyrighted. Please feel free to copy,
borrow, steal, reproduce, edit, remix, version, recreate or
plagiarize this work.
4
5
6
Reflect Seven. 16 - 17
Graphic design beyond fair use. 78 - 79
Reflect Eight. 44 - 45
20 y
ear
gap
? 6
0 -
61
Table of Praxis
Refl
ect N
ine.
82
- 8
3
Literature Review Three. 92 - 93
Thesis Essay. 94 - 97
Tem
por
ary
Rep
rod
uctio
ns.
90
- 9
1
7
8
Table of Practice
Algorithmic Poster Generator. 32 - 37
Alg
orith
mic
Pos
ter
Gen
erat
or v
2. 6
8 -
69
USACAN
America's Copyright Extensions. 48 - 51
Forfeiting Canada's Public Domain. 52 - 55
Han
d T
rack
ing.
10
8 -
109
Skeleton Tracking. 104 - 105
Deletion 116 - 123
User Interface 100 - 101
Point Cloud 102 - 103
9
10
12
13
14
Last semester, I drew attention to the fact that designers work primarily with other peoples con-tent and call it their property. The designer is responsible for using the photography, typefaces, and text created by others and claiming that they own the rearranged outcome. In order to highlight this perplexing property relation, I will be focusing on the design activity and decision making process of the designer. The focus of my practice this se-mester will involve the use of computer software to record design activity and decision making. This may involve bringing in algorithmic computa-tion as part of my design process. The intention being that if the computer is the primary tool of design production today, having control of the computer will allow me to manipulate the means of production a designer works within.1 When we look at the means of production from the stand-point of representation, we can then ask the question of how graphic design practice reproduc-es the mode of production it works within? 2
This question leads to an artistic standpoint that is worth commenting on. Namely, that the everyday realities of contemporary design labour can manifest themselves in my formal practice. This goes beyond the mouse and keyboard to include the design studio: the designer’s working environment, the production schedule within the studio, the designer’s relation with colleagues, the importance of networking and so on. All are aspects of the mode of production within which the designer and the design operate. In a similar way, the conceptual art of Sol LeWitt could mimic a bureaucratic method of production:
The aim of the artist would be to give viewers infor-mation...He would follow his predetermined premise to its conclusion voiding subjectivity. Chance, taste or unconsciously remembered forms would play no part in the outcome. The serial artist does not attempt to produce a beautiful or mysterious object but functions merely as a clerk cataloguing the results of his premise.3
In essence, conceptual art could mimic the operat-ing logic of capitalism in order to deconstruct, criticize and draw attention to its logic of production. In a similar way, I hope to take inspiration from the aspects of design labour beyond the computer and draw them back into my formal work to unpick the designers mode of production.
1. Benjamin, Walter. Author as Producer. New Left Review. 1970. Accessed Dec 10, < http://yaleunion.org/wp-content/
uploads/2013/12/Walter_Benjamin_-_The_Author_as_Producer.pdf >
2. Negri, Antonio. Art and Multitude. Polity, 2011. 108.
Reflect Seven
15
3. Sack, Warren. Aesthetics of Information Visualization. Accessed Jan 7, <http://danm.ucsc.edu/~wsack/Writings/wsack-infoaesthetics.pdf>
16
17
18
For my thesis project I am interested in investigating
a potential philosophy for graphic design. At this point, it
seems that a philosophy of graphic design rests on the
nature of representation and the accompanying relation
between image and reality.
Contextually, this subject relates to the “map / territory
relation”, where the map is not the territory itself,
but only a representation. A philosophy of graphic
design might situate itself somewhere between
the field of aesthetics (the philosophy of art) and ontol-
ogy (the philosophy of being). Additionally semiotics,
which includes the relation between sign and signifier
is also worth exploring, particularly for its connection
to language. Some relations of representation also
are invested in notions of objectivity, truth and
neutrality as found in the realm of scientific illustration
and cartography.
In terms of process I will attempt to create a unity
between theory and practice. Theory will allow me to
engage the subject matter informationally, politically and
philosophically. Writing outside of the Reflection
assignments will give me the opportunity to consider
theory more substantially. Practice will allow me
to create a visual methodology with books, prints,
information visualizations and the creation of new
tools I make myself (with Processing).
The goal of this thesis will be two-fold. First, my
intent is to use my thesis as a step towards a potential
philosophy of graphic design. Second, I am interested in
graphic design that challenges accepted paradigms
and that which we take for granted. For example, repre-
sentations that persist not because of their content, but
as historical residue that are asking to be dismantled.
My sources will include philosophers, artists,
designers, statisticians and political theorists including
but not limited to: Kant, Hegel, Marx, Russell, Magritte,
Borges, Wark, Tufte, Fry and Reas.
Thesis Statement
For my thesis project I am interested in investigating
relations of representation and ownership within
the realm of copyright. Contemporary graphic design
practice involves the manipulation of existing content
into new arrangements. I am interested in exploring
how copyright upholds a relation between designers
and their work in which representations must navigate.
Contextually, my thesis will examine how the letter
and spirit of the law manifest themselves through
representations. A thesis on intellectual property might
situate itself somewhere within Marxist or anarchist
notions of labour and property. The idea of design
as property is also worth contrasting with the copy-
left movement, remix culture, and open source
culture. My focus will be on the current realities of
design production, specifically situating graphic design
practice as a form of immaterial labour which
produces cultural products.
This leads me to process, where I will begin by focusing
on the relationships of representation as mediated
through designers actions and decisions. By recording
design labour, I intend to label, reveal and make explicit
varying sets of relations which are often overlooked.
Practice will allow me to create a visual methodology
with software, books, posters, and participatory exer-
cises involving the creation of new tools made
with Processing. Form will allow me to engage the sub-
ject matter aesthetically, informationally, politically
and philosophically.
I am interested in graphic design that challenges
accepted paradigms of representation that we take for
granted. For example, designers often support copy-
right out of convention, but what does design stand to
gain by challenging the ‘permission culture’ created by
copyright? By carrying out this thesis I hope to identify
the role copyright plays in limiting a more critical
design practice. My intended outcome is to make the
viewer reconsider their relationship to copyright,
and the limitations imposed on design through copyright.
My sources will include philosophers, artists, designers,
statisticians and political theorists including but
not limited to: Benjamin, Glaser, Borenstein, Negri,
Lessig, Wark, Marx, Borges, Giampietro, Fry and Reas.
More specifically, the political theorists will inform
my critique of copyright, while the designers and
programmers will inform how the work will be pro-
duced and distributed.
Thesis Statement
20
“Somehow I can't believe there are any heights that
can't be scaled by a man who knows the secret of
making dreams come true. This special secret, it
seems to me, can be summarized in four C's. They
are Curiosity, Confidence, Courage, and Constancy
and the greatest of these is Confidence. When you
believe a thing, believe it all the way, implicitly and
unquestionably.”
— Walt Disney
Curiosity
21
22
23
RecursionRe · cur · sion
noun Mathematics, Computers
1. Recursion is the process of repeating items in a self-similar
way. For instance, when the surfaces of two mirrors are
exactly parallel with each other the nested images that occur
are a form of infinite recursion.
24
26
27
28
“The particularity of the commodity produced
through immaterial labor...consists in the fact that
it is not destroyed in the act of consumption, but
rather it enlarges, transforms and creates the ‘ideo-
logical’ and cultural environment of the consumer.”
— Antonio Negri
Immaterial Labour
29
Walt Disney Pictures ® The Walt Disney Company
30
31
32
33
3434
3535
void quad(){
fill(138,148,252);
quad(0,y4,x1,0,width,y2,x3,height);
} void cross(){
pushMatrix();
float XPosX = random (0,480); //CrossPositionX
float XPosY = random (0,600); //CrossPositionY
rotate(rotation);
strokeWeight(weight);
stroke(ROUND);
stroke(138,148,252);
y = y+1;
if(y<25){
line(XPosX,XPosY-25,XPosX,XPosY+25);
line(XPosX-25,XPosY,XPosX+25,XPosY);
}
popMatrix();
} void line(){
pushMatrix();
/* float c1 = random (0,255);
float c2 = random (0,255);
float c3 = random (0,255); */
float XPosX = random (0,200);
float XCPosX = constrain (XPosX,0,200);
float XPosY = random (0,500);
float XCPosY = constrain (XPosY,0,400);
strokeWeight(lineWeight);
strokeCap(SQUARE);
float rotation = random (0,TWO_PI);
rotate(rotation);
stroke(138,148,252);
//stroke(c1,c2,c3);
y = y+1;
if(y<20){
line(XCPosX,XCPosY,XCPosX,XCPosY+130);
}
popMatrix();
} void rect(){
pushMatrix();
float XPosX = random (0,400);
float XPosY = random (0,570);
//rotate(rotation);
strokeWeight(lineWeight);
noFill();
stroke(138,148,252);
y = y+1;
if(y<6){
rect(XPosX,XPosY-25,XPosX+90,XPosY+25);
}
popMatrix();
} void mousePressed() {
saveFrame(“_##.png”);
}
//Quad Floats
float x1 = random (0,430);
float x3 = random (0,430);
float y2 = random (0,600);
float y4 = random (0,600);
//Cross Floats
float y = 0;
float weight = random (1,16);
float rotation = random (0,QUARTER_PI);
//Line Test
float lineWeight = random (10,12);
float posterTitle = random(0,10);
int title = int(posterTitle);
PFont font;
float titleFont = random(0,6);
int Fonts = int(titleFont);
float typeFloat = random(0,4);
int type = int(typeFloat);
Images images;
void setup(){
size(430,600);
background(255);
noStroke();
//’\n’
String fonts[] = loadStrings(“fonts.txt”);
font = loadFont(fonts[Fonts]);
images = new Images();
} void draw(){
smooth();
if(type == 0){
quad();
images.display();
}
if(type == 1){
images.display();
line();
}
if(type == 2){
images.display();
cross();
}
if(type == 3){
rect();
images.display();
}
// if(type == 4){
// images.display();
// }
fill(0);
textSize(44);
textFont(font, 48);
String lines[] = loadStrings(“posterTitles2.txt”);
for (int i = 0 ; i < lines.length; i++) {
//read through semi colons using split
//store into another string array (titleArray)
//output each line from that string array
text(lines[title],10,70);
//replace lines with titleArray
//text(lines[title],10,150);
}
}
void quad(){
fill(138,148,252);
quad(0,y4,x1,0,width,y2,x3,height);
} void cross(){
pushMatrix();
float XPosX = random (0,480); //CrossPositionX
float XPosY = random (0,600); //CrossPositionY
rotate(rotation);
strokeWeight(weight);
stroke(ROUND);
stroke(138,148,252);
y = y+1;
if(y<25){
line(XPosX,XPosY-25,XPosX,XPosY+25);
line(XPosX-25,XPosY,XPosX+25,XPosY);
}
popMatrix();
} void line(){
pushMatrix();
/* float c1 = random (0,255);
float c2 = random (0,255);
float c3 = random (0,255); */
float XPosX = random (0,200);
float XCPosX = constrain (XPosX,0,200);
float XPosY = random (0,500);
float XCPosY = constrain (XPosY,0,400);
strokeWeight(lineWeight);
strokeCap(SQUARE);
float rotation = random (0,TWO_PI);
rotate(rotation);
stroke(138,148,252);
//stroke(c1,c2,c3);
y = y+1;
if(y<20){
line(XCPosX,XCPosY,XCPosX,XCPosY+130);
}
popMatrix();
} void rect(){
pushMatrix();
float XPosX = random (0,400);
float XPosY = random (0,570);
//rotate(rotation);
strokeWeight(lineWeight);
noFill();
stroke(138,148,252);
y = y+1;
if(y<6){
rect(XPosX,XPosY-25,XPosX+90,XPosY+25);
}
popMatrix();
} void mousePressed() {
saveFrame(“_##.png”);
}
//Quad Floats
float x1 = random (0,430);
float x3 = random (0,430);
float y2 = random (0,600);
float y4 = random (0,600);
//Cross Floats
float y = 0;
float weight = random (1,16);
float rotation = random (0,QUARTER_PI);
//Line Test
float lineWeight = random (10,12);
float posterTitle = random(0,10);
int title = int(posterTitle);
PFont font;
float titleFont = random(0,6);
int Fonts = int(titleFont);
float typeFloat = random(0,4);
int type = int(typeFloat);
Images images;
void setup(){
size(430,600);
background(255);
noStroke();
//’\n’
String fonts[] = loadStrings(“fonts.txt”);
font = loadFont(fonts[Fonts]);
images = new Images();
} void draw(){
smooth();
if(type == 0){
quad();
images.display();
}
if(type == 1){
images.display();
line();
}
if(type == 2){
images.display();
cross();
}
if(type == 3){
rect();
images.display();
}
// if(type == 4){
// images.display();
// }
fill(0);
textSize(44);
textFont(font, 48);
String lines[] = loadStrings(“posterTitles2.txt”);
for (int i = 0 ; i < lines.length; i++) {
//read through semi colons using split
//store into another string array (titleArray)
//output each line from that string array
text(lines[title],10,70);
//replace lines with titleArray
//text(lines[title],10,150);
}
}
38
40
41
42
In his short story Tlön, Uqbar, Orbis Tertius Jorge Luis Borges remarks “Mirrors and copulation are abominable, since they both multiply the num-bers of men...”. 1 In the fall, I used mirrors to deal with the subject of ownership and representa-tion. Mirrors are an appropriate medium to deal with issues of representation since they produce copies, differences and an ever shifting likeness of what they reflect. A camera, pointed at a subject can act in a similar way as a mirror, producing a representation or multiple of the subject. Over the course of my thesis, I have been dealing with recording design activity as a means to reveal the property relations behind pixel pushing. Considered more broadly, design activity does not have to be limited to mouse and keyboard activity. Instead, design activity can be thought of as the physical activity of the designer using a tool. A ‘mirror’ which records design activity would therefore combine aforementioned ideas of representation with ideas of production. The motion tracking possibilities of an infrared camera combined with computer software could enable the tracking of design activity through a mirror-like surface. This tool would frame design practice in a way that makes design activity and design content inextricable.
1. Borges, Jorge Luis. “Tlön, Uqbar, Orbis Tertius” in Labyrinths. N.p.: New Directions, 2007.
2. Galindo, Brian. “A Rare 1968 Anti-War Short ‘Mickey Mouse in Vietnam’ Has Resurfaced Online.” BuzzFeed. Last modified June 20, 2013.
<http://www.buzzfeed.com/briangalindo/rare-1968-anti-war-short-mickey-mouse-in-vietnam-resurfaces.>
Reflect Eight
Reflect Eight
43
Although copyright and representation can be connected in a number of ways, I have been strug-gling to find a specific area where copyright results in tangible problems of representation. As a property relation copyright is treated as a default, and although it is conceivable that copyright creates problems of representation in relation to capital, labour, production and other issues, drawing connections between these subjects is difficult to make explicit or measure. However, one area where the influence of copyright is more obvious is its censorship of visual criticism. Even though fair use laws make a legal exception to use a copyrighted work for the purposes of commen-tary, criticism, parody, journalism and so on, the terms of fair use are murky. Fair use sees less precedents in relation to artistic criticism than to written criticism for instance.
One example is illustrative of this point, in 1968 Milton Glaser and Lee Savage created Mickey Mouse in Vietnam for an event protesting the war in Indochina.2 The one minute film depicts the Disney icon joining the US military, travelling by boat to Vietnam,and being shot and killed im-mediately upon arrival. The film can be taken as a
criticism of US imperialism or how the horrors of war affect youth. Talk of lawsuit by Disney emerged but was dropped due to the little Disney stood to gain from legal action. This example illustrates how visual criticism is censored by copyright policy. Either through the threat of punishment or artists self censoring their work 3, representations subject to copyright violations risk not achieving their full critical potential.
3. Steinhauer, Jillian. “Are Art Professionals Afraid of Fair Use?” Hyperallergic. Last modified
February 3, 2014. <http://hyperallergic.com/106741/are-art-professionals-afraid-of-fair-use/.>
44
45
Public DomainPub · lic Do · main
noun Law
1. the status of a literary work or an invention
whose copyright or patent has expired or that
never had such protection.
2. land owned by the government.
46
47
48
49
50
51
52
53
54
55
56
57
58
59
The Trans-Pacific Partnership (TPP) is a trade agreement between several Asia-Pacific countries including Brunei, Singapore and New Zealand in partnership with America, Mexico, Canada and other countries. Part of the predicted effects of the TPP could be an extension of Canada's copyright term from Life+50 to match America's Life+70 term. The current situation is such that the government's involvement in trade agree-ments might cause the copyright of creators both living and dead to be extended and as a result
create a 20 year gap in the public domain. One of the primary arguments used by propo-nents of copyright is that intellectual property gives creators incentive to produce because of the monetary value of their IP. The perplexing consequence created is that with the exten - sion of the copyright term the works of dead creators will require an additional 20 years before passing into the public domain. Thus according to the operating logic of copyright, dead creators are incentivised to create additional works.
twenty year gap in the public domain?
Geist, Michael. "The Trans Pacific Partnership IP Chapter Leaks: Canada Would Face Copyright Term Extension."
Michael Geist (blog). Entry posted November 18, 2013. http://www.michaelgeist.ca/content/view/6999/125/.
60
62
63
64
“Artistic experience — or so I was thinking in 1988
— has to be related to the modes of transfor-
mation of labour production ... The work of art is
always indissociably two things — incidentally,
like all objects produced in the era of capitalism,
it is both activity and commodity.”
— Antonio Negri
Activity
65
66
67
68
69
70
71
// add a horizontal sliders, the value of this
// slider will be linked
// to variable ‘crossWeight’
cp5.addSlider(“R”).setPosition(450,50).se-
tRange(0,255);
cp5.addSlider(“G”).setPosition(450,70).se-
tRange(0,255);
cp5.addSlider(“B”).setPosition(450,90).se-
tRange(0,255);
cp5.addSlider(“crossNumber”).setPosi-
tion(450,230).setRange(0,30);
cp5.addSlider(“crossWeight”).setPosi-
tion(450,250).setRange(0,30);
cp5.addSlider(“lineNumber”).setPosition(450,270).
setRange(0,30);
cp5.addSlider(“lineWeight”).setPosition(450,290).
setRange(0,20);
cp5.addSlider(“rectNumber”).setPosition(450,310).
setRange(0,10);
cp5.addSlider(“rectWeight”).setPosition(450,330).
setRange(0,20);
cp5.addToggle(“quadrangle”).setPosition(450,350).
setSize(50,10);
d2 = cp5.addDropdownList(“typeface”).setPosi-
tion(450, 180).setSize(100,300);
custo
mize(d2); //custo
mize the second list
d2.setIndex(10);
cp5.addSlider(“imageNumber”).setPosi-
tion(450,470).setRange(0,5);
} void draw(){
background(255);
cross();
line();
rect();
quad();
images.display();
fill(0);
text(“Form”,20,70);
text(“Follows”,20,120);
text(“f(x)”,20,170);
fill(155);
noStroke();
rect(430,0,width,height);
fill(255);
pushMatrix();
// text(“Colour”,450,40);
// text(“Background”,450,220);
// text(“Image”,450,460);
popMatrix();
} void cross(){
pushMatrix();
strokeWeight(crossWeight);
stroke(ROUND);
stroke(R,G,B); //138,148,252
import controlP5.*;
ControlP5 cp5;
//COLOURS
int R = 138;
int G = 148;
int B = 252;
//CROSS
float rotation = random (0,QUARTER_PI);
int crossWeight = 10;
int crossNumber = 0;
int myColor = color(0,0,0);
final int MAX_NUM_CROSS = 30 ;
float[] XPosX = new float[MAX_NUM_CROSS];
float[] XPosY = new float[MAX_NUM_CROSS];
//LINE
int lineWeight = 10;
int lineNumber = 0;
float lineRotate = 2.1;
final int MAX_LINE_ROTATION = 30;
float[] lineRotation = new float[MAX_LINE_ROTATION];
//RECT
int rectWeight = 10;
int rectNumber = 0;
final int MAX_NUM_RECT = 30 ;
float[] RectPosX = new float[MAX_NUM_RECT];
float[] RectPosY = new float[MAX_NUM_RECT];
//QUAD
boolean quadrangle;
float x1 = random (0,430);
float x3 = random (0,430);
float y2 = random (0,600);
float y4 = random (0,600);
//FONT
DropdownList d2;
PFont font[];
//IMAGES
Images images;
void setup(){
size(650,600); //poster size 430,600
background(255);
cp5 = new ControlP5(this);
images = new Images();
for(int b = 0; b < MAX_NUM_CROSS; b++){
XPosX[b] = random (0,450); //Cross Position X
XPosY[b] = random (0,600); //Cross Position Y
}
for(int c = 0; c < MAX_LINE_ROTATION; c++){
lineRotation[c] = random (0,TWO_PI);
//array of rotations
}
for(int d = 0; d < MAX_NUM_RECT; d++){
RectPosX[d] = random (0,430); //Rect Position X
RectPosY[d] = random (0,600); //Rect Position Y
}
for(int i = 0; i < MAX_IMG; i++){
ImgPosX[i] = random (0,430); //Img Position X
ImgPosY[i] = random (0,600); //Img Position Y
}
String fonts[] = loadStrings(“fonts.txt”);
font = new PFont[fonts.length];
for(int f = 0; f < fonts.length; f++){
font[f] = loadFont(fonts[f]);
}
// add a horizontal sliders, the value of this
// slider will be linked
// to variable ‘crossWeight’
cp5.addSlider(“R”).setPosition(450,50).se-
tRange(0,255);
cp5.addSlider(“G”).setPosition(450,70).se-
tRange(0,255);
cp5.addSlider(“B”).setPosition(450,90).se-
tRange(0,255);
cp5.addSlider(“crossNumber”).setPosi-
tion(450,230).setRange(0,30);
cp5.addSlider(“crossWeight”).setPosi-
tion(450,250).setRange(0,30);
cp5.addSlider(“lineNumber”).setPosition(450,270).
setRange(0,30);
cp5.addSlider(“lineWeight”).setPosition(450,290).
setRange(0,20);
cp5.addSlider(“rectNumber”).setPosition(450,310).
setRange(0,10);
cp5.addSlider(“rectWeight”).setPosition(450,330).
setRange(0,20);
cp5.addToggle(“quadrangle”).setPosition(450,350).
setSize(50,10);
d2 = cp5.addDropdownList(“typeface”).setPosi-
tion(450, 180).setSize(100,300);
custo
mize(d2); //custo
mize the second list
d2.setIndex(10);
cp5.addSlider(“imageNumber”).setPosi-
tion(450,470).setRange(0,5);
} void draw(){
background(255);
cross();
line();
rect();
quad();
images.display();
fill(0);
text(“Form”,20,70);
text(“Follows”,20,120);
text(“f(x)”,20,170);
fill(155);
noStroke();
rect(430,0,width,height);
fill(255);
pushMatrix();
// text(“Colour”,450,40);
// text(“Background”,450,220);
// text(“Image”,450,460);
popMatrix();
} void cross(){
pushMatrix();
strokeWeight(crossWeight);
stroke(ROUND);
stroke(R,G,B); //138,148,252
import controlP5.*;
ControlP5 cp5;
//COLOURS
int R = 138;
int G = 148;
int B = 252;
//CROSS
float rotation = random (0,QUARTER_PI);
int crossWeight = 10;
int crossNumber = 0;
int myColor = color(0,0,0);
final int MAX_NUM_CROSS = 30 ;
float[] XPosX = new float[MAX_NUM_CROSS];
float[] XPosY = new float[MAX_NUM_CROSS];
//LINE
int lineWeight = 10;
int lineNumber = 0;
float lineRotate = 2.1;
final int MAX_LINE_ROTATION = 30;
float[] lineRotation = new float[MAX_LINE_ROTATION];
//RECT
int rectWeight = 10;
int rectNumber = 0;
final int MAX_NUM_RECT = 30 ;
float[] RectPosX = new float[MAX_NUM_RECT];
float[] RectPosY = new float[MAX_NUM_RECT];
//QUAD
boolean quadrangle;
float x1 = random (0,430);
float x3 = random (0,430);
float y2 = random (0,600);
float y4 = random (0,600);
//FONT
DropdownList d2;
PFont font[];
//IMAGES
Images images;
void setup(){
size(650,600); //poster size 430,600
background(255);
cp5 = new ControlP5(this);
images = new Images();
for(int b = 0; b < MAX_NUM_CROSS; b++){
XPosX[b] = random (0,450); //Cross Position X
XPosY[b] = random (0,600); //Cross Position Y
}
for(int c = 0; c < MAX_LINE_ROTATION; c++){
lineRotation[c] = random (0,TWO_PI);
//array of rotations
}
for(int d = 0; d < MAX_NUM_RECT; d++){
RectPosX[d] = random (0,430); //Rect Position X
RectPosY[d] = random (0,600); //Rect Position Y
}
for(int i = 0; i < MAX_IMG; i++){
ImgPosX[i] = random (0,430); //Img Position X
ImgPosY[i] = random (0,600); //Img Position Y
}
String fonts[] = loadStrings(“fonts.txt”);
font = new PFont[fonts.length];
for(int f = 0; f < fonts.length; f++){
font[f] = loadFont(fonts[f]);
}
void controlEvent(ControlEvent theEvent) {
// DropdownList is of type ControlGroup
// A controlEvent will be triggered from inside
// the ControlGroup class.
// therefore you need to check the originator
// of the Event with
// if (theEvent.isGroup())
// to avoid an error message by controlP5.
if(theEvent.isGroup()) {
println(“event from group : “+theEvent.get-
Group().getValue()+” from “+theEvent.getGroup());
// then do stuff, in this case: set the
// variable selectedImage to the value
// with the item from the dropdownlist
// (which in this case is either 0 or 1)
String selectedIte
m = theEvent.getGroup().cap-
tionLabel().getText();
if(selectedIte
m.equals(“Apercu”)){
textFont(font[0]);
println(“Apercu”);
}
if(selectedIte
m.equals(“Publico Bold”)){
textFont(font[1]);
println(“Publico”);
}
if(selectedIte
m.equals(“Raisonne DemiBold”)){
textFont(font[2]);
println(“Raisonne”);
}
if(selectedIte
m.equals(“Anony
mous Mono”)){
textFont(font[3],44);
println(“Anony
mous Mono”);
}
if(selectedIte
m.equals(“Knewave”)){
textFont(font[4]);
println(“Knewave”);
}
if(selectedIte
m.equals(“Optima Bold”)){
textFont(font[5]);
println(“Optima Bold”);
}
else if (theEvent.isController()) {
println(“event from controller : “+theEvent.
getController().getValue()+” from “+theEvent.
getController());
}
}
} void slider(float theColor) {
//int intWeight = int (theWeight);
myColor = color(theColor);
//weight = strokeWeight(crossStroke);
} void keyReleased(){
if (key == ‘s’ || key == ‘S’)
saveFrame(“_##.png”);
}
// rotate(rotation);
int new_length = crossNumber;
for(int b = 0; b <new_length; b++) {
line(XPosX[b],XPosY[b]-35,XPosX[b],XPosY[b]+35);
line(XPosX[b]-35,XPosY[b],XPosX[b]+35,XPosY[b]);
}
popMatrix();
} void line(){
pushMatrix();
// float XPosX = random (0,200);
// float XCPosX = constrain (XPosX,0,200);
// float XPosY = random (0,500);
// float XCPosY = constrain (XPosY,0,400);
strokeWeight(lineWeight);
strokeCap(SQUARE);
stroke(R,G,B);
int new_length = lineNumber;
for(int b = 0; b <new_length; b++){
line(XPosX[b],XPosY[b],XPosX[b],XPosY[b]+130);
rotate(lineRotation[b]);
}
popMatrix();
}
void rect(){
pushMatrix();
float XPosX = random (0,400); //Cross Position X
float XPosY = random (0,570); //Cross Position Y
strokeWeight(rectWeight);
noFill();
stroke(R,G,B);
int new_rect = rectNumber;
for(int d = 0; d <new_rect; d++){
rect(RectPosX[d],RectPosY[d],RectPosX[d]+90,
RectPosY[d]+25);
}
popMatrix();
}
void quad(){
if(quadrangle==true) {
fill(R,G,B);
quad(0,y4,x1,0,430,y2,x3,height);
} else {
}
} void custo
mize(DropdownList ddl) {
// a function to custo
mize a DropdownList
ddl.setBackgroundColor(color(190));
ddl.setIte
mHeight(30);
ddl.setBarHeight(20);
ddl.captionLabel().set(“Typeface”);
ddl.captionLabel().style().marginTop = 6;
ddl.captionLabel().style().marginLeft = 3;
ddl.valueLabel().style().marginTop = 3;
ddl.addIte
m(“Apercu”, 1);
ddl.addIte
m(“Publico Bold”, 2);
ddl.addIte
m(“Raisonne DemiBold”, 3);
ddl.addIte
m(“Anony
mous Mono”, 4);
ddl.addIte
m(“Knewave”, 5);
ddl.addIte
m(“Optima Bold”, 6);
ddl.setColorBackground(color(60));
ddl.setColorActive(color(255, 128));
}
void controlEvent(ControlEvent theEvent) {
// DropdownList is of type ControlGroup
// A controlEvent will be triggered from inside
// the ControlGroup class.
// therefore you need to check the originator
// of the Event with
// if (theEvent.isGroup())
// to avoid an error message by controlP5.
if(theEvent.isGroup()) {
println(“event from group : “+theEvent.get-
Group().getValue()+” from “+theEvent.getGroup());
// then do stuff, in this case: set the
// variable selectedImage to the value
// with the item from the dropdownlist
// (which in this case is either 0 or 1)
String selectedIte
m = theEvent.getGroup().cap-
tionLabel().getText();
if(selectedIte
m.equals(“Apercu”)){
textFont(font[0]);
println(“Apercu”);
}
if(selectedIte
m.equals(“Publico Bold”)){
textFont(font[1]);
println(“Publico”);
}
if(selectedIte
m.equals(“Raisonne DemiBold”)){
textFont(font[2]);
println(“Raisonne”);
}
if(selectedIte
m.equals(“Anony
mous Mono”)){
textFont(font[3],44);
println(“Anony
mous Mono”);
}
if(selectedIte
m.equals(“Knewave”)){
textFont(font[4]);
println(“Knewave”);
}
if(selectedIte
m.equals(“Optima Bold”)){
textFont(font[5]);
println(“Optima Bold”);
}
else if (theEvent.isController()) {
println(“event from controller : “+theEvent.
getController().getValue()+” from “+theEvent.
getController());
}
}
} void slider(float theColor) {
//int intWeight = int (theWeight);
myColor = color(theColor);
//weight = strokeWeight(crossStroke);
} void keyReleased(){
if (key == ‘s’ || key == ‘S’)
saveFrame(“_##.png”);
}
// rotate(rotation);
int new_length = crossNumber;
for(int b = 0; b <new_length; b++) {
line(XPosX[b],XPosY[b]-35,XPosX[b],XPosY[b]+35);
line(XPosX[b]-35,XPosY[b],XPosX[b]+35,XPosY[b]);
}
popMatrix();
} void line(){
pushMatrix();
// float XPosX = random (0,200);
// float XCPosX = constrain (XPosX,0,200);
// float XPosY = random (0,500);
// float XCPosY = constrain (XPosY,0,400);
strokeWeight(lineWeight);
strokeCap(SQUARE);
stroke(R,G,B);
int new_length = lineNumber;
for(int b = 0; b <new_length; b++){
line(XPosX[b],XPosY[b],XPosX[b],XPosY[b]+130);
rotate(lineRotation[b]);
}
popMatrix();
}
void rect(){
pushMatrix();
float XPosX = random (0,400); //Cross Position X
float XPosY = random (0,570); //Cross Position Y
strokeWeight(rectWeight);
noFill();
stroke(R,G,B);
int new_rect = rectNumber;
for(int d = 0; d <new_rect; d++){
rect(RectPosX[d],RectPosY[d],RectPosX[d]+90,
RectPosY[d]+25);
}
popMatrix();
}
void quad(){
if(quadrangle==true) {
fill(R,G,B);
quad(0,y4,x1,0,430,y2,x3,height);
} else {
}
} void custo
mize(DropdownList ddl) {
// a function to custo
mize a DropdownList
ddl.setBackgroundColor(color(190));
ddl.setIte
mHeight(30);
ddl.setBarHeight(20);
ddl.captionLabel().set(“Typeface”);
ddl.captionLabel().style().marginTop = 6;
ddl.captionLabel().style().marginLeft = 3;
ddl.valueLabel().style().marginTop = 3;
ddl.addIte
m(“Apercu”, 1);
ddl.addIte
m(“Publico Bold”, 2);
ddl.addIte
m(“Raisonne DemiBold”, 3);
ddl.addIte
m(“Anony
mous Mono”, 4);
ddl.addIte
m(“Knewave”, 5);
ddl.addIte
m(“Optima Bold”, 6);
ddl.setColorBackground(color(60));
ddl.setColorActive(color(255, 128));
}
76
Mickey Mouse © Disney
77
Even though fair use laws make a legal exception to use a copyrighted work for the purposes of commentary, criticism, parody, journalism and so on, the terms of fair use are murky. Fair use sees less precedents in relation to artistic criti-cism than to written criticism for instance. One example is illustrative of this point, in 1968 Milton Glaser and Lee Savage created Mickey Mouse in Vietnam for an event protesting the war in Indochina.1 The one minute film depicts the Disney icon joining the US military, travelling
by boat to Vietnam, and being shot and killed immediately upon arrival. The film can be taken as a criticism of US imperialism or how the horrors of war affect youth. Talk of lawsuit by Disney emerged but was dropped due to the little Disney stood to gain from a lawsuit. This example illustrates how visual criticism is censored by copyright policy. Either through the threat of punishment or artists self censoring their work, representations subject to copyright violations risk not achieving their full critical potential.
graphic design beyond fair use.
1. Galindo, Brian. "A Rare 1968 Anti-War Short 'Mickey Mouse in Vietnam' Has Resurfaced Online."
BuzzFeed. Last modified June 20, 2013. http://www.buzzfeed.com/briangalindo/
rare-1968-anti-war-short-mickey-mouse-in-vietnam-resurfaces.
78
79
“Reach, of course, is something that, as a handle, I
know a thing or two about. Pick me up, pull me
over, place me where you wish. I hold the tools for
you to use. Grab and release. drag and drop. Open
and close. Repeat.”
— Rob Giampietro
I am a Handle
Let us be clear, appropriation as an artistic method has been cemented in the art world for over a century. Let us also be clear that many of appro-priation based artworks were created in violation of past and present copyright laws. For example, Betye Saar’s work The Liberation of Aunt Jemima, which challenged the racism of stereotyped African-American figures in advertising could well have incurred legal action from Quaker Oats. In another case, a group of underground cartoon-ists known as the Air Pirates incurred serious legal punishment from Disney after creating parody comics of Mickey Mouse. The Pirates argued their comics were fair use while Disney alleged copyright infringement. These two cases show the vague-ness of fair use in relation to artistic work, and one could argue that a lack of critical design is one byproduct of this vagueness. Instead of looking to fair use for protection (a term which does not even apply in Canada), let us instead turn to what cannot be protected by copyright law.
section 102 of the United States Copyright Act states “In no case does copyright protection for an original work of authorship extend to any idea, procedure, process, system...regardless of the form in which it is described, explained, illustrated,or embodied in such work.” 1 Similarly in section 30.71 of Canada’s Copyright Act. “It is not an infringement of copyright to make a reproduction of a work or other subject-matter if (a) the reproduction forms an essential part of a techno-
logical process; (b) the reproduction’s only purpose is to facilitate a use that is not an infringe-ment of copyright; (c) the reproduction exists only for the duration of the technological process.”2 In effect the principles together can be taken to mean that processes which do not result in a fixed tangible outcome cannot be copyrighted. By using this definition as a framework for a new method of design production, we can create a space away from the constraints of copyright law where we have complete representational freedom.
We can create this new framework of design pro-duction with a tool that suggests its own function. A kinect motion camera, programmed via Processing as the input device for a new piece of design software, creates this aforementioned space of representational freedom. By focusing on design activity over designed outcomes, the activity and labour of the designer is insepa-rable from the designed content. With this tool, design becomes a performance activity witnessed by an audience and practiced in dimensional space. By making the user of the tool unable to save their designs (ie. fix the designs in a tangible form) we suggest an alternative, and potentially more critical, design process.
1. U.S Copyright Office. “Subject Matter and Scope of Copyright.” Copyright Law of the United States of America. Accessed March 3, 2014.
http://www.copyright.gov/title17/92chap1.html#102.
2. Government of Canada. “Temporary Reproductions for Technological Processes.” Justice Laws Website.
http://laws-lois.justice.gc.ca/eng/acts/C-42/page-31.html#docCont.
Reflect Nine
81
82
84
85
86
87
ProcessPro · cess
noun
1. a systematic series of actions directed to some end.
2. a continuous action, operation, or series of changes
taking place in a definite manner.
3. Law. a. the summons, mandate, or writ by which a
defendant or thing is brought before court for litigation.
b. the course of the proceedings in an action at law.
4. Biology, Anatomy. a natural outgrowth,
projection, or appendage.
5. the action of going forward or on.
6. the condition of being carried on.
7. course or lapse, as of time.
88
89
section 102 of the American Copyright Act states “In no case does copyright protection for an original work of authorship extend to any idea, procedure, process, system...regardless of the form in which it is described, explained, illus-trated, or embodied in such work.”1 Meanwhile, in section 30.71 of Canada’s Copyright Act. “It is not an infringement of copyright to make a reproduc-tion of a work or other subject-matter if ... the
reproduction forms an essential part of a techno-logical process; ... the reproduction exists only for the duration of the technological process.”2 By treating design as a process that requires active participation in order to achieve a critical dimen-sion, we suggest a framework for a new method of design production. Away from the constraints of copyright law, we have representational freedom for design to achieve its critical potential.
temporary reproductions.
1. U.S Copyright Office. “Subject Matter and Scope of Copyright.” Copyright Law of the United States of America. Accessed March 3, 2014.
http://www.copyright.gov/title17/92chap1.html#102.
2. Government of Canada. “Temporary Reproductions for Technological Processes.” Justice Laws Website.
http://laws-lois.justice.gc.ca/eng/acts/C-42/page-31.html#docCont.
90
o¶Praxis
Michael Hardt & Antonio Negri. Empire.
Jonatan Habib Engqvist et al. Work Work Work A Reader on Art and Labour.
Wal
ter
Ben
jam
in.
Aut
hor
as P
rod
ucer
.
McKenzie Wark. A Hacker Manifesto.
@E
Mau
rizi
o L
azza
rato
. Im
mat
eria
l Lab
or.&
91
¶
Greg Borenstein. Making Things See: 3D vision with Kinect, Processing, Arduino, and MakerBot.
KLiterature Review Three
Practice
Rob Giampietro. I Am A Handle.
Law
renc
e Le
ssig
. T
he F
utur
e of
Idea
s†Andrew Blauvelt and Ellen Lupton. Graphic Design: Now in Production.
$
My
thes
is h
as b
een
an e
xam
inat
ion
of g
rap
hic
des
ign
as a
mo
de
of p
rod
uct
ion
and
its
rela
tio
ns
to th
ree
sub
ject
s: c
op
yrig
ht,
rep
rese
nta
tio
n an
d
own
ersh
ip. I
hav
e in
vest
igat
ed t
hes
e th
ree
to
pic
s th
rou
gh t
he
acti
vity
of g
rap
hic
des
ign
pro
du
ctio
n. T
he fi
rst s
ubje
ct, c
opyr
ight
, was
the
cata
lyst
for
mos
t of m
y fo
rmal
wor
k th
is y
ear.
A
s a
pro
per
ty r
elat
ion
, co
pyr
igh
t is
un
iqu
e
bec
ause
it is
trea
ted
as
a d
efau
lt. T
he
fact
that
co
pyri
ght i
s ov
erlo
oked
or t
aken
for g
rant
ed
is e
xact
ly w
hy it
dem
ands
scr
utin
y o
r at
ten
tio
n.
Th
e re
lati
on
bet
wee
n d
esig
ner
an
d w
ork
is
typ
ical
ly o
ne
of (a
t lea
st te
mp
ora
ry)
own
ersh
ip
or
excl
usi
vity
. Th
e tr
eatm
ent o
f art
isti
c w
ork
as
pro
per
ty c
reat
es th
e co
nditi
ons
for i
ntel
lect
ual
prop
erty
con
flict
s, w
here
in a
utho
rs a
nd in
stitu
tions
ch
alle
nge
on
e an
oth
er o
ver
infr
inge
men
ts
or
imp
rop
er u
se o
f th
eir
pro
per
ty. T
he
con
se-
qu
ence
of t
hes
e le
gal c
on
flict
s o
r th
e th
reat
of
lega
l pu
nis
hm
ent i
s a
“per
mis
sio
n cu
ltu
re”
wh
ere
app
rova
l an
d e
xplic
it le
ases
are
req
uir
ed
to m
ake
any
sort
of d
eriv
ativ
e w
ork
.1 Imp
licit
in
the
dem
and
s of
a p
erm
issi
on
cult
ure
is th
e co
nd
i-ti
on
that
if c
reat
ors
can
not
get
the
righ
ts to
use
ex
isti
ng
wo
rk, t
hey
ris
k p
un
ish
men
t fo
r w
ork
s of
vis
ual
cri
tici
sm. M
y in
ten
t is
for
my
form
al
ou
tco
mes
to h
igh
ligh
t p
rob
lem
s w
ith
co
pyr
igh
t,
per
mis
sio
n cu
ltu
re a
nd
des
ign
pra
ctic
e w
hile
si
mu
ltan
eou
sly
pro
vid
ing
an a
ltern
ativ
e. C
opyr
ight
is th
e d
efau
lt or
gani
zatio
n of
inte
llect
ual
pro
per
ty. I
n 17
10, t
he S
tatu
te o
f An
ne
was
the
fir
st s
tatu
te o
f co
pyr
igh
t in
Gre
at B
rita
in to
ves
t co
pyri
ght i
n th
e au
thor
rath
er th
an th
e pu
blis
her.
2 T
his
mov
ed p
ublis
hing
pow
er fr
om a
n ex
clus
ive
guild
of p
rint
ers
to th
e au
thor
s an
d p
rint
ers
licen
sed
to p
ublis
h th
e w
ork.
To
day
the
situ
atio
n is
mo
re c
om
ple
x th
an a
n ar
gum
ent b
etw
een
auth
ors
an
d p
ub
lish
ers.
Ou
r co
nte
mp
ora
ry c
opy-
ri
ght l
aws
app
ly to
text
s, m
usic
, fine
art
, gra
ph-
ics,
scu
lptu
re, p
erfo
rman
ce, d
ance
, arc
hite
ctur
al
wo
rks
and
so
on
. Th
e in
crea
sed
sco
pe
of c
op
y-ri
ght c
omes
with
new
con
flict
s, w
hich
incl
ude
co
nflic
ts b
etw
een
the
auth
or a
nd th
e w
ork
itse
lf.
The
thre
at o
f co
pyr
igh
t in
frin
gem
ent e
rect
s b
arri
-er
s ar
ou
nd
th
e u
se o
f co
pyr
igh
ted
co
nte
nt.
Co
n-fli
cts
bet
wee
n th
e au
tho
r an
d th
eir
wo
rk e
mer
ge
wh
en a
uth
ors
sel
f cen
sor
them
selv
es fo
r fe
ar o
f in
telle
ctu
al p
rop
erty
infr
inge
men
t.
The
res
olut
ion
of in
telle
ctua
l pro
per
ty c
onfli
cts
wit
hin
the
lega
l sys
tem
is b
ased
on
the
liber
al
conc
epti
on
s of
pro
per
ty a
nd
free
do
m.3
In
chal
leng
ing
copy
righ
t we
also
cha
lleng
e th
e lib
eral
co
ncep
tion
of fr
eed
om.4
Sim
ply
put
, the
lib
eral
notio
n of
free
dom
is o
ne w
here
in e
ach
ind
ivid
ual
can
act a
s th
ey p
leas
e so
lon
g as
they
do
not
h
arm
oth
ers
dir
ectl
y. M
eanw
hile
the
liber
al n
otio
n of
pro
per
ty s
ugge
sts
that
if w
e in
vest
our
lab
our
into
so
met
hin
g, th
e o
utc
om
e b
eco
mes
ou
r p
rop
-er
ty. C
om
bin
ing
thes
e tw
o n
otio
ns
give
s u
s a
p
ictu
re o
f co
pyr
igh
t as
ou
tlin
ed b
y it
s p
rop
on
ents
. C
reat
ors
have
free
dom
to d
o w
ith th
eir
wor
k as
th
ey p
leas
e an
d c
op
yrig
ht i
s th
ere
to p
rovi
de
lega
l p
rote
ctio
n an
d m
onet
ary
ince
ntiv
e. W
ith
copy
-ri
ght,
ind
ivid
ual
rat
ion
alit
y (o
r se
lf in
tere
st)
lead
s to
co
llect
ive
irra
tio
nal
ity.
Ind
ivid
ual
s’ h
avin
g
lega
l and
mon
etar
y pr
otec
tion
of th
eir w
ork
is ju
sti-
fiabl
e, b
ut i
t can
lead
to d
ange
rou
s sc
enar
ios
fo
r o
ur
crea
tive
cu
ltu
re.
On
e d
ange
r cu
rren
tly
thre
aten
ing
Can
ada’
s
pu
blic
do
mai
n is
th
e p
ote
nti
al 2
0-y
ear
incr
ease
to
ou
r co
pyr
igh
t ter
m. C
anad
a’s
invo
lvem
ent
in t
rad
e n
ego
tiat
ion
s th
rou
gh
th
e Tr
ans
Pac
ific
Par
tner
ship
(T
PP
) co
mes
with
pre
ssur
e fr
om
oth
er n
atio
ns
to in
crea
se C
anad
a’s
cop
yrig
ht
term
to m
atch
thei
r ow
n.5 In
the
Uni
ted
Sta
tes,
th
e 19
97 C
opyr
ight
Ter
m E
xten
sion
Act
, der
isiv
ely
know
n as
the
“Mic
key
Mou
se P
rote
ctio
n A
ct”,
ex
ten
ded
the
Am
eric
an c
op
yrig
ht t
erm
to li
fe
plu
s 70
yea
rs w
ith
no
new
wo
rks
ente
rin
g th
e p
ublic
dom
ain
from
19
97 to
20
17.6
In m
y d
ata
visu
aliz
atio
n p
oste
r, F
orfe
iting
Can
ada’
s P
ublic
D
omai
n, I
used
line
s to
map
a ti
mel
ine
of C
anad
a’s
curr
ent c
opyr
ight
term
(lif
e p
lus
50
yea
rs)
and
th
e p
ote
nti
al in
crea
sed
ter
m (
life
plu
s 70
yea
rs).
T
he
visu
aliz
atio
n h
igh
ligh
ts t
he
po
ten
tial
Th
esis
Ess
ay
93
20-y
ear g
ap, a
nd
the
crea
tors
we
wo
uld
lose
ac
cess
toin
clu
din
g b
ut
no
t lim
ited
to:
Gab
riel
le
Roy
, Mar
shal
l McL
uhan
, Mar
cel D
ucha
mp,
Ro-
la
nd B
arth
es, V
ladi
mir
Nab
okov
, Han
nah
Are
ndt a
nd
othe
rs. O
ne
of t
he
pri
mar
y ar
gu
men
ts u
sed
b
y p
rop
on
ents
of c
op
yrig
ht
is t
hat
inte
llect
ual
p
rop
erty
giv
es c
reat
ors
ince
nti
ve to
pro
du
ce
bec
ause
of t
he
mo
net
ary
valu
e of
thei
r IP
. Wit
ho
ut
this
ince
nti
ve, c
reat
ors
wo
uld
hav
e le
ss r
easo
n to
cre
ate.
The
per
ple
con
seq
uenc
e cr
eate
d is
th
at w
ith
the
exte
nsi
on
of th
e co
pyr
igh
t ter
m th
e w
orks
of d
ead
crea
tors
will
req
uire
an
add
itio
nal
2
0 y
ears
bef
ore
pas
sin
g in
to th
e p
ub
lic d
omai
n.
Thu
s ac
cord
ing
to th
e op
erat
ing
logi
c
of c
op
yrig
ht,
dea
d c
reat
ors
are
ince
nti
vise
d t
o
crea
te a
dd
itio
nal
wo
rks.
If th
e p
rod
ucts
of o
ur la
bou
r b
ecom
e ou
r p
rop
erty
, th
en th
e cu
rren
t und
erst
andi
ng o
f art
istic
lab
our
(wor
king
on
soft
war
e on
com
put
ers)
cre
ates
a n
ew
pro
per
ty re
latio
n. T
his
mea
ns
that
, a s
erie
s of
m
ou
se m
ovem
ents
an
d k
eyb
oar
d p
ress
es r
esu
lts
in p
rop
erty
. In
my
Pu
shin
g P
ixel
s ex
per
imen
t,
I cre
ated
a s
oftw
are
sket
ch w
her
e u
sers
co
uld
m
ove
aro
un
d t
hre
e ex
isti
ng
elem
ents
(ti
tle,
text
an
d im
age)
un
til t
hey
wer
e sa
tisfi
ed w
ith
th
e co
mp
osi
tio
n. I
to
ok
the
exer
cise
as
an o
pp
or-
tu
nit
y to
cre
ate
an in
dex
of m
ou
se a
ctiv
ity
and
a
map
of g
rap
hic
des
ign
lab
our.
If w
e w
ere
to
inte
rpre
t gra
ph
ic d
esig
n p
rod
uct
ion
fro
m a
Mar
x-is
t per
spec
tive
, we
wo
uld
defi
ne
it a
s a
form
of
imm
ater
ial l
abou
r.7 Imm
ater
ial l
abou
r co
nsti
tute
s a
mod
e of
pro
duc
tion
whe
rein
the
ou
tco
me
of
lab
ou
r ca
nn
ot b
e ex
hau
sted
, bu
t co
nver
sely
gai
ns
pre
vale
nce
wit
h in
crea
sed
co
nsu
mp
tio
n (i
.e.
reco
gnit
ion
or
view
ersh
ip).
We
can
defi
ne
man
y m
od
es o
f cu
ltu
ral p
rod
uct
ion
as
form
s o
f im
ma-
teri
al la
bo
ur
incl
ud
ing
vid
eo e
dit
ing,
fash
ion
d
esig
n, e
tc. T
he
uniq
ue
and
not
ewor
thy
pro
per
ty
of th
is fo
rm o
f lab
our
is th
at th
e w
orke
r in
clud
es
his
or
her
ow
n su
bje
ctiv
ity
and
cre
ativ
ity
into
the
end
pro
du
ct. T
he
wo
rker
’s a
esth
etic
jud
gem
ents
b
eco
me
par
t of t
he
com
mo
dit
ies
pro
du
ced
. C
op
yrig
ht c
aptu
res
this
su
bje
ctiv
ity
and
mak
es
the
outc
ome
pro
per
ty, a
utom
atic
ally
whe
n it
is
fixe
d in
to a
tan
gib
le m
edia
. Th
e co
nce
pt
of o
wn
-er
ship
in r
elat
ion
to g
rap
hic
des
ign
is p
erp
lexi
ng
wh
en w
e co
nsi
der
th
at g
rap
hic
des
ign
ers
wo
rk
pri
mar
ily w
ith
exis
tin
g co
nte
nt.
8 T
he
des
ign
er
is re
spon
sibl
e fo
r usi
ng th
e ph
otog
raph
y, ty
pef
aces
, an
d te
xt c
reat
ed b
y ot
hers
and
cla
imin
g th
at th
ey
own
th
e re
arra
nge
d o
utc
om
e. T
her
efo
re, w
e ca
n
bet
ter
situ
ate
gra
ph
ic d
esig
n a
s an
act
ivit
y of
tr
ansl
atio
n r
ath
er t
han
au
tho
rsh
ip s
ui g
ener
is.9
To
furt
her e
xam
ine
the
rela
tions
hip
of d
esig
ners
w
ork
ing
wit
h e
xist
ing
con
ten
t I c
reat
ed m
ult
iple
it
erat
ion
s of
an
alg
ori
thm
ic p
ost
er g
ener
ator
. U
sers
co
uld
inp
ut t
ext,
sel
ect t
ypef
aces
, ch
oos
e b
ackg
roun
d el
emen
ts a
nd
incl
ud
e im
ager
y. T
he
cave
at w
as t
hat
use
rs c
ou
ld n
ot i
nte
ract
wit
h
the
po
ster
dir
ectl
y, b
ut c
ou
ld o
nly
mov
e ar
ou
nd
a
seri
es o
f slid
ers
to c
ust
om
ize
the
ou
tco
mes
. T
he u
ser’
s d
epen
den
ce o
n th
e co
nten
t and
inte
r-fa
ce d
efin
ed b
y th
e so
ftw
are
calls
att
enti
on
to th
e d
esig
ner
’s r
elia
nce
on
exis
tin
g co
nte
nt t
o m
ake
u
p th
eir
own
inte
llect
ual
pro
per
ty. A
s p
revi
ou
sly
men
tion
ed, i
nd
ivid
uals
sup
por
tin
g co
pyri
ght c
re-
ates
a p
erm
issi
on
cu
ltu
re in
wh
ich
rep
rese
nta
-tio
ns m
ust n
avig
ate.
Alt
houg
h ap
pro
pri
atio
n h
as
bee
n ca
no
niz
ed w
ith
in th
e ar
t wo
rld
for
over
a
cent
ury,
we
shou
ld a
ckno
wle
dge
the
fact
that
thes
e ap
pro
pri
atio
n b
ased
art
wo
rks
wer
e lik
ely
crea
ted
in
vio
lati
on
of p
ast a
nd
pre
sent
cop
yrig
ht la
ws.
Ev
en th
ough
fair
use
law
s m
ake
a le
gal e
xcep
-ti
on to
use
a c
opyr
ight
ed w
ork
for t
he p
urp
oses
of
criti
cism
, com
men
tary
, sat
ire,
jour
nalis
m a
nd
so
on
, th
e te
rms
of fa
ir u
se a
re u
ncl
ear
in th
e U
nite
d
Sta
tes,
and
mor
e lim
iting
in C
anad
a. O
ne c
ould
ar
gue
that
per
mis
sio
n cu
ltu
re a
cts
as a
fett
er o
n ar
tistic
cri
ticis
m o
r d
esig
ns
of a
cri
tica
l nat
ure
. A
n e
xam
ple
of v
isu
al c
riti
cism
bei
ng
cen
sore
d
by
cop
yrig
ht l
aw c
an b
e fo
un
d in
Lee
Sav
age
and
M
ilto
n G
lase
r’s
Mic
key
Mou
se in
Vie
tnam
. A o
ne-
min
ute
sh
ort
cri
tici
zin
g U
S im
per
ialis
m
and
the
war
in In
doch
ina,
Mic
key
Mou
se in
Vie
tnam
d
epic
ts th
e D
isn
ey s
tar
trav
ellin
g b
y b
oat
to
Vie
tnam
, an
d b
ein
g sh
ot a
nd
kill
ed im
med
iate
ly
upon
arr
ival
. The
film
was
thre
aten
ed b
y la
wsu
it fr
om
Dis
ney
, bu
t th
e n
otio
n w
as q
uic
kly
dro
pp
ed
as n
o m
on
ey w
as m
ade
fro
m th
e fil
m a
nd
the
com
pan
y d
id n
ot
wan
t to
tak
e a
po
litic
al
po
siti
on
on
th
e co
nfl
ict.
Th
rou
gh th
e th
reat
of
pu
nis
hm
ent a
nd
art
ists
sel
f-ce
nso
rin
g th
eir
wo
rk,
rep
rese
nta
tio
ns
sub
ject
to c
op
yrig
ht i
nfr
inge
-m
ent r
isk
not
ach
ievi
ng
thei
r fu
ll cr
itic
al p
oten
tial
. H
ow c
an g
rap
hic
des
ign
nav
igat
e to
war
ds
a
mo
re c
riti
cal s
et o
f rel
atio
ns?
Th
is q
ues
tio
n w
as a
co
nce
rn o
f Fra
nkf
urt
sch
oo
l th
eori
st W
alte
r B
enja
min
. In
his
ess
ay A
utho
r
as P
rodu
cer B
enja
min
rem
arks
that
in o
rder
for
ar
t fo
rms
to a
chie
ve a
uto
no
my
agai
nst
“th
e b
ruta
l het
ero
no
mie
s of
eco
no
mic
ch
aos”
art
ists
m
ust
co
ntr
ol t
he
too
ls o
f cre
ativ
e p
rod
uct
ion
.10
Giv
en th
e cu
rren
t co
nd
itio
n of
des
ign
pra
ctic
e,
this
mea
ns
that
th
e d
esig
ner
mu
st g
ain
co
ntr
ol
over
th
e p
rim
ary
too
l of d
esig
n p
rod
uct
ion
, th
e co
mp
ute
r. If
the
pri
mar
y to
ol o
f des
ign
pro
du
c-ti
on
is th
e co
mp
ute
r, th
en d
esig
ner
s m
ust
ta
ke c
on
tro
l of d
esig
n s
oftw
are
thro
ugh
co
din
g p
ract
ices
to a
chie
ve a
mo
re c
riti
cal d
imen
sio
n w
ith
in th
eir
dis
cip
line.
Th
e fin
al c
om
po
nen
t of
my
thes
is p
roje
ct is
a p
iece
of d
esig
n so
ftw
are
crea
ted
in P
roce
ssin
g th
at u
ses
a K
inec
t mot
ion
cam
era.
Th
e to
ol a
llow
s p
arti
cip
ants
to
des
ign
us
ing
gest
ure.
Use
rs m
ove
arou
nd t
ype
and
imag
e u
sin
g th
eir
han
ds,
dra
w li
nes
by
ou
tstr
etch
ing
thei
r ar
ms,
an
d s
o o
n. A
pix
elat
ed r
epre
sen
tati
on
of th
e us
er is
incl
ud
ed in
the
scen
e, m
akin
g th
e la
bo
ur
of t
he
des
ign
er e
xplic
itly
par
t of t
he
too
l’s
fun
ctio
n. M
y in
ten
t was
to m
ake
des
ign
con
ten
t an
d d
esig
n a
ctiv
ity
visu
ally
inex
tric
able
. Th
e
des
ign
of th
e to
ol i
tsel
f is
bu
ilt to
su
gge
st a
sp
ecifi
c w
ay o
f in
tera
ctin
g w
ith
it. A
s an
thro
po
lo-
gist
Tim
othy
Tay
lor
rem
arks
, “T
he e
xist
ence
of o
b-
ject
s, s
uch
as
sau
cep
ans,
no
t ju
st a
llow
s ac
tio
ns
bu
t su
gge
sts
them
. Th
e ab
ility
of o
bje
cts
to s
ug-
gest
thin
gs th
is w
ay h
as a
llow
ed th
e de
velo
pm
ent
of s
pec
ial f
eatu
res
of o
bje
cts
and
sp
ecia
l typ
es o
f o
bje
cts,
wh
ere
the
fun
ctio
n is
mo
re
to s
ug
gest
th
an t
o d
eliv
er.”
11 W
ith
my
des
ign
soft
war
e, th
e su
gge
sted
fun
ctio
n is
on
e of
p
urp
ose
ful a
nd
inte
nti
on
al c
op
yrig
ht
vio
lati
on
s.
sect
ion
30.
71 o
f Can
ada’
s C
opyr
ight
Act
sta
tes
“It i
s n
ot a
n in
frin
gem
ent o
f co
pyr
igh
t to
mak
e a
re
pro
duc
tion
of a
wor
k or
oth
er s
ubje
ct-m
atte
r if…
the
rep
rod
uct
ion
form
s an
ess
enti
al p
art
of a
te
chn
olo
gica
l pro
cess
,” a
nd
“…
the
rep
rod
uct
ion
exis
ts o
nly
for
the
du
rati
on
of t
he
tech
no
logi
cal
pro
cess
.”12
In s
ho
rt p
roce
sses
th
at d
o n
ot r
esu
lt
in a
fixe
d ta
ngib
le o
utco
me
cann
ot b
e co
pyri
ghte
d.
Usi
ng
this
defi
nit
ion
as a
fram
ewo
rk fo
r a
new
m
etho
d of
des
ign
pro
duc
tion
wit
hin
my
soft
war
e,
we
sug
gest
th
e u
ser
vio
late
co
pyr
igh
t b
y w
ork
ing
with
in a
sp
ace
of re
pre
sent
atio
nal f
reed
om.
If w
e tr
eat d
esig
n as
an
acti
ve p
roce
ss in
stea
d o
f as
a s
erie
s of
des
igne
d ou
tcom
es, w
e ch
alle
nge
cop
yrig
ht
and
cre
ate
a sp
ace
of r
epre
sen
tati
on
al
free
dom
aw
ay fr
om th
e d
eman
ds
of p
erm
issi
on
cult
ure
. My
inte
nt i
s fo
r m
y th
esis
to m
ake
evid
ent
pro
ble
ms
of r
epre
sen
tati
on
, ow
ner
ship
an
d
cop
yrig
ht
as t
hey
inte
rsec
t w
ith
des
ign
pra
ctic
e.
Sug
gest
ing
an a
ltern
ativ
e d
esig
n to
ol c
omes
wit
h th
e su
gge
stio
n o
f an
alt
ern
ativ
e d
esig
n p
ract
ice,
a
mo
re s
elf-
refl
ecti
ve a
nd
cri
tica
l dis
cip
line
o
pen
to n
ew p
ossi
bili
ties
.
1. L
essi
g, L
awre
nce
. Th
e F
utu
re o
f Id
eas.
New
Yor
k, U
S: V
inta
ge. 2
00
2.
2. U
niv
ersi
ty o
f Cam
bri
dge
. “St
atu
te o
f An
ne,
Lon
don
(171
0).”
Pri
mar
y So
urc
es o
n C
opyr
igh
t. A
cces
sed
Ap
ril 3
, 20
14.
htt
p://
cop
y.la
w.c
am.a
c.u
k/ca
m/t
ool
s/re
qu
est/
show
Rec
ord
.
ph
p?i
d=r
ecor
d_u
k_1
710
.
3. L
ock
e, Jo
hn
. Sec
ond
Tre
atis
e o
f Gov
ern
men
t.
Cam
bri
dge
: Hac
kett
, 19
80. 2
5.
4. S
inge
r, P
eter
. Mar
x: A
Ver
y Sh
ort I
ntr
od
uct
ion
.
New
Yor
k, U
S: O
xfo
rd P
aper
bac
ks.
6. L
essi
g, L
awre
nce
. Th
e F
utu
re o
f Id
eas.
New
Yor
k, U
S: V
inta
ge. 2
00
2.
7. L
azza
rato
, Mau
rizi
o. “
Imm
ater
ial L
abor
” R
adic
al T
hou
ght
In It
alty
: A
Po
ten
tial
Pol
itic
s. M
inn
eso
ta: U
niv
Of M
inn
eso
ta
Pre
ss. 2
00
6. A
cces
sed
Oct
11
2013
.
htt
p://
ww
w.e
-flu
x.co
m/w
p-c
onte
nt/
up
load
s/20
13/0
5/2.
-Mau
rizi
o-L
azza
rato
-Im
mat
eria
l-Lab
or.p
df
8. B
lau
velt
, An
dre
w. “
2011
To
ol.”
In
Gra
ph
ic D
esig
n: N
ow in
Pro
du
ctio
n, e
dit
ed b
y A
nd
rew
Bla
uve
lt a
nd
Elle
n L
up
ton
, 23-
30.
Min
nea
pol
is, U
S: W
alke
r A
rt C
ente
r, 2
011
.
9. R
ock
, Mic
hae
l. M
ult
iple
Sig
nat
ure
s: O
n D
esig
ner
s, A
uth
ors,
Rea
der
s an
d U
sers
. Hon
g K
ong:
Riz
zoli
, 20
13.
10. B
enja
min
, Wal
ter.
Au
thor
as
Pro
du
cer.
New
Lef
t Rev
iew
. 19
70. A
cces
sed
Ap
ril 2
,
htt
p://
yale
un
ion
.org
/wp
-con
ten
t/u
plo
ads/
2013
/12/
Wal
ter_
Ben
jam
in_-
_Th
e_A
uth
or_
as_P
rod
uce
r.p
df
11. G
iam
pie
tro,
Ro
b. “
I Am
a H
and
le.”
Lin
ed &
Un
lin
ed.
Acc
esse
d A
pri
l 3, 2
014
.
htt
p://
blo
g.li
ned
and
un
lin
ed.c
om/p
ost
/373
415
029
76/
i-am
-a-h
and
le.
12. G
over
nm
ent o
f Can
ada.
“T
emp
orar
y R
epro
du
ctio
ns
for
Tec
hn
olo
gica
l Pro
cess
es.”
Just
ice
Law
s W
ebsi
te.
htt
p://
law
s-lo
is.ju
stic
e.gc
.ca/
eng/
acts
/C-4
2/p
age-
31.h
tml#
doc
Con
t
95
96
97
98
fillColor = strokeColor = color(255);
} void setThreshold(int newThreshold){
threshold = newThreshold; }
void setMaxPoints(int newMaxPoints){
maxPoints = newMaxPoints; }
void setColor(float red, float blue, float
green){
fillColor = strokeColor = color(red,blue,green);
} //Checks to see if the point falls within the
//bounds of our Hotpoint box
boolean check(PVector point) {
boolean result = false;
if(point.x > center.x - size/2 && point.x <
center.x + size/2) {
if(point.y > center.y - size/2 && point.y <
center.y + size/2) {
if(point.z > center.z - size/2 && point.z <
center.z + size/2) {
result = true;
pointsIncluded++;
}
}
}
//Result the result as a true false statment
return result;
}
void draw(){
pushMatrix();
translate(center.x, center.y, center.z);
fill(red(fillColor), blue(fillColor),
green(fillColor), 255 * percentIncluded());
fill(red(strokeColor), blue(strokeColor),
green(strokeColor),255);
stroke(0);
box(size);
popMatrix();
}
float percentIncluded() {
return map(pointsIncluded, 0, maxPoints, 0, 1);
}
boolean currentlyHit() {
return(pointsIncluded > threshold); }
boolean isHit() {
return currentlyHit() && !wasJustHit; }
void clear() {
wasJustHit = currentlyHit();
pointsIncluded = 0;
}
}
//Declare our hotpoint objects
Hotpoint lineTrigger;
Hotpoint imgTrigger;
Hotpoint rectTrigger;
...
void setup()
{ ...
imgTrigger = new Hotpoint(700, 600, 1700, 200);
lineTrigger = new Hotpoint(700, 300, 1700, 200);
rectTrigger = new Hotpoint(700, 0, 1700, 200);
...
} void draw()
{ ...
//Check the user interface trigger with the real
//world point
lineTrigger.check(realWorldPoint);
imgTrigger.check(realWorldPoint);
rectTrigger.check(realWorldPoint);
...
//If a UI trigger is hit, change the true/false
//state
ments accordingly
if (lineTrigger.isHit()) {
drawLine = true;
drawImg = false;
drawRect = false;
}
if (imgTrigger.isHit()) {
drawImg = true;
drawLine = false;
drawRect = false;
}
if (rectTrigger.isHit()) {
drawRect = true;
drawImg = false;
drawLine = false;
}
lineTrigger.draw();
lineTrigger.clear();
imgTrigger.draw();
imgTrigger.clear();
rectTrigger.draw();
rectTrigger.clear();
...
class Hotpoint {
//The user interface ‘hotpoints’ class
PVector center;
color fillColor;
color strokeColor;
int size;
int pointsIncluded;
int maxPoints;
boolean wasJustHit;
int threshold;
Hotpoint(float centerX, float centerY, float centerZ,
int boxSize) {
center = new PVector(centerX, centerY, centerZ);
size = boxSize;
pointsIncluded = 0;
maxPoints = 1000;
threshold = 0;
//fillColor = strokeColor =
//color(random(255), random(255), random(255));
99
fillColor = strokeColor = color(255);
} void setThreshold(int newThreshold){
threshold = newThreshold; }
void setMaxPoints(int newMaxPoints){
maxPoints = newMaxPoints; }
void setColor(float red, float blue, float
green){
fillColor = strokeColor = color(red,blue,green);
} //Checks to see if the point falls within the
//bounds of our Hotpoint box
boolean check(PVector point) {
boolean result = false;
if(point.x > center.x - size/2 && point.x <
center.x + size/2) {
if(point.y > center.y - size/2 && point.y <
center.y + size/2) {
if(point.z > center.z - size/2 && point.z <
center.z + size/2) {
result = true;
pointsIncluded++;
}
}
}
//Result the result as a true false statment
return result;
}
void draw(){
pushMatrix();
translate(center.x, center.y, center.z);
fill(red(fillColor), blue(fillColor),
green(fillColor), 255 * percentIncluded());
fill(red(strokeColor), blue(strokeColor),
green(strokeColor),255);
stroke(0);
box(size);
popMatrix();
}
float percentIncluded() {
return map(pointsIncluded, 0, maxPoints, 0, 1);
}
boolean currentlyHit() {
return(pointsIncluded > threshold); }
boolean isHit() {
return currentlyHit() && !wasJustHit; }
void clear() {
wasJustHit = currentlyHit();
pointsIncluded = 0;
}
}
//Declare our hotpoint objects
Hotpoint lineTrigger;
Hotpoint imgTrigger;
Hotpoint rectTrigger;
...
void setup()
{ ...
imgTrigger = new Hotpoint(700, 600, 1700, 200);
lineTrigger = new Hotpoint(700, 300, 1700, 200);
rectTrigger = new Hotpoint(700, 0, 1700, 200);
...
} void draw()
{ ...
//Check the user interface trigger with the real
//world point
lineTrigger.check(realWorldPoint);
imgTrigger.check(realWorldPoint);
rectTrigger.check(realWorldPoint);
...
//If a UI trigger is hit, change the true/false
//state
ments accordingly
if (lineTrigger.isHit()) {
drawLine = true;
drawImg = false;
drawRect = false;
}
if (imgTrigger.isHit()) {
drawImg = true;
drawLine = false;
drawRect = false;
}
if (rectTrigger.isHit()) {
drawRect = true;
drawImg = false;
drawLine = false;
}
lineTrigger.draw();
lineTrigger.clear();
imgTrigger.draw();
imgTrigger.clear();
rectTrigger.draw();
rectTrigger.clear();
...
class Hotpoint {
//The user interface ‘hotpoints’ class
PVector center;
color fillColor;
color strokeColor;
int size;
int pointsIncluded;
int maxPoints;
boolean wasJustHit;
int threshold;
Hotpoint(float centerX, float centerY, float centerZ,
int boxSize) {
center = new PVector(centerX, centerY, centerZ);
size = boxSize;
pointsIncluded = 0;
maxPoints = 1000;
threshold = 0;
//fillColor = strokeColor =
//color(random(255), random(255), random(255));
User interface detection works by delineating boxes
in three dimensional space. Each time the draw()
function is run, the program checks the location of
the points within the point cloud and whether or not
any of them fall within the bounds of the box.
Once the user's hand enters within the x, y and z
space of the box, an event is triggered.
Inside the Box
100
The point cloud uses the Kinect's ability to see
depth values to draw a scene of three dimensional
points. Each point is a vector with its own x, y
and z position in Cartesian space. To ease loading
time, the program does not draw every point
picked up by the camera, instead it draws points
at specific intervals each time draw() is run. The
interesting function of the point cloud is that the
scene can be rotated within the program to
get a better impression of what the camera sees.
...void draw(){...//Create arrays of depth and user informationint[] depthMap = context.depthMap();int[] userMap = context.userMap();PVector[] depthPoints = context.depthMapReal-World(); //To speed up the drawing, draw every X pointint steps = 4; int index;
//Initialize variable for storing the total points we find inside boxint depthPointsInBox = 0;
Turning Points
101
//Draw the pointcloudbeginShape(POINTS);for (int y=0;y < context.depthHeight();y+=steps){ for (int x=0;x < context.depthWidth();x+=steps) { index = x + y * context.depthWidth();
PVector realWorldPoint = depthPoints[x];
if (depthMap[index] > 0) { //Draw the projected point realWorldPoint = context.depthMapRealWorld()[index]; if (userMap[index] == 0) stroke(100); else //User colour stroke(userClr[ (userMap[index] - 1) % userClr.length ]);
//Check the user interface trigger with the real //world point lineTrigger.check(realWorldPoint); imgTrigger.check(realWorldPoint); rectTrigger.check(realWorldPoint);
strokeWeight(2); point(realWorldPoint.x, realWorldPoint.y, realWorldPoint.z); } } } endShape();...
102
//Draw the limbs
void drawLimb(int userId, int jointType1, int
jointType2)
{ PVector jointPos1 = new PVector();
PVector jointPos2 = new PVector();
float confidence;
// draw the joint position
confidence = context.getJointPositionSkeleton
(userId, jointType1, jointPos1);
confidence = context.getJointPositionSkeleton
(userId, jointType2, jointPos2);
stroke(0, 17, 238, confidence * 200 + 55);
line(jointPos1.x, jointPos1.y, jointPos1.z,
jointPos2.x, jointPos2.y, jointPos2.z);
drawJointOrientation(userId, jointType1,
jointPos1, 50);
}
//Draw the joint orientation
void drawJointOrientation(int userId, int
jointType, PVector pos, float length)
{
PMatrix3D orientation = new PMatrix3D();
float confidence = context.getJointOrientationS
keleton(userId, jointType, orientation);
if (confidence < 0.001f)
//Nothing to draw, orientation data is useless
return;
pushMatrix();
translate(pos.x, pos.y, pos.z);
//Set the local coordsys
applyMatrix(orientation);
//Coordsys lines are 100mm long
// x - r
stroke(255, 0, 0, confidence * 200 + 55);
line(0, 0, 0,
length, 0, 0);
// y - g
stroke(0, 255, 0, confidence * 200 + 55);
line(0, 0, 0,
0, length, 0);
// z - b
stroke(0, 0, 255, confidence * 200 + 55);
line(0, 0, 0,
0, 0, length);
popMatrix();
}
One of the Kinect's main features is its ability to
approximate the user's joint and limb data. The hard-
ware affords us an approximation of the position,
orientation, direction, and movement of the
user's 'skeleton'. We can then use this information
to make interactive applications.
Skin and Bone
103
//Draw the limbs
void drawLimb(int userId, int jointType1, int
jointType2)
{ PVector jointPos1 = new PVector();
PVector jointPos2 = new PVector();
float confidence;
// draw the joint position
confidence = context.getJointPositionSkeleton
(userId, jointType1, jointPos1);
confidence = context.getJointPositionSkeleton
(userId, jointType2, jointPos2);
stroke(0, 17, 238, confidence * 200 + 55);
line(jointPos1.x, jointPos1.y, jointPos1.z,
jointPos2.x, jointPos2.y, jointPos2.z);
drawJointOrientation(userId, jointType1,
jointPos1, 50);
}
//Draw the joint orientation
void drawJointOrientation(int userId, int
jointType, PVector pos, float length)
{
PMatrix3D orientation = new PMatrix3D();
float confidence = context.getJointOrientationS
keleton(userId, jointType, orientation);
if (confidence < 0.001f)
//Nothing to draw, orientation data is useless
return;
pushMatrix();
translate(pos.x, pos.y, pos.z);
//Set the local coordsys
applyMatrix(orientation);
//Coordsys lines are 100mm long
// x - r
stroke(255, 0, 0, confidence * 200 + 55);
line(0, 0, 0,
length, 0, 0);
// y - g
stroke(0, 255, 0, confidence * 200 + 55);
line(0, 0, 0,
0, length, 0);
// z - b
stroke(0, 0, 255, confidence * 200 + 55);
line(0, 0, 0,
0, 0, length);
popMatrix();
}
//Draw the skeleton with the selected joints
void drawSkeleton(int userId)
{ strokeWeight(3);
//Gets the 3d joint data
drawLimb(userId, SimpleOpenNI.SKEL_HEAD,
SimpleOpenNI.SKEL_NECK);
drawLimb(userId, SimpleOpenNI.SKEL_NECK,
SimpleOpenNI.SKEL_LEFT_SHOULDER);
drawLimb(userId, SimpleOpenNI.SKEL_LEFT_SHOULDER,
SimpleOpenNI.SKEL_LEFT_ELBOW);
drawLimb(userId, SimpleOpenNI.SKEL_LEFT_ELBOW,
SimpleOpenNI.SKEL_LEFT_HAND);
drawLimb(userId, SimpleOpenNI.SKEL_NECK,
SimpleOpenNI.SKEL_RIGHT_SHOULDER);
drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_SHOULDER,
SimpleOpenNI.SKEL_RIGHT_ELBOW);
drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_ELBOW,
SimpleOpenNI.SKEL_RIGHT_HAND);
drawLimb(userId, SimpleOpenNI.SKEL_LEFT_SHOULDER,
SimpleOpenNI.SKEL_TORSO);
drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_SHOULDER,
SimpleOpenNI.SKEL_TORSO);
drawLimb(userId, SimpleOpenNI.SKEL_TORSO,
SimpleOpenNI.SKEL_LEFT_HIP);
drawLimb(userId, SimpleOpenNI.SKEL_LEFT_HIP,
SimpleOpenNI.SKEL_LEFT_KNEE);
drawLimb(userId, SimpleOpenNI.SKEL_LEFT_KNEE,
SimpleOpenNI.SKEL_LEFT_FOOT);
drawLimb(userId, SimpleOpenNI.SKEL_TORSO,
SimpleOpenNI.SKEL_RIGHT_HIP);
drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_HIP,
SimpleOpenNI.SKEL_RIGHT_KNEE);
drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_KNEE,
SimpleOpenNI.SKEL_RIGHT_FOOT);
//Draws body direction
getBodyDirection(userId, bodyCenter, bodyDir);
bodyDir.mult(200);
bodyDir.add(bodyCenter);
stroke(0, 17, 238);
line(bodyCenter.x, bodyCenter.y, bodyCenter.z,
bodyDir.x, bodyDir.y, bodyDir.z);
}
...
if (context.isTrackingSkeleton(userList[i])) {drawSkeleton(userList[i]);
//Create vectors to give the user’s hands an x, //y and z positionPVector leftHand = new PVector();PVector rightHand = new PVector();
context.getJointPositionSkeleton(userList[i], SimpleOpenNI.SKEL_LEFT_HAND, leftHand);context.getJointPositionSkeleton(userList[i], SimpleOpenNI.SKEL_RIGHT_HAND, rightHand);
//Next calculate the difference by subtracting one //vector from anotherPVector differenceVector = PVector.sub(leftHand, rightHand);PVector zVector = rightHand;
float magnitude = differenceVector.mag();float zFloat = zVector.mag();differenceVector.normalize(); //Convert the real world scale to the projective //scale of the kinectPVector convertedLeftHand = new PVector();context.convertRealWorldToProjective(leftHand, convertedLeftHand);PVector convertedRightHand = new PVector();context.convertRealWorldToProjective(rightHand, convertedRightHand);
//Reverse the translates drawn above that position //the point cloud//Undoing these are necessary to draw elements //on screentranslate(0, 0, 1000);scale(2);rotateX(-rotX);translate(-328, -237, 0);
//Define the colour stroke(138, 140, 240);
//Define stroke weight strokeWeight(8);
//If we are drawing the image, draw it on the //user’s left handif (drawImg == true) {imageSize = map(convertedLeftHand.z, 700, 2500, 200, 50);image(mickey, convertedLeftHand.x, convertedLeftHand.y, imageSize, imageSize); }
Hand tracking builds off the Kinect's ability to map
the user's joints and skeleton data to take advantage
of the hand's mobility. By setting the position of lines,
images and other graphic elements to map onto
the user's hands, we can move around these
on-screen elements in an intuitive way in order to
make compositional choices.
On the Other Hand
107
108
109
if (context.isTrackingSkeleton(userList[i])) {
drawSkeleton(userList[i]);
//Create vectors to give the user’s hands an x, y
//and z position
PVector leftHand = new PVector();
PVector rightHand = new PVector();
context.getJointPositionSkeleton(userList[i],
SimpleOpenNI.SKEL_LEFT_HAND, leftHand);
context.getJointPositionSkeleton(userList[i],
SimpleOpenNI.SKEL_RIGHT_HAND, rightHand);
//Next calculate the difference by subtracting one
//vector from another
PVector differenceVector = PVector.sub(leftHand,
rightHand);
PVector zVector = rightHand;
float magnitude = differenceVector.mag();
float zFloat = zVector.mag();
differenceVector.normalize();
//Convert the real world scale to the projective
//scale of the kinect
PVector convertedLeftHand = new PVector();
context.convertRealWorldToProjective(leftHand,
convertedLeftHand);
PVector convertedRightHand = new PVector();
context.convertRealWorldToProjective(rightHand,
convertedRightHand);
//Reverse the translates drawn above that position
//the point cloud
//Undoing these are necessary to draw elements
//on screen
...
110
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
111
if (context.isTrackingSkeleton(userList[i])) {
drawSkeleton(userList[i]);
//Create vectors to give the user’s hands an x, y
//and z position
PVector leftHand = new PVector();
PVector rightHand = new PVector();
context.getJointPositionSkeleton(userList[i],
SimpleOpenNI.SKEL_LEFT_HAND, leftHand);
context.getJointPositionSkeleton(userList[i],
SimpleOpenNI.SKEL_RIGHT_HAND, rightHand);
//Next calculate the difference by subtracting one
//vector from another
PVector differenceVector = PVector.sub(leftHand,
rightHand);
PVector zVector = rightHand;
float magnitude = differenceVector.mag();
float zFloat = zVector.mag();
differenceVector.normalize();
//Convert the real world scale to the projective
//scale of the kinect
PVector convertedLeftHand = new PVector();
context.convertRealWorldToProjective(leftHand,
convertedLeftHand);
PVector convertedRightHand = new PVector();
context.convertRealWorldToProjective(rightHand,
convertedRightHand);
//Reverse the translates drawn above that position
//the point cloud
//Undoing these are necessary to draw elements
//on screen
...
//Define the colour of our graphic elements
stroke(138, 140, 240);
//Define the stroke weight of our graphic elements
strokeWeight(8);
//If we are drawing the image, draw it on the
//user’s left hand
if (drawImg == true) {
imageSize = map(convertedLeftHand.z, 700, 2500,
200, 50);
image(mickey, convertedLeftHand.x,
convertedLeftHand.y, imageSize, imageSize);
}
//If we are drawing the line, draw it between
//the user’s hands
if (drawLine == true) {
context.drawLimb(userList[i], SimpleOpenNI.SKEL_LEFT_
HAND, SimpleOpenNI.SKEL_RIGHT_HAND);
}
//If we are drawing a rectangle, draw it between the
//user’s hands
if (drawRect == true) {
noFill();
rectMode(CORNERS);
rect(convertedLeftHand.x, convertedLeftHand.y,
convertedRightHand.x, convertedRightHand.y);
}
//add’s the left hand position to an array list
leftHandPos.add(leftHand);
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
⁄
Handtracking allows the software to record the
location of the user's hands each frame and
use that information for moving around objects,
perform gestures and making compositional choices.
The software records the location of each hand
as a PVector, a class with an x, y and z position in
Cartesian space. By subtracting the position of one
hand minus the other, and then calculating
the magnitude of the difference, we can draw
shapes between the user's hands.
Lined & Unlined
112
“The existence of objects, such as saucepans, not
just allows actions but suggests them. The ability
of objects to suggest things this way has allowed
the development of special features of objects
and special types of objects, where the function
is more to suggest than to deliver.”
— Timothy Taylor
Suggesting Function
113
The second half of my thesis project owes its success to a number of people I would like to thank here. Once again I'd like to thank my friends Dave Caterini, Ansel Schmidt, Chris Lange, Emma Novotny and Joana Patrasc for their continued input and encouragement. Thanks to Jess Peters, Patricio Davila, and Robert Tu for helping me turn my broken code into something functional. Again, I'd like to thank ALSO Collective for their support and guidance throughout this whole process. A personal shout out goes to Olivia Luyt for her patience and understanding. Thanks to Steve Szigeti for keeping me involved in stimulating research work and for making possible a potential future in visual analytics. Lastly, a very special thanks to Roderick Grant for advising me this year. Thank you for your input, conversations, guidance and (occasional) encouragement. Thank you for helping me shape this project into what it is.
Acknowledgements
123
¶…