如题,在PROSTRUCTURE的二次开发过程中,想要获取钢筋所属的梁板柱的信息,麻烦老师解答
配筋完成后,被配筋的元素信息保存在RebarAssembly中,下面的代码是在拾取一个钢筋元素之后,得到对应的RebarAssembly,然后是被配筋元素。这个元素可以是参考文件中的元素。这段代码是C++。Rebar SDK目前是C++的接口,没有C#版本。
ElementHandle pickedEh; if(RebarElement::IsRebarElement(pickedEh)) { RebarElementP rep = RebarElement::Fetch(eh); if (rep != nullptr) { RebarSetCP rebar_set = rep->GetRebarSet(modelRef); ElementId callerId = rebar_set != nullptr ? rebar_set->GetCallerId() : rep->GetCallerId(); ElementHandle eh(callerId, rep->GetModelRef()); RebarAssembly *assem = RebarAssembly::Fetch(eh); if(assem != nullptr) { ElementHandle whatyouwant(assem->GetSelectedElement(), assem->GetSelectedModel()); } } }
Answer Verified By: xiaolan zhou
多谢白工!
白工,麻烦看一下上面的错误,还有这个eh是在哪定义的吗?
我稍微修改了一下白工的代码就能编译过去了。您再试一下:
void getCallerId() { ElementHandle pickedEh(123L, ACTIVEMODEL); if (RebarElement::IsRebarElement(pickedEh)) { RebarElementP rep = RebarElement::Fetch(pickedEh); if (rep != nullptr) { RebarSetCP rebar_set = rep->GetRebarSet(ACTIVEMODEL); ElementId callerId = rebar_set != nullptr ? rebar_set->GetCallerId() : rep->GetCallerId(); ElementHandle eh(callerId, rep->GetModelRef()); RebarAssembly *assem = RebarAssembly::Fetch(eh); if (assem != nullptr) { ElementHandle whatyouwant(assem->GetSelectedElement(), assem->GetSelectedModel()); } } } }
我基于Rebar例子修改后的项目文件如下:
RebarSDK.7z
白工,我在执行这段代码的时候,发现 RebarAssembly *assem = RebarAssembly::Fetch(eh);获取到的assem始终是空的,请问是怎么回事?操作有什么要求吗?