ねこでじ(Nekodigi)

Nekodigi’s diary

学習中の気づきをまとめています。応援よろしくお願いします

【OpenSCAD】SuperShapeを3Dプリントする。

成果物

f:id:Nekodigi:20200106173406j:plain

今回は、Processingで作ったSuperShapeをOpenSCADを使ってSTLデータに変換し、3Dプリントしました。

nekodigi.hatenablog.com

OpenSCADは文法がかなり変わっているのが特徴です。以前やったことはありましたが、なかなか難しかったです。3Dプリンターの修理も大変でした、(改造しなかったらよかった…)

解説

polyhedron関数を使って、点と、面のつなぎ方をもとに立体にしました。ただ、OpenSCADの配列にはかなり癖があって、これで点の配列が生成できます。毎ループごとに、[x(theta, phi), y(theta, phi), z(phi)]の配列がpointsに追加されていく感じです。concat関数を使う方法もありますが、OpenSCADは代入が参照渡しなので、厳しいです。配列の追加のループの中では、セミコロンが使えない?のでxyz全て関数を使って外部処理しています。

points=[
  for(phi = [-90:w:90+w-delta])
    for(theta = [-180:w:180+w-delta])
      [x(theta, phi), y(theta, phi), z(phi)]
];

関数定義も癖があります。

function x(theta, phi) = superShape(theta)*cos(theta)*superShape(phi)*cos(phi);

OpenSCADは何の言語がベースになっているのか謎ですが、簡単に書ける部分と、難しい書き方をしないといけないところがはっきり分かれる言語だと思います。

www.openscad.org

コード

今回のコードはこちらです。

 SuperShapeの作品をまとめたリポジトリもご覧ください。

github.com