🐷

OCAF Documentファイルの可視化方法 [OpenCASCADE]

に公開

はじめに

こんにちは、kaiwareです。

OpenCASCADE(以下OCC) というC++のCADカーネルライブラリについての話です。

OCCにはOCAF(OpenCASCADE Application Framework) というモジュールがあります。
素のOCCに3D形状のBoolean演算やサイズ編集などの機能はありますが、それをアプリケーションとして組み立てるためにはOCAFを使うと便利です。

OCAFを使うことで以下のことが簡単(??)にできます:

  • 3D形状の作成・変更の履歴管理
  • ストレージへの保存(永続化)
  • Undo/Redo
  • Copy/Paste

これらの機能を使うには専用のDocumentクラスとApplicationクラスを用いる必要があります。

本記事では、このDocumentをファイルに保存したあとに可視化する方法を説明します。
これができると、OCAFを使っているときに遭遇するよくわからない挙動をデバッグできるようになるかもしれません。

環境

  • Windows11
  • OpenCASCADE 7.8.0

OpenCASCADEのインストール

今回はソースからビルドはせず、ビルド済みバイナリをインストールする。

ここから OpenCASCADE 7.8.0 をインストールする。
https://dev.opencascade.org/release/previous#node-87560

alt text

7.8.0を使う理由は特にないので、別のバージョンでも大丈夫とは思う。

またOCC本体のインストール先と3rd-partyライブラリの置き場の注意書きがあるので、この通りに配置する。

alt text

テスト用OCAF Documentファイルの作成

今回はフリーのCAD Viewerである CAD Assistant を使ってテスト用のDocumentファイルを作る。
ちなみにCAD AssistantはOCCと開発元が同じ。

ここからインストールする。
https://www.opencascade.com/products/cad-assistant/

alt text

インストールが完了すると、サンプルのCADデータ(STEPファイル)も配置されている。
ここではas1-oc-214.stpというファイルを使う。
(ファイルパス例: "C:/Program Files/CAD Assistant/resources/samples/as1-oc-214.stp)

CAD Assistantで開き、Saveボタンを押す。

alt text

適当な場所へ移動し、保存フォーマットを XBF に変更して保存する。
XBFがOCAF Documentのファイル形式の1つである。
alt text

テストハーネスの起動

OCCにはDRAW Test Harnessという簡単な動作テスト環境が用意されている。
参考:https://dev.opencascade.org/doc/overview/html/occt_user_guides__test_harness.html

インストールフォルダにDRAWEXE.exeという実行ファイルがあり、これが本体。
ただこれを直接起動すると環境変数がセットされていないので、同じ階層にあるdraw.batを起動する。

▼ 起動直後
起動直後

次のコマンドを入力する。(Plugin Load ALLの意味)

pload ALL

▼ 実行後:Drawウィンドウのメニューバーの種類が増えている
alt text

次のコマンドで先ほど保存したXBFファイルを開き、doc変数へ格納する。

Open D:/tmp_ocaf/as1-oc-214.xbf doc

次のコマンドでdoc変数を可視化する。

DFBrowse doc

▼ 実行後:browser_docというウィンドウが起動する
alt text

browser_docと書かれた箇所をダブルクリックすると、OCAF Document内のツリー構造が見れる。

alt text

中身を簡単に説明する。

  • 0:doc
    • Root Labelと呼ばれるツリーの根の情報を表している。
      • OCAFはLabelという概念を用いてツリー構造を構築する。(TDF_Labelクラスを参照。)
    • 下に書かれている黒文字はLabelが持つ属性情報を表している。(TDF_Attributeクラスを参照)
  • 0:1
    • Main Labelと呼ばれる様々な情報の親Label。
  • 0:1:1 Shapes
    • 形状データが格納されている。(TNaming_NamedShape)
    • また、特定のShapeへの参照リンクが張られていることもある。(Shape Instance Link)
  • 0:1:2 Colors
    • Document内で使われる色情報が一元管理されている。(XCAFDoc_Color)
  • 0:1:3以降は自分もよくわからないので省略

Shapes, Colors詳細

  • アセンブリ全体は4つのアセンブリと部品から構成されている
    • as1
      • rod
      • bracket
      • bracket
      • plate

以下plateを例にとる

alt text

  • Shape Instance Link という属性を持っている
    • これが実ShapeへのLink
      • Entry 0:1:1:9
    • plate 1 ラベル自体はShapeを持っていない

alt text

  • Entry 0:1:1:9 を見ると、Surface Color Link という属性を持っている
    • Entry 0:1:2:3
  • また、 TNaming_NamedShape という実Shapeを管理する属性を持っている

alt text

  • Entry 0:1:2:3 を見ると、実際の色情報(黄色?黄緑?)が格納されている

まとめ

OCCの概念難しすぎるだろ!

GitHubで編集を提案

Discussion