-
MovieNetwork Backup 5.1 MovieNetwork.pde작가/코드 2014. 12. 7. 19:38
import shapes3d.utils.*; // Ellipsoid Library importing
import shapes3d.animation.*;
import shapes3d.*;
Shape3D exam;
import peasy.*; // Camera Library importing
import de.bezier.data.*; // Excel File Reader Library importing
public XlsReader reader;
PeasyCam cam;
PVector camPos;
float angleXY, distance;
public int R_Film = 1200;
public int R_Director = 1600;
public int R_Star = 2000;
public int filmNum = 200;
public int directorNum = filmNum;
public int starNum = 3000; // Temporary
// Position of Nodes
public PVector[] film = new PVector[filmNum];
public PVector[] director = new PVector[directorNum];
public PVector[] star; // Later
//public float k = 10;
// MovieData[] mData = new MovieData[filmNum];
// Java : Class is pointer. That is why this line does not work.
// Step 1) Make a list of array to save the pointer of class array. //// ArrayList<MovieData> mData;
// Step 2) Make a real space to save the content of class. //// mData = new ArrayList<MovieData>();
// Step 3) Make a temporal class object to do tasks. //// MovieData tempData = new MovieData();
// Step 4)-1) Doing the first task. //// tempData.makeMovieXML(i+1, movieID);
// Step 4)-2) Doing the second task. //// int movieDate = tempData.getMovieDate();
// Step 5) To add the tempData - which has done all tasks - in the list of class array. //// mData.add(tempData);
// Step 6) To use the class in the list of class array, use get() method with new class object. //// println("length : " + mData.size());
public ArrayList<MovieData> mData; // Step 1) Make a list of class array to save the pointer of class array.
public ArrayList<DirectorData> dData;
public ArrayList<ActorData> aData;
float[] filmNumX = new float[filmNum];
float[] filmNumY = new float[filmNum];
float[] filmNumZ = new float[filmNum];
float[] directorNumX = new float[directorNum];
float[] directorNumY = new float[directorNum];
float[] directorNumZ = new float[directorNum];
float[] starNumX = new float[starNum];
float[] starNumY = new float[starNum];
float[] starNumZ = new float[starNum];
//String[] movieEngTitle = new String[filmNum]; // ^^ Long Version
PVector[] randomUnitV = new PVector[100];
int firstSize = 20;
int secondSize = 10;
color filmColor = color(0, 0, 0); // Black
color directorColor = color(164, 76, 36); // Brown
color starColor = color(250, 220, 0); // Yellow
void setup ()
{
//////// Display
size(800, 800, P3D);
//////// Camera
cam = new PeasyCam(this, 3500); // initial Distance
cam.setMinimumDistance(200); // minimum Distance
cam.setMaximumDistance(5500); // maximum Distance
////////// Data and Data Space
reader = new XlsReader(this, "Boxoffice.xls");
println("Reading excel file......"); // OK
mData = new ArrayList<MovieData>(); // Step 2) Make a real space to save the content of class.
dData = new ArrayList<DirectorData>();
aData = new ArrayList<ActorData>();
setSymmetryPoint();
setSymmetryPlane();
//////// (1) Film Part
for (int i = 0; i < filmNum; i++)
{
int movieID = reader.getInt((i+2), 1);
println();
println(movieID);
MovieData tempData = new MovieData(); // Step 3) Make a temporal class object to do tasks.
tempData.makeMovieXML(i+1, movieID); // Step 4)-1) Doing the first task.
println("movie_" + (i+1) + ".XML File is saved.");
tempData.setMovieData(i+1); // Step 4)-2) Doing the second task.
println("movie_" + (i+1) + "'s Each Data Setting is completed.");
// ----> All ActorData Constructors are Called!!
tempData.setFilmPosition();
println("movie_" + (i+1) + "'s Position Data Setting is completed.");
////// int movieDate = tempData.getMovieDate(); // Step 4)-3) Doing the third task.
////// filmNumX[i] = map(movieDate, 20040000, 20150000, -15, 15); // Film_X = According to Date
////// filmNumY[i] = map((i+1), 1, 200, -15, 15); // Film_Y = According to Rank
film[i] = tempData.getFilmPosition();
film[i].setMag(R_Film);
//println("movie rank " +(i+1)+ " = film[" +(i+1)+ "] = (" +film[i].x+ ", " +film[i].y + ", " +film[i].z+ ")");
mData.add(tempData); // Step 5) To add the tempData - which has done all tasks - in the list of class array.
}
println();
println("Class Array List Length = " + mData.size());
// Step 6) Printing total number of the class - which has saved in the list of class array MovieData.
//println(wholeDirectors_eng); // OK
//////// (2) Director Part
/*
for (int i = 0; i < directorNum; i++)
{
directorNumX[i] = random(-15, 15);
directorNumY[i] = random(-15, 15);
directorNumZ[i] = random(-15, 15);
director[i] = new PVector(directorNumX[i], directorNumY[i], directorNumZ[i]);
director[i].setMag(R_Director); // outer Sphere
}
*/
for (int i = 0; i < directorNum; i++)
{
DirectorData dempData = new DirectorData(wholeDirectors_eng.get(i), i);
String[] list = new String[50];
int num = 0;
String current = "null";
int k = 0;
for (int j = 0; j < directorNum; j++) // whole directors scanning
{
current = wholeDirectors_kor.get(j);
//println(j); // Printing each director's number
if (current.equals(wholeDirectors_kor.get(i)))
{
println(wholeDirectors_eng.get(j));
String thisFilm_name = wholeTitle_eng.get(j);
list[k] = thisFilm_name; // saving the film name in the list
k++;
}
}
num = k;
dempData.setDirectorMovieList(list, num);
println(num);
println(list);
////
String[] list2 = new String[20];
int num2;
int z = 0;
for (int l = 0; l < 6; l++)
{
for (int m = 0; m < num; m++) // num = directorsMovieNum // <Film number m> of his/her filmography
{
int tempFilmID = findFilmID(list[m]);
String tempFilmGenre = mData.get(tempFilmID).getMovieEnglishGenre()[l];
if (tempFilmGenre != null)
{
list2[z] = tempFilmGenre;
z++;
}
}
}
num2 = z;
dempData.setDirectorGenreList(list2, num2);
println(num2);
println(list2);
//// Position Part
dempData.setDirectorPosition();
director[i] = dempData.getDirectorPosition();
director[i].setMag(R_Director);
dData.add(dempData); // ----> Error Point
println("One Director END");
println();
}
//////// (3) Actor Part
starNum = getTotalActorNum();
star = new PVector[starNum];
println();
println("Total " + starNum + " Actors");
println();
for (int i = 0; i < starNum; i++) // constructing
{
//// ActorData setting Part (1)
//ActorData sempData = new ActorData();
ActorData sempData = new ActorData(wholeActors_eng.get(i), i, wholeActors_firstNum[i], wholeActors_secondNum[i]);
//// ActorData setting Part (2)
String[] list = new String[50];
int num;
String current = "null";
int k = 0;
for (int j = 0; j < starNum; j++) // whole actors scanning
{
current = wholeActors_kor.get(j);
//println(j); // Printing each actor's wholenumber
if (current.equals(wholeActors_kor.get(i)))
{
println(wholeActors_eng.get(j));
int thisFilm_num = wholeActors_firstNum[j];
String thisFilm_name = mData.get(thisFilm_num).getMovieEnglishTitle();
list[k] = thisFilm_name; // saving the film name in the list
k++;
}
}
num = k;
sempData.setActorMovieList(list, num);
println(num);
println(list);
//// ActorData setting Part (3)
String[] list2 = new String[20];
int num2;
int z = 0;
for (int l = 0; l < 6; l++)
{
for (int m = 0; m < num; m++) // num = actorsMovieNum // <Film number m> of his/her filmography
{
//println("for_in");
int tempFilmID = findFilmID(list[m]);
String tempFilmGenre = mData.get(tempFilmID).getMovieEnglishGenre()[l];
if (tempFilmGenre != null)
{
//println("if_in");
list2[z] = tempFilmGenre;
z++;
}
}
}
num2 = z;
sempData.setActorGenreList(list2, num2);
println(num2);
println(list2);
//// Position Part
sempData.setActorPosition();
star[i] = sempData.getActorPosition();
star[i].setMag(R_Star);
aData.add(sempData);
println("One Actor END"); // OK
println();
}
}
void draw()
{
//////// 3D Space
// There is the original center point in this 3D Space
background(250);
//////// Axes for frame of reference
if (key == '+') // Pressed moment only
{
// line(x1, y1, z1, x2, y2, z2)
// Each line is from -100 to 100 - So we can see six end points of lines
// The standard of naming X, Y, Z axes is the initial position of the camera
strokeWeight(1);
stroke(255, 0, 0); // RED = X
line(-(R_Star + 400), 0, 0, (R_Star + 400), 0, 0);
stroke(0, 255, 0); // GREEN = Y
line(0, -(R_Star + 400), 0, 0, (R_Star + 400), 0);
stroke(0, 0, 255); // BLUE = Z
line(0, 0, -(R_Star + 400), 0, 0, (R_Star + 400) );
//////// Points on 3 axes to denote positive orientation
strokeWeight(5);
stroke(255, 0, 0);
point((R_Star + 200), 0, 0); // RED point on X
stroke(0, 255, 0);
point(0, (R_Star + 200), 0); // GREEN point on Y
stroke(0, 0, 255);
point(0, 0, (R_Star + 200)); // BLUE point on Z
}
//////// Drawing Dots
strokeWeight(5);
for (PVector p : film)
{
stroke(filmColor); // Black
point(p.x, p.y, p.z);
}
for (PVector p : director)
{
stroke(directorColor); // Brown
point(p.x, p.y, p.z);
}
for (PVector p : star)
{
stroke(starColor); // Yellow
point(p.x, p.y, p.z);
}
//drawLinkFilmDirector(pickedName);
//drawLinkFilmStar(pickedName);
filmNameWriting();
directorNameWriting();
starNameWriting();
drawSymmetry();
//////// Selecting interaction (1) Selecting Film Part ////////
if (key == '1')
{
drawLinkFilmDirector("The Attorney"); // OK
drawLinkFilmStar("The Attorney"); // OK
}
//////// Selecting interaction (2) Selecting Director Part ////////
if (key == '2')
{
drawLinkDirectorFilm("Bong Joon Ho");
drawLinkDirectorStar("Bong Joon Ho");
}
//////// Selecting interaction (3) Selecting Actor Part ////////
if (key == '3')
{
drawLinkStarFilm("RYU Seung-ryong");
drawLinkStarDirector("RYU Seung-ryong");
}
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////// Link Part (1) Film //////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void drawLinkFilmDirector(String filmName) // Drawing line between Film & Director
{
int filmSelec = findFilmID(filmName);
strokeWeight(1);
stroke(0);
line(film[filmSelec].x, film[filmSelec].y, film[filmSelec].z, director[filmSelec].x, director[filmSelec].y, director[filmSelec].z);
}
void drawLinkFilmStar(String filmName) // Drawing line between Film & Actors
{
int filmSelec = findFilmID(filmName);
strokeWeight(1);
stroke(200, 200);
String[] aa = new String[10];
aa = mData.get(filmSelec).getMovieEnglishActor();
for (int i = 0; i < mData.get (filmSelec).getActorNum(); i++)
{
int filmSelec_star = findStarIDTotalView(aa[i]);
line(film[filmSelec].x, film[filmSelec].y, film[filmSelec].z, star[filmSelec_star].x, star[filmSelec_star].y, star[filmSelec_star].z);
}
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////// Link Part (2) Director //////////////////////////
////////////////////////////////////////////////////////////////////////////////
void drawLinkDirectorFilm(String directorName) // Drawing line between Director & Films
{
int directorSelec = findDirectorID(directorName); // Bong Joon Ho - 10 (Just one.. The highest number)
strokeWeight(1);
stroke(0);
StringList directorsMovieList = new StringList(); // Bong Joon Ho's movie list
int directorsMovieNum = 0;
for (int i = 0; i < directorNum; i++) // Making movie list
{
String currentD = mData.get(i).getMovieEnglishDirector();
if (currentD.equals(directorName))
{
directorsMovieList.append(mData.get(i).getMovieEnglishTitle());
}
}
directorsMovieNum = directorsMovieList.size();
for (int i = 0; i < directorsMovieNum; i++) // Drawing line from Bong Joon Ho to movie list
{
int directorSelec_film = findFilmID(directorsMovieList.get(i));
line(director[directorSelec].x, director[directorSelec].y, director[directorSelec].z, film[directorSelec_film].x, film[directorSelec_film].y, film[directorSelec_film].z);
}
}
void drawLinkDirectorStar(String directorName) // Drawing line between Director & Actors (via Films)
{
int directorSelec = findDirectorID(directorName); // Bong Joon Ho - 10 (Just one.. The highest number)
//strokeWeight(1);
//stroke(0);
StringList directorsMovieList = new StringList(); // Bong Joon Ho's movie list
int directorsMovieNum = 0;
for (int i = 0; i < directorNum; i++)
{
String currentD = mData.get(i).getMovieEnglishDirector();
if (currentD.equals(directorName))
{
drawLinkFilmStar(mData.get(i).getMovieEnglishTitle());
}
}
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////// Link Part (3) Star //////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void drawLinkStarFilm(String starName) // Drawing line between Actor & Films
{
int starSelec = findStarIDTotalView(starName); // (Just one.. The highest number)
strokeWeight(1);
stroke(200, 200);
StringList starsMovieList = new StringList();
int starsMovieNum = 0;
for (int i = 0; i < filmNum; i++) // Rotating movies
{
String[] currentS = new String[20]; // expected maximum overlap of star in the list
currentS = mData.get(i).getMovieEnglishActor();
for (int j = 0; j < mData.get (i).getActorNum(); j++) // Rotating actors of current movie
{
if (currentS[j].equals(starName))
{
starsMovieList.append(mData.get(i).getMovieEnglishTitle());
}
}
}
starsMovieNum = starsMovieList.size();
for (int i = 0; i < starsMovieNum; i++)
{
int temp = findFilmID(starsMovieList.get(i));
line(star[starSelec].x, star[starSelec].y, star[starSelec].z, film[temp].x, film[temp].y, film[temp].z);
}
}
void drawLinkStarDirector(String starName) // Drawing line between Actor & Directors (via Films)
{
int starSelec = findStarIDTotalView(starName); // (Just one.. The highest number)
//strokeWeight(1);
//stroke(0);
StringList starsMovieList = new StringList();
int starsMovieNum = 0;
for (int i = 0; i < filmNum; i++) // Rotating movies
{
String[] currentS = new String[20]; // expected maximum overlap of star in the list
currentS = mData.get(i).getMovieEnglishActor();
for (int j = 0; j < mData.get (i).getActorNum(); j++) // Rotating actors of current movie
{
if (currentS[j].equals(starName))
{
drawLinkFilmDirector(mData.get(i).getMovieEnglishTitle());
}
}
}
}
///////////////////////////////////////////////////////////////////////////
////////////////////////////// Link Part End //////////////////////////////
///////////////////////////////////////////////////////////////////////////
/*
void keyPressed()
{
if (key=='r') setup(); // Total Restart from data to structure
if (key=='x') camera(camPos.x, camPos.y, camPos.z, 0, 0, 0, 1, 0, 0); // Stabilize image on X axis
if (key=='y') camera(camPos.x, camPos.y, camPos.z, 0, 0, 0, 0, 1, 0); // Stabilize image on Y axis
if (key=='z') camera(camPos.x, camPos.y, camPos.z, 0, 0, 0, 0, 0, 1); // Stabilize image on Z axis
//camera(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ)
if (key=='f') filmNameWriting();
if (key=='d') directorNameWriting();
if (key=='s') starNameWriting();
// Rotations work
if (key=='m') cam.rotateY(radians(2));
if (key=='n') cam.rotateY(radians(-2));
}
void mouseClicked()
{
println("Clicked");
picked = Shape3D.pickShape(this, mouseX, mouseY);
if (picked != null)
{
println("Picked");
picked.fill(200);
float x = picked.x();
float y = picked.y();
float z = picked.z();
cam.lookAt(x, y, z, dis, ani); //(x, y, z, double distance, long animationTimeMillis)
for (int i = 0; i < filmNum; i++)
{
if ((film[i].x == x) && (film[i].y == y) && (film[i].z == z))
{
pickedName = mData.get(i).getMovieEnglishTitle();
//println(pickedName); // OK
}
}
}
}
*/
'작가 > 코드' 카테고리의 다른 글
MovieNetwork Backup 5.3 ActorData.pde (0) 2014.12.07 MovieNetwork Backup 5.2 MovieData.pde (0) 2014.12.07 MovieNetwork Backup 4 (0) 2014.11.25 MovieNetwork Backup 3.3 NetworkMethods.pde (0) 2014.11.22 MovieNetwork Backup 3.2 MovieData.pde (0) 2014.11.22