29章:3Dサンプル(sketch_3D_STD_02)ベース

    作成2015.12.11

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

  1. ベースの寸法図
     ベースは加工品となります。
     ベースの寸法図を以下に示します。



    *図29-1からベースの基本寸法はW、T、L、Rの4個のパラメータで形状が決まります。
    *パラメータは全てfloat型でmm単位で入力とします。


  2. sketch_3D_My_OB1_2タグのスケッチ
     sketch_3D_My_OB1_1タグのスケッチは以下となります。
    //sketch_3D_My_OB2
    My_OB01 OB01;//使用クラスの定義
    void setup()
    {
      size(400, 400, 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(0.5);
        
      fill(255, 255, 255);
      scale(1,1,1);
      OB01.OB01_01_1();//ユニット01-項番01-品番1
    }
    
    (1)上記スケッチにおいて、画像を発生するコードはOB01.OB01_01_1();です。
    (2)OB01.OB01_01_1();には引数が無く固定データです。
    (3)OB01はユニット名です。
    (4)_01は項番です。
    (5)_1は品番です。
    (6)項番は品番の組合せで構成され、ユニットは項番の組合せで構成されます。
    (7)個々の品番は単純形状ですが、組み合わせると複雑な形状になります。


  3. My_OB01タグのスケッチ
     My_OB01タグのスケッチは以下となります。
    class My_OB01 extends My_OB
    {
      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ベース
      } 
    }
    
    (1)上記スケッチにおいて、My_OB01クラスはMy_OBクラスを継承します。
    (2)STD_02(300,12,240,9);が具体的な寸法を指定する実行命令です。


  4. My_OBタグのスケッチ
     My_OBタグのスケッチは以下となります。
    class My_OB
    {
      void STD_02(float W,float T,float L,float R)//STD_02)ベース
      {
        int Pn=17;//ポイント数
        int Pn2=5;//ポイント数
        float[] X=new float[Pn];
        float[] Z=new float[Pn];
        float[] X1=new float[Pn];
        float[] Z1=new float[Pn];
        float[] X2=new float[Pn2];
        float[] Z2=new float[Pn2];
        int i;
        
        for(i=0;i<Pn;i++)
        {
          float angle = i*TWO_PI/(Pn-1);
          X1[i]=R*cos(angle);Z1[i]=R*sin(angle);
        }
        
        X2[0]=W/2;Z2[0]=W/2;
        X2[1]=-W/2;Z2[1]=W/2;
        X2[2]=-W/2;Z2[2]=-W/2;
        X2[3]=W/2;Z2[3]=-W/2;
        X2[4]=W/2;Z2[4]=W/2;
        beginShape();
        Y_Polyon_PY(Pn2,X2,T/2,Z2);//多角形
        for(i=0;i<Pn;i++){X[i]=X1[i]+L/2;Z[i]=Z1[i]+L/2;}
        beginContour();
        Y_Polyon_MY(Pn-1,X,T/2,Z);//多角形
        endContour();
        for(i=0;i<Pn;i++){X[i]=X1[i]-L/2;Z[i]=Z1[i]+L/2;}
        beginContour();
        Y_Polyon_MY(Pn-1,X,T/2,Z);//多角形
        endContour();
        for(i=0;i<Pn;i++){X[i]=X1[i]-L/2;Z[i]=Z1[i]-L/2;}
        beginContour();
        Y_Polyon_MY(Pn-1,X,T/2,Z);//多角形
        endContour();
        for(i=0;i<Pn;i++){X[i]=X1[i]+L/2;Z[i]=Z1[i]-L/2;}
        beginContour();
        Y_Polyon_MY(Pn-1,X,T/2,Z);//多角形
        endContour();
        endShape(CLOSE);
        
        beginShape();
        Y_Polyon_PY(Pn2,X2,-T/2,Z2);//多角形
        for(i=0;i<Pn;i++){X[i]=X1[i]+L/2;Z[i]=Z1[i]+L/2;}
        beginContour();
        Y_Polyon_MY(Pn-1,X,-T/2,Z);//多角形
        endContour();
        for(i=0;i<Pn;i++){X[i]=X1[i]-L/2;Z[i]=Z1[i]+L/2;}
        beginContour();
        Y_Polyon_MY(Pn-1,X,-T/2,Z);//多角形
        endContour();
        for(i=0;i<Pn;i++){X[i]=X1[i]-L/2;Z[i]=Z1[i]-L/2;}
        beginContour();
        Y_Polyon_MY(Pn-1,X,-T/2,Z);//多角形
        endContour();
        for(i=0;i<Pn;i++){X[i]=X1[i]+L/2;Z[i]=Z1[i]-L/2;}
        beginContour();
        Y_Polyon_MY(Pn-1,X,-T/2,Z);//多角形
        endContour();
        endShape(CLOSE);
        
        pushMatrix();
        translate(L/2,0,L/2);
        Y_Side(Pn,X1,Z1,T);//側面
        translate(-L,0,0);
        Y_Side(Pn,X1,Z1,T);//側面
        translate(0,0,-L);
        Y_Side(Pn,X1,Z1,T);//側面
        translate(L,0,0);
        Y_Side(Pn,X1,Z1,T);//側面
        popMatrix();
        
        Y_Side(Pn2,X2,Z2,T);//側面  
      }
    }
    
    (1)穴開けが以外と厄介です。
    (2)穴開けがなければ、box()が使えるので簡単です。


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

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


  6. 3Dサンプル(sketch_3D_My_OB1_2.pde)の実行
    (1)3Dサンプル(sketch_3D_My_OB1_2.pde)を実行すると実行ウインドウに3D画像が表示されます。
    (2)マウスを動かすと表示角度が変化します。
    (3)表示画像例を以下に示します。





  7. 3Dサンプル(sketch_3D_STD_02)ベースまとめ
    (1)My_OBタグにvoid STD_02(float W,float T,float L,float R)//STD_02)ベースを追加しました。
    (2)My_OB01タグにvoid OB01_01_1()//ユニット01-項番01-品番1を追加しました。
    (3)sketch_3D_My_OB1_2タグでOB01.OB01_01_1();//ユニット01-項番01-品番1を実行します。
    (4)だいぶ、図面体系的な仕掛けになってきました。




30章:3Dサンプル(sketch_3D_My_OB1_3)ポールに行く。

トップページに戻る。