平面図の押し出しと回転
前回はOpenSCADで簡単な3Dモデルを作るところまで紹介しました。今回はいよいよ3Dモデリングの最も重要な部分であり、今後より複雑なモデリングをしていくために重要な平面
OpenSCADでモデリングを始めると最初はその手軽さもあってcube
やsphere
等の組み合わせでモデリングをしがちです。しかしより複雑な形をモデリングするとなると、これらの組み合わせだけではかなり難しくなってきます。
そのような場合にはまず平面に図を書き起こし、その図を空間上に
押し出し
例えば星型のモデルを作ることを考えましょうpolygon
関数を使います。これは指定された平面状のX/
points = [
[0, 10],
[2.24, 3.09],
[9.51, 3.09],
[3.63, -1.18],
[5.88, -8.09],
[0, -5.0],
[-5.88, -8.09],
[-3.63, -1.18],
[-9.51, 3.09],
[-2.24, 3.09]
];
polygon(points);
OpenSCAD上でこれをレンダリングすると厚みがあるように表示されますが、実際は平面状の図で厚みはないため、これだけではモデルになりません。これに厚みを持たせるにはlinear_
関数を使い、平面を直線的に
linear_extrude(10)
polygon(points);
この結果を3Dプリントすれば、星型の何かのできあがりです。
平面図の回転
押し出しの他にもう一つ抑えなければいけない3Dプリンティングの概念は平面図を回転させて3次元の物体を作る方法です。回転によって作られるもっともシンプルな形はいわゆるドーナッツ型でしょう。以下のコードではrotate_
関数を使ってそれぞれ円と正方形を回転させてドーナッツ型を作成しています。
rotate_extrude()
translate([20, 0, 0])
circle(d=10);
rotate_extrude()
translate([10, 0, 0])
square(10, center=true);
rotate_
関数は指定された平面の図を縦方向に起こした上で指定の範囲
OpenSCADの回転では、平面を構成するすべての点のX
の値がX軸の同じ側に存在しないといけないことに注意してください。例えば、[ [-1, 1], [1, 1], [1, -1], [-1, -1]]
の4点からなる正方形は回転はできずにエラーになります。これをただしくするには平面図の点のX
がX ≧ 0
かX ≦ 0
になるように動かせば良く、例えば[ [0, 1], [2, 1], [2, -1], [0, -1] ]
で指定される正方形を使えば問題ありません。上記のサンプルでrotate_
の前にtranslate
をしているのはまさにこのためです。
OpenSCADで実現可能なさまざまなモデル
紹介しきれていない機能もたくさんありますが、前回までに紹介したcube
, cylinder
, sphere
等の簡単な形だけでもおもしろいモデルを作成し、3Dプリントで出力することは可能です。
以下の例は私が再現した日本の伝統建築で使われるcube
とcylinder
のみを使って構築されています。このモデルを含むいくつかのOpenSCADファイルを公開していますので、よければそちらも参考にしてみてください。
これらの基本的な形のほかに今回紹介した、平面図の作図、押し出し、そして回転が使えると、簡単なものであればそれらの組み合わせだけでモデルを作成できるようになります。例えば以下のサンプルは私が初めてモデルした充電器ホルダですが、現在も使い続けており、拙いデザインながら便利に使っています。
また、基本機能からさらに先に進んでOpenSCADを極めればユーザの入力する値によって変化するような複雑なモデルをデザインすることが可能です。例えばGridfinityと呼ばれる収容システムの箱を、設定を変えて様々な形で出力するものや、様々な形のギアを出力するものなどは汎用性の高いモデルを実現しています。
OpenSCADにたりないもの、その先
しかしOpenSCADは必要十分であるものの、実用的なモデルを作る際にあったほうがよい機能がいくつか欠けています。例えば汎用的な面取りやフィレット機能はOpenSCADには存在しません。このため、箱のようなものを作った際にはそのエッジがとがったままになっていて持ちにくくなるような問題があります。OpenSCADでこれらを実現するのも可能ですが、手間がかかる作業になってしまいます。他のCADソフトウェアを使えばこれらの機能が最初から揃っていて簡単に実装可能です。
また前述の汎用性の高いモデルもプログラミングという観点で考えると再利用が難しいと言えます。OpenSCADには複数ファイルを扱う際に使えるimport
宣言こそありますが、Go/
OpenSCADは、上記のようにいくつかの必須とも言える機能が存在しないのと、それらを実装する際に直感的なGUI操作ではなく数学的な素養がある程度必要なのが大きな問題です。このような理由もあるため、今回でOpenSCADを使ったモデリングの話を一旦終了とし、次回以降はFusion360の機能の紹介と、それを前提とした3DPにまつわるテクニックやTipsの紹介にうつります。