加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Revit二次开发之利用DataStorage存储对象

(2016-11-03 15:04:11)
标签:

365

it

分类: Revit二次开发
使用 DataStorage 存储对象 不会干扰项目里的原有构件 这样比把数据绑定在构件上更方便 不会对项目操作带来任何不便,使用DataStorage存储对象和其他没有太大区别
            UIApplication uiapp = commandData.Application;
            UIDocument uidoc = commandData.Application.ActiveUIDocument;
            Document doc = uidoc.Document;
            Autodesk.Revit.DB.View view = doc.ActiveView;
      

            Transaction tran = new Transaction(doc, "BIM");
            tran.Start();
            //创建存储数据,其他方面无异
            DataStorage store = DataStorage.Create(doc);
            SchemaBuilder schemabulder = new SchemaBuilder(new Guid(System.Guid.NewGuid().ToString("D")));
            schemabulder.SetReadAccessLevel(AccessLevel.Public);
            schemabulder.SetWriteAccessLevel(AccessLevel.Public);
            schemabulder.SetSchemaName("LeiFile");
            schemabulder.SetDocumentation("DataStorageFile");

            FieldBuilder fiedBuilder = schemabulder.AddArrayField("data", typeof(byte));
            fiedBuilder.SetDocumentation("Store file data");

            Schema schema = schemabulder.Finish();
            
            string filepath = null;
            OpenFileDialog dialog = new OpenFileDialog();
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                dialog.Title = "扩展存储";
                filepath = dialog.FileName;
            }
            byte[] data=null;
            using (FileStream stream = new FileStream(filepath, FileMode.Open, FileAccess.Read))
            {
                data=new byte[(int)stream.Length];
                stream.Read(data,0,data.Length);
                stream.Close();
            }
            Entity entity = new Entity(schema);
            Field field = schema.GetField("data");
            entity.Set(IList(byte))(field, data);
            store.SetEntity(entity);
            MessageBox.Show("文件存储成功!");
            tran.Commit();


      DataStorage storage = new FilteredElementCollector(doc).OfClass(typeof(DataStorage)).Cast(DataStorage)().First(); 
            Schema sch = Schema.ListSchemas().Where(o => o.SchemaName == "LeiFile").First();
            Entity ent= storage.GetEntity(sch);
            byte[] databyte = ent.Get(IList(byte))(sch.GetField("data")).ToArray();
            SaveFileDialog savedialog = new SaveFileDialog();
            savedialog.Title = "提取文件";
            savedialog.Filter = "()|*.pptx";
            if (savedialog.ShowDialog() == DialogResult.OK)
            {
                using (FileStream fs = new FileStream(savedialog.FileName,FileMode.Create,FileAccess.Write))
                {
                    fs.Write(databyte,0,databyte.Length);
                }
                MessageBox.Show("文件提取完毕!");
            }

            return Result.Succeeded;

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有