Archicad插件开发-获取右侧树形结构数据

右侧树形结构的类型由API_NavigatorMapID结构控制

typedef enum {
    API_UndefinedMap                = 0,    //未定义
    API_ProjectMap                    = 1,    //项目树状图
    API_PublicViewMap                = 2,    //视图映射
    API_MyViewMap                    = 3,    //TW中自己的视图
    API_LayoutMap                    = 4,    //图册
    API_PublisherSets                = 5     //发布器
} API_NavigatorMapID;

先获取项目树状图下边的子节点
下边是一个获取叶子节点的函数:

void GetLeafNode(API_NavigatorItem item, GS::Array<API_NavigatorItem>& Items)
{
    API_NavigatorItem navItem = {};
    navItem.guid = item.guid;
    navItem.mapId = item.mapId;
    
    GS::Array<API_NavigatorItem> navItems;
    ACAPI_Navigator(APINavigator_GetNavigatorChildrenItemsID, &navItem, nullptr, &navItems);
    if (navItems.GetSize() > 0)
    {
        for (int i = 0; i < navItems.GetSize(); i++)
        {
            GetLeafNode(navItems[i], Items);
        }
    }
    else
    {
        API_NavigatorItem ItemTemp = {};
        ACAPI_Navigator(APINavigator_GetNavigatorItemID, &navItem.guid, &ItemTemp);
        Items.Push(ItemTemp);
    }
}

下边是获取项目树中无子节点的节点

API_NavigatorSet set;
BNZeroMemory(&set, sizeof(API_NavigatorSet));
set.mapId = API_ProjectMap;
err = ACAPI_Navigator(APINavigator_GetNavigatorSetID, &set, nullptr);
if (err == NoError)
{
    API_NavigatorItem navItem = {};
    navItem.guid = set.rootGuid;
    navItem.mapId = set.mapId;

    GS::Array<API_NavigatorItem> projectLeafItems;
    GetLeafNode(navItem, projectLeafItems);
}

拿到不可再分的所有节点数据之后我们可以根据节点类型将节点进行分类处理。

std::vector<API_NavigatorItem>  vecFloorItem, vecDetailItem, vecSectionItem, vecElevationItem;
for (int i = 0; i < projectLeafItems.GetSize(); i++)
{
    if (projectLeafItems[i].itemType == API_StoryNavItem) //API_StoryNavItem   //楼层
        vecFloorItem.push_back(projectLeafItems[i]);
    
    if (projectLeafItems[i].itemType == API_SectionNavItem) //API_SectionNavItem    //剖面
        vecSectionItem.push_back(projectLeafItems[i]);
    
    if (projectLeafItems[i].itemType == API_DetailDrawingNavItem) //API_DetailDrawingNavItem    //详图
        vecDetailItem.push_back(projectLeafItems[i]);
    
    if (projectLeafItems[i].itemType == API_ElevationNavItem) //API_ElevationNavItem    //立面
        vecElevationItem.push_back(projectLeafItems[i]);
}

结构类型定义详见:

typedef enum {
    API_UndefinedNavItem            = 0,
    API_ProjectNavItem                = 1,
    API_StoryNavItem                = 2,
    API_SectionNavItem                = 3,
    API_DetailDrawingNavItem        = 4,
    API_PerspectiveNavItem            = 5,
    API_AxonometryNavItem            = 6,
    API_ListNavItem                    = 7,
    API_ScheduleNavItem                = 8,
    API_TocNavItem                    = 9,
    API_CameraNavItem                = 10,
    API_CameraSetNavItem            = 11,
    API_InfoNavItem                    = 12,
    API_HelpNavItem                    = 13,
    API_LayoutNavItem                = 14,
    API_MasterLayoutNavItem            = 15,
    API_BookNavItem                    = 16,
    API_MasterFolderNavItem            = 17,
    API_SubSetNavItem                = 18,
    API_TextListNavItem                = 19,
    API_ElevationNavItem            = 20,
    API_InteriorElevationNavItem    = 21,
    API_WorksheetDrawingNavItem        = 22,
    API_DocumentFrom3DNavItem        = 23,
    API_FolderNavItem                = 24,
    API_DrawingNavItem                = 25
} API_NavigatorItemTypeID;

其他比如视图映射等可参考项目树形结构图类似的处理方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值