メカ

参考資料

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]);
  • if

物体

  • 円柱
    • 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);
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]);

演算

  • 書式
    • 演算(){[物体;]*}
  • 加算
    • union
  • 差分
    • difference
    • 1つ目から2つ目以降を引く
    • intersection
  • ミンコフスキー和
    • 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);
}
  • 引数にはデフォルトが設定できる
    module house(roof="flat",paint=[1,0,0]) {}

関数

function r_from_dia(dia) = dia / 2;

ライブラリ

ギア

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

morphology.png

面取り

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

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS