Autodesk Revit插件项目,支持Revit 2020-2026版本,实现高版本文件降级到低版本的功能。
这个插件主要实现Revit高版本文件降级到低版本的功能。通过导出高版本Revit文件中的数据,然后在低版本Revit中导入这些数据,实现跨版本的数据迁移,解决了Revit版本不兼容的问题。
- 标高 (Levels)
- 轴网 (Grids)
- 楼层平面视图 (ViewPlans)
- 墙体 (Walls)
- 在高版本Revit中使用"导出数据"命令,将项目数据导出为.db文件
- 在低版本Revit中使用"导入数据"命令,从.db文件导入数据到新项目中
- 下载并安装对应Revit版本的插件
- 重启Revit,插件将自动加载
- 在Revit功能区中找到"xml.Revit.Dev.DocumentBase"选项卡
- 打开需要降级的Revit项目文件
- 点击"导出数据"命令
- 选择保存位置,系统会生成一个.db格式的数据文件
- 导出完成后会显示导出的元素数量
- 在低版本Revit中创建新项目
- 点击"导入数据"命令
- 选择之前导出的.db文件
- 系统会自动在低版本项目中重建相应的元素
- 导入完成后会显示导入的元素数量
如果您想为项目贡献新的元素类型支持,可以按照以下步骤进行:
在Models文件夹中创建新的模型类,继承自ElementModel基类:
public sealed class YourElementModel : ElementModel
{
// 构造函数,从Revit元素读取数据
public YourElementModel(Element element)
{
// 读取元素属性并赋值
UniqueId = element.UniqueId;
Name = element.Name;
// 其他特定属性...
}
// 定义该元素类型特有的属性
public string Property1 { get; set; }
public double Property2 { get; set; }
// ...
}在Services文件夹中定义服务接口:
public interface IYourElementService : IElementService<YourElementModel>
{
// 可以添加特定于该元素类型的方法
}创建服务实现类:
public sealed class YourElementService : ElementService<YourElementModel>, IYourElementService
{
// 实现从文档获取元素模型的方法
public override IList<YourElementModel> GetElementModels()
{
var result = new List<YourElementModel>();
// 从当前文档获取元素并转换为模型
var elements = new FilteredElementCollector(doc)
.OfCategory(BuiltInCategory.YOUR_CATEGORY)
.WhereElementIsNotElementType()
.ToElements();
foreach (var element in elements)
{
result.Add(new YourElementModel(element));
}
return result;
}
// 实现创建元素的方法
public override IList<Element> Create(IList<YourElementModel> models)
{
var result = new List<Element>();
// 根据模型创建Revit元素
foreach (var model in models)
{
// 创建元素的代码...
// 将创建的元素添加到结果列表
}
return result;
}
}在Host.cs文件中注册您的服务:
services.AddSingleton<IYourElementService, YourElementService>();在CmdExport.cs和CmdImport.cs中添加对新元素类型的支持:
// 在导出命令中
IYourElementService yourElementService = Host.GetService<IYourElementService>();
var yourElementModels = yourElementService.GetElementModels();
LiteDBHelper.Upsert(db, yourElementModels);
// 在导入命令中
var yourElementModels = LiteDBHelper.Query<YourElementModel>(db);
IYourElementService yourElementService = Host.GetService<IYourElementService>();
doc.Transaction(t => yourElementService.Create(yourElementModels));该项目已开源,欢迎提交Issue以支持更多元素类型。您可以通过以下方式参与:
- 提交新的元素类型支持
- 改进现有功能
- 修复问题和bug
- 提供使用反馈和建议
- C# 12
- .NET Framework 4.8
- .NET 8
- LiteDB (用于数据存储)
Before you can build this project, you will need to install .NET, depending upon the solution file you are building. If you haven't already installed these frameworks, you can do so by visiting the following:
编译:
nuke创建安装程序:
nuke CreateInstaller- 微信公众号: Revit二次开发教程
- 邮箱: zedmoster1@gmail.com