把其他软件的模型导入OBD中,由于算法设计问题,一部分弧形梁及弧型墙等弧形结构无法直接生成,能否直接调用OBD现有API命令直接生成相应弧形构建?如果有,在哪里可以找到,如果没有,采用那些方式可以解决上述问题?
请先学习如下一步步教程,应该是C++的。
https://communities.bentley.com/communities/other_communities/chinafirst/w/chinawiki/38631/4-2-abd-sdk
其中有演示用代码如何创建直线的墙的,LinearForm,其实还有ArcForm就是用来创建弧线墙的。
谢谢你的回复,弧形墙已经解决,
主要弧形梁的转换,请问有什么解决思路?
门窗墙体都属于TF(TriForma)部分,而梁和柱则属于STF(Structural TriForma)部分。这是两个不同的SDK。我记得高版本的OBD SDK中才提供有STF部分。您需要到STF相关的API中去找。
符老师,关于STF的API中, STFLinearMemberListClass中的setpath函数猜测是与路径相关,但测试很多次,参数表达不清楚,运行错误,请问该怎么办,以此你们这是否与此部分相关的文档?
测试环境 OBD Update8,Com下的TFBrepList内存释放貌似有问题,就算强制垃圾回收,也可能导致OBD崩溃,c++下的free函数又未封装。
如果以下代码改为设置两点来放置梁对象的话,是不会崩溃的,所以,大概率要使用C++来实现。
STFLinearMemberList sTFLinearMemberList = new STFLinearMemberList(); sTFLinearMemberList.Init(""); STFLinearMember geo = sTFLinearMemberList.AsSTFLinearMember; Bentley.Interop.TFCom.TFCatalogList datagroup = new Bentley.Interop.TFCom.TFCatalogList(); datagroup.Init(); var temp = datagroup.AsTFCatalog.GetCatalogItemByNames("Steel Beam", "轻钢搁架"); geo.InitFromCatalogItem(temp.GetNode(0, "").AsTFCatalogItem, ""); geo.SetSectionName("HM400X300"); Bentley.Interop.MicroStationDGN.Application msUSTN = Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp; ModelReference molRef = msUSTN.ActiveModelReference; //id为圆弧实例的elementid var ele = molRef.GetElementByID(ref id); TFBrepListClass tFBrepListClass = new TFBrepListClass(); tFBrepListClass.InitFromElement(ele, molRef, ""); geo.SetPath(tFBrepListClass.GetNode(0, ""), ""); geo.CreateTFFormRecipeList(""); Bentley.Interop.MicroStationDGN.Element elm = geo.GetMSElementDescrWritten(molRef, true, ""); GC.Collect();//TFBrepList内存释放有问题,不强制回收的话,第二次执行代码必定崩溃