如图所示:我才用代码读取 某一个参数cell 的 属性(参数),发现可以读取 Genneral、Geometry、Raw Data、等板块的信息,但是 Variables 板块的信息 没有读取到, 请问大神 是什么原因?
具体代码如下:
bool doubleClickCallbackFunc2(DisplayPathCP path) { WString filename; ElementRefP eP = path->GetHeadElem(); DgnModelRefP currFileP = mdlDisplayPath_getPathRoot(path); MSElementDescrP elDescr; mdlElmdscr_getByElemRef(&elDescr, eP, currFileP, FALSE, NULL); EditElementHandle eeh(elDescr, FALSE, TRUE , 0); FindInstancesScopePtr scope = FindInstancesScope::CreateScope(eeh, FindInstancesScopeOption(DgnECHostType::All)); ECQueryPtr query = ECQuery::CreateQuery(ECQUERY_PROCESS_SearchAllClasses); DgnECInstanceIterable iterable = Bentley::DgnPlatform::DgnECManager::GetManager().FindInstances(*scope, *query); DgnECInstancePtr instance = *((iterable.begin())); ECN::ECClassCR instanceClass = instance->GetClass(); ECPropertyIterable properties = instanceClass.GetProperties(); for (ECPropertyIterable::const_iterator it0 = properties.begin(); it0 != properties.end(); ++it0) { ECValue v; ECPropertyCP pProp = (*it0); WString ddeea = pProp->GetTypeName(); WString ecpName = pProp->GetName(); WString ecpDesc = pProp->GetDescription(); WString ecpVVV = pProp->GetInvariantDescription(); WString ersV = pProp->GetDisplayLabel(); mdlDialog_dmsgsPrint(WPrintfString(L"名称:%s 类型:%s 内容:%s", ecpName, ddeea, ersV)); } filename.Sprintf(L"D:\\1.xml"); instance->WriteToXmlFile(filename.data(), true, true); instance->WriteChanges(); mdlDialog_dmsgsPrint(WPrintfString(L"名称:%s 内容:%s ", L"长度:", L"123" )); return true; }
这个帖子里边的方法您试过没有:https://communities.bentley.com/communities/other_communities/chinafirst/f/microstation-projectwise/143095/c-ce
测试过了,我编写的demo 就是根据 上面的代码 进行的修改,但是 还死活不能获取 图中 标红部分的 参数信息,也就是 我们设置的尺寸信息 或 与约束相关的信息,也就是 edit item 部分的变量 ,遍历不出来。
Bentley 二次开发小白一枚
测试过了,我编写的demo 就是根据 上面的代码 进行的修改,但仍旧是不能获取 如图所使部分的信息,也就是 我们设置的尺寸信息 或 与约束相关的信息,也就是 edit item 部分的变量 ,遍历不出来。
iterable是一个集合,您代码里边只是访问了这个集合的第一项,我给您看的帖子里边正确答案贴出来的代码里边包含多层循环。最外层迭代了iterable,第二层迭代等同于您上边代码中的循环。
老师好,我经过测试后 发现 外层指的是 我途中 1和2 两个 部分(也就是您说的“ iterable是一个集合 ”),但是 我只需要 1(project)的属性信息。 所以 我去掉了 那部分 循环。当然这个是我的理解 ,老师您看看是不是 我理解的有问题。
另外,辛苦老师 帮我 看一下 如何获取 project 这个标签下的 variables 的 信息。 多谢老师的指正!!!
理解有误,一个元素上可以有多个ECInstance,FindInstances就是获取了元素上所有ECInstace的集合。您需要迭代这个集合,而您上边的代码只是访问了第一个ECInstance。