ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MovieNetwork Backup 4
    작가/코드 2014. 11. 25. 13:13



    < MovieNetwork.pde >




    위치 조정 전 (Default)




    위치 조정 후



    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


    XlsReader reader;


    PeasyCam cam;

    PVector camPos;

    float angleXY, distance;


    int R_Director = 1600;

    int R_Film = 1200;

    int R_Star = 2000;


    public int filmNum = 12;

    public int directorNum = filmNum;

    public int starNum = 3000;


    // Position of Nodes

    public PVector[] film = new PVector[filmNum];

    public PVector[] director = new PVector[directorNum];

    public PVector[] star;


    Ellipsoid[] e_film;

    Ellipsoid[] e_director;

    Ellipsoid[] e_star;


    Shape3D picked = null;  // Picked ellipsoids

    Ellipsoid selected = null;

    boolean clicked = false;  // Mouse interaction

    double dis = 10;

    long ani = 3000;


    // 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.


    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


    boolean filmText = false;


    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(750, 750, P3D);


      //////// Camera

      cam = new PeasyCam(this, 4000);  // initial Distance

      cam.setMinimumDistance(200);  // minimum Distance

      cam.setMaximumDistance(6000);  // 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.



      //////// (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();  // Step 4)-2) Doing the second task.

        println("movie_" + (i+1) + "'s Each 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


        mData.add(tempData);  // Step 5) To add the tempData - which has done all tasks - in the list of class array.

      }


      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.


      for (int i = 0; i < filmNum; i++)

      {  

        //////// ^^ Long Version

        //movieEngTitle[i] = mData.get(i).getMovieEnglishTitle();  // movieEngTitle[0] ~ movieEngTitle[199]  

        // Step 6) To use the class in the list of class array - use get() method with new class object.

        //char[] alpha = movieEngTitle[i].toCharArray();


        //////// ^^ Short Version

        char[] alpha = mData.get(i).getMovieEnglishTitle().toCharArray();


        if (alpha[0] == 'A') filmNumZ[i] = random( map(0, 1, 27, -15, 15), map(1, 1, 27, -15, 15) );  // Film_Z = According to Alphabet

        else if (alpha[0] == 'B') filmNumZ[i] = random( map(1, 1, 27, -15, 15), map(2, 1, 27, -15, 15) );

        else if (alpha[0] == 'C') filmNumZ[i] = random( map(2, 1, 27, -15, 15), map(3, 1, 27, -15, 15) );

        else if (alpha[0] == 'D') filmNumZ[i] = random( map(3, 1, 27, -15, 15), map(4, 1, 27, -15, 15) );

        else if (alpha[0] == 'E') filmNumZ[i] = random( map(4, 1, 27, -15, 15), map(5, 1, 27, -15, 15) );

        else if (alpha[0] == 'F') filmNumZ[i] = random( map(5, 1, 27, -15, 15), map(6, 1, 27, -15, 15) );

        else if (alpha[0] == 'G') filmNumZ[i] = random( map(6, 1, 27, -15, 15), map(7, 1, 27, -15, 15) );

        else if (alpha[0] == 'H') filmNumZ[i] = random( map(7, 1, 27, -15, 15), map(8, 1, 27, -15, 15) );

        else if (alpha[0] == 'I') filmNumZ[i] = random( map(8, 1, 27, -15, 15), map(9, 1, 27, -15, 15) );

        else if (alpha[0] == 'J') filmNumZ[i] = random( map(9, 1, 27, -15, 15), map(10, 1, 27, -15, 15) );

        else if (alpha[0] == 'K') filmNumZ[i] = random( map(10, 1, 27, -15, 15), map(11, 1, 27, -15, 15) );

        else if (alpha[0] == 'L') filmNumZ[i] = random( map(11, 1, 27, -15, 15), map(12, 1, 27, -15, 15) );

        else if (alpha[0] == 'M') filmNumZ[i] = random( map(12, 1, 27, -15, 15), map(13, 1, 27, -15, 15) );

        else if (alpha[0] == 'N') filmNumZ[i] = random( map(13, 1, 27, -15, 15), map(14, 1, 27, -15, 15) );

        else if (alpha[0] == 'O') filmNumZ[i] = random( map(14, 1, 27, -15, 15), map(15, 1, 27, -15, 15) );

        else if (alpha[0] == 'P') filmNumZ[i] = random( map(15, 1, 27, -15, 15), map(16, 1, 27, -15, 15) );

        else if (alpha[0] == 'Q') filmNumZ[i] = random( map(16, 1, 27, -15, 15), map(17, 1, 27, -15, 15) );

        else if (alpha[0] == 'R') filmNumZ[i] = random( map(17, 1, 27, -15, 15), map(18, 1, 27, -15, 15) );

        else if (alpha[0] == 'S') filmNumZ[i] = random( map(18, 1, 27, -15, 15), map(19, 1, 27, -15, 15) );

        else if (alpha[0] == 'T') filmNumZ[i] = random( map(19, 1, 27, -15, 15), map(20, 1, 27, -15, 15) );

        else if (alpha[0] == 'U') filmNumZ[i] = random( map(20, 1, 27, -15, 15), map(21, 1, 27, -15, 15) );

        else if (alpha[0] == 'V') filmNumZ[i] = random( map(21, 1, 27, -15, 15), map(22, 1, 27, -15, 15) );

        else if (alpha[0] == 'W') filmNumZ[i] = random( map(22, 1, 27, -15, 15), map(23, 1, 27, -15, 15) );

        else if (alpha[0] == 'X') filmNumZ[i] = random( map(23, 1, 27, -15, 15), map(24, 1, 27, -15, 15) );

        else if (alpha[0] == 'Y') filmNumZ[i] = random( map(24, 1, 27, -15, 15), map(25, 1, 27, -15, 15) );

        else if (alpha[0] == 'Z') filmNumZ[i] = random( map(25, 1, 27, -15, 15), map(26, 1, 27, -15, 15) );

        else filmNumZ[i] = random( map(26, 1, 27, -15, 15), map(27, 1, 27, -15, 15) );

      }


      for (int i = 0; i < filmNum; i++)

      {

        film[i] = new PVector(filmNumX[i], filmNumY[i], filmNumZ[i]);

        film[i].setMag(R_Film);

      }



      //////// (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

      }



      //////// (3) Actor Part


      starNum = getTotalActorNum();

      star = new PVector[starNum];

      println();

      println("Total " + starNum + " Actors");


      for (int i = 0; i < starNum; i++)

      {

        starNumX[i] = random(-15, 15);

        starNumY[i] = random(-15, 15);

        starNumZ[i] = random(-15, 15);

        star[i] = new PVector(starNumX[i], starNumY[i], starNumZ[i]);

        star[i].setMag(R_Star);

        //String currentA = wholeActors_eng.get(i);

      }



      //////// Making Random Unit Vectors


      for (int i = 0; i < 100; i++)

      {

        randomUnitV[i] = PVector.random3D();

      }

    }



    void draw() 

    {


      //////// 3D Space

      // There is the original center point in this 3D Space


      background(250);



      //////// Sphere


      //fill(200, 20);  // Color and Alpha

      //noStroke();

      //sphere(R_Film);

      //sphere(R_Director);

      //sphere(R_Star);

      //text("test", 100, 100, 100);



      //////// Axes for frame of reference 


      // 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);

      }



      //////// Drawing Ellipsoids

      //filmEllipsoid();

      //directorEllipsoid();

      //starEllipsoid();



      if (key=='f') filmNameWriting();

      if (key=='d') directorNameWriting();

      if (key=='s') starNameWriting();


      if (key=='a')

      {

        filmNameWriting();

        directorNameWriting();

        starNameWriting();

      }


      if (key=='e') TextErasing();




      //////// Clicking Ellipsoid


      if (clicked)

      {

        println("Clicked");

        clicked = false;

        picked = Shape3D.pickShape(this, mouseX, mouseY);

        //selected = 

        if (picked != null)

        {

          println("Picked");

          picked.fill(200 /*randomColor()*/);


          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)



          /*

          imageMode(CENTER);

           image(test, x, y, 1000, 1000);  // Blink

           

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

           {

           if ( (e_x[i]==x) && (e_y[i]==y) && (e_z[i]==z) )

           {

           ellipnum = i;

           }

           }

           imagePopup();

           */

        }

      }



      //////// Selecting interaction (1) Selecting Film Part ////////

      drawLinkFilmDirector("The Attorney");  // OK

      drawLinkFilmStar("The Attorney");  // OK

      if (key == 'F')

      {

        drawLinkFilmDirectorMotion("The Attorney");  // OK

        drawLinkFilmStarMotion("The Attorney");  // OK

      }


      //////// Selecting interaction (2) Selecting Director Part ////////

      drawLinkDirectorFilm("Bong Joon Ho");  // OK

      drawLinkDirectorStar("Bong Joon Ho");

      if (key == 'D')

      {

        drawLinkDirectorFilmMotion("Bong Joon Ho");

        drawLinkDirectorStarMotion("Bong Joon Ho");

      }


      //////// Selecting interaction (3) Selecting Actor Part ////////

      drawLinkStarFilm("RYU Seung-ryong");

      drawLinkStarDirector("RYU Seung-ryong");

      if (key == 'S')

      {

       drawLinkStarFilmMotion("RYU Seung-ryong");

       drawLinkStarDirectorMotion("RYU Seung-ryong");

      }   



      //////// Current Position

      //camPos = new PVector(cam.getPosition()[0], cam.getPosition()[1], cam.getPosition()[2]);  

      //angleXY = degrees(atan2(camPos.z, camPos.x));   // camera XY angle from origin

      //distance = sqrt(pow(camPos.z, 2) + pow(camPos.x, 2));  // XY distance between camera and object (compare to cam.getDistance())

      //println("campos: " + camPos + " " + ", ang: " + angleXY + ", dist:" + distance);

    }














    ////////////////////////////////////////////////////////////////////////////////

    ////////////////////////////// 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);

      /*

      strokeWeight(firstSize);

      stroke(filmColor);

      point(film[filmSelec].x, film[filmSelec].y, film[filmSelec].z);

      

      strokeWeight(secondSize);

      stroke(directorColor);

      point(director[filmSelec].x, director[filmSelec].y, director[filmSelec].z);

      */

    }



    void drawLinkFilmDirectorMotion(String filmName)  // Drawing line between Film & Director

    {

      int filmSelec = findFilmID(filmName);

      strokeWeight(1);

      stroke(0);


      // Changing Director Position (According to Film Position)

      // Original Point ---- Film ---- Director

      director[filmSelec] = film[filmSelec].get();

      director[filmSelec].setMag(R_Director);


      line(film[filmSelec].x, film[filmSelec].y, film[filmSelec].z, director[filmSelec].x, director[filmSelec].y, director[filmSelec].z);

      /*

      strokeWeight(firstSize);

      stroke(filmColor);

      point(film[filmSelec].x, film[filmSelec].y, film[filmSelec].z);

      

      strokeWeight(secondSize);

      stroke(directorColor);

      point(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);

      }

    }



    void drawLinkFilmStarMotion(String filmName)  // Drawing line between Film & Actors

    {

      int filmSelec = findFilmID(filmName);

      strokeWeight(1);

      stroke(200, 200);


      int thisFilmStarNum = mData.get(filmSelec).getActorNum();  // How many stars

      String[] aa = new String[thisFilmStarNum];  // What are their names

      //println(thisFilmStarNum);  // The Attorney - 85

      aa = mData.get(filmSelec).getMovieEnglishActor();


      // Changing Star Position (According to Film Position)

      // Original Point ---- Film ---- Director ---- Center

      PVector center = film[filmSelec].get();

      center.setMag(R_Star);


      PVector[] randomV = new PVector[thisFilmStarNum];

      int r = 100;


      for (int i = 0; i < thisFilmStarNum; i++)

      {

        int filmSelec_star = findStarIDTotalView(aa[i]);

        // Changing Star Position (According to Film Position)

        randomV[i] = randomUnitV[i].get(); 

        println("actor " + i + " = " +randomV[i]);

        randomV[i].setMag(r);

        randomV[i].add(center);

        randomV[i].setMag(R_Star);

        star[filmSelec_star] = randomV[i].get();

        //strokeWeight(10);

        //stroke(200, 200);

        //point(star[filmSelec_star].x, star[filmSelec_star].y, star[filmSelec_star].z);


        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 drawLinkDirectorFilmMotion(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++)

      {

        String currentD = mData.get(i).getMovieEnglishDirector();

        if (currentD.equals(directorName))

        {

          directorsMovieList.append(mData.get(i).getMovieEnglishTitle());

        }

      }

      directorsMovieNum = directorsMovieList.size();


      // Changing Film Position (According to Director Position)

      // Original Point ---- Center_1(Film) ---- Director

      PVector center_1;


      if (directorsMovieNum != 1)  // < Case 1 > if There are More than one film..

      {

        center_1 = director[directorSelec].get();

        center_1.setMag(R_Film);  // center_1 completed


        PVector[] randomV = new PVector[directorsMovieNum];

        int r = 100;


        for (int i = 0; i < directorsMovieNum; i++)

        {

          int directorSelec_film = findFilmID(directorsMovieList.get(i));

          // Changing Film Position (According to Director Position)

          randomV[i] = randomUnitV[i].get();

          randomV[i].setMag(r);

          randomV[i].add(center_1);

          randomV[i].setMag(R_Film);

          film[directorSelec_film] = randomV[i].get();

          //strokeWeight(10);

          //stroke(200, 200);

          //point(film[directorSelec_film].x, film[directorSelec_film].y, film[directorSelec_film].z);

          line(director[directorSelec].x, director[directorSelec].y, director[directorSelec].z, film[directorSelec_film].x, film[directorSelec_film].y, film[directorSelec_film].z);

        }

      }

      else if (directorsMovieNum == 1)  // < Case 2 > if There is one film only..

      {

        int directorSelec_film = findFilmID(directorsMovieList.get(0));

        film[directorSelec_film] = director[directorSelec].get();

        film[directorSelec_film].setMag(R_Film);

        //strokeWeight(10);

        //stroke(200, 200);

        //point(film[directorSelec_film].x, film[directorSelec_film].y, film[directorSelec_film].z);

        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());

        }

      }

    }



    void drawLinkDirectorStarMotion(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();

      int directorsMovieNum = 0;


      for (int i = 0; i < directorNum; i++)

      {

        String currentD = mData.get(i).getMovieEnglishDirector();

        if (currentD.equals(directorName))

        {

          drawLinkFilmStarMotion(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 drawLinkStarFilmMotion(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();


      // Changing Film Position (According to Actor Position)

      // Original Point ---- Center_2(Film) ---- Actor

      PVector center_2;


      if (starsMovieNum != 1)  // < Case 1 > if There are More than one film..

      {

        center_2 = star[starSelec].get();

        center_2.setMag(R_Film);  // center_2 completed


        PVector[] randomV = new PVector[starsMovieNum];

        int r = 100;


        for (int i = 0; i < starsMovieNum; i++)

        {

          int starSelec_film = findFilmID(starsMovieList.get(i));

          // Changing Film Position (According to Actor Position)

          randomV[i] = randomUnitV[i].get();

          randomV[i].setMag(r);

          randomV[i].add(center_2);

          randomV[i].setMag(R_Film);

          film[starSelec_film] = randomV[i].get();

          //strokeWeight(10);

          //stroke(200, 200);

          //point(film[directorSelec_film].x, film[directorSelec_film].y, film[directorSelec_film].z);

          line(star[starSelec].x, star[starSelec].y, star[starSelec].z, film[starSelec_film].x, film[starSelec_film].y, film[starSelec_film].z);

        }

      }

      else if (starsMovieNum == 1)  // < Case 2 > if There is one film only..

      {

        int starSelec_film = findFilmID(starsMovieList.get(0));

        film[starSelec_film] = star[starSelec_film].get();

        film[starSelec_film].setMag(R_Film);

        //strokeWeight(10);

        //stroke(200, 200);

        //point(film[directorSelec_film].x, film[directorSelec_film].y, film[directorSelec_film].z);

        line(star[starSelec].x, star[starSelec].y, star[starSelec].z, film[starSelec_film].x, film[starSelec_film].y, film[starSelec_film].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());

          }

        }

      }

    }



    void drawLinkStarDirectorMotion(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))

          {

            drawLinkFilmDirectorMotion(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()

    {

      clicked = true;

    }



Designed by Tistory.