3Dビューア

クラスE3DViewerは、ポイントクラウド、ZMap、メッシュのインタラクティブ3Dビューアです。

複数のソースディスプレイ、カラーランプ、3Dポイント選択、およびテキストラベル表示の機能を持っています。
WindowsおよびLinuxとも互換性があり、Win32、MFC、およびQTフレームワークと統合することができます。

3Dビューアの作成:

3Dビューアの一般的なコンストラクタ:
E3DViewer(EUIAPI uiApi, int orgX, int orgY, int width, int height, int parent)
使用方法については、OSとUI APIに依存します。

Windowsのみ

3Dビューアスタンドアローンウィンドウの作成方法:
E3DViewer(EUIAP::EUIAPI_Win32, orgX, orgY, width, height)を使用
MFCアプリケーション内で別のウィンドウの一部としての3Dビューアの作成方法:
E3DViewer(EUIAP::EUIAPI_Win32, orgX, orgY, width, height, handle to the parent window)を使用
MsVc 3DViewerのサンプルをご覧ください。

WindowsとLinux

Qtアプリケーション内での3Dビューアーの作成方法:
E3DViewer(EUIAP::EUIAPI_Qt, orgX, orgY, width, height)を使用
QOpenGLWidgetオブジェクト内のクラスをインスタンス化する必要があります。
3DViewer Qtのサンプルをご覧ください。

レンダーソースの管理

レンダーソースとは、表示された存在のことを指します。EPointCloudEZMap、またはEMeshである場合があります。3Dビューアで同時に1つまたは複数のレンダーソースを表示させることができます。

3Dビューアにてポイントクラウドをグレースケールと欠陥カラーのメッシュで表示

