[[メカ]] *目次 [#cdc0d090] #contents *参考資料 [#z29deeef] -[[資料>http://penguin.tantin.jp/hard/OpenSCAD.html]] -http://ameblo.jp/math-physics/theme-10085156680.html -[[チートシート>http://www.openscad.org/cheatsheet/]] *install [#b4f75dc4] sudo add-apt-repository ppa:openscad/releases sudo apt-get install openscad *CUIインターフェース [#jbcc4275] -C言語と同じノリで簡単に可能 openscad -o model.stl a.scad *文法 [#v85dd2f1] -単位はmm, deg -制御分はmodule内でしか使えない **制御文 [#qc8ed97b] -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 **物体 [#jf9cf683] -円柱 --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=分割数 **移動 [#yc352d97] -書式 --[移動]* 物体; --[移動] {小ノード} // 座標系を移したままで何か作業したい場合 -回転 --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); } **鏡面反転 [#c4d20be7] -原点を通り法線が[x,y,z]の平面に対して鏡面の座標系を構成する(おそらく右手座標系から左手座標系になっている?) -mirror([1,0,0]); -例 mirror([1,0,0]) translate([1,0,0]) rotate([0,0,10]) cube([3,2,1]); **演算 [#w8230b42] -書式 --演算(){[物体;]*} -加算 --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 [#y86a53ed] -押出し --二次元図形をheightだけ押し出す. --linear_extrude(height = fanwidth, center = true, convexity = 10, twist = -fanrot, slices = 20, scale = 1.0) [二次元図形]; **関数 [#rad9fd6b] ***モジュール [#k19be607] // 高さ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]) {} ***数値関数 [#z1154c0f] function r_from_dia(dia) = dia / 2; *ライブラリ [#b832cc8d] -.scadをincludeすると使える. -[[MCADライブラリ>https://github.com/openscad/MCAD]]を/home/ryo/MCADにおく **ギア [#ye5530b5] -[[ギアライブラリの使用例>http://ameblo.jp/math-physics/theme-10085156680.html]] 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 [#d15c4321] &ref(./morphology.png); **他 [#r16a21de] -[[ベベルライブラリ>http://www.iearobotics.com/blog/2012/09/13/enhancing-openscad-ii-bevel-library/]] -[[部品組立ライブラリ>http://www.iearobotics.com/blog/2012/09/10/enhancing-openscad-with-the-attach-library/]] *面取り [#o3e1ebc9] -round, fillet, chanferの作り方 **minkowski [#s10b08b6] **hull [#y398a677] 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); } *出力 [#ye784573] -STL出力する前にはRenderしなければならない |