通过ORD的C++ API和.Net的API,调用corridor的GetXSCutPoints()方法。
在第一次执行代码时,方法GetXSCutPoints()返回的bvector<XSCutPoint>有值,但是再一次执行同样的代码时,返回的bvector<XSCutPoint>为空。
第一次执行后,卸载mdl,再重新加载mdl,执行代码,返回的bvector<XSCutPoint>仍然为空。
在第二次执行代码获取不到值得情况下,在ORD中选中corridor对象,随意更改其相关的属性值,如:更改所属的图层,再次执行代码,返回的bvector<XSCutPoint>又有值了,然而,随后再执行代码,又获取不到值
代码如下:
DgnModelP modelP = ISessionMgr::GetActiveDgnModelP(); csConnect = ConsensusConnection::Create(*dgnModel); csModel = ConsensusModel::Create(*dgnModel); GeometricModelPtr geomModel = csModel->GetActiveGeometricModel(); auto corridors = geomModel->GetCorridors(); if (corridors.IsValid()&&corridors->MoveNext()) { corridors->Reset(); while (corridors->MoveNext()) { CorridorPtr corri = corridors->GetCurrent(); bvector<XSCutPoint> points; corri->GetXSCutPoints(2, 40, 40, 2, points); } }
这个应该是ORD的缓存机制引起的,ORD为了效率,对于路廊的操作时会对数据缓存,所以在SDK使用corridor时要清除缓存,请试着调用 ConsensusItemCache 类里的SetCaching(false)函数
你好,感谢解答我的问题,但是我在SDK的include目录下,找不到含有 ConsensusItemCache 的声明
您好,赵工我们又仔细研究了一下您的这个问题。发现是我们的SDK C++头文件发布的时候的一个bug,少发布了一些数据。我给您在SDK UP5的基础上改进的头文件,如果您是UP5版本直接替换SDK 头文件的文件夹下名为“CIFGeometryModelSDK.h”的这个文件,如果不是UP5,请复制整个“struct XSCutPoint“的内容替换您的CIFGeometryModelSDK.h文件的相应位置。https://communities.bentley.com/cfs-file/__key/communityserver-discussions-components-files/343510/CIFGeometryModelSDK.h
这个回答是不是应该在我另一个问题:[ORD C++]XSCutPoint对象释放问题,里面。另外该问题我发了个英文版的帖子,老外回答说目前c++的SDK里未包含ConsensusItemCache的头文件,将在未来的SDK里发布出来。
帖子连接:https://communities.bentley.com/products/programming/civil_programming/f/civil_programming_forum/178794/ord-c-how-to-use-the-corridor-getxscutpoints-api
Answer Verified By: wanglin