OpenSCAD

OpenSCADを使ってみた

ググっていたらOpenSCADというソフトを見つけたので使って見ました。

3Dモデル作成の手順は
スクリプトを書くー>コンパイルするー>3Dモデルが表示される です。

描いてみたのは10年ほど前に近所のホームセンターで材料を買って作った。
スピーカースタンド “The Less” です。

基本的な使い方の勉強にいい題材でした。

(2)高さ45センチタイプ

OpenSCADのスクリプト
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
//(2)高さ45センチタイプ
// MCADライブラリー screw.scad
//screw.scadのある場所により異なる
include </libraries/MCAD/screw.scad>;
// ウッドポール寸法
R=20;
ph1=83;
ph2=233;
ph3=183;
ph4=133;
// ジョイントボード寸法
jh=17;
jw=50;
jl1=300;
jl2=450;
// 連結ボルト寸法
br=4;
bl=60;
// 必要事項の計算
// ジョイントボードマージン 20に設定
mar=20;
jm=R+mar;
// 中央のウッドポール (0,0,z)に設定
// 左右のウッドポールの中央のウッドポールとの位置のずれ x,y
px=(jl1-2*jm)/2;
py=sqrt(pow(jl2-2*jm,2)-pow(px,2));
// 中央から左右につなぐジョイントボード
// の回転角度とずらす長さ
rot=atan(px/py);
len=jl2/2-(R+mar);
// 描画
for(i=[0:1]){
translate([i*500,0,0]){
//中央
// ウッドポール ph1 ph1 ph2
cylinder(h =ph1, r=R);
translate([0,0,ph1+jh]){
cylinder(h =ph1, r=R);
}
translate([0,0,ph1*2+jh*2]){
color("GreenYellow") cylinder(h =ph2, r=R);
}
// 連結ボルト
translate([0,0,ph1+jh/2-bl/2]){
color("gray") auger(pitch=2,
length=bl,
outside_radius=br,
inner_radius=br-1.5,
taper_ratio =0.25);
}
translate([0,0,ph1*2+jh+jh/2-bl/2]){
color("gray") auger(pitch=2,
length=bl,
outside_radius=br,
inner_radius=br-1.5,
taper_ratio =0.25);
}
// 左 ph1 ph2 ph1
// ウッドポール
translate([-px,py,0]){
cylinder(h =ph1, r=R);
}
translate([-px,py,ph1+jh]){
color("GreenYellow") cylinder(h =ph2, r=R);
}
translate([-px,py,(ph1+ph2)+jh*2]){
cylinder(h =ph1, r=R);
}
// 連結ボルト
translate([-px,py,ph1+jh/2-bl/2]){
color("gray") auger(pitch=2,
length=bl,
outside_radius=br,
inner_radius=br-1.5,
taper_ratio =0.25);
}
translate([-px,py,(ph1+ph2)+jh+jh/2-bl/2]){
color("gray") auger(pitch=2,
length=bl,
outside_radius=br,
inner_radius=br-1.5,
taper_ratio =0.25);
}
// 右 ph3 ph4 ph1
// ウッドポール
translate([px,py,0]){
color("LimeGreen") cylinder(h =ph3, r=R);
}
translate([px,py,ph3+jh]){
color("SpringGreen") cylinder(h =ph4, r=R);
}
translate([px,py,(ph3+ph4)+jh*2]){
cylinder(h =ph1, r=R);
}
// 連結ボルト
translate([px,py,ph3+jh/2-bl/2]){
color("gray") auger(pitch=2,
length=bl,
outside_radius=br,
inner_radius=br-1.5,
taper_ratio =0.25);
}
translate([px,py,(ph3+ph4)+jh+jh/2-bl/2]){
color("gray") auger(pitch=2,
length=bl,
outside_radius=br,
inner_radius=br-1.5,
taper_ratio =0.25);
}
// ジョイントボード
//左-右
translate([0,py,(ph1+ph2)+jh+jh/2]){
color("Coral") cube(size = [jl1,jw,jh], center = true);
}
// 中央から左右
rotate(a=-rot,v=[0,0,1]){
translate([0,len,ph1*2+jh+jh/2])
color("Orange") cube(size = [jw,jl2,jh], center = true);
}
rotate(a=rot,v=[0,0,1]){
translate([0,len,ph1+jh/2])
color("Orange") cube(size = [jw,jl2,jh], center = true);
}
}
}
//
//材料
// ウッドポール
for(i=[0:9]){
translate([650+50*i,0,450]){
cylinder(h =ph1, r=R); }
}
for(i=[0:3]){
translate([650+50*i,0,200]){
color("GreenYellow") cylinder(h =ph2, r=R); }
}
for(i=[4:5]){
translate([650+50*i,0,200]){
color("LimeGreen") cylinder(h =ph3, r=R); }
}
for(i=[6:7]){
translate([650+50*i,0,200]){
color("SpringGreen") cylinder(h =ph4, r=R); }
}
// ジョイントボード
for(i=[0:1]){
translate([650+jl1/2,0,160-30*i]){
color("Coral") cube(size = [jl1,jw,jh], center = true);
}
}
for(i=[2:5]){
translate([650+jl2/2,0,160-30*i]){
color("Orange") cube(size = [jl2,jw,jh], center = true);
}
}
// 連結ボルト
for(i=[0:11]){
translate([650+50*i,0,-100]){
color("gray") auger(pitch=2,
length=bl,
outside_radius=br,
inner_radius=br-1.5,
taper_ratio =0.25);
}
}