FreeCADで3Dプリンター用データ(STL)を作成する場合の留意点

先の記事の結論を、FreeCADの活用法という観点から言い換えると、

  • cfMesh用のモデラー&メッシュ設定ツールとしては、拙作のマクロを使えば簡単に出力できて問題はなさそう。
  • 3Dプリンター用に出力する際には、修復ソフト(netfabbの無償版が有望)が必要になる場合がある。

と書き直して良いかもしれません。

修復のやり方として、読者の方から、

cfMeshでメッシュを作成後その表面をstlにしたものでもよさそうですね。

というサジェスチョンをいただきましたが、これも一案です。この場合は、特にNetgenなどオールテトラのメッシュ作成に有効になりそうな感触があります。

本記事では、今回取り上げた以下の図のモデルで、STLファイルの修復が必要となったのは、何が問題であったのか(もっと端的に言うと、FreeCADがヘボだったからなのか?)について、掘り下げます。

範囲を選択_039

 

 

黒色表示には要注意

そこでまずは、ブーリアン演算をした結果を以下に再掲します。

範囲を選択_023外観が黒色でシェーディング表示されていますが、FreeCADを使い慣れた人には、何で? と映るんではないかと思います。通常は灰色ですからね。意図的に配色を変更した訳でもありません。表示色を変えても反映されないのです。

つまり、この黒色表示は、「面が正しく生成できていない」ということを意味するんではないか(そんな事は何処にも書いてないと思いますが(-_-;))、だとすると、このデータから作成されるSTLファイルには欠陥があって当然ということになります。

確認の為、iphoneのケースデータでなく、単純なプレートと、拙作Logoデータとの間でブーリアン演算をしてみました。

範囲を選択_040

このように、黒色でなくデフォルトの灰色表示です。もちろん、これから生成されるSTLデータに欠陥はありません。

ということで、欠陥が生じた原因は、ブーリアン演算に問題があったのか、iphoneのケースデータに問題があったのか、ということになります。

後者に問題がなければ、FreeCADのブーリアン演算に問題有り、ということになります。そこで次に、iphoneのケースデータについて調べてみました。

入手したデータがシェルデータであった為、これをソリッドデータに変更しましが、

範囲を選択_032このSolidデータについて調べました。

範囲を選択_041FreeCAD上の表示は、通常の灰色表示で問題はなさそうでした。しかし、これをSTLファイル出力して、件の修復ソフトで調べてみると・・・

範囲を選択_042

 

パッと見にはどこがエラーなのかは判りませんでしたが、例のビックリマークが出て、とにかくエラーがあるというので、詳しく見たら確かに面の欠損部分がいくつか(5箇所)見つかりました。

そこで、これを自動修復。修復したSTLデータを再度FreeCADへインポートし、これを使ったブーリアン演算を実施してみたところOKとなり、ブーリアン演算の問題ではなさそうだ、となりました。

STLデータのソリッド変換方法については後述しますが、ここではエラー箇所が判ったので、FreeCAD上でこれを特定出来ないかと調べてみたところ・・・

範囲を選択_043

 

確かに、開口部を確認できました。ならば、これを(簡単に)修復出来ればということになります。

この修復を、あれこれトライしてみたんですが、基本的に形状構築ツール範囲を選択_017を使って、開口部の面貼りまでは比較的簡単に出来ることがわかったんですが(下図参照)、

範囲を選択_047

作成した面(Face)のままでは、これを元のデータと結合範囲を選択_024してもSolidになってくれません。範囲を選択_048

 

このレポートビューを解釈するに、複合体(compound)として表示されるオブジェクトは、何か欠陥が存在するものだということのようです。

これをShell ⇒ Solid と変換する必要があり、その手間が半端で無さそう、あと一歩のところまではいきましたが・・・タイムオーバーです。(5/26再挑戦にて一件落着しました(後述))

 

結論

  • FreeCADのブーリアン演算機能は、対象Solidに欠陥が無い限りにおいて問題は無さそう。(今回修復が必要になったのは、インポートしたモデルそのものが欠陥を内包していた為)
  • インポートしたSTPモデルに欠陥があるかどうかは、STLファイル出力して、別ソフト(netfabbなど)にて確認、修復するしかなさそう。

 

 

インポートしたstlファイルをSolid化する方法

Partワークベンチで、

範囲を選択_049

「部品」⇒「メッシュから形状を作成」を選択

範囲を選択_051

変換後のオブジェクトはシェルデータなので、形状構築ツール範囲を選択_017を使って、これをソリッドに変換する。

範囲を選択_052

こうして作成したソリッドであれば、正常にブーリアン演算可能。範囲を選択_053

(結果もちゃんと灰色表示です)

フォントデータを3次元化する方法

詳細は、⇒ http://open-shelf.appspot.com/FreeCAD/18.html

Draftワークベンチ ⇒ シェイプストリング範囲を選択_058を使用して文字入力、サイズなど決定。

範囲を選択_057

 

DEXCSの場合、フォントファイルは、

/usr/share/fonts/truetype/

以下にあるフォントであれば何を使っても良い。日本語フォントを使えば、日本語表示も可能。

大きさやレイアウトが決まったら、Partワークベンチの押し出しツール範囲を選択_060を使って完成。

範囲を選択_059

 

 

穴のあるシェルデータの修正方法

基本的に形状構築ツール範囲を選択_017を使います。穴の部分は、上に示した通り、エッジから面を作成します。5箇所の穴を塞いだ結果が下図のような状態になります。

範囲を選択_063

問題は、これらの面をどうやってシェル化するか?です。FreeCADベテランの読者さんからも、これで出来るはずだということだったので、気を取り直して再挑戦したところ、結局2つのコツがあることが判りました。

 

コツ1・・・面の選択方法

単純に考えれば、ツリービューの画面上で、修復前のシェルと追加した面を選択して、「作成」ボタンを押せば良かろう・・・なんですが、これをやると、

範囲を選択_064

 

となってしまいます。当初は、シェルを面に分割してから再結合、とか色々やってみましたが、ようやく判ったのは、ツリービューの画面上での選択はNGだったということです。以下に3Dビュー上で選択した場合とを比較してみます。

範囲を選択_068お判りでしょうか?ツリービュー上で選択したものは、面以外に、エッジや頂点まで選択されてしまっています。この事に気づくまで、随分回り道をしてしまいました(-_-;)

要するに、面の選択は3D画面上で、すべての面(全部で約50面!)を一つづつ根気よくピックしてやらなければならなかった、ということです。

ただ、これをやろうとすると、モデルを大きく拡大して、色々視る方向を変えてやらないと、うまくピックできません。

コツ2・・・グルグル回転を止めるには

問題は、視方向の回転操作をしているうちに、マウス操作を少し間違えると、モデルが勝手にグルグル回転し出してしまう事です。

範囲を選択_074

 

通常の場合だと、3Dビュー画面上で、マウスクリックしてやれば回転は止まってくれます。しかしこの場合、その方法で回転を止めると、それまで苦労してピックアップした面がすべてリセットされてしまうことでした。

この事があったので、尚更にツリービュー画面上で選択する方法に拘って、余分な回り道をしていたのでした。

3Dビュー画面上でマウスクリックする以外に、この回転を止める方法はないものかと、今回改めて、試行錯誤した所、

範囲を選択_075

標準ビュー選択メニュー(上図)のうち、赤枠で囲った部分のボタンを使えば、指定の視方向になって回転が止まり、ピックアップした面もリセットされないということが判りました。

これにて、ようやく一件落着です。

 

 

STL品質(3Dプリンター VS cfMesh)

先の記事で、「STLファイルに不可視な欠損がある・・・」と云われてしまった拙作の3Dデータですが、これはiphoneケースのベースデータをダウンロード提供してくれているサイトから入手したstpファイルと、拙作のLogoデータを、FreeCAD上でソリッド演算にて作成したものです(下図参照)。範囲を選択_011これらのデータから、3Dプリンタ用のSTLファイルを作成するに際して、FreeCADの使用法という面で、備忘録として残しておきたい情報もいくつかあったので、以下記しておきます。

ブーリアン演算範囲を選択_012

ソリッド演算は、単純にocse2Logo とDocument003の2つのパーツで差をとればいいだろう、と思ってブーリアン演算にかけると・・・範囲を選択_015となってしまって、ここで、

  • iphoneケースデータの本体部分(Document003)が実はシェルデータだったということ
  • FreeCADでは、ソリッドデータしかブーリアン演算できない、

ということが判った。

ソリッドとシェルで、オブジェクトのアイコンを変えてくれれば分り易いんだろうにね。

 

形状構築ツール範囲を選択_017

Partワークベンチにある形状構築ツールを使うと、シェルデータをソリッドデータに変換したり、その逆変換も可能になる、

範囲を選択_032

これで出来上がったSolidを対象にブーリアン演算範囲を選択_012すると、

範囲を選択_023

 

最後に、出来上がったもの(Cut)と、それ以外のもの(Document,Document001,Document002)を全てまとめて、結合範囲を選択_024すれば、

範囲を選択_022

となるので、出来上がった(Block)をSTLファイルに書き出してやればよい。DEXCS2014の最新版(5/30に開催するオープンCAE講習会でお披露目予定のもの)であれば、マクロの実行ボタン範囲を選択_030から、

範囲を選択_033

上段のマクロ(exportStl.py)を実行してやれば、任意の名前でSTLファイル出力が可能になる。

ちなみに、下段のマクロ(makeCfMeshSetting.py)を実行すれば、cfMesh用の設定ファイル作成用GUIが起動し、範囲を選択_029

 

上記設定(Maxメッシュサイズ=0.5)にてExportボタンを押して、cfMesh(cartesianMesh)を実行して、以下のようなメッシュが作成できることは確認済です。

範囲を選択_034

問題は、このSTLファイルを使って3Dプリンタ用のスライスデータを作成しようとしたら、形状が再現できなかったという事です。

2015-05-21_1829スライスデータに変換するソフトがヴァージョンアップしたら出来なくなったので、てっきり変換ソフトに問題があると思ったのですが・・・

サポートの回答は、

STLファイルに不可視な欠損がある場合、スライス後に欠損が可視化し
スライス後の形状が変わる場合がございます。

弊社で使用しておりますデータ補正用のフリーソフトがございますので
お試しいただければと存じます。

http://www.3ds.co.jp/netfabb/

お手数をお掛けしますが、よろしくお願い申し上げます。

以上、どうぞよろしくお願い申し上げます。

というものでした。

そこで、紹介されたソフト(netfabbの無償版)を使って表示させると、

2015-05-22_1538確かに、ビックリマークが表示されて、STLに欠陥がある事を指摘されています。ここで嬉しいのは、この欠陥を自動修復してくれる機能があったことでした。

2015-05-22_1552_001

「その他」⇒「パーツの修復」 を選択すると、

2015-05-22_1540右下の「自動修復」のボタンを押すと、

2015-05-22_1540_001

「実行ボタン」を押せば、

2015-05-22_1541欠陥が修復されるという、いとも簡単でした。あとは、「パーツをエクスポート」。

2015-05-22_1552

このSTLファイルを使えば、スライスデータへの変換は何の問題も無し、という事でした。

 

中間まとめ

  1. STLの品質に対し、cfMeshはロバスト性大(多少の欠陥があってもメッシュ生成可能)であるが、3Dプリンターはそうでない。
  2. STLの欠陥を自動修復するソフトとして、netfabbは無償版も有り、簡単に使えて有効であった。但し、より複雑、大規模なモデルに対する検証は未実施。
  3. 本例で、STLに欠陥が生じた原因はFreeCADの機能不足?

ということで、ここで終わってしまうと、FreeCADは使えないのか?になってしまうので、ここはあくまで「中間まとめ」ということで、次回は、今回のSTL欠陥の本質原因を探りたいと思います。

 

おまけ・・・Netgen

File ⇒ LoadGeometry にて、元のSTLデータを読み込んだ後、

Geometry ⇒ STL Info で調べてみると、確かにERRORが表示されていました。

NETGEN - -home-et-Desktop-3D-caseA.stl_036

 

これに対し、netfabbにて修復したSTLデータだと、ERRORはなしで、GenerateMeshボタンで自動メッシュ作成も可能でした。NETGEN - -home-et-Desktop-3D-caseAm.stl_037

但し、メッシュ品質は、ちょっとどうかな? ですね。STLは修復はされたものの、品質の悪い三角形が多くあり、メッシュ生成はその影響を受けてしまっているということでしょうね。

このNetgenとの比較においても、cfMeshのロバスト性は立派です。

 

 

3Dプリンター雑感

P1020152P1020150P1020153

 

 

 

 

 

これまでオープンCAEを、ものづくりツールとして位置づけて取り組んできたOCSE^2ですが、本当のものづくりに、より近づく為のツールとして3Dプリンターがあり、最近ではホビー用であれば10万円以下の値段で個人でも入手可能になってきたので、拙個人事業主も導入いたしました。

上の写真は、導入してから約2週間かけて、あれこれ試作した結果ですが、使ってみて判ったのは、まだまだパソコンに繋げばすぐに使えるという代物ではないということ。苦労譚やらTipsがたくさんありそうなので、少しずつアップしていこうと思っています。

ちなみに、導入したマシンは、da Vinci 1.0で、すでに1年以上前にリリースされた製品。そこそこにまとまったレビュー記事もいくつかあって(その1その2)全体的な感触を得るには、そちらの記事を見てもらった方が良いと思うし、使い方ノウハウ的なところも、個人ブログでいくつか先人様の記事(その1その2)があるので、ここでは、こういった情報からは得られなかった情報とか、OCSE^2の本業であるオープンCAEに関連して、3Dデータ作りという視点からの情報発信としていく予定です。

 

パソコンに繋げてすぐに使える代物?

プリンタ本体が入荷したのは3月。上に記した参考記事を読む限りだと、簡単に使えそうな印象でしたが、パラパラとマニュアルを眺めたり、メーカーのHPのサポートページにあったチュートリアルビデオを見ていると、パソコンに繋げてすぐに使える代物ではなさそうな感触もあったので、実際に、セットアップに着手したのが、まとまった時間のとれそうな5月の連休でした。

ただそうなると、この連休の間はメーカーの電話サポートもお休み中で、トラブルがあっても自力解決するしかなく、そのトラブルの原因が、通常では問題の生じないファームウェアのインストールと、(出荷時に調整済であったはずの)キャリブレーションが必要であった、という事だったので、自分の場合は運が悪かったとしか言いようが無かったかもしれません。

 

ファームウェアのインストールの問題

とりあえず、付属ソフトをインストールして、プリンタをセットアップして、かねてから用意してあった3Dデータ(冒頭、中央写真のOCSE^2のロゴマーク)を印刷!・・・までは、比較的順調に行ったのですが、途中でエラーで止まってしまったんだったか、ノズルから樹脂が出ていないままの状態で無駄に空プリントしてるだとか・・・今となっては、どういう順序で何が起きていたのか記憶はあやふやですが、とにかくやたらエラーでピーピー鳴る事しきり。ノズルが詰まった事が原因かと、何度もクリーニングしたりの見当外れの対策でまるっと一日。

自前のデータをプリントするんでなく、パソコンと接続しないで、プリンタ本体に用意されているデモデータであれば、問題なくプリントは出来そう、という感触を得て、そういえば、ソフトをインストールした時に、何かメッセージが出ていたような・・・に思い当たった。

インストールをやり直したところ、ファームウェアをインストールした時点で、ウィルス対策ソフトがウィルスと認識して、ファームウェアの一部分が除去されてしまっていた事がわかった。ウィルス対策ソフトを一時的に無効にしてインストールをやり直して、ようやく解決。以後、エラーは出なくなった。

なお、後日談があって、5月の中頃に、ファームウェアのアップデート版がリリースされたようで、自動アップデートでインストールしようとするものの、今度は、ウィルス対策ソフトを一時的に無効にしても駄目。この時点ではサポートに連絡できたので、問い合わせてみたものの、有効な解決策は得られず。まぁ、アップデートしなくても、特に困る事は無さそうだから・・・と放置。この記事を書き出した本日になって、念の為にと、もう一度やり直したら、今度はすんなりとアップデート完了。この間、Windows本体とウィルス対策ソフトの更新があったので、何が原因だったのか、まぁ、良くわからんですわ。Windowsの世界だからね。

 

キャリブレーションの問題

ファームウェアの問題が解決して、ようやく、そこそこにプリント出来るようになったものの、どうにも形状が崩れる。プリント品質の問題なのか、ラフトとかサポートとかのオプション(最初は何の事だかさっぱりわかんなかった)もあって、色々試してみたものの、大差なし。いくらホビー用だからって、それはない筈・・・って事で、たどりついたのがキャリブレーション。マニュアルには工場出荷時に調整済なので・・・とあったが、念の為にこれをやってみると、全く範囲外のエラー!そもそも台座の調整ネジが完全に緩んでいたので、さもありなんであった。

まぁ、これを調整してエラーのない状態に持っていくしかなかったんだが、この調整にかなり手間がかかりました(2日目のメイン作業)。3つのネジの位置で、台座の高さと水平を出すようにするんだが、ネジをどちらに回すと高くなる/低くなる、測定点の数値とネジ位置の関係とか、一応マニュアルには書いてあるんだが、なかなか実感できない。まぁ、とりあえずネジを動かしてみて、結果を見てからフィードバックしようというやり方になってしまうんだが、何せ、プリンタヘッドや台座を暖めた状態でキャリブレーションする必要があるので、1度測定するのに10分くらいかかる。その結果を見て、すぐに再調整すれば、次の測定は比較的短く済むのだが、少し放っとくと冷めてしまうので、といった次第。

P1020114

上の写真は、上述のセットアップが終わって、2つ目の作品(iPhoneのケース)を作成中(というか、作成完了時)の状態です。本記事の冒頭に掲載したオレンジ色の前のヴァージョンで、最初は収縮率など現物合わせするしかないので、あれこれ試作したのと、樹脂フィラメントも付属の白色しかなかったので、それを使って作成していた時のものです。まぁ、これで軌道に乗ったか・・・と思われた。

3Dデータの問題?!

次なる問題は、上にも記した後日(5月中旬)の事でした。プリンタソフト(STLデータから、3Dプリンタ用のスライスデータに変換するソフト)のアップデートがあって、これを実施したら、変換がおかしくなってしまったのです!上の写真のノートパソコンに表示されている、青い形状がスライスデータなんですが、旧ヴァージョンでは問題なく元データを再現してくれていたのが、新ヴァージョンだと、どうにも再現してくれなかったのです。

範囲を選択_001

  • 3Dデータ(↑)FreeCADで作成しました。

2015-05-21_1829

  • 3Dプリンタ用スライスデータ

これは、きっとソフトのヴァージョンアップに問題があるに違いない!再現できるので、サポートに連絡して、データを見てもらったところ・・・

STLファイルに不可視な欠損がある場合、スライス後に欠損が可視化し
スライス後の形状が変わる場合がございます。

弊社で使用しておりますデータ補正用のフリーソフトがございますので
お試しいただければと存じます。

http://www.3ds.co.jp/netfabb/

お手数をお掛けしますが、よろしくお願い申し上げます。

以上、どうぞよろしくお願い申し上げます。

という回答。ナヌ?で、ここでまた一つ勉強させてもらう事になりましたが、長くなるので、続きはまた後日。