OpenSCADの使い方

オブジェクト操作

  • 3Dオブジェクト生成
    • 直方体
                cube([8,15,20]);
                
    • 球体
                sphere(10);
                
    • 柱や錐 cylinder
                cylinder(h=20, r=8); // 円柱
                cylinder(h=20, r1=8, r2=8); // 円柱
                cylinder(h=20, r1=10, r2=0); // 円錐
                cylinder(h=20, r1=8, r2=8, $fn=5); // 多角柱
                cylinder(h=20, r1=10, r2=0, $fn=5); // 多角錐
                
    • 頂点列と面 polyhedron
                CubePoints=[[,,],[,,],[,,],[,,],[,,],[,,],[,,],[,,]]
                CubeFaces=[[,,,],[,,,],[,,,],[,,,],[,,,],[,,,]]	// 時計回り頂点番号
                polyhedron( CubePoints, CubeFaces );
                
  • 移動 translate
            translate([20,0,0]) オブジェクト
            
  • 色指定 color
            color([0.5,0,0]) オブジェクト
            color("cyan") オブジェクト
            module my_red() color([200/255,120/255,120/255]) children();
            % オブジェクト // 半透明グレー
            
  • 合成(演算)
    • OR(結合) union
                union(){オブジェクト;オブジェクト;}
                
    • 差分(減算) difference
                difference(){オブジェクト;オブジェクト;}
                
    • AND(交差) intersection
                intersection(){オブジェクト;オブジェクト;}
                
  • 回転 rotate
            rotate(a=[0,20,0]) オブジェクト
            
  • 拡大縮小 scale
            scale(v=[1,1,0.5]) オブジェクト
            
  • サイズ変更 resize
            resize(newsize=[1,1,0.5]) オブジェクト
            resize([2,2.0]) オブジェクト	// 0は元のまま
            
  • 鏡像 mirror
            mirror(v=[x,y,z]) オブジェクト
            
  • アフィン変換 multmatrix
            multmatrix(m=[[,,,],[,,,],[,,,],[,,,]]) オブジェクト
            
  • ミンコフスキ和 minkowski
            minkowski() オブジェクト
            
  • 凸包 hull
            hull() オブジェクト
            
  • 2Dオブジェクト生成
    • 正方形 square
                square(20)
                square([x,y])
                
    • ポリゴン polygon
                polygon(points=[[,],[,],[,],[,],[,],[,]]);
                
      • points
    • テキスト text
                text("テキスト", 20)
                
      • size
      • font
                    font = str("Liberation Sans", ":style=Bold")
                    
        • MS PGothic, MS Gothic, HGPGothicM
      • spacing
      • halign
      • valign
      • $fn
  • 2Dオブジェクト操作
    • 内部または外部に図形生成 offset
                offset(r=10) 2Dオブジェクト		// 外側(角円)
                offset(delta=10) 2Dオブジェクト	// 外側
                offset(r=-10) 2Dオブジェクト	// 内側(角円)
                offset(delta=-10) 2Dオブジェクト	// 内側
                
      • r
      • delta
    • 塗りつぶし fill(開発スナップショット版が必要)
                fill() 2Dオブジェクト
                
  • 押し出し(2Dから3D)
    • 線形 linear_extrude
                linear_extrude(height=60, twist=90, slices=60) 2Dオブジェクト
                linear_extrude(10) 2Dオブジェクト
                linear_extrude(height=60, scale=3) 2Dオブジェクト	// 錐的に広がる
                
      • height
      • scale
      • twist
      • slices
      • center
    • 回転 rotate_extrude(断面形状からドーナッツオブジェクト生成)
                rotate_extrude(convexity=10) 2Dオブジェクト
                rotate_extrude(angle=270, convexity=10) 2Dオブジェクト
                
      • angle
      • convexity
      • $fn
  • 投影(3Dから2D) projection
            %import("projection.stl");
            projection(cut=true)
            
    • cut
  • サーフェス surface
    • テキストファイルからサーフェス生成
                surface(file="surface.dat", center=true, convexity=5);
                %translate([0,0,5]) cube([10,10,10], center=true);
                
    • 画像からサーフェス生成(PNG画像のグレー値を高さに変換)
                surface(file = "file.png", center = true, invert = false);
                

コーディング

  • モジュール module
            module 名前() { ... }
            
    • 任意モジュール指定
                children()
                
    • 任意モジュールインデックス指定
                for (i = [0:$children-1]) children(i);
                
  • コメント
            // コメント
            /* コメント */
            
  • 繰り返し for
            for (i = [-10:10])
            for (i = [-10:3:10])
            for (c = "String") c
            
  • ローカル変数代入 let
            let(x=値)
            
  • 特殊変数
    • $fa フラグメントの最小角度(デフォルト12)
    • $fs フラグメントの最小サイズ(デフォルト2)
    • $fn フラグメントの数(デフォルト0、128以下、推奨50未満)
    • $t アニメーション
    • $vpr レンダリング時ビュー:回転
    • $vpt レンダリング時ビュー:平行移動
    • $vpf レンダリング時ビュー:FOV(Field of View)
    • $vpd レンダリング時ビュー:カメラ距離
  • 検索 search
            search
            
  • アサート assert
            assert(論理式);
            assert(論理式,メッセージ);
            
  • コンソール出力 echo
            echo("val: ", x, y)
            
  • 関数 function
            function f1(x, y) = echo("f1: ", x, y)  x * y + 1;
            r1 = f1(3, 5);
            function f2(x) = let(y = pow(x, 3)) echo("f2: ", y) y;
            r2 = f2(4);
            function result(x) = echo("f3: ", x) x;
            function f3(x) = result(x * x - 5);
            r3 = f3(5);
            
  • リスト内包表記
            polygon([for (i=[0:num-1], a=i*360/num) [ r*cos(a), r*sin(a) ]]);
            
  • リスト
            concat(v1,v2,v3);
            
  • 再帰
            function factorial(n) = n == 0 ? 1 : factorial(n - 1) * n;
            
  • 乱数
            rands(min_value,max_value,value_count);
            rands(min_value,max_value,value_count,seed_value);
            
  • 小数を整数に丸める
            int = round(float)
            

基本操作

  • プレビュー(描画)
    • F5キー または メニューDesign/Preview
  • レンダリング(描画)
    • F6キー またはメニューDesign/Render
  • STLファイル書き出し
    • レンダリング(F6キー)後に、F7キー またはメニューFile/Export / Export as STL
  • テキストエディアでの数値対話的変更
    • コード中の数値の後にカーソルを置き、ALT+上下矢印で数値を増減する、オブジェクトは自動的イン再描画(レンダリング)される
    • ALT+左右矢印で数値の桁を移動する

その他

  • Export as Imageの背景色を変えるには、C:\Program Files\OpenSCAD\color-schemes\render\nature.jsonを複製して編集し、 OpenSCADを起動して、Edit/Preferencesで3D Viewで編集したColor schemeを指定する

参考