[[メカ]]

*目次 [#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しなければならない

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS