Revit 左右值编码存储分级树形结构设计

近期在进行族库管理的开发,原来的想法通过左右插值进行族库的层级管理后来模拟了一下发现对于后期新增大量的项目族库会有不少的负担,所以把这个想方法记录下来,给有需要的人吧。
如果不涉及大批量的修改,可以使用这种办法,但是整个房建行业恐怕只有规范硬编码之类的能够适合。
左右值比较的关系主要和下图一样
在这里插入图片描述
详细内容可以看这个博客:左右值编码存储无限分级树形结构设计

下面的示例是,将族库遍历按照左右插值创建树形结构,主要记录的是思路,里面的一些方法是我自己创建的结构
计算主要是通过

  1. 非最低层级,通过下面的文件总量与左值确定右值
  2. 最低层级,通过左值与右值的自减即可确认
    在这里插入图片描述
        /// 引用i值,并设置左右值
        /// </summary>
        /// <param name="df"></param>
        /// <param name="i"></param>
        /// <returns></returns>
        private DirFolders GetAllFiles(DirFolders df,ref int i)
        {
        	 for(int j=0;j<files.Length-1;j++)
                    {
                        var fileInfo = files[j];
                        var str = Path.GetFileNameWithoutExtension(fileInfo.DirectoryName+@"\"+fileInfo.Name);
                        var extension = fileInfo.Extension;
                        DirFolders folder = new DirFolders(str, (fileInfo.DirectoryName + "\\" + fileInfo.Name));
                        folder.SetIcon(new BitmapImage(new Uri("/Resources/R_round_r.jpg", UriKind.Relative)));
                        folder.IsRfaFile = true;
                        folder.Left = ++i;
                        folder.Right = df.Right - (j + 1);
                        folder.SetThumbnail(
                            new GetThumbnail(fileInfo.DirectoryName + "\\" + fileInfo.Name).GetImage());
                        
                        df.SetSub(folder);
                    }
                   
            return df;
        }
        /// <summary>
        /// 上传数据库时计算左右值
        /// </summary>
        /// <param name="left"></param>
        /// <param name="size"></param>
        /// <returns></returns>
        private static int CalculationRight(int left, int size)
        {
            //size = (right-left-1)/2
            return 2 * size + 1 + left;
        }

        private static int GetAllFiles(DirectoryInfo dirInfo)
        {
            int i = 0;
            var filesCount = dirInfo.GetFiles("*.rfa");
            i += filesCount.Length;
            var foldersCount = dirInfo.GetDirectories();
            i += foldersCount.Length;
            foreach (var directoryInfo in foldersCount)
            {
                i += GetAllFiles(directoryInfo);
            }

            return i-1;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值