3D モデル (シーン グラフ) を表すオブジェクトのツリーがあります。ツリー ノードはさまざまなタイプです (共通の基本クラスからの派生クラスとして実装されます)。たとえば、ポリゴンを表すノードや、その子ノードに座標変換 (回転、平行移動) を適用するノードがあります。また、サードパーティ ベンダーが新しいノード タイプを実装し、それらをプラグイン (GUI フレームワークとして Qt を使用) で追加できる必要があることも要件です。したがって、コンパイル時にタイプが不明なノードがツリーに存在する可能性があります。
ここで、このシーン グラフのビューとして機能するクラスを実装したいと思います。すべてのツリー ノード タイプに対して、ビューは適切なアクション (ポリゴンの描画、変換など) を実行する必要があります。私の考えは、すべてのノード タイプにビュー クラスを実装し、ノード タイプに応じてトップレベル ビュー クラスをこれらのクラスに委譲させることです。(サード パーティ ベンダーは、独自のビュー デリゲート クラスを実装できるようになります)
だから私の質問は、ノードのタイプをパフォーマンスと拡張可能な方法で決定するにはどうすればよいですか?
これまでの私の考え:
すべてのノード クラスにタイプ識別子を追加できます。これは単に整数である可能性があります (パフォーマンス上の理由から、文字列は適していません)。問題は、サード パーティ ベンダーの型識別子の管理です。同じ識別子が異なるノード タイプ (異なるベンダーなど) に使用されていないことを確認するにはどうすればよいですか?
描画コードを実装するか、少なくとも適切な描画デリゲート オブジェクトをノード内で直接呼び出すことができます。しかし、私のノードオブジェクトは、ビューオブジェクトについて何も知らないことが望ましいです。また、すべてのノード オブジェクトに専用のビュー オブジェクトを与えることはできません (数万のノードについて話している)。
それで、あなたのアイデアは何ですか?これを処理するための完全に異なる方法はおそらくありますか?覚えておいてください: リアルタイムでグラフを描画する必要があるため、このソリューションではハッシュ テーブル ルックアップやその他の計算集約型アルゴリズムは必要ありません。
前もってありがとう、McNumber