我有一棵代表 3D 模型(场景图)的对象树。树节点具有不同的类型(实现为来自公共基类的派生类)。例如,有一个表示多边形的节点,或者一个对其子节点应用坐标变换(旋转、平移)的节点。这也是一个要求,第三方供应商应该能够实现新的节点类型,并通过插件添加它们(我使用 Qt 作为 GUI 框架)。因此,树中可能存在节点,其类型在编译时是未知的。
现在我想实现一个类,作为这个场景图的视图。对于每个树节点类型,视图必须采取适当的操作(绘制多边形、变换等)。我的想法是为每个节点类型实现视图类,并让顶级视图类根据节点类型委托给这些类。(第三方供应商将能够实现自己的视图委托类)
所以我的问题是:如何以高性能和可扩展的方式确定节点的类型?
到目前为止我的想法:
我可以为每个节点类添加一个类型标识符。这可能只是一个整数(出于性能原因,字符串不适合)。问题在于第三方供应商的类型标识符管理。如何确保不同的节点类型(例如不同的供应商)不使用相同的标识符?
我可以实现绘图代码,或者至少直接在节点中调用适当的绘图委托对象。但是我的节点对象最好不知道它们的视图对象。也不可能给每个节点对象一个专用的视图对象(我们正在谈论数万个节点)。
那么,你的想法是什么?是否有完全不同的方法来处理这个问题?请记住:该解决方案不应该需要哈希表查找或其他计算密集型算法,因为我需要实时绘制图形。
提前致谢, McNumber