22章:3Dサンプル(sketch_3D_Z_Bolt_B)六角ボルト

    作成2015.12.08

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

  1. 六角ボルトの寸法図
     六角ボルトの寸法図を以下に示します。



    *図22-1からわかるように六角ボルトの基本寸法はrとBとHとLの4個のパラメータで形状が決まります。
    *rとBとHとLはfloat型でmm単位で入力とします。


  2. 3Dサンプル(sketch_3D_Z_Bolt_A)六角ボルトスケッチ
     3Dサンプル(sketch_3D_Z_Bolt_B)六角ボルトスケッチは以下となります。
    //sketch_3D_Z_Bolt_B 六角ボルト
    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);
      Bolt_B(8,24,10,30);//六角ボルト (M16x30)
    }
    
    void Bolt_B(float r,float B,float H,float L)//六角穴付きボルト
    {
      pushMatrix();translate(0,0,H/2);
      Z_6Bar(B,H);popMatrix();//Z_6角支柱
      pushMatrix();translate(0,0,-L/2);
      Z_Bar(r,L);popMatrix();//Zバー
    }
    
    void Z_Bar(float r,float L)//Zバー
    {
       int sides=16;//分割数
      int Sn=2;//面数
      float Pz[]={-L/2,L/2};//z座標
      float R[]={r,r};//回転物半径
      
      int i,j;
      float angleIncrement = TWO_PI/sides;
      for(j=0;j<Sn-1;j++)
      {
        float angle = 0;
        beginShape(QUAD_STRIP);
        for (i = 0; i < sides + 1; ++i)
        {
          vertex(R[j]*cos(angle), R[j]*sin(angle), Pz[j]);
          vertex(R[j+1]*cos(angle), R[j+1]*sin(angle), Pz[j+1]);
          angle += angleIncrement;
        }
        endShape(CLOSE);
      }
      pushMatrix();translate(0,0,-L/2);
      Z_Circle(r);popMatrix();//円
      pushMatrix();translate(0,0,L/2);
      Z_Circle(r);popMatrix();//円
    }
    
    void Z_Circle(float r)//円
    {
      int sides=16;//分割数
      int i;
      float angleIncrement = TWO_PI/sides;
      float angle = 0;
      beginShape();
      for (i = 0; i < sides + 1; ++i)
      {
        
        vertex(r*cos(angle), r*sin(angle),0);
        vertex(r*cos(angle), r*sin(angle),0);
        angle += angleIncrement;
      }
      endShape(CLOSE);
    }
    
    void Z_6Bar(float B,float L)//Z_6角支柱
    {
      int sides=6;//分割数=6
      int Sn=2;//面数
      float Pz[]={-L/2,L/2};//z座標
      float r=B/(2*cos(30*PI/180));
      float R[]={r,r};//回転物半径
      int i,j;
      float angleIncrement = TWO_PI/sides;
      for(j=0;j< Sn-1;j++)
      {
        float angle = 0;
        beginShape(QUAD_STRIP);
        for (i = 0; i <  sides + 1; ++i)
        {
          vertex(R[j]*cos(angle), R[j]*sin(angle), Pz[j]);
          vertex(R[j+1]*cos(angle), R[j+1]*sin(angle), Pz[j+1]);
          angle += angleIncrement;
        }
        endShape(CLOSE);
      }
      pushMatrix();translate(0,0,-L/2);
      Z_hexagon(B);popMatrix();//6角形
      pushMatrix();translate(0,0,L/2);
      Z_hexagon(B);popMatrix();//6角形
    
    }
    
    
    void Z_hexagon(float B)//6角形
    {
      int sides=6;//分割数=6
      float r=B/(2*cos(30*PI/180));
      int i;
      float angleIncrement = TWO_PI/sides;
      float angle = 0;
      beginShape();
      for (i = 0; i <  sides + 1; ++i)
      {
        vertex(r*cos(angle), r*sin(angle),0);
        angle += angleIncrement;
      }
      endShape(CLOSE);
    }
    


  3. 3Dサンプル(sketch_3D_Z_Bolt_B)六角ボルトテキストファイル
     3Dサンプル(sketch_3D_Z_Bolt_B)六角ボルトテキストファイルは以下から参照できます。
    「3Dサンプル(sketch_3D_Z_Bolt_B)六角ボルトテキストファイル」にいく



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





  5. 3Dサンプル(sketch_3D_Z_Bolt_B)六角ボルトまとめ
    (1)表示は正投影のortho(-width/2, width/2, -height/2, height/2);としました。
    (2)線有りのstrokeWeight(0.1);としました。
    (3)Bolt_B(8,24,10,30);//六角ボルト (M16x30)と指定すると指定寸法の六角ボルトが表示できます。




23章:3Dサンプル(sketch_3D_Z_Bolt_C)六角穴付き皿ボルトに行く。

トップページに戻る。