メカ
参考資料 †
install †
sudo add-apt-repository ppa:openscad/releases
sudo apt-get install openscad
文法 †
- 単位はmm, deg
- 制御分はmodule内でしか使えない
制御文 †
- for
- for (condition) {expression;}
- conditionがi=[1,3]で1と3, i=[1:3]で1,2,3,i=[1:0.1:3]で1,1.1...3.0
- {}は条件1行では省略可能
- 二重for
for (xpos=[0:3], ypos = [0,2,6]) // 3要素の配列を範囲によって4回繰り返す
translate([xpos, ypos, 0]) cube([0.5, 0.5, 0.5]);
物体 †
- 円柱
- xy平面上にrの円,h方向に円柱が伸びる
- cylinder(h=10,r=20); //デフォルトcenter=false
- cylinder(h=10,r1=10,r2=20,center=true); // center=trueだと底面が-h/2になる
- 直方体
- 原点から[x,y,z]の直方体が生成
- cube([x,y,z]);
- cube([x,y,z], center=true);
- 球
- 中心原点半径rの球を生成
- \( fa=最小分割角度, \)fs=最小分割長さmm, $fn=分割数
移動 †
- 書式
- 回転
- rotate([0,180,0]) // y軸180度回転
- rotate(a=45, v=[1,1,0]) //v軸周りにa度回転
- 移動
- translate([1,1,0]) // x方向1,y方向1
rotate([0, 180, 0]) {
cylinder(h=10,r=20);
}
鏡面反転 †
- 原点を通り法線が[x,y,z]の平面に対して鏡面の座標系を構成する(おそらく右手座標系から左手座標系になっている?)
- mirror([1,0,0]);
- 例
mirror([1,0,0]) translate([1,0,0]) rotate([0,0,10]) cube([3,2,1]);
演算 †
- 書式
- 加算
- 差分
- 積
- ミンコフスキー和
- 1つ目の図形の全点に,2つ目の図形を描画した時にできる立体.
- 数学的には∃(x_i,y_i,z_i) (x,y,z)=Σ(x_i,y_i,z_i)なる(x,y,z)の集合からなる立体
- (可換演算)
$fn=50;
minkowski()
{
cylinder(r=2,h=1);
cube([10,10,1]);
}
2D †
- 押出し
- 二次元図形をheightだけ押し出す.
- linear_extrude(height = fanwidth, center = true, convexity = 10, twist = -fanrot, slices = 20, scale = 1.0) [二次元図形];
関数 †
モジュール †
// 高さ100mmの円柱
module hole(distance, rot, size) {
rotate(a = rot, v = [1, 0, 0])
translate([0, distance, 0])
cylinder(r = size, h = 100, center = true);
}
関数 †
function r_from_dia(dia) = dia / 2;
ライブラリ †
- .scadをincludeすると使える.
- MCADライブラリを/home/ryo/MCADにおく
ギア †
include </home/ryo/MCAD/involute_gears.scad>
gear(number_of_teeth=17,circular_pitch=500,circles=4);
translate([0,0,30])
gear(number_of_teeth=17,circular_pitch=100,circles=4);
morphology †
面取り †
- round, fillet, chanferの作り方
minkowski †
hull †
x = size[0];
y = size[1];
z = size[2];
linear_extrude(height=z)
hull()
{
// place 4 circles in the corners, with the given radius
translate([(-x/2)+(radius/2), (-y/2)+(radius/2), 0])
circle(r=radius);
translate([(x/2)-(radius/2), (-y/2)+(radius/2), 0])
circle(r=radius);
translate([(-x/2)+(radius/2), (y/2)-(radius/2), 0])
circle(r=radius);
translate([(x/2)-(radius/2), (y/2)-(radius/2), 0])
circle(r=radius);
}
|