Revit二次开发之利用DataStorage存储对象
(2016-11-03 15:04:11)
标签:
365it |
分类: 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;