ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.