3DP ジャングル

OpenSCADを使ったモデル作成入門(2) ~平面図の押し出しと回転

平面図の押し出しと回転

前回はOpenSCADで簡単な3Dモデルを作るところまで紹介しました。今回はいよいよ3Dモデリングの最も重要な部分であり、今後より複雑なモデリングをしていくために重要な平面(2次元)の作図と、その図を立体にしていくための押し出し(エクストルージョン)について解説します。これらの概念はOpensCADに限らず、すべての3Dモデリングで重要な役割を果たします。

OpenSCADでモデリングを始めると最初はその手軽さもあってcubesphere等の組み合わせでモデリングをしがちです。しかしより複雑な形をモデリングするとなると、これらの組み合わせだけではかなり難しくなってきます。

そのような場合にはまず平面に図を書き起こし、その図を空間上に「厚み」のあるものとして押し出す、という操作をします。これを押し出しと言います。

押し出し

例えば星型のモデルを作ることを考えましょう(ここではクッキー型のようにただ厚みのある星の形とします⁠⁠。OpenSCADで平面に何か図を書くときはpolygon関数を使います。これは指定された平面状のX/Y座標をつなげて閉じた形を作るための関数です。以下のようなコードをOpenSCADで実行すると星の形が表示されるはずです。

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_extrude関数を使い、平面を直線的に("linear")に押し出して("extrude")厚みを持たせます。

linear_extrude(10)
    polygon(points);

この結果を3Dプリントすれば、星型の何かのできあがりです。

図1 押し出しを利用した星型のモデル
図1

平面図の回転

押し出しの他にもう一つ抑えなければいけない3Dプリンティングの概念は平面図を回転させて3次元の物体を作る方法です。回転によって作られるもっともシンプルな形はいわゆるドーナッツ型でしょう。以下のコードではrotate_extrude関数を使ってそれぞれ円と正方形を回転させてドーナッツ型を作成しています。

rotate_extrude()
    translate([20, 0, 0])
    circle(d=10);
rotate_extrude()
    translate([10, 0, 0])
    square(10, center=true);

rotate_extrude関数は指定された平面の図を縦方向に起こした上で指定の範囲(デフォルトでは360度)Y軸を中心に回転させます。できあがった形を見るとそれぞれ円と正方形がY軸を中心としてぐるりとまわってできた形だというのがわかるかと思います。

図2 ドーナッツ型のモデル
図2

OpenSCADの回転では、平面を構成するすべての点のXの値がX軸の同じ側に存在しないといけないことに注意してください。例えば、[ [-1, 1], [1, 1], [1, -1], [-1, -1]]の4点からなる正方形は回転はできずにエラーになります。これをただしくするには平面図の点のXX ≧ 0X ≦ 0になるように動かせば良く、例えば[ [0, 1], [2, 1], [2, -1], [0, -1] ]で指定される正方形を使えば問題ありません。上記のサンプルでrotate_extrudeの前にtranslateをしているのはまさにこのためです。

OpenSCADで実現可能なさまざまなモデル

紹介しきれていない機能もたくさんありますが、前回までに紹介したcube, cylinder, sphere等の簡単な形だけでもおもしろいモデルを作成し、3Dプリントで出力することは可能です。

以下の例は私が再現した日本の伝統建築で使われる「三方組仕口」と呼ばれる、3本の柱が交差する形を模したものです。このモデルではcubecylinderのみを使って構築されています。このモデルを含むいくつかのOpenSCADファイルを公開していますので、よければそちらも参考にしてみてください。

図3 三方組仕口用の加工を施された、3つの柱
図3
図4 三方組仕口を組み立てたところ
図4

これらの基本的な形のほかに今回紹介した、平面図の作図、押し出し、そして回転が使えると、簡単なものであればそれらの組み合わせだけでモデルを作成できるようになります。例えば以下のサンプルは私が初めてモデルした充電器ホルダですが、現在も使い続けており、拙いデザインながら便利に使っています。

図5 充電器ホルダのモデル
図5

また、基本機能からさらに先に進んでOpenSCADを極めればユーザの入力する値によって変化するような複雑なモデルをデザインすることが可能です。例えばGridfinityと呼ばれる収容システムの箱を、設定を変えて様々な形で出力するものや、様々な形のギアを出力するものなどは汎用性の高いモデルを実現しています。

OpenSCADにたりないもの⁠その先

しかしOpenSCADは必要十分であるものの、実用的なモデルを作る際にあったほうがよい機能がいくつか欠けています。例えば汎用的な面取りやフィレット機能はOpenSCADには存在しません。このため、箱のようなものを作った際にはそのエッジがとがったままになっていて持ちにくくなるような問題があります。OpenSCADでこれらを実現するのも可能ですが、手間がかかる作業になってしまいます。他のCADソフトウェアを使えばこれらの機能が最初から揃っていて簡単に実装可能です。

また前述の汎用性の高いモデルもプログラミングという観点で考えると再利用が難しいと言えます。OpenSCADには複数ファイルを扱う際に使えるimport宣言こそありますが、Go/Rust/Ruby/Python/Perlといった言語に備わっている依存関係の管理方法が存在しません。そのためモジュラーが難しく、ある意味その利点を自ら損なっている部分もあると言えます。

OpenSCADは、上記のようにいくつかの必須とも言える機能が存在しないのと、それらを実装する際に直感的なGUI操作ではなく数学的な素養がある程度必要なのが大きな問題です。このような理由もあるため、今回でOpenSCADを使ったモデリングの話を一旦終了とし、次回以降はFusion360の機能の紹介と、それを前提とした3DPにまつわるテクニックやTipsの紹介にうつります。

おすすめ記事

記事・ニュース一覧