我尝试使用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无法操作
---------------------------------------------------------------
中国市政工程西北设计研究院有限公司武汉分院
我获取到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 &)
不需要调用这个未公开的函数也是能拿到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)。
这个方法好,可以获取任意节点的结果
感谢老师,
当从ISolidKernelEntityPtr获取eeh,并AddToModel()后,会生成新的元素。
请问我该如何获取到Parametric Solid下的子元素的ID,如下图: