我尝试使用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 &)
不需要调用这个未公开的函数也是能拿到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)。