1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Vuforia Studio 3D活用備忘録:3D内のプロパティ(メタデータ)値を利用 その1

Last updated at Posted at 2021-01-05

#はじめに

Vuforia Studioでは、3DCADで作成した3DをARとして表示できるが、さらに、3Dデータ内のプロパティ値(メタデータ)を扱う事ができる。プロパティ値を利用する例を備忘録としておく。

#前提

Vuforia Studio バージョン 8.5.13 以降。
この備忘録は、Vuforia Studioで、3DデータをAR表示させ、同時に2D画面上に2Dウィジェットを表示させ、さらにホームJSにJavaScriptコードを追加するARの作成経験がある人が対象。

#3Dデータについて

本備忘録では、3DCADのSolidWorxsの3Dデータを使った。Vuforia Studioは様々な3DCADデータに対応しているので、他の3DCADデータでも本例と同様の事が出来る。

#3D内のプロパティ(メタデータ)値を表示する例

###プロジェクトで3D内のプロパティ(メタデータ)を利用するには

Vuforia Studio 8.5.13 以降では、3Dデータをアップロードするときに、プロパティデータを抜き出すかどうかの指定ができるようになった。
まずは、新規ARプロジェクトをモバイルで作成する。そして、3Dキャンパスに、モデルウィジェットを配置し、リソースのアップロードにて、3Dデータファイルを選択指定する。
image.png
「エクスペリエンスのCADメタデータへのアクセスを許可」をチェックしてアップロードすると、アップロードした3Dのファイル名と同じ名前で、拡張子が .jsonのファイルが自動生成される。このテキストファイルに、プロパティデータが抜き出されている。

###パーツとアセンブリのデータを取り出す

まずは、簡単な例として、3Dデータに含まれるパーツとアセンブリの一覧を表示してみる。慣れるまでは、パーツ数がそれほど多くない3Dデータで試すのがよい。
以下の JavaScriptコードを、プロジェクトの「ホームJS」に追加する。

パーツとアセンブリデータを取得するJavaScript例
var modelName = 'model-1'; // ウィジェット名が異なる場合は変更
var selectName = 'select-1'; // ウィジェット名が異なる場合は変更

//--------------------------------------------------

//取り出したアセンブリやパーツデータを格納する変数(JSON形式)
var parts = [];
parts.push({'IndentName':' ','PartIDPath':' '});

// モデルウィジェット名を指定して、3Dデータのプロパティ(メタデータ)を扱う
PTC.Metadata.fromId(modelName).then( (metadata) => {
  // 「Part Name」に値があるデータを取り出す
  var whereFunc = function(idpath) {
    const name  = metadata.get(idpath, 'Part Name')
    return name && name.length>0;
  }
  var list1 = metadata.findCustom(whereFunc);
  // 「_selectedPaths」として保存されている IDパスリストを取り出す
  var list2 = list1['_selectedPaths'];
  for(var i in list2){
    var idpath = list2[i];
    // IDパスごとのアセンブリやパーツデータを取り出す
    var partdata = metadata.get(idpath);
    // その中の基本データである「システムプロパティ」カテゴリのデータを取り出す
    var partsysprop = partdata.getCategory('__PV_SystemProperties');
    // 名前から「.ASM」「.PRT」を除去して、アセンブリ階層の数値と合わせて表示用名を作成する
    var partname =  metadata.get(idpath, 'Part Name');
    //partname = partname.replaceAll('.prt','').replaceAll('.PRT','');
    //partname = partname.replaceAll('.asm','').replaceAll('.ASM','');
    partname = partname.split('.prt').join('').split('.PRT').join('');
    partname = partname.split('.asm').join('').split('.ASM').join('');
    var partdepth =  parseInt(metadata.get(idpath, 'Part Depth'));
    var indent = '';
    for(var j=0; j<partdepth; j++){
      indent = indent + '..'
    }
    // 作成した表示名を、「IndentName」の値として追加する
    partsysprop['IndentName'] = partdepth + indent + partname;
    parts.push(partsysprop);
  }
  // 2D選択ウィジェットに、取り出したアセンブリやパーツデータを設定する
  $scope.setWidgetProp(selectName, 'list', parts);
  $scope.setWidgetProp(selectName, 'value', ' ');
});

このコードは、上記の3Dのプロパティデータを取得したモデルウィジェットのIDが「model-1」であり、そのプロパティデータを取得して、IDが「select-1」の選択ウィジェット(2D)にパーツデータを渡す処理になっている。モデルウィジェットのIDが「model-1」でない場合には、IDを変更するか、上記の処理の先頭のウィジェット名指定の箇所を変更する。

    // 作成した表示名を、「IndentName」の値として追加する
    partsysprop['IndentName'] = partdepth + indent + partname;

尚、上記の処理では、単に3Dデータからのプロパティだけでなく、パーツやアセンブリの階層の深さと、深さに応じた長さの点文字とを名前の前に連結したデータをキーを「IndentName」として追加している。これをリスト表示に使う。

###パーツとアセンブリのデータをリストに表示

ARプロジェクトの2Dキャンパスに、選択ウィジェットを追加する。IDが「select-1」でない場合には、IDを変更するか、上記のJavaScriptコードの先頭のウィジェット名の指定を変更する。
image.png
選択ウィジェットの表示フィールドに「IndentName」を入力する。ラベルは任意だが、仮に「PARTS」としておく。
上図は、選択ウィジェットを、上部パネルのグリッドレイアウトに配置した例で、グリッドレイアウトの列サイズに、「240px」を指定してある。
プレビューを実行して、PARTSの右の「▼」を選択すると、パーツとアセンブリの一覧が表示された。出来た!
image.png

#おわりに

3DCADデータには、製造に必要なデータ、保守に必要なデータなどを、プロパティ値(メタデータ)として含める事も多い。そのデータをARでも利用すれば、製造、保守に簡単に活用できる。積極利用すべきだと思う。
本備忘録では、その1として、パーツとアセンブリのデータを取り出して、一覧表示する例を試した。

#注意

3DCADデータのアセンブリやパーツ名(構造名)に日本語を使っている場合、jsonファイルでは日本語部分が文字化けするようなので注意。

#参考

Vuforia Studio 3D活用備忘録:3D内のプロパティ(メタデータ)値を利用 その2 一覧表示をフィルタする

Vuforia Studio 3D活用備忘録:3D内のプロパティ(メタデータ)値を利用 その3 色などを変更する

Vuforia Studio 3D活用備忘録:3D内のプロパティ(メタデータ)値を利用 その4 カスタムプロパティ一覧を表示する

Vuforia Studio 3D活用備忘録:3D内のプロパティ(メタデータ)値を利用 その5 3D ARをタップしてパーツを選択する

エクスペリエンスへの CAD メタデータの組み込み @ Vuforia Studioヘルプ

Incorporate CAD Metadata Into an Experience ( version 8.5.13 and later) @ ptc community

Vuforia Studio - introduction to MetaData Video @ ptc community

・[Vuforia Studio で作成できるAR例~タブレットAR例、3D形状の特徴で実物にARを重畳(モデルターゲット)、2D画面上の表示や操作を組合せ]
(https://players.brightcove.net/1532789042001/HknUe20R_default/index.html?directedMigration=true&videoId=6120145841001)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?