APS Viewer:選択ロード

APS Viewer v7.89 で指定した空間(領域)、あるいは、メタデータ(プロパティ)条件に基づいて選択的にモデルをロード・表示する「選択ロード」の機能が追加されています。指定する条件は Viewer でモデル表示時に使用することになるため、loadDocomentNode メソッド、または、loadModel メソッド呼び出し時に、オプションとして フィルタ(filter)を JSON 形式で指定することになります。

3Dモデルのビルの表示、下部に操作アイコンが配置された状態

空間フィルタ(spatial_query)

指定した空間(領域)のモデルのみをロード、表示します。空間は、以前ご紹介したことがある Forge Viewer:レベル別の表示 の Viewer3D.setCutPlanes メソッドとは異なり、three.js の THREE.Vector4 ではなく、軸平行境界ボックス(AABB:Axis-Aligned Bounding Box)のかたちで指定します。

_viewer.loadDocumentNode(viewerDocument, viewables[0], {
    filter: {  
        spatial_query: {
            ‘$encloses’: [{ ‘aabox’: [-130, -105, 0, 130, 105, 20] }]
        }
    }
}).then(i => {
    // something
});
3Dモデルのビジュアライゼーションと操作用のコントロールパネルが表示されている画像

メタデータ フィルタ(property_query)

メタデータ・フィルタは、Model Properties クエリ言語に利用して指定します。プロパティには、それぞれ対応するハッシュを用いる必要があるので、まず、フィルタで指定するプロパティのハッシュを取得する必要があります。

ハッシュの取得には、モデルを Viewer に開いた状態で、デベロッパー ツールのコンソールから getPropertyHashes メソッドを呼び出してハッシュテーブルを得ることで確認することが出来ます。この際、表示中の Viewer インスタンスアクセスには、コンソールの利用と Viewer インスタンスへのアクセス でご案内した NOP_VIEWER を利用することが可能です。

例えば、「文字」カテゴリの「仕様 名称」プロパティをフィルタで使用する場合には、次のように指定します。

props = await NOP_VIEWER.model.getPropertyHashes();

props.find(record => record[1] === ‘仕様 名称’ && record[2] === ‘文字’);
デベロッパーツールのコンソールに表示されたプロパティハッシュの取得結果

もし、コンソール上で次のようなエラーが表示されるようなら、Viewer カンバスを定義する HTML の CDN 参照の URL から「.min」を削除して、ページを再ロード後に再度試してみてください。 

ブラウザの開発者ツールのコンソールに表示されたエラーメッセージ、 "function 'userFunction' was not found."
<link type="text/css" rel="stylesheet" href="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/style.min.css">
<script type="text/javascript" src="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/viewer3D.min.js"></script>

上記モデルの場合、「Text」カテゴリの「仕様 名称」プロパティのハッシュが ‘p6e5e93bd‘ になっていることがわかります。このハッシュを用いたメタデータ フィルタで、「仕様 名称」プロパティの値が「ELV」の要素をフィルタすると、エレベータ扉のみがロード、表示されます。

_viewer.loadDocumentNode(viewerDocument, viewables[0], {
    filter: {                    
        property_query: [
            {
                '$like': ['s.props.p6e5e93bd', "'ELV'"]
            }
        ]
    }
}).then(i => {
    // something
});
3Dモデルの表示操作を行うためのツールバーが表示されている。ツールバーには回転、パン、ズームイン・ズームアウト、スナップ、モデルの操作、設定アイコンが含まれている。背景は淡い色合いで、モデルの一部が表示されている。

メタデータ フィルタは、配列になっているので、複数のフィルタを指定することも出来るようになっています。「仕様 名称」プロパティの値に「壁」の文字が含まれるフィルタ(%壁%)を追加で指定すると、次のような結果を得ることが出来ます。

_viewer.loadDocumentNode(viewerDocument, viewables[0], {
    filter: {                    
        property_query: [
            {
                ‘$like’: [‘s.props.p6e5e93bd‘, “‘%壁%’”]
            },
            {
                ‘$like’: [‘s.props.p6e5e93bd’, “‘ELV’”]
            }
        ]
    }
}).then(i => {
    // something
});
3Dモデルの建物構造を示す透過的なビジュアル。複数の階層と部屋が表示され、下部には操作アイコンが配置されている。
複合フィルタ

空間フィルタとメタデータ フィルタを組み合わせることも出来ます。



_viewer.loadDocumentNode(viewerDocument, viewables[0], {
    filter: {                    
        property_query: [
            {
                ‘$like’: [‘s.props.p6e5e93bd’, “‘%壁%’”]
            },
            {
                ‘$like’: [‘s.props.p6e5e93bd’, “‘ELV’”]
            }
        ],
        spatial_query: {
            ‘$encloses’: [{ ‘aabox’: [-130, -105, 0, 130, 105, 20] }]
        }
    }
}).then(i => {
    // something
});
3Dモデルの表示画面、軸平行境界ボックスの形で指定された空間フィルタ機能を表示しています。

By Toshiaki Isezaki


Comments

Leave a Reply

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading