[MSCE C++]如何获取参数化实体下的子元素?

我尝试使用SmartFeature::SmartFeatureElement::ExtractTree(tree, eh);获取Cylinder #1,但并未成功。

我希望遍历Parametric Solid的所有子元素,请问我该如何处理?

感谢

  • 获取Cylinder

    bvector <ElementHandle> dependents;

    Bentley::DgnPlatform::SmartFeature::SmartFeatureElement::ExtractDependents(dependents,newEeh);
     for each (ElementHandle var in dependents)

    {

    此处判断每个var是否是SolidPrimitive

    }

    至于修改其它非几何元素的SmartFeatureNode的值,目前公开的API无法操作

    ---------------------------------------------------------------

    中国市政工程西北设计研究院有限公司武汉分院


  • 补充一点:个人猜测SmartFeatureNode是个链表结构,叶节点是具体的几何元素,叶节点实际是隐藏起来了,中间的节点类似与一种container容器(非几何元素),然后EC属性的变化控制最终形成几何元素,整个parametric solid相当于一个根节点。

    ---------------------------------------------------------------

    中国市政工程西北设计研究院有限公司武汉分院


  • 我获取到microstation ce update12 sdk后

    下载地址:select.bentley.com/.../LTEyMzE5NjgyOTdfNC4wLjIuMA

    在Bentley::DgnPlatform::SmartFeature::SmartFeatureElement下只找到ExtractTree,没有找到ExtractDependents,是我找的地方不对吗?

  • 百度dependency walker,通过depends.exe打开ms目录下的smartfeature.dll.可查看到该dll的导出函数。

    int Bentley::DgnPlatform::SmartFeature::SmartFeatureElement::ExtractDependents(class Bentley::Bstdcxx::bvector<struct Bentley::DgnPlatform::ElementHandle,class Bentley::BentleyAllocator<struct Bentley::DgnPlatform::ElementHandle> > &,struct Bentley::DgnPlatform::ElementHandle const &)
    熟悉mdl c++ api的话,可以把对应声明修改添加到头文件中就可以使用了

    ---------------------------------------------------------------

    中国市政工程西北设计研究院有限公司武汉分院


  • 不需要调用这个未公开的函数也是能拿到Parametric Solid下的子元素的。

    测试参数化实体如下:

    测试代码如下:

    SmartFeatureNodePtr pFeatureNode;
    SmartFeatureElement::ExtractTree(pFeatureNode, eh);
    T_SmartFeatureVector allChildren;
    pFeatureNode->GetAllChildrenRecursively(allChildren);
    for (SmartFeatureNodePtr pNode : allChildren)
    {
        ISolidKernelEntityPtr myBody;
    	pNode->GetBody(myBody, eh, true, true, true, true);
    	EditElementHandle eeh;
    	SolidUtil::Convert::BodyToElement(eeh, *myBody, nullptr, *ACTIVEMODEL);
    	eeh.AddToModel();
    }

    可在原位生成一个SmartSolid体和一个底部的Shape元素(Profile)。