Archicad通过guid获取指定元素
获取guid的方法:在样例代码的browser control里可以获得选中构件的guid
获取指定元素的样例:
API_Element element; GSErrCode err; BNZeroMemory(&element, sizeof(API_Element)); element.header.guid = GSGuid2APIGuid(GS::Guid("BACF8F36-631C-469C-A298-4DACB418D444")); err = ACAPI_Element_Get(&element); if (err==NoError) { MessageBox(ACAPI_GetMainWindow(), APIGuidToString(element.header.guid).ToCStr(), "title", 0); }2、获取指定类型的元素
//1、获取指定类型的所有元素 GS::Array<API_Guid> elemList; ACAPI_Element_GetElemList(API_WallID, &elemList); DBPrintf("number of wall on the active floor: %ld", elemList.GetSize());3、获取关联的元素,如山墙、多边形节点
API_Element element; API_ElementMemo memo; GSErrCode err; BNZeroMemory(&element, sizeof(API_Element)); BNZeroMemory(&memo, sizeof(API_ElementMemo)); element.header.typeID = API_ObjectID; element.header.variationID = APIVarId_SymbStair; err = ACAPI_Element_GetDefaults(&element, &memo); if (err == NoError) { /* do what you want */ } ACAPI_DisposeElemMemoHdls(&memo);4、遍历全部类型的数据
GS::Array<API_Guid> elemList; GSErrCode err = ACAPI_Element_GetElemList(API_WallID, &elemList); if (err==NoError) { for (Int32 i = 0; i < elemList.GetSize(); ++i) { API_Element element; BNZeroMemory(&element, sizeof(API_Element)); element.header.guid = elemList[i]; if (ACAPI_Element_Get(&element) == NoError) { DBPrintf("墙的variationID: %d\n", element.header.variationID); } } }5、加上过滤器,然后遍历元素
GS::Array<API_Guid> elemList; ACAPI_Element_GetElemList(API_WallID, &elemList, APIFilt_OnActFloor); for (GS::Array<API_Guid>::ConstIterator it = elemList.Enumerate(); it != nullptr; ++it) { API_Element element; BNZeroMemory(&element, sizeof(API_Element)); element.header.guid = *it; if (ACAPI_Element_Get(&element) == NoError) { /* do what you want */ MessageBox(ACAPI_GetMainWindow(), APIGuidToString(element.header.guid).ToCStr(), "title", 0); } }