📐

PolyScriptで小物トレーを作る

に公開

それではPolyScriptで実際にモノを作っていきましょう。
PolyScriptってなに?という方はまずこちらを参照してください。

まずは**live.objhub.org**を開いてください。ブラウザだけでPolyScriptを試せるPlaygroundです。左ペインにコードを書くと、右ペインで3Dモデルがリアルタイムにプレビューされます。インストール不要なので、読みながら一緒に手を動かしてみてください。

tootalltoby - 3Dモデリングの筋トレ

さて、3Dモデリングは書けば書くほど上手くなります。でも「何を作ろうかな」と考えるところで手が止まりがちですよね。

そこでおすすめなのが**tootalltoby**です。

tootalltobyは、3Dモデリングの課題を提供してくれるサイトです。毎日新しいお題が出て、それを自分の好きなCADツールで再現する - いわば3Dモデリングの筋トレのようなものです。単純な形状から複雑なものまで段階的に用意されているので、初心者でも無理なく取り組めます。

このブログでは、tootalltobyの最初の例題から順番にPolyScriptで解いていきます。PolyScriptがどこまで実用的な形状を表現できるのか、一緒に確かめていきましょう。

今日のお題: Simple Tray

tootalltobyの最初の例題は小物トレーです。デスクの上に置いて、SDカードや消しゴムや小さなネジを入れておくあれです。シンプルだけど実用的で、3Dプリンタで印刷すればすぐに使えます。

完成コード

先に完成形をお見せします。たった1行です。

box 55 30 7 | edges =Z | fillet 8 | faces top | shell 1.6

「え、これだけ?」と思いましたか? これだけです。5つの操作をパイプでつなぐだけで、ちゃんとしたトレーができあがります。

では、1ステップずつ見ていきましょう。

Step 1: 箱を作る

box 55 30 7

box は直方体を作るプリミティブです。引数は 幅 奥行き 高さ の順番で、ここでは55mm x 30mm x 7mmの箱を作っています。原点を中心に配置されます。

SDカードや小さなパーツを入れるのにちょうどいいサイズ感です。この段階では角張った直方体にすぎません。

Step 2: 縦エッジを選択する

box 55 30 7 | edges =Z

ここからPolyScriptらしさが出てきます。edges =Z は「Z軸に平行なエッジを選択する」という意味です。

直方体には12本のエッジがありますが、そのうちZ軸に平行な4本 - つまり四隅の縦エッジだけを選び出します。

セレクタの記号を少し説明すると:

  • =Z は「Z軸に平行」(parallel)
  • >Z は「Z方向の最大」(上面)
  • <Z は「Z方向の最小」(底面)

= が平行、> が最大方向、< が最小方向、と覚えておけば大丈夫です。

Step 3: フィレットで角を丸める

box 55 30 7 | edges =Z | fillet 8

fillet 8 は、選択されたエッジに半径8mmのフィレット(角丸)をかけます。

Step 2で縦エッジだけを選んであるので、上下の水平エッジはそのままに、四隅だけが丸くなります。トレーらしい柔らかいフォルムになりますね。

フィレットはCADモデリングで最もよく使う操作のひとつです。R(半径)の値を変えるだけで印象がガラッと変わるので、いろいろ試してみてください。ただし、フィレット半径がエッジの長さの半分を超えるとエラーになるので注意です。

Step 4: 上面を選択する

box 55 30 7 | edges =Z | fillet 8 | faces top

faces top は最上面を選択します。これは faces >Z と書いても同じ意味です。直感的に読めるように名前エイリアスが用意されています。

この面選択が、次の shell 操作で「どの面を取り除くか」を決めるカギになります。

Step 5: シェルで中空にする

box 55 30 7 | edges =Z | fillet 8 | faces top | shell 1.6

最後の shell 1.6 で、選択された上面を取り除きつつ、肉厚1.6mmの中空体にします。

shell は「貝殻」のように外側だけを残す操作です。面を選択してから shell を呼ぶと、その面が開口部になります。上面を選んでいるので、上が開いたトレーの完成です。

肉厚の1.6mmは、FDM方式の3Dプリンタで一般的な0.4mmノズルの4倍(4ウォール分)にあたります。薄すぎると強度が足りず、厚すぎるとフィラメントの無駄遣いになるので、この辺りがバランスの良い値です。

コードの全体像をもう一度

box 55 30 7 | edges =Z | fillet 8 | faces top | shell 1.6

左から右に読むだけで、何をしているか分かります。

  1. box 55 30 7 - 55x30x7mmの箱を作る
  2. edges =Z - Z軸に平行な4本の縦エッジを選ぶ
  3. fillet 8 - 選んだエッジをR8で丸める
  4. faces top - 上面を選ぶ
  5. shell 1.6 - 肉厚1.6mmで中空にする(上面が開口)

tootalltobyで回答

tootalltobyで問題を開始するとタイマーが開始されます。
なんだかちょっと落ち着かないのでタイマーは無視してのんびりやっていきましょう:)

tootalltobyでは回答をグラム(g)で提出します。CADで得られるのは体積(cm³)なので、素材の密度を掛けて重さに変換する必要があります。tootalltobyの標準素材はABSで、密度はだいたい1g/cm³です。

最初これを知らなくて、ABSの密度を調べるのが大変でした。

liveのステータスバーにはモデルの体積がcm³で表示されるので1を掛けた体積=重量になります。完成したら、live.objhub.orgのステータスバーの体積を確認してみてください。

今後の計画

次回は、もう少し複雑なモデルに挑戦してみようと思います。穴を開けたり、パーツを組み合わせたり、PolyScriptの真価が発揮される場面をお見せできればと思います。

最後まで読んでいただきありがとうございました。質問やフィードバックがあればぜひコメントしてください。一緒に作っていきましょう。

Discussion