针对ABD中的元素,从软件界面中可以看到属性对话框,有很丰富的属性信息。
这里面的DataGroup Data, 就是我们这要介绍的。通过事先定义好的Schema,开发者和用户可以很方便的管理建筑元素的信息。那么如果读取和修改这个信息呢?下面来介绍相应的API。
详细的文档可以参考SDK中的AECOsimBuildingDesignerAPI.chm。 相应的头文件已经在include\tfapi目录下。需要连接的库有CatalogCollectionHelpers.lib和CatalogInstanceCollection.lib。 在示例目录下,有一个相应的例子,DGExamples, 这里的介绍就是针对这个例子的代码。
所谓的DataGroup,就是附加在建筑元素上的xml数据段,可以简单的这样理解DataGroup和建筑元素的关系。那么这个API中首先提供了一个BuildingEditElemHandle,这个代表一个建筑元素。下面的代码演示了如何在DataButton函数中构造一个BuildingEditElemHandle
bool AddTool::_OnDataButton (DgnButtonEventCR ev) { HitPathCP path = _DoLocate(ev, true, Bentley::DgnPlatform::ComponentMode::Innermost); if (NULL == path) return false; ElementRefP elemRef = mdlDisplayPath_getElem ((DisplayPathP) path, 0); DgnModelRefP modelRef = mdlDisplayPath_getPathRoot ((DisplayPathP) path); if (NULL == elemRef || NULL == modelRef) return false; Bentley::Building::Elements::BuildingEditElemHandle beeh (elemRef, modelRef); }
有了这个handle之后,我们就可以获取DataGroup数据了。代码如下
CCatalogSchemaItemT* pSchemaItem = NULL; if (NULL != (pSchemaItem = beeh.GetCatalogCollection ().FindDataGroupSchemaItem (L"ArchDoor/ParaDef/@type"))) { if (pSchemaItem->GetValue ().empty ()) pSchemaItem->SetValue (L"PAZ");// to comply with ArchDoor schema: PAZ or BXF or RFA }
GetCatalogCollection 函数获得DataGroup数据组。
FindDataGroupSchemaItem 获得属性的值。这里需要注意这个函数的参数。属性的名字是个字符串,例如:"ArchDoor/ParaDef/@type",这个字符串代表某个事先定义好的属性的名字,这个名字和属性对话框里显示的是不一样的。具体可以看Catalog Editor 对话框。
GetValue/SetValue 函数读取或者设定值。
从文档中,可以看到还有其他的函数,可以列举所有的属性等功能。
主要是tfcdoc.chm中的“Catalog Functions” 部分介绍的API。这部分的API可以列举DataGroup属性,并且读取和改变相应的值。
MSElementDescrP pDescr; TFCatalogItemList* pCatalogItemList = mdlTFCatalogItemList_construct (); if (SUCCESS != mdlTFCatalogItem_initFromElementDescr (mdlTFCatalogItemList_getCatalogItem (pCatalogItemList), pDescr)) return; mdlTFCatalogItem_getArchDoorParaDeftypeValueString (mdlTFCatalogItemList_getCatalogItem (pCatalogItemList), strValue) TFCatalogItemList_free (&pCatalogItemList);
上面介绍的都是DataGroup属性,是附加在建筑元素上的数据流。而建筑元素本身的集合属性,例如体积等,还是需要从Form有关的API中读取。详细可以参考SDK中的例子
具体如何调用可以参考例子。每个函数的使用说明可以参考tfcdoc.chm。