License delivery maintenance is planned for Saturday, July 26, between 12:00 and 20:00 CEST. During this time, you may experience outages or limited availability across our services, including BIMcloud SaaS, License Delivery, Graphisoft ID (for customer and company management), Graphisoft Store, and BIMx Web Viewer. More details…
2018-10-29
12:27 PM
- last edited on
2022-10-05
01:33 PM
by
Daniel Kassai
item.itemType = API_StoryNavItem; item.mapId = API_PublicViewMap; err = ACAPI_Environment (APIEnv_SearchNavigatorItemID, &item, &items, NULL);But i tried to change parameters to get layouts like below, and i'm getting this error:
APIERR_BADDATABASE -2130313110.
item.itemType = API_LayoutNavItem; item.mapId = API_LayoutMap; err = ACAPI_Environment (APIEnv_SearchNavigatorItemID, &item, &items, NULL);From that error i tried to assign database info to the search query. with this.
API_DatabaseInfo db; BNZeroMemory (&db, sizeof (API_DatabaseInfo)); db.typeID = APIWind_LayoutID; item.itemType = API_LayoutNavItem; item.mapId = API_LayoutMap; item.db =db; err = ACAPI_Environment (APIEnv_SearchNavigatorItemID, &item, &items, NULL);And this way i got the same result... database error.
err=ACAPI_Database (APIDb_ChangeCurrentDatabaseID,&db);And this gave me the same database error. After that i don't have aní clue to solve my issue.
Solved! Go to Solution.
2018-11-15 11:35 AM
GS::Array<API_NavigatorItem> GetNavItemChildren (const API_NavigatorItem& item) { API_NavigatorItem** children = nullptr; err = ACAPI_Environment (APIEnv_GetNavigatorChildrenItemsID, &item, &children); if (err != NoError) return err; const Int32 childCount = BMhGetSize ((GSHandle)children) / Sizeof32 (API_NavigatorItem); GS::Array<API_NavigatorItem> childArray; for (Int32 ii = 0; ii < childCount; ++ii) { const API_NavigatorItem& childItem = (*children)[ii]; childArray.Push (childItem); childArray.Append (GetNavItemChildren (childItem)); } BMhKill ((GSHandle *)&children); return childArray; } GS::Array<API_NavigatorItem> GetAllLayoutNavItem () { API_NavigatorSet set; BNZeroMemory (&set, sizeof (API_NavigatorSet)); set.mapId = API_LayoutMap; GSErrCode err = ACAPI_Environment (APIEnv_GetNavigatorSetID, &set); if (err != NoError) return err; API_NavigatorItem rootItem; BNZeroMemory (&rootItem, sizeof (API_NavigatorItem)); rootItem.guid = set.rootGuid; rootItem.mapId = set.mapId; return GetNavItemChildren (rootItem); }
2018-11-15 11:35 AM
GS::Array<API_NavigatorItem> GetNavItemChildren (const API_NavigatorItem& item) { API_NavigatorItem** children = nullptr; err = ACAPI_Environment (APIEnv_GetNavigatorChildrenItemsID, &item, &children); if (err != NoError) return err; const Int32 childCount = BMhGetSize ((GSHandle)children) / Sizeof32 (API_NavigatorItem); GS::Array<API_NavigatorItem> childArray; for (Int32 ii = 0; ii < childCount; ++ii) { const API_NavigatorItem& childItem = (*children)[ii]; childArray.Push (childItem); childArray.Append (GetNavItemChildren (childItem)); } BMhKill ((GSHandle *)&children); return childArray; } GS::Array<API_NavigatorItem> GetAllLayoutNavItem () { API_NavigatorSet set; BNZeroMemory (&set, sizeof (API_NavigatorSet)); set.mapId = API_LayoutMap; GSErrCode err = ACAPI_Environment (APIEnv_GetNavigatorSetID, &set); if (err != NoError) return err; API_NavigatorItem rootItem; BNZeroMemory (&rootItem, sizeof (API_NavigatorItem)); rootItem.guid = set.rootGuid; rootItem.mapId = set.mapId; return GetNavItemChildren (rootItem); }
2019-05-01 10:00 AM
Tibor wrote:I'm playing around with Navigator. Since it was moved to separate class form Environment. I have updated code. However, it doesn't seem to work in any case. There is a slight success with Publisher Set. I can access set but I can't access any child. In the case of other types, I got nothing. Please help.
But you can iterate through the layout tree using APIEnv_GetNavigatorSetID and APIEnv_GetNavigatorChildrenItemsID methods:
GS::Array<API_NavigatorItem> GetNavItemChildren(const API_NavigatorItem* item) { ACAPI_WriteReport("child", true); API_NavigatorItem** children = nullptr; //GS::ErrCode err = ACAPI_Environment(APIEnv_GetNavigatorChildrenItemsID, &item, &children); //API_NavigatorItem* = &item; GS::ErrCode err = ACAPI_Navigator(APINavigator_GetNavigatorChildrenItemsID, &item, &children); err; ACAPI_WriteReport(GS::ValueToString(err), true); //if (err != NoError) // return err; const Int32 childCount = BMhGetSize((GSHandle)children) / Sizeof32(API_NavigatorItem); GS::Array<API_NavigatorItem> childArray; ACAPI_WriteReport("cnt", true); ACAPI_WriteReport(GS::ValueToString(childCount), true); for (Int32 ii = 0; ii < childCount; ++ii) { const API_NavigatorItem& childItem = (*children)[ii]; ACAPI_WriteReport(childItem.name, true); childArray.Push(childItem); childArray.Append(GetNavItemChildren(&childItem)); } BMhKill((GSHandle *)&children); return childArray; } void GetAllLayoutNavItem() { ACAPI_WriteReport("set", true); API_NavigatorSet set; BNZeroMemory(&set, sizeof(API_NavigatorSet)); //set.mapId = API_PublicViewMap; set.mapId = API_LayoutMap; //set.mapId = API_PublisherSets; int idx = 1; //for Publisher Set idx; GSErrCode err = ACAPI_Navigator(APINavigator_GetNavigatorSetID, &set); //if (err != NoError) // return err; ACAPI_WriteReport(GS::ValueToString(err), true); const Int32 setCnr = BMhGetSize((GSHandle)&set) / Sizeof32(API_NavigatorSet); ACAPI_WriteReport(GS::ValueToString(setCnr), true); err; API_NavigatorItem rootItem; BNZeroMemory(&rootItem, sizeof(API_NavigatorItem)); rootItem.guid = set.rootGuid; rootItem.mapId = set.mapId; ACAPI_WriteReport(set.name, true); ACAPI_WriteReport(GS::ValueToString(set.mapId), true); GetNavItemChildren(&rootItem); }
2019-05-14 01:59 PM
2019-07-18 01:34 PM
kzaremba wrote:Can you post the final code which you have iterated layouts successfully with?
After a few hours of debugging, I found a solution. Code works. I passed GUID of Navi Set... Which seem quite logical. But as it turned out it should be rootGuid. Does anyone know the difference?
2019-07-22 03:35 PM
Tomer1 wrote:Hi, as far as I remember this piece of code should work. Later on, I was just referring to GUID o set instead of rootGUID. Let me know if it's wroking.
Can you post the final code which you have iterated layouts successfully with?
2019-07-23 04:52 PM
2019-07-23 05:21 PM
2019-07-23 07:55 PM
2019-07-24 12:17 PM