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);
}