レンダーソースのリストを管理する場合は、以下のメソッドを使用します:
AddRenderSourceで現在のリストに別のレンダーソースを追加します。レンダーソースはさらなるリファレンスのための名前を持っています。
SetRenderSourceでレンダーソースのコンテンツを変更します。
RemoveRenderSourceで現在のリストからレンダーソースを削除します。
レンダーソースAPIは、複数の表示属性を暴露します:
可視性(ShowRenderSource/HideRenderSourceで制御)
カラーモード(SetRenderSourceColorMode):一定カラー、カラーランプ、またはポイントクラウドカラー属性の中から選択します。
不透明度(SetRenderSourceOpacity
ポイントサイズ(SetRenderSourcePointSize):ポイントクラウドとZMapにのみ適用されます。
ワイヤーフレーム(SetRenderSourceWireFrame):メッシュのみに適用されます。

        

一定カラー、カラーランプ、またはカラー属性
で表示されているポイントクラウド(Zividのデータ流儀)

ワイヤーフレームと透過度を持つメッシュとカラーランプを持つポイントクラウドとの組み合わせ

カラーランプを使用

レンダーソースのカラーモードがESourceColorMode_Rampの場合、各ポイントのカラーはその位置またはポイントの属性から計算されます。
SetColorRampModeを使用してカラーランプを選択します:
EColorRampMode_HueFromX/Y/ZはX/Y/Zポイント座標それぞれからカラーを計算します(EColorRampMode_HueFromZはデフォルトカラーランプモード)。
EColorRampMode_RGBCubeはX,Y,Zポイント座標を混ぜることでカラーを計算します。
EColorRampMode_HueFromIntensityはポイントの輝度属性からカラーを計算します。
EColorRampMode_HueFromConfidenceはポイントの信頼度属性からカラーを計算します。
EColorRampMode_HueFromDistanceはポイントの距離属性からカラーを計算します。

   

X/Y/ZおよびRGBキューブからのカラーランプモード色相

カラーランプが定義されている場合、ウィンドウの右側にレジェンドを表示させることができます(デフォルト位置)。カラーランプレジェンドの要素をコントロールする場合は、Show/HideColorRampLegendSetColorRampGraduationColor、およびSetColorRampLocationを使用します。
メソッドSetEnableSmartColorRampで「スマートカラーランプ」が有効にされている場合、アウトライヤーフィルタリング処理が適用されてノイズが取り除かれ、オブジェクトの主要部分のカラーが広がります。アウトライヤーはそれから一定の赤色または青色で表示されます。

アウトライヤー削除処理付きのカラーランプEColorRampMode_HueFromZ:
- 8.3から18.8に含まれるZ座標の極値を赤色で描画
- ポイントの98%のZ座標は-6.7から8.3の間になります。

インタラクティブコントロール

Windowsでは、インタラクティブコントロールがクラスE3DViewerで構築されています。

以下のインタラクションが可能になります:

インタラクション

コントロール

ビューの回転

左クリック+マウス操作

ビューの翻訳

右クリック+マウス操作

ビューの距離を変更

マウスホイール

ビューのリセット

r

正/負のX軸に沿ったビュー

x / シフト+x

正/負のY軸に沿ったビュー

y / シフト+y

正/負のZ軸に沿ったビュー

z / シフト+z

軸の表示/非表示

a

ワイヤーフレームモードの有効/無効

w

ポイントサイズの増減

プラス記号(+) / マイナス記号(-

以下のメソッドを使用してカスタムビューコントロールを実行します:
LockRotationInitialPositionUpdateRotationPositionLockRotationFinalPositionは連続するクリックードラッグーリリースに対応しており、回転によりビューポイントを変更します。
LockTranslationInitialPositionUpdateTranslationPositionLockTranslationFinalPositionは連続するクリックードラッグーリリースに対応しており、トランスレーションによりビューポイントを変更します。
UpdateViewDistanceはビュー距離を変更します。通常マウスホイールでコントロールされます。
ResetViewはデフォルトビューポイントを復旧します。

本ビューコントロールAPIのユースケースについてはQt 3DViewerサンプルを参照してください。

以下のメソッドを用いて直接ビューポジションを設定することも可能です:
SetViewTarget(デフォルト、オブジェクトの中心)
SetViewAngleでビューの向きを変更
SetViewDistanceでビューターゲットまでの距離を選択

ビューパラメータ

3Dビューをカスタマイズして:

SetFieldOfViewを用いて視野を変更することができます。
SetProjectionTypeを用いて透視図と正射影図を切り替えます。
SetRenderAxisを用いてX、Y、Zの軸表示を有効または無効にします。
SetAxisOriginを用いてワールド原点とオブジェクト中心の間で軸の原点を切り替えます。
SetRenderGridを用いてグリッドの表示を有効または無効にします。
SetAutoRotateを用いて自動回転アニメーションを有効にします。
SetRenderDecimationLevelを用いて小数点レベル(小数点をいくらか省いてレンダリング速度を高める)を使用します。

   

軸/ワールド中心軸/境界ボックス軸/グリッド付軸なし

3Dポイントを選ぶ

ポイントの選択とは、E3DViewerウィンドウ内で与えられた座標に最も近いポイントを検知することを意味します。それから検知された3Dポイントを属性と共にテキストラベルとして表示することができます。

3Dビューで選択されたポイントの表示された座標と属性

選択されたポイントを選択するのに使用された距離しきい値はSetPickingDistanceThresholdで定義されています。選択されたポジションに対するポイントクラウドの距離がこのしきい値よりも大きい場合はポイントは選択されません。
Win32インターフェースフレームワークでは、選択のビルトインコントロールはctrl + ヒダリクリックになります。次のメソッドでも選択をコントロールすることができます:Pick3DPointGetLastPickedPoint、およびResetPicking
選択ラベルの表示を設定するには、SetPickingDisplaySetPickingLabelSizeSetPickingLabelColor、およびSetPickingLabelFixedを使用します。

テキストラベルと3Dオブジェクト

カスタムテキストラベルと3Dオブジェクトを3Dビューアの現在のビューに追加することができます。

左上の画面ラベルと3Dアンカー付テキストラベル

テキストラベルの表示をコントロールするには:
AddTextLabelを使用して3Dアンカー付き/なしでテキストラベルを追加します。AddTextLabelはさらなるリファレンスとして使用されるIDを返します。
EditTextLabelはラベルのポジション、カラー、サイズ、またはテキストを変更します。
GetTextLabelを使用してラベルの属性を取得します。
RemoveTextLabelを使用してラベルを削除します。
ClearTextLabelsを使用してすべてのラベルを削除します。
クラスE3DViewerはポイントクラウド、ZMap、またはメッシュ上にE3DObjectを表示することもできます。Easy3DObjectEasy3DMatchを使用してE3DObjectsを作成します。
メソッドRegister3DObjectsRemoveCurrent3DObjectsを使用して表示したいE3DObjectsのリストを管理します。

E3DObjectにはいくつかの機能が含まれています(中心点、境界ボックス、ベース平面...)メソッドShow/HideFeatureFor3DObjectおよびShow/HideFeatureForAll3DObjectsを使用して、表示された機能を選択します。

E3DObjectsの表示例として3DObjectExtraction MSCVサンプルを参照してください。

境界ボックスおよびトップポジションを表示したポイントクラウドで描画された3Dオブジェクト