26章:3Dサンプル(sketch_3D_Catalog_01)ケーブルグランド

    作成2015.12.10

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

  1. ケーブルグランドの寸法図
     ケーブルグランド等のカタログ品は、固定寸法、占有スペースの検討がメインのため、詳細形状は省略して作図します。
     ケーブルグランドの寸法図を以下に示します。



    *図26-1から固定ナットの基本寸法はMとD2とTの3個のパラメータで形状が決まります。
    *本体の基本寸法は、MとD1とL1とL2とL3とL4とL5の6個のパラメータで形状が決まります。
    *パラメータは全てfloat型でmm単位で入力とします。


  2. 3Dサンプル(sketch_3D_Catalog_01)ケーブルグランドスケッチ
     3Dサンプル(sketch_3D_Catalog_01)ケーブルグランドスケッチは以下となります。
    //sketch_3D_Catalog_01 ケーブルグランド
    void setup()
    {
      size(400, 400, P3D);
    }
    
    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.1);
        
      fill(255, 255, 255);
      scale(4, 4,4);
      pushMatrix();
      Catalog_01_1(16,20.5,15,5,19,3.4,2.9);//ケーブルグランド本体
      translate(0,0,25);
      Z_Pipe(12,8,5.2);//ケーブルグランド固定ナット
      popMatrix();
    }
    
    //ケーブルグランド本体
    void Catalog_01_1(float M,float D1,float L1,float L2,float L3,float L4,float L5)
    {
      int Sn=9;//面数
      int Pn=17;//ポイント数
      float[][] X=new float[Sn][Pn];
      float[][] Y=new float[Sn][Pn];
      float[] Z=new float[Sn];
      int i;
      
      Z[0]=L1;
      Z[1]=0;
      Z[2]=0;
      Z[3]=-L2;
      Z[4]=-L2;
      Z[5]=-L2-L4;
      Z[6]=-L2-L4;
      Z[7]=-L2-L3+L5;
      Z[8]=-L2-L3;
      for(i=0;i<Pn;i++)
      {
        float angle = i*TWO_PI/(Pn-1);
        X[0][i]=(M/2)*cos(angle);Y[0][i]=(M/2)*sin(angle);
        X[1][i]=(M/2)*cos(angle);Y[1][i]=(M/2)*sin(angle);
        X[2][i]=(D1/2)*cos(angle);Y[2][i]=(D1/2)*sin(angle);
        X[3][i]=(D1/2)*cos(angle);Y[3][i]=(D1/2)*sin(angle);
        X[4][i]=(M/2)*cos(angle);Y[4][i]=(M/2)*sin(angle);
        X[5][i]=(M/2)*cos(angle);Y[5][i]=(M/2)*sin(angle);
        X[6][i]=(D1/2)*cos(angle);Y[6][i]=(D1/2)*sin(angle);
        X[7][i]=(D1/2)*cos(angle);Y[7][i]=(D1/2)*sin(angle);
        X[8][i]=(D1/2-L5)*cos(angle);Y[8][i]=(D1/2-L5)*sin(angle);
      }
      pushMatrix();
      Z_Side_M(Sn,Pn,X,Y,Z);//多段側面
      translate(0,0,Z[0]);
      beginShape();
      Z_Polyon_P(Pn,X[0],Y[0]);//多角形反時計回り
      endShape(CLOSE);
      popMatrix();
      pushMatrix();
      translate(0,0,Z[8]);
      beginShape();
      Z_Polyon_P(Pn,X[8],Y[8]);//多角形反時計回り
      endShape(CLOSE);
      popMatrix();
    }
    
    
    void Z_Side_M(int Sn,int Pn,float X[][],float Y[][],float Z[])//多段側面
    {
      int i,j;
      
      for(j=0;j<Sn-1;j++)
      {
        beginShape(QUAD_STRIP);
        for (i = 0; i < Pn; i++)
        {
          vertex(X[j][i],Y[j][i], Z[j]);
          vertex(X[j+1][i],Y[j+1][i], Z[j+1]);
        }
        endShape(CLOSE);
      }
    }
    
    void Z_Polyon_P(int Pn,float X[],float Y[])//多角形反時計回り
    {
      int i;
      for (i = 0; i < Pn; i++)
      {
        vertex(X[i],Y[i]);
      }
    }
    
    void Z_Pipe(float Ro,float Ri,float L)//パイプ
    {
      pushMatrix();
      Z_Cylinder(Ro,L);
      Z_Cylinder(Ri,L);
      translate(0,0,-L/2);
      Z_Ring_2D(Ro,Ri);
      translate(0,0,L);
      Z_Ring_2D(Ro,Ri);
      popMatrix();
    }
    
    void Z_Cylinder(float r,float L)//円筒
    {
      int sides=16;//分割数
      int i;
      beginShape(QUAD_STRIP);
      for (i = 0; i < sides + 1; ++i)
      {
        float angle = i*TWO_PI/sides;
        vertex(r*cos(angle), r*sin(angle), -L/2);
        vertex(r*cos(angle), r*sin(angle), L/2);
      }
      endShape(CLOSE);
    }
    
    void Z_Ring_2D(float Ro,float Ri)
    {
      int sides=16;//分割数
      int i;
      beginShape();
      for (i = 0; i < sides + 1; ++i)
      {
        float angle = i*TWO_PI/sides;
        vertex(Ro*cos(angle), Ro*sin(angle),0);
      }
      beginContour();
      for (i = 0; i < sides + 1; ++i)
      {
        float angle = -i*TWO_PI/sides;
        vertex(Ri*cos(angle), Ri*sin(angle),0);
      }
      endContour();
    
      endShape(CLOSE);
    }
    


  3. 3Dサンプル(sketch_3D_Catalog_01)ケーブルグランドテキストファイル
     3Dサンプル(sketch_3D_Catalog_01)ケーブルグランドトテキストファイルは以下から参照できます。
    「3Dサンプル(sketch_3D_Catalog_01)ケーブルグランドファイル」にいく



  4. 3Dサンプル(sketch_3D_Catalog_01)ケーブルグランドスケッチの実行
    (1)3Dサンプル(sketch_3D_Catalog_01)ケーブルグランドを実行すると実行ウインドウに3D画像が表示されます。
    (2)マウスを動かすと表示角度が変化します。
    (3)表示画像例を以下に示します。





  5. 3Dサンプル(sketch_3D_Catalog_01)ケーブルグランドまとめ
    (1)表示は正投影のortho(-width/2, width/2, -height/2, height/2);としました。
    (2)線有りのstrokeWeight(0.1);としました。
    (3)Catalog_01_1(16,20.5,15,5,19,3.4,2.9);//ケーブルグランド本体と指定すると指定寸法のケーブルグランド本体が表示できます。




27章:3Dサンプル(sketch_3D_STD_01)パイプクランプに行く。

トップページに戻る。