33章:3Dサンプル(sketch_3D_My_OB1_6)ソーラーユニット

    作成2015.12.13

     Processingの3D機能を利用して3D機械製図への応用を検討してみたいと思います。

  1. 3Dサンプル(sketch_3D_My_OB1_6)ソーラーユニット完成図
     3Dサンプル(sketch_3D_My_OB1_6)ソーラーユニット完成図を以下に示します。








  2. sketch_3D_My_OB1_5タグのスケッチ
     sketch_3D_My_OB1_5タグのスケッチは以下となります。
    //sketch_3D_My_OB1_6
    My_OB01 OB01;//使用クラスの定義
    void setup()
    {
      size(650, 750, P3D);
      OB01=new My_OB01();//My_OBクラスのオブジェクトを生成
    }
    
    void draw()
    {
      background(255, 255, 255);
      lights();
      ortho(-width/2, width/2, -height/2, height/2); // Same as ortho()
      translate(width / 2, height / 2);
      rotateY(map(mouseX, 0, width, -PI/1, PI/1));
      rotateX(map(mouseY, 0, height, PI/1, -PI/1));
      //noStroke();
      strokeWeight(1);
        
      fill(255, 255, 255);
      scale(0.4,0.4,0.4);
      
      OB01.OB01();//ソーラユニット
    }
    
    (1)上記スケッチにおいて、画像を発生するコードはOB01.OB01();です。
    (2)OB01.OB01();には引数が無く固定データです。
    (3)OB01はユニット名です。


  3. My_OB01タグのスケッチ
     My_OB01タグのスケッチは以下となります。
    class My_OB01 extends My_OB
    {
      void OB01()//ソーラユニット
      {
        pushMatrix();
        OB01_01();//支柱
        translate(0,-380,0);
        OB01_06();//プラボックス
        translate(0,-270,0);
        OB01_02();//ユニット01-項番02 ソーラー支持棒
        translate(-300,0,0);
        rotateZ(45*PI/180);
        OB01_21();//ソーラパネル
        popMatrix();
      }
      
      
      void OB01_06()//プラボックス
      {
        pushMatrix();
        translate(157,0,0);
        box(150,350,350); 
        translate(0,175,-90);
        OB01_22();
        translate(0,0,180);
        OB01_22();
        popMatrix();
        
        pushMatrix();
        translate(0,151,0);
        OB01_04();//ユニット01-項番04 ボックス固定金具
        pushMatrix();
        rotateY(-90*PI/180);
        OB01_13();//Uボルト
        popMatrix();
        translate(50,0,0);
        OB01_05();//ボックス固定金具
        popMatrix();
        
        pushMatrix();
        translate(0,-151,0);
        OB01_04();//ユニット01-項番04 ボックス固定金具
        pushMatrix();
        rotateY(-90*PI/180);
        OB01_13();//Uボルト
        popMatrix();
        translate(50,0,0);
        OB01_05();//ボックス固定金具
        popMatrix();
        
        pushMatrix();
        translate(57,-151,45);
        X_M12Nut();
        translate(0,302,0);
        X_M12Nut();
        translate(0,0,-90);
        X_M12Nut();
        translate(0,-302,0);
        X_M12Nut();
        popMatrix();
        
        pushMatrix();
        translate(75.5,-151,-151);
        X_M5Bolt();
        translate(0,302,0);
        X_M5Bolt();
        translate(0,0,302);
        X_M5Bolt();
        translate(0,-302,0);
        X_M5Bolt();
        popMatrix();
      }
      
      void X_M5Bolt()
      {
        pushMatrix();
        rotateY(90*PI/180);
        Z_Bar(4.25,5);
        popMatrix();
      }
      
      void OB01_22()//ケーブルグランド
      {
        pushMatrix();
        rotateX(90*PI/180);
        Catalog_01_1(16,20.5,15,5,19,3.4,2.9);//ケーブルグランド本体
        popMatrix();
      }
      
      
      void OB01_02()//ユニット01-項番02 ソーラー支持棒
      {
        OB01_02_2();
        pushMatrix();
        translate(-157.5,0);
        OB01_02_1();
        popMatrix();
        pushMatrix();
        translate(-300,0);
        OB01_02_3();
        popMatrix();
        
        pushMatrix();
        rotateY(90*PI/180);
        translate(0,-60);
        OB01_13();
        translate(0,120);
        OB01_13();
        popMatrix();
        
        pushMatrix();
        translate(-300,0,-50);
        OB01_14();
        translate(0,0,100);
        OB01_14();
        popMatrix();
        
        pushMatrix();
        translate(-55,-60,45);
        X_M12Nut();
        translate(0,120,0);
        X_M12Nut();
        translate(0,0,-90);
        X_M12Nut();
        translate(0,-120,0);
        X_M12Nut();
        popMatrix();
        
        pushMatrix();
        translate(-260,-31.5,50);
        X_M12Nut();
        translate(0,63,0);
        X_M12Nut();
        translate(0,0,-100);
        X_M12Nut();
        translate(0,-63,0);
        X_M12Nut();
        popMatrix();
        
        
      }
      
      void OB01_13()//Uボルト
      {
        U_Bolt(6,45,68);//Uボルト
      }
      
      void OB01_14()
      {
        pushMatrix();
        rotateX(-90*PI/180);
        rotateY(-90*PI/180);
        U_Bolt(6,31.5,56.7);//Uボルト
        popMatrix();
      }
      
      void OB01_21()//ソーラパネル
      {
        pushMatrix();
        translate(-83,0,0);
        box(26,364,413);
        popMatrix();
        OB01_03();
        
        pushMatrix();
        translate(-63,164,-102.5);
        X_M6Bolt();
        translate(0,0,205);
        X_M6Bolt();
        translate(0,-328,0);
        X_M6Bolt();
        translate(0,0,-205);
        X_M6Bolt();
        popMatrix();
      }
      
      void X_M6Bolt()
      {
        pushMatrix();
        rotateY(90*PI/180);
        Z_Bar(5,8);
        popMatrix();
      }
      
      void X_M12Nut()
      {
        pushMatrix();
        rotateY(90*PI/180);
        Z_6Bar(19,10);
        popMatrix();
      }
      
      
      void OB01_05()//ボックス固定金具
      {
        pushMatrix();
        rotateZ(-90*PI/180);rotateY(90*PI/180);
        int Pn=13;//ポイント数
        float X[]={100,100,170,170,98,98,-98,-98,-170,-170,-100,-100,100};
        float Y[]={0,28,28,30,30,2,2,30,30,28,28,0,0};
        float L=30;
        //void Z_Polyon_Plate(int Pn,float X[],float Y[],float L)//多角形板
        Z_Polyon_Plate(Pn,X,Y,L);
        
        //void Y_Hole_XYZ(float r,float X,float Y,float Z)//擬似ホール
        Y_Hole_XYZ(7,45,0,0);Y_Hole_XYZ(7,-45,0,0);
        Y_Hole_XYZ(7,45,2,0);Y_Hole_XYZ(7,-45,2,0);
        Y_Hole_XYZ(3,151,28,0);Y_Hole_XYZ(3,-151,28,0);
        Y_Hole_XYZ(3,151,30,0);Y_Hole_XYZ(3,-151,30,0);
        popMatrix();
      }
      
      
      void OB01_04()//ユニット01-項番04 ボックス固定金具
      {
        pushMatrix();
        rotateY(90*PI/180);
        STD_01(120,30,20,30,90,38.2,7);//STD_01)パイプクランプ
        popMatrix();
      }
      
      void OB01_03()//ユニット01-項番03
      {
        int Pn=9;//ポイント数
        float[] X={67,30,30,-40,-40,30,30,67,67};
        float[] Y={182,182,40,40,-40,-40,-182,-182,182};
        float L=3;
        pushMatrix();
        Z_Bar(24.3,160);
        rotateZ(PI);
        
        pushMatrix();
        translate(0,0,-81.5);
        //void Z_Polyon_Plate(int Pn,float X[],float Y[],float L)//多角形板
        Z_Polyon_Plate(Pn,X,Y,L);
        translate(0,0,163);
        Z_Polyon_Plate(Pn,X,Y,L);
        popMatrix();
        pushMatrix();
        translate(68.5,0,-100);
        box(3,364,40);
        translate(0,0,200);
        box(3,364,40);
        popMatrix();
        //void X_Hole_XYZ(float r,float X,float Y,float Z)//擬似ホール
        X_Hole_XYZ(3.5,70,164,102.5);X_Hole_XYZ(3.5,67,164,102.5);
        X_Hole_XYZ(3.5,70,-164,102.5);X_Hole_XYZ(3.5,67,-164,102.5);
        X_Hole_XYZ(3.5,70,-164,-102.5);X_Hole_XYZ(3.5,67,-164,-102.5);
        X_Hole_XYZ(3.5,70,164,-102.5);X_Hole_XYZ(3.5,67,164,-102.5);
        popMatrix();
      }
      
      
      void OB01_02_1()//ユニット01-項番02-品番1
      {
        pushMatrix();
        rotateY(90*PI/180);
        //void Z_Bar(float r,float L)//Zバー
        Z_Bar(30.25,215);
        popMatrix();
      }
      
      void OB01_02_2()//ユニット01-項番02-品番2 フランジA
      {
        pushMatrix();
        rotateY(-90*PI/180);
        //void STD_03(float L1,float L2,float L3,float L4,float L5,float L6,float R,float r)
        STD_03(120,150,20,30,90,120,38.2,7);
        popMatrix();
      }
      
      void OB01_02_3()//ユニット01-項番02-品番2 フランジB
      {
        pushMatrix();
        rotateY(90*PI/180);
        rotateZ(90*PI/180);
        //void STD_03(float L1,float L2,float L3,float L4,float L5,float L6,float R,float r)
        STD_03(90,130,20,15,63,100,24.3,7);
        popMatrix();
      }
      
      void OB01_01()//ユニット01-項番01
      {
        pushMatrix();
        translate(0,744);
        OB01_01_1();
        popMatrix();
        pushMatrix();
        translate(0,-6);
        OB01_01_2();
        popMatrix();
        pushMatrix();
        OB01_01_3();
        rotateY(90*PI/180);
        OB01_01_3();
        rotateY(90*PI/180);
        OB01_01_3();
        rotateY(90*PI/180);
        OB01_01_3();
        popMatrix();
      }
      
      void OB01_01_1()//ユニット01-項番01-品番1
      {
        //void STD_02(float W,float T,float L,float R)//STD_02)ベース
        STD_02(300,12,240,9);//STD_02ベース
      } 
      
      void OB01_01_2()//ユニット01-項番01-品番2
      {
        pushMatrix();
        rotateX(90*PI/180);
        //void Z_Bar(float r,float L)//Zバー
        Z_Bar(38.15,1488);
        popMatrix();
      }
      
      void OB01_01_3()//ユニット01-項番01-品番3
      {
        int Pn=5;//ポイント数
        float[] X={38.15,38.15,98.15,48.15,38.15};
        float[] Y={168,738,738,168,168};
        float L=6;
        //void Z_Polyon_Plate(int Pn,float X[],float Y[],float L)//多角形板
        Z_Polyon_Plate(Pn,X,Y,L);
      }
    }
    
    (1)上記スケッチにおいて、My_OB01クラスはMy_OBクラスを継承します。


  4. My_OBタグのスケッチ
     My_OBタグのスケッチは省略します。


  5. sketch_3D_My_OB1_6ファイル
     sketch_3D_My_OB1_6ファイルは下記の「33-1.zip」ファイルをダウンロードしてください。
    [33-1.zip]をダウンロードする。

    解凍するとsketch_3D_My_OB1_6フォルダー内に
    (1)sketch_3D_My_OB1_6.pde
    (2)My_OB.pde
    (3)My_OB01.pde
     があります。sketch_3D_My_OB1_6.pdeをダブルクリックすると起動します。


  6. 3Dサンプル(sketch_3D_My_OB1_6)ソーラーユニットまとめ
    (1)Processingの3D機能で機械設計の3D画像が作成可能なことが確認できました。
    (2)擬似ホールを使用すると、作図が大幅に簡単になります。
    (3)座標軸の正負の方向が一般数学的な座標軸と異なっているので注意が必要です。
    (4)pushMatrix();translate(); rotateX(); rotateY(); rotateZ();popMatrix();は大変便利なメソッドですが、多用すると位置関係が混乱します。
    (5)使い勝手を考えると絶対座標系のメソッドを増やすのが良いと感じました。
    (6)絶対座標系のメソッドを増やせば、効率的に機械設計の3D画像作成が可能となりそうです




34章:3Dサンプル(sketch_3D_Parasol)パラソル面に行く。

トップページに戻る。