OBD SDK下有一个名为stfsample的例子演示了如何通过SDK接口创建结构元素,在结构元素的创建过程中需要设置各种各样的结构元素属性,其中有一项就是结构元素的截面。这个截面我们不能通过代码任意定义一个就赋给新创建的结构元素,而是要从OBD的DataSet系统中获取预定义的截面来赋值给新创建的结构元素。获取系统预定义截面例子中调用的是mdlSTFSectionList_constructFromTFSecMgr函数,这个函数返回的截面在哪定义呢?通过测试发现这些定义都保存在OBD工作空间的这个目录下:C:\ProgramData\Bentley\OpenBuildings CONNECT Edition\Configuration\Datasets\Dataset_CN\Data,所有的截面定义都来自于这个路径下的xml文件里边,而且是在“<StructuralShapes>”节点下边,如下图所示:
截图中只显示了CN_Concrete.xml文件中的很小一部分,mdlSTFSectionList_constructFromTFSecMgr函数返回的是所有*.xml文件中的截面定义,而且返回之前按字符顺序做了排序。此外在测试stfsample这个例子时发现mdlSTFSectionList_constructFromTFSecMgr返回的列表,通过mdlSTFSectionList_getSection获取到的第一个截面,使用mdlSTFSection_getName获取其截面名字时,发现返回的是空字符串,所以导致例子后面创建结构元素失败。我们可以获取列表后边名字不为空字符串的截面再去创建结构元素即可。