We value your input! Please participate in Archicad 28 Home Screen and Tooltips/Quick Tutorials survey
2017-04-21 07:44 AM - last edited on 2023-07-12 08:44 PM by Doreena Deng
GSErrCode err = NoError; API_DatabaseInfo db; BNZeroMemory (&db, sizeof (API_DatabaseInfo)); db.typeID = APIWind_FloorPlanID; API_NavigatorView view; API_NavigatorItem parent; API_NavigatorItem item; API_NavigatorItem** items = NULL; BNZeroMemory (&item, sizeof (API_NavigatorItem)); item.itemType = API_StoryNavItem item.mapId = API_PublicViewMap; db.typeID = APIWind_FloorPlanID; err = ACAPI_Environment (APIEnv_SearchNavigatorItemID, &item, &items, NULL); if (err != NoError || items == NULL) return; char str[256]; Int32 num; Int32 n = BMhGetSize ((GSHandle) items) / sizeof (API_NavigatorItem); ACAPI_WriteReport ("Stories of View Map:", false); for (Int32 i = 0; i < n; i++) { sprintf (str, "%s", (*items).name); ACAPI_WriteReport (str, false); BNZeroMemory (&parent, sizeof (API_NavigatorItem)); parent.mapId = API_PublicViewMap; err = ACAPI_Environment (APIEnv_GetNavigatorParentItemID, (*items).guid, &parent, NULL); sprintf (str, " - parent name: %s", parent.name); ACAPI_WriteReport (str, false); err = ACAPI_Environment (APIEnv_GetNavigatorChildNumID, &parent, &num, NULL); sprintf (str, " - number of children of the parent: %d", num); ACAPI_WriteReport (str, false); BNZeroMemory (&view, sizeof (API_NavigatorView)); err = ACAPI_Environment (APIEnv_GetNavigatorViewID, &((*items)), &view, NULL); if (view.saveLaySet) { if (view.layerCombination[0] != 0) sprintf (str, " - Layer combination: %s", view.layerCombination); else sprintf (str, " - Layers individual"); } else { sprintf (str, " - none layers"); } BMhKill ((GSHandle*) &view.layerStats); ACAPI_WriteReport (str, false); } BMhKill ((GSHandle *) &items);
2017-04-21 10:12 AM
Ben wrote:Have you tried varying this line:
Hi All
I am trying to create an addon that searches through all navigator items and changes various view settings. All is working well but I have found the search is only working for floor plan and perspective view types.
I am changing this line of code
item.itemType = API_StoryNavItem;
to this
item.itemType = API_SectionNavItem
which will work with floor plans and perspectives - but nothing else??
db.typeID = APIWind_FloorPlanID;That line is directing the search toward the floor plan database.
2017-04-21 12:05 PM
2017-04-23 05:54 PM
Ben wrote:Hi Ben,
Hi Ralph
Yes I tried that. Interestingly API_PerspectiveNavItem and API_StoryNavItem both work regardless of how db.typeID is set.
so if I do this
item.itemType = API_SectionNavItem; // API_StoryNavItem;
db.typeID = APIWind_SectionID;
It does not help
Thanks for the reply but still no luck
2017-04-24 04:12 AM
2017-04-24 09:00 AM
2017-04-24 12:32 PM
2017-04-26 08:02 AM
2017-05-10 01:08 PM
static void MakeTree (short dialogID, short treeItem, Int32 parent, const API_Guid& guid, GS::PagedArray<Int32>& itemsArray, API_NavigatorMapID mapId) { API_NavigatorItem** items = NULL; API_NavigatorItem item; BNZeroMemory (&item, sizeof (API_NavigatorItem)); item.guid = guid; item.mapId = NavigatorTestGlobals::Instance ().GetNavigatorMapID (); GSErrCode err = ACAPI_Environment (APIEnv_GetNavigatorChildrenItemsID, &item, &items); if (err != NoError || items == NULL) return; Int32 n = BMhGetSize ((GSHandle)items) / Sizeof32 (API_NavigatorItem); for (Int32 i = 0; i < n; i++) { if ((*items).itemType == API_ScheduleNavItem) { API_NavigatorItem** items2 = nullptr; char msgStr[256]; sprintf (msgStr, "GUID: %s, GUID2: %s, name: %s\n", APIGuid2GSGuid ((*items).guid).ToUniString ().ToCStr ().Get (), APIGuid2GSGuid ((*items).guid2).ToUniString ().ToCStr ().Get (), (*items).name); ACAPI_WriteReport (msgStr, false); (*items).mapId = mapId; err = ACAPI_Environment (APIEnv_SearchNavigatorItemID, &(*items), &items2); Int32 nn = BMhGetSize ((GSHandle) items2) / Sizeof32 (API_NavigatorItem); for (Int32 ii = 0; ii < nn; ii++) { sprintf (msgStr, "GUID: %s, Name: %s, \n", APIGuid2GSGuid ((*items2)[ii].guid).ToUniString ().ToCStr ().Get (), (*items2)[ii].name); ACAPI_WriteReport (msgStr, false); } BMhKill ((GSHandle *) &items2); } Int32 newItem = InsertTreeItem (dialogID, treeItem, parent, (*items).name, (*items).uiId, (*items).guid, (*items).itemType); if (newItem != 0) { itemsArray.Push (newItem); MakeTree (dialogID, treeItem, newItem, (*items).guid, itemsArray, mapId); } } BMhKill ((GSHandle *) &items); }
2017-05-18 09:34 AM