【问题标题】:3ds max nested layers hierarchy3ds max 嵌套层层次结构
【发布时间】:2015-02-04 15:59:26
【问题描述】:

如何使用 max 2015 sdk 枚举嵌套层的层次结构。 示例:我有 3 个图层,简单命名为“1”、“2”和“3”。 1和2在根,3属于1。

如何使用 sdk 找出这些信息。

我可以找到一个节点所属的层:

layer = (ILayer*)(node->GetReference(NODE_LAYER_REF));

在 ILayer 界面中,我找不到任何关于它的父级的信息。 我可以获得图层的一些“扩展”(?)属性:

props = (ILayerProperties*)layer->GetInterface(LAYERPROPERTIES_INTERFACE);

也没有任何与我的问题相关的信息。

我可以访问图层管理器​​:

            manager = (ILayerManager*) GetCOREInterface()->GetScenePointer()->GetReference(10);// don't remember where did I dig out the magic number 10

在这里我可以按索引枚举所有层,但不能按层次结构。

任何帮助将不胜感激。谢谢。

米兰

【问题讨论】:

  • 看完第一个答案后,我意识到我的错误。在我的插件中,我需要保持向后兼容性直到 2011 3ds。我的项目(在 VS 中)对每个 3ds 版本都有多个配置,并且每个 3ds sdk 都有设置路径。当我使用视觉辅助“转到实施”时,它会更正 2015 sdk 中的文件,对于第一个文件(我知道,因为我检查过),但包括 ILayerProperties 在内的下一个文件转到 2011 sdk(?),包括智能感知自动完成。这就是我看不到该功能的原因。

标签: 3dsmax


【解决方案1】:

文档是这样说的:

按索引迭代层:IFPLayerManager 类也是一个 在 3ds Max 中管理场景图层的接口类。这节课 然而是一个功能发布的接口,因此是完全不同的 从前面讨论的层管理器。这个类是C++ MAXScript LayerManager 类的接口。这个类有一个 通过整数索引返回层的有用方法。这样你就可以 在不知道图层名称的情况下迭代场景图层。到 获取指向此对象的指针,您调用 GetCOREInterface() 函数。

IFPLayerManager* layer_manager = static_cast< IFPLayerManager*> GetCOREInterface( LAYERMANAGER_INTERFACE);

LAYERMANAGER_INTERFACE 标识 IFPLayerManager 接口。使用结果指针,您可以按整数索引获取场景图层。

ILayerProperties* hLayer = layer_manager->getLayer(i);

这个 IFPLayerManager::getLayer() 方法返回一个 ILayerProperties 比 ILayer 功能少得多的指针。

要获得 ILayer 指针,您可以获得指向其上任何对象的指针 层,并从中提取ILayer指针。

ILayerProperties 类具有子\父层的功能:

virtual ILayerProperties* getChildLayerProperties  ( int  n ) const 

纯虚拟

备注 返回指向该层的第 N 个子层属性的指针。 参数: 整数n
子图层属性的索引。 退货 返回指向第 N 个子层属性的指针。

virtual ILayerProperties* getParentLayerProperties  (  ) const 
 pure virtual  

备注 返回父层。这可能是 NULL 表示层 位于顶层。

这意味着您可以按索引遍历所有层,然后检查它是否是父层,如果是则遍历其所有子层,然后继续下一个。

这些函数记录在 3dsmax SDK 文档的“ILayerProperties 类参考”中。

【讨论】:

    猜你喜欢
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多