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

#はじめに

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

#前提

Vuforia Studio バージョン 8.5.13 以降。
この備忘録は、Vuforia Studioで、3DデータをAR表示させ、同時に2D画面上に2Dウィジェットを表示させ、さらにホームJSにJavaScriptコードを追加するARの作成経験がある人が対象。
また、以下の備忘録**その１**を試し済みの人が対象。
・[Vuforia Studio 3D活用備忘録：3D内のプロパティ(メタデータ)値を利用 その１](
https://qiita.com/tm181001/items/a70b1ec243d1ab559a5c)

#3Dデータについて

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

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

**その１**では、下図のようにパーツとアセンブリのデータを取得して、一覧表示を試した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297270/c827b84a-bad9-e99f-c534-b4cf8c090e4f.png)
今回は、**その１**に対して、一覧表示の内容を変更してみる。

###名前でフィルタする例

一覧表示された名前を見ると、「M_8」「M_14」などのネジ類が多い。「&#095;M&#095;」を含む名前を除外して、一覧表示にネジが含まれないようにしてみる。

```javaScript:
// モデルウィジェット名を指定して、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;
    return name && name.length>0 && name.search('_M_')<0;
  }
```
return の条件に、&& name.search('&#095;M&#095;')<0 を追加して保存し、プレビューする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297270/59251cbb-b4b2-d05b-db97-bca0cac8f6ac.png)
ネジは一覧表示されなくなった。出来た！

この備忘録では「&#095;M&#095;」でフィルタしたが、試してみる3Dデータに応じて、他の文字列でのフィルタを試してみるとよい。

###構造の深さでフィルタする例

ここまでの例では、構造の深さに関係なくすべてを展開表示している。そこで、構造の深さでフィルタしてみる。構造の深さのデータは、「Part Depth」の値を使えそう。

```javaScript:
// モデルウィジェット名を指定して、3Dデータのプロパティ（メタデータ）を扱う
PTC.Metadata.fromId(modelName).then( (metadata) => {
  // 「Part Name」に値があるデータを取り出す
  var whereFunc = function(idpath) {
    const name  = metadata.get(idpath, 'Part Name');
    const depth  = parseInt(metadata.get(idpath, 'Part Depth'));
    //return name && name.length>0;
    return name && name.length>0 && name.search('_M_')<0 && depth<=2;
  }
```
return の条件に、さらに && depth<=2 を追加して保存し、プレビューする。
構造の深さが１と２だけになった。出来た！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297270/4c656dce-f66e-1281-e200-31535fc836aa.png)


###下位構造があるサブアセンブリをフィルタして除外する例

構造を表示するにあたり、下位構造があるサブアセンブリを含めて表示していたが、それをフィルタして除外してみる。
下位構造があるかは、「Child Count」の値を使えそう。

```javaScript:
// モデルウィジェット名を指定して、3Dデータのプロパティ（メタデータ）を扱う
PTC.Metadata.fromId(modelName).then( (metadata) => {
  // 「Part Name」に値があるデータを取り出す
  var whereFunc = function(idpath) {
    const name  = metadata.get(idpath, 'Part Name');
    //const depth  = parseInt(metadata.get(idpath, 'Part Depth'));
    const count  = metadata.get(idpath, 'Child Count');
    //return name && name.length>0;
    //return name && name.length>0 && name.search('_M_')<0 && depth<=2;
    return name && name.length>0 && count && count==='0';
  }
```
return の条件として、&& name.search('&#095;M&#095;')<0 && depth<=2 は除外し、&& count && count==='0' を追加して保存し、プレビューする。
サブアセンブリが表示されなくなった。出来た！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297270/eb62f7ce-b729-83d3-2ca6-0da013c7b183.png)


#おわりに

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

#注意

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

#参考

・[Vuforia Studio 3D活用備忘録：3D内のプロパティ(メタデータ)値を利用 その１](
https://qiita.com/tm181001/items/a70b1ec243d1ab559a5c)

・[Vuforia Studio 3D活用備忘録：3D内のプロパティ(メタデータ)値を利用 その３　色などを変更する](https://qiita.com/tm181001/items/18cdeecba87088646d5d)

・[エクスペリエンスへの CAD メタデータの組み込み @ Vuforia Studioヘルプ](
http://support.ptc.com/help/vuforia/studio/ja/#page/Studio_Help_Center%2Fcad_metadata_api.html)

・[Incorporate CAD Metadata Into an Experience ( version 8.5.13 and later) @ ptc community](https://community.ptc.com/t5/Vuforia-Studio-and-Chalk-Tech/Incorporate-CAD-Metadata-Into-an-Experience-version-8-5-13-and/ta-p/693341)

・[Vuforia Studio - introduction to MetaData Video @ ptc community](https://community.ptc.com/t5/Vuforia-Studio/Vuforia-Studio-introduction-to-MetaData-Video/td-p/695630?posno=6&q=Metadata%20Vuforia&source=search)