3D CADで作ったデータをProcessingで表示する方法

Processing

みなさん,こんにちは
おかしょです.

自分が作ったロボットをアニメーションで表示するときに,Processingで機体を一から作るのは非常に大変です.

簡単な構造のロボットであればProcessingで作ることも可能ですが,細かい部品までこだわりたい場合はCADを使った方が簡単に作ることができます.

そこで,3D CADのデータをProcessingに取り込む方法を解説します.Processingにデータを取り込むことができれば,そのデータを使ってロボットをアニメーション化して動かすこともできるようになります.

この記事を読むと以下のようなことがわかる・できるようになります.

  • ProcessingでFusion 360の3D CADを表示する方法
  • Processingにオブジェクトファイルをインポートする方法

 

この記事を読む前に

この記事では3D CADデータをProcessingで表示するプログラムを紹介します.

そのプログラム中では3D CADデータをちゃんと表示できているのか確認するためにいろいろな角度から見ます.

そのために,以下の記事で解説しているcameraコマンドを使用します.
プログラムを使用するにはcameraコマンドについてしておく必要があるので,以下の記事を先に読んでおくことをおすすめします.

 

3D CADデータを用意する

先程も言いましたが,Processingで細かい部品まで作ってロボットを完成させるのは非常に大変です.と言うよりも,無理です.(ギヤやボルトまでProcessingで作ろうとするなんてどうかしています.)

ロボットの設計を行うには,それ専用の3D CADを使った方が効率が非常に良いです.

どんなCADソフトでも良いと思いますが,私はFusion 360を使用しています.

CADソフトを使ってロボットの設計ができたら,Processingで読み取れる形式としてデータを保存する必要があります.

Processingで読み取れる形式というのは「objファイル」と呼ばれるオブジェクトファイルです.その名の通り,物体のデータが保存されたファイルです.

Fusion 360でこのファイルを保存するには,左上の「ファイルのアイコン」をクリックします.

次に「エクスポート」をクリックすると,ウィンドウが表示されます.

そのウィンドウ内でファイルの種類を「objファイル」にします.

最後にファイルの保存先を指定して「保存」をクリックすれば完了です.

このとき,「保存先」はデスクトップなどのわかりやすいところに保存をしておいてください.後程,移動させます.

 

Processingのプログラム

データの準備ができたら,Processingに取り込むためのプログラムを書きます.

以下に,私が作成したプログラムを示します.

import processing.opengl.*;
PShape IP;
float cameraX, cameraY, cameraZ;

void setup() {
  background(0);  // 背景の色指定 白に指定
  size(displayWidth,displayHeight, OPENGL);  // windowのサイズを画面いっぱいにする
  translate(width/2, height/2, 0);  // 原点を画面の中心に
  cameraX = 250.0;
  cameraY = 250.0;
  cameraZ = 250.0;
  camera(cameraX, cameraY, cameraZ, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0);
  IP = loadShape("InvertedPendulum.obj");
  IP.scale(1.0);
}

void draw() {
  background(0);  // 背景の色指定 黒に指定
  if (keyPressed) {
    if (keyCode == LEFT) cameraX -= 10;
    if (keyCode == RIGHT) cameraX += 10;
    if (keyCode == UP) cameraY -= 10;
    if (keyCode == DOWN) cameraY += 10;
    if (keyCode == CONTROL) cameraZ -= 10;
    if (keyCode == SHIFT) cameraZ += 10;
  }
  camera(cameraX, cameraY, cameraZ, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0);
  stroke(50);
  for(int i=-500; i<=500;)
  {
    line(-500, i, 0, 500, i, 0);
    line(i, -500, 0, i, 500, 0);
    i += 20;
  }
  lights();
  pushMatrix();
  rotateX(PI/2);
  shape(IP);
  popMatrix();
}

まず,1行目ではProcessingで3次元表示するために必要なファイルをインポートしています.

2行目ではCADデータを表示するために使用するクラスを定義します.上記のプログラムではクラスの名前を「IP」としていますが,自由に変更してかまいません.私は倒立振子(Inverted Pendulum)なので,その頭文字をとって「IP」としました.

3行目の定義はCADの表示とは関係ないので,飛ばします.

setup関数内でCADの表示に関係があるのは,13行目と14行目です.

13行目では先程保存したobjファイルを読み込んでいます.
14行目では読み込んだobjファイルのスケールを設定しています.

スケールを調整することができるので,画面いっぱいに表示されてしまうときなどはスケールを小さくすることで画面に収めることができます.画面に収めるにはスケールだけではなく,カメラの視点を変更しても収めることができるので上記のプログラムでは実際のスケールと変わらない”scale(1.0)”としています.

次にdraw関数でCADデータの表示に関係があるのは,35行目から39行目までです.

35行目の”lights()”というコマンドを使うことで,オブジェクトの陰影を表現することができるようになります.

このコマンドは無くてもCADデータの表示はできますが,陰影がないのでのっぺりとした印象になってしまいます.

先に38行目について解説すると,”shape”というコマンドでCADデータの表示を行います.

ここで,表示されたオブジェクトが思った通りの向きで表示されれば良いのですが,されないこともあります.

そのようなときにオブジェクトを回転させるために37行目で回転をさせています.私の場合はX軸方向に90度回転させる必要がありました.上記のプログラムを使用するときは自分のオブジェクトに合わせて回転のコマンドを書き換えるようにしてください.

また,座標軸の回転はオブジェクトの向きを治すためだけなので,それ以外では回転をしないようにする必要があります.

オブジェクトの表示前後で座標系が変化しないように36行目と39行目の”pushMatrix”と”popMatrix”というコマンドを使用しています.

 

プログラムの使い方

さて,上記のプログラムの使い方について解説します.

上記のプログラムを使用するには,まず好きなところに保存をしてください.

保存をすると,保存をしたときに付けた名前のフォルダが作成されます.その中にプログラムのファイルも保存されていると思います.

ここで,作成されたフォルダの中に先程作ったCADデータが保存された「objファイル」を移動させてください.

プログラムと同じフォルダの中に「objファイル」がないと,プログラムを実行してもCADのデータがどこにあるのかわからずエラーが表示されてしまいます.

なので,上記のようにプログラムと同じフォルダの中に「objファイル」も保存するようにしてください.

このような処理をしてから上記のプログラムを実行してください.

上記のプログラムを実行することで,CADで作ったデータが表示されキーボードの十字キーとCTRLキー,SHIFTキーを使って視点を変更することができます.

その結果,以下のように表示されます.

キーボードを使って視点を機体に近づけると,機体の断面も見ることができます.

上のスクリーンショットにもあるように,CADで設計した歯車までしっかりと確認することが可能となります.

 

表示したCADデータに色を付ける方法

上記のようにすることでCADデータをProcessingに取り込み,表示することができたのですが,表示されたオブジェクトには色が付いていません.

どうせなら色も付けたいと思ったのですが,Fusion 360を使用してCADデータを作成した場合,色を付けることはできないようです.

色を付けるには「objファイル」とは別に「mtlファイル」というものが必要なのですが,Fusion 360ではその「mtlファイル」の出力ができません.

そのため,色情報のないオブジェクトが表示されてしまいます.

私はFusion 360でしか機体の設計はしていなかったので,色を付けることは諦めました.いつか,Fusion 360がmtlファイルを出力できるようになることを祈っています.

 

まとめ

この記事ではFusion 360で作成したCADデータをProcessingに取り込み表示する方法を解説しました.

使用しているCADソフトがFusion 360でなくても,「objファイル」のエクスポートができれば同じようにできるので,参考にしてください.

 

続けて読む

この記事で解説した3D CADの表示方法を使用して,以下の記事では二輪型倒立振子のアニメーションを作成しています.

結構頑張って作った自信作なので見ていただけると嬉しいです.

Twitterでは記事の更新情報や活動の進捗などをつぶやいているので気が向いたらフォローしてください.

それでは最後まで読んでいただきありがとうございました.

コメント

タイトルとURLをコピーしました