使用ProjectInfo保存文件级别的额外信息
为了保存文件级别的额外信息,可以将共享数据添加到ProjectInfo对象中。
ProjectInfo在一个Document中只有一个对象。ProjectInfo的BuildInCategory 成员是OST_ProjectInformation.
from:http://revit.5d6d.com/thread-1218-1-1.html
ProjectInfo在一个Document中只有一个对象。ProjectInfo的BuildInCategory 成员是OST_ProjectInformation.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WinForm = System.Windows.Forms;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB.Mechanical;
using Autodesk.Revit.UI.Selection;
using RevitApp = Autodesk.Revit.ApplicationServices;
using System.Data;
using System.Data.SQLite;
using System.Data.Common;
using System.Xml;
using Autodesk.Revit.DB.Analysis;
using Autodesk.Revit.DB.ExtensibleStorage;
namespace RevitCodes
{
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
//[Journaling(JournalingMode.NoCommandData)]
public class cmdInfo : IExternalCommand
{
public Result Execute(ExternalCommandData cmdData, ref string msg, ElementSet elements)
{
UIDocument uiDoc = cmdData.Application.ActiveUIDocument;
Selection selection = uiDoc.Selection;
Document document = uiDoc.Document;
XYZ xyzTmp = new XYZ(10, 20, 30);
Transaction ts = new Transaction(uiDoc.Document, "ts");
ts.Start();
/*
*/
SchemaBuilder schemaBuilder = new SchemaBuilder(System.Guid.NewGuid());
// allow anyone to read the object 读取权限
schemaBuilder.SetReadAccessLevel(AccessLevel.Public);
// restrict writing to this vendor only 写入权限
schemaBuilder.SetWriteAccessLevel(AccessLevel.Vendor);
// required because of restricted write-access
schemaBuilder.SetVendorId("ADSK");
// create a field to store an XYZ 创建一个字段
FieldBuilder fieldBuilder = schemaBuilder.AddSimpleField("WireSpliceLocation", typeof(XYZ));
fieldBuilder.SetUnitType(UnitType.UT_Length);
fieldBuilder.SetDocumentation("A stored location value representing a wiring splice in a wall.");
schemaBuilder.SetSchemaName("WireSpliceLocation");
Schema schema = schemaBuilder.Finish(); // register the Schema object
// create an entity (object) for this schema (class)
Entity entity = new Entity(schema);
// get the field from the schema
Field fieldSpliceLocation = schema.GetField("WireSpliceLocation");
entity.Set<XYZ>(fieldSpliceLocation, xyzTmp, DisplayUnitType.DUT_METERS); // set the value for this entity
document.ProjectInformation.SetEntity(entity);
//Schema schema = null;
Entity retrievedEntity = document.ProjectInformation.GetEntity(schema);
XYZ retrievedData = retrievedEntity.Get<XYZ>(schema.GetField("WireSpliceLocation"), DisplayUnitType.DUT_METERS);
TaskDialog.Show("xyz", retrievedData.X + "," + retrievedData.Y + "," + retrievedData.Z);
ts.Commit();
return Result.Succeeded;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WinForm = System.Windows.Forms;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB.Mechanical;
using Autodesk.Revit.UI.Selection;
using RevitApp = Autodesk.Revit.ApplicationServices;
using System.Data;
using System.Data.SQLite;
using System.Data.Common;
using System.Xml;
using Autodesk.Revit.DB.Analysis;
using Autodesk.Revit.DB.ExtensibleStorage;
namespace RevitCodes
{
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
//[Journaling(JournalingMode.NoCommandData)]
public class cmdInfo : IExternalCommand
{
public Result Execute(ExternalCommandData cmdData, ref string msg, ElementSet elements)
{
UIDocument uiDoc = cmdData.Application.ActiveUIDocument;
Selection selection = uiDoc.Selection;
Document document = uiDoc.Document;
XYZ xyzTmp = new XYZ(10, 20, 30);
Transaction ts = new Transaction(uiDoc.Document, "ts");
ts.Start();
/*
*/
SchemaBuilder schemaBuilder = new SchemaBuilder(System.Guid.NewGuid());
// allow anyone to read the object 读取权限
schemaBuilder.SetReadAccessLevel(AccessLevel.Public);
// restrict writing to this vendor only 写入权限
schemaBuilder.SetWriteAccessLevel(AccessLevel.Vendor);
// required because of restricted write-access
schemaBuilder.SetVendorId("ADSK");
// create a field to store an XYZ 创建一个字段
FieldBuilder fieldBuilder = schemaBuilder.AddSimpleField("WireSpliceLocation", typeof(XYZ));
fieldBuilder.SetUnitType(UnitType.UT_Length);
fieldBuilder.SetDocumentation("A stored location value representing a wiring splice in a wall.");
schemaBuilder.SetSchemaName("WireSpliceLocation");
Schema schema = schemaBuilder.Finish(); // register the Schema object
// create an entity (object) for this schema (class)
Entity entity = new Entity(schema);
// get the field from the schema
Field fieldSpliceLocation = schema.GetField("WireSpliceLocation");
entity.Set<XYZ>(fieldSpliceLocation, xyzTmp, DisplayUnitType.DUT_METERS); // set the value for this entity
document.ProjectInformation.SetEntity(entity);
//Schema schema = null;
Entity retrievedEntity = document.ProjectInformation.GetEntity(schema);
XYZ retrievedData = retrievedEntity.Get<XYZ>(schema.GetField("WireSpliceLocation"), DisplayUnitType.DUT_METERS);
TaskDialog.Show("xyz", retrievedData.X + "," + retrievedData.Y + "," + retrievedData.Z);
ts.Commit();
return Result.Succeeded;
}
}
}
我这个博客废弃不用了,今天想寻找外链的时候,突然想到这个博客权重很高。
有需要免费外链的,留言即可,我准备把这个博客变成免费的友情链接站点。

浙公网安备 33010602011771号