広告
*[[OpenSCAD:http://www.openscad.org/]] [#fe522902] プログラミングして3Dモデルを作製する。~ 形が決まれば変数の値(高さや直径など)を変えるだけで様々な大きさ(Parametric)のものができるので便利。~ C言語に似た専用のスクリプトを書いてモデリングするので使い慣れたエディタで書いても良い。~ **インストール [#qdfd73dc] DebianやUbuntuには公式パッケージがあるので簡単にインストールできる。 **簡単な使い方 [#n6705099] -立ち上げるとエディタパネルと表示パネルとメッセージパネルが入ったウインドウが開く。 -エディタでプログラミングする -「Design」メニューから「Compile」を実行すると表示パネルにできたモデルが表示される。 -良ければ「Design」メニューから「Compile and Render」を実行する。 -「File」の「Export」から「Export as STL」を選べばSTLファイルが生成される。 **プログラミング [#if41eefb] -[[チートシート:http://www.openscad.org/cheatsheet/]]が便利 -変数の定義が決まったところでしかできないが、将来的にはどこでも出来るようになるらしい。 --少なくとも開発バージョンではできるらしい。 -配列に新しい要素を追加するということができないが、将来はできるようになるらしい --concat()という関数でやることになるようだ。 ***よく使うもの [#l3d051d5] まず真ん中付近に図形を書いて移動や回転をして所望の位置に持ってくる。~ 3次元の物体も最初に作るときは方向が決まっているので回転したり、移動したりして所望の位置に持ってくる~ &color(Red){単位は「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; 広告 |