Top > OpenSCAD

広告

OpenSCAD

プログラミングして3Dモデルを作製する。
形が決まれば変数の値(高さや直径など)を変えるだけで様々な大きさ(Parametric)のものができるので便利。

C言語に似た専用のスクリプトを書いてモデリングするので使い慣れたエディタで書いても良い。

インストール

DebianやUbuntuには公式パッケージがあるので簡単にインストールできる。

簡単な使い方

  • 立ち上げるとエディタパネルと表示パネルとメッセージパネルが入ったウインドウが開く。
  • エディタでプログラミングする
    • 他のエディタでプログラミングしたものを読み込んでも良い。
  • 「Design」メニューから「Compile」(2015年3月バージョンからは「Preview」)を実行すると表示パネルにできたモデルが表示される。
  • 良ければ「Design」メニューから「Compile and Render」(2015年3月バージョンからは「Render」)をを実行する。
  • 「File」の「Export」から「Export as STL」を選べばSTLファイルが生成される。

表示切り替え

  • Ctrl+1:辺(ワイヤフレーム)を表示・非表示
  • Ctrl+2:軸を表示・非表示
  • Ctrl+3:交差線を表示・非表示

プログラミング

  • チートシートが便利
  • 立方体(cube)や円柱(cylinder)など元々3次元の図形を用いる方法と、四角形(square)や円(circle)、ポリゴン(polygon)で2次元平面を作って伸ばしたり(linear_extrude)、回転させたり(rotate_extrude)して作る。
  • Wikibooksにあるマニュアル

旧バージョンでの問題

  • 2015年3月バージョン以前は変数の定義が決まったところでしかできない。
    • 少なくとも開発バージョンではできるらしい。
    • forやif、unionの中で使えないので非常に不便
    • moduleの中では使える
  • 2015年3月バージョンからは配列に新しい要素を追加するということができる。
    • concat()という関数でやる。

よく使うもの

まず真ん中付近に図形を書いて移動や回転をして所望の位置に持ってくる。
3次元の物体も最初に作るときは方向が決まっているので回転したり、移動したりして所望の位置に持ってくる
単位は「mm」

  • 変数へ数値を入れる:Cに似ているけど変数の型(intとかdoubleとか)を指定する必要はない。もちろん計算式も代入できる
    a=12;
    b=1.5;
    angle = i*360/20;
  • 円を描く (2次元)
    circle(); //中心が(0,0)で半径1の円を描く
    circle(r = 10); //中心が(0,0)で半径10の円を描く
    circle(d = 20); //中心が(0,0)で直径20の円を描く
    circle(2, $fn=50); //中心が(0,0)で半径2の50角形を描く
  • 四角を描く (2次元)
    square ([2,2],center = true); //横(x方向)2、縦(y方向)2の四角を描く。
    //center = trueだと四角の中心が(0,0)に来る。center = falseまたは略すと角が(0,0)に来る
  • 多角形を描く (2次元)
    polygon(points = [ [x, y], ... ]); //
  • 箱を描く (3次元)
    cube(size = 1, center = false); //一辺が1の立方体を作る。角が(0,0)に位置する
    cube(size = [1,2,3], center = true); //xが1、yが2、zが3の直方体を作り、真ん中が(0,0)に位置する
  • 球を描く (3次元)
    sphere(r = 5); //中心が(0,0)で半径5の球をに描く
    sphere(d = 2); //中心が(0,0)で直径2の球をに描く
  • 円柱を描く (3次元)
    cylinder(h = 10, r=20); //中心が(0,0)で高さ10、半径20の円柱を描く。底面がZ=0
    cylinder(h = 10, r1 = 10, r2 = 20, center = false); //中心が(0,0)で高さ10、底面の半径が10、上面の半径20の円柱(逆テーパー)を描く。底面がZ=0
  • 多面体を描く (3次元)
    polyhedron(points = [ [x, y, z], ... ], faces = [ [p1, p2, p3..], ... ], convexity = N);
  • 移動
    translate(v = [x, y, z]) //次「;」までの図形をx,y,z方向に移動
    translate([x, y, z]) //「v=」を省略しても良い
    
    //半径1の球をx=5,y=0,z=0の位置に移動
    translate([5,0,0]) 
     sphere(1,center = true); //半径1の球
    
    //{}でくくっても良い。複数、複雑なもの用
    translate([5,0,0]){
     sphere(1,center = true); //半径1の球
    }
  • 回転:回転角度は度
    rotate(a=[0,180,0]) //y軸周りに180度回転
    rotate([0,180,0]) //「a=」を省略しても良い
    rotate(a=45, v=[1,1,0])  //回転軸をxyz以外に指定できる。
    
    rotate(a=[0,180,0])
     cube(size = [1,2,3], center = true);
    
    //{}でくくっても良い。複数、複雑なもの用
    rotate(a=[0,180,0]){
     cube(size = [1,2,3], center = true);
    }
  • Z軸に引き伸し
    linear_extrude(height = fanwidth, center = true, convexity = 10, twist = -fanrot, slices = 20, scale = 1.0) {...}
  • 回転引き伸ばし
    rotate_extrude(convexity = 10)
     translate([2, 0, 0])
      circle(r = 1, $fn = 100);
  • 図形の足し算(離れているものはくっつかない)
    //円柱と回転した円柱を足す
    union() {
           cylinder (h = 4, r=1, center = true, $fn=100);
           rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
    }
  • 図形の引き算
    //円柱から回転した円柱を引く
    difference() {
           cylinder (h = 4, r=1, center = true, $fn=100);
           rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
    }
  • 図形の共通部
    //円柱と回転した円柱の共通部分のみ残す
    intersection() {
           cylinder (h = 4, r=1, center = true, $fn=100);
           rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
    }
  • モジュール:図形をモジュール化する。値は返さないっぽい
    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;

特殊な変数

  • $fn
    • 円や円弧、曲線の分割数
      $fn=50;
      とするとプログラム内で円は50角形になる。
      6角形を作りたかったら
      circle(d=d,$fn=6);
      などとする。
  • $fa
    • 円や円弧、曲線の最小分割角度
  • $fs
    • 円や円弧、曲線の最小分割サイズ

リンク


広告

リロード   差分   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Wed, 15 Nov 2017 12:23:13 JST (368d)