Archicad C++ API
About Archicad add-on development using the C++ API.

[SOLVED] APIEnv_SearchNavigatorItemID not working correctly?

Ben Cohen
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.

the code below comes directly from the API devkit. It will loop through all the floor plan views. But if you change it to loop through sections - it will not work. (oddly - perspective views seem to work) (also setting db.typeID seems to have no effect)

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??

any help - much appreciated!!

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)

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",;
    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);
            sprintf (str, " - Layers individual");
    } else {
        sprintf (str, " - none layers");
    BMhKill ((GSHandle*) &view.layerStats);

    ACAPI_WriteReport (str, false);

BMhKill ((GSHandle *) &items);
Ben Cohen
Mac and PC
Archicad (Latest Version) aus
Regina Judak
Graphisoft Alumni
Graphisoft Alumni
Hi Ben,

I'm glad it was helpful for you!


Didn't find the answer?

Check other topics in this Forum

Back to Forum

Read the latest accepted solutions!

Accepted Solutions

Start a new conversation!