Computer Aided Design
Fusion360、Blender、TinkerCADなど様々なソフトウェアがありますが、本連載のこれから数回ではOpenSCADを使い、その後もっと強力なソフトウェアに移行して解説していきます。
OpenSCADは専用のプログラミング言語で記述し、その結果をプログラムが解析したのち3Dモデルとしてレンダリングしてくれるツールです。OpenSCADはFusion360などの本格的なCADソフトウェアと比べると機能的には見劣りしますが、3Dモデリングに慣れていないプログラマにはとっつきやすいはずです。ブロックを組み合わせる感覚でモデリングが可能ですし、コードによって記述が可能なためコピペしながら試すことが可能です。
OpenSCADの入手と設定
OpenSCADはopenscad.
OpenSCADを起動してNew
ボタンを押し、新しいファイルを作成するとエディタとレンダリング画面が大きく表示されます。このエディタ上でOpenSCADのコードを記述してもいいのですが、正直エディタとしては物足りないため、好みのテキストエディタでファイルを編集することをお勧めします。
別のエディタを使う場合は、まずOpenSCADのエディタはEditor
の右上にある×印をクリックして、閉じてしまいます。その後OpenSCADのDesign>Automatic Reload and Previewが有効になっていることを確認しましょう。
次に別のエディタを起動し、そちらでファイルを作成・
作成したファイルをOpenSCADで開いたのち、自分のエディタのでファイル内容を編集して保存すれば、OpenSCADがファイルの変更を検知し、自動的にプレビューが表示されるはずです。今後この記事では自動的にプレビューが表示される前提で解説をしますが、OpenSCADのエディタを使っている場合はファイル保存をするか、プレビューボタンを押さないとプレビューが作成されないことに注意してください。
OpenSCADの基本
まずは最もシンプルな操作として、立方体を描画してみましょう。OpenSCADで立方体を描画するにはcube
関数を使います。
cube(50);
上記の場合、一辺が50mmの立方体を描画します。この際、立方体は始点からそれぞれX, Y, Zの正の方向に向かって描画されます。
OpenSCADでは変数に辺の長さなどの値を代入して再利用可能です。以下のようにすれば立方体と、立方体の辺の長さと同じ直径の球を描画できます。
size=50;
cube(size);
sphere(d=size);
これだと立方体と球が重なってしまいますので、立方体をZ方向にsize
分だけ移動させましょう。その場合は以下のようにtranslate
関数を使います。
size=50;
translate([0, 0, size]) {
cube(size);
}
sphere(d=size);
OpenSCADの関数には、立方体のようなオブジェクトを作成したり変数に値を代入するアクション関数、そしてアクションによって作成されたオブジェクトを操作するオペレータ関数の2種類が存在します。前述の例ではcube
やsphere
がアクション、translate
がオペレータ関数です。オペレータ関数は中括弧の中に複数のオブジェクトを指定して、それらすべてにたいして同じ操作ができます。これらを含めた各コマンドに関してはOpenSCAD公式のチートシートを参考にするとよいでしょう。
以下の例ではこれまでの例の上に、円柱を作成するcylinder
、オブジェクトを回転させるrotate
、そして表示色を変更するcolor
を使ってダンベルのモデルを作成し、そのダンベル全体を赤色で表示させます。この色についてはあくまでプレビュー中の識別に使うためだけのもので、3Dプリント時の色には関係ないことに注意してください。
radius=30;
color("Red", 1) {
sphere(radius);
translate([115, 0, 0])
sphere(radius);
rotate([0, 90, 0])
cylinder(h=115, r=radius/2);
}
複数のオブジェクトを交差
またintersection
を使えば複数のオブジェクトが重なった部分のみを有効にしたり、逆にdifference
を使えば最初のオブジェクトからその後のオブジェクトの形を省いた形を作ることもできます。
以下のコードではそれぞれdifference
で立方体の中央に穴を開けたモデル、そしてintersection
でサイコロのような立方体の角が削れたモデルが作成できます。
r=15;
difference() {
cube(r*2);
translate([r, r, 0])
cylinder(h=r*2, d=r);
}
r=15;
intersection() {
cube(r*2);
translate([r, r, r])
sphere(r/sin(atan(1/sqrt(2)))-r/10);
}
これらのintersection
やdifference
のような処理を記述した場合、プレビューでは正しく結果が表示されないことがあります。その場合はRender
ボタンを押してレンダリングを行う必要があります。また、プレビュー段階で部分的にレンダリングを行うこともできます。詳しくは前述のチートシートからrender
関数を確認してください。
OpenSCADから3Dプリント
ここまでの知識である程度のモデルが作成できます。次はモデルをプリントするつもりでモデリングしてみましょう。
もし皆さんが初めて3Dプリントするなら、まずは複雑な形は避けてなるたけ簡単な形にしましょう。3Dプリンタは垂直方向に層を重ねていくため、上方向から見た際にある程度複雑な形をしていても問題はないものの、横方向から見たときに複雑な形をしているとプリントが思った結果にならないことがあります。
今回はまず簡単に、丸い穴が空いた立方体と、そこに入る円柱を作成してみます。
clearance=0.5;
r=15;
difference() {
cube(r*2);
translate([r, r, 0])
cylinder(h=r*2, d=r);
}
translate([-r, -r, 0])
cylinder(h=r*2, d=r-clearance*2);
このモデルでは、円柱と立方体の間に0.
これをプリントするにはこのモデルを前回解説したようにSTLや3MFのようなファイルとしてエクスポートし、スライサでGコードに変換するわけです。ただしOpenSCADではその前にもうひとつステップがあります。そそれは、モデルができたらまずRender
ボタンを押して、モデルのレンダリングをさせることです。この際モデルの形に無理があったりするとエラーになることもあります。そしてレンダリングが済んだら、STLエクスポートボタンを押してSTLファイルを作成します。
このレンダリングを忘れると、最新のモデルではなく一つ前にレンダリングした際の古いモデルでSTLファイルが作成されることがありますので、注意してください。
STLファイルができたら、スライサにモデルを呼び出しGコードを作成します。スライシングのためのソフトウェアも様々ありますが、基本的にはお持ちの3Dプリンタが勧めるものをまず使いましょう。例えばPrusa SlicerやUltimaker Curaなどはほとんどどのプリンタでも対応可能ですが、ものによってはそれなりのカスタマイズが必要です。もし私の持っているプリンタでPrusa Slicerを使おうとすると、ファイルをネットワーク転送する機能を使うのにサードパーティー製のツールを使わざるを得ませんので、そちらの調査もしなければいけません。しかしメーカー提供の純正のスライサを使えば、多少Prusa Slicerに機能が劣っていても最初から3Dプリンタすべての機能を利用可能です。
スライスの設定はデフォルトのままでとりあえず最初はプリントしましょう。以下は今回私が使ったPrusa Slicerのスライス結果です。
今回のモデルはどんな設定でもそれなりに簡単にプリント可能なはずです。プリントができるとこのように、立方体の中心を円柱がするすると動けるような形になっています。
このような簡単な形をプリントしてみるだけでも色々と学びがあります。例えば、プリント開始地点
円柱部分が立方体とは別の位置にあるのもこのためです。象の足があると、0.
ともあれ、これでプリントまでの流れは一通り完了です! ここまでの情報だけでも色々な造形が可能ですので、是非皆さんも色々遊んでみてください。次回は押し出しを使ったモデリングについて解説していきます。