需求背景与目的
1、超图提供了关于REVIT导出UDBX的插件。
2、并且官方拥有通过代码调用的DEMO。
3、这里主要分析于DEMO使用的过程中需要特别注意的问题。
一、项目只支持.NET FRAMEWORK的类型
二、在Program.cs类中,直接初始化REVIT的调用数据,注意REVIT的安装路径配置
Bin_64 目录为官方IOBJECT或 REVIT插件包解压后的一个目录
推荐代码如下:
static Program()
{
try
{
string path = @"C:\Program Files\Autodesk\Revit 2020";
// 设置Revit安装目录
RevitCore.SetEnvironment(path);
RevitCore.Instance.Run();
}
catch (Exception ex)
{
}
}
3、发布输出的设置与配置
1、引用:RevitToolkit.dll 和 SuperMap.Data.Dll 属性设置为不复制本地(Bin_64所在的目录下已经有对应的引用)

2、项目输出类型调为x64类型

3、项目的生成路径设置为Bin_64所在的目录(否则无法调试,发布也同步发布到此)

三、基本的看调用流程说明:
1、参数配置:
private ExportParameter setParameter()
{
ExportParameter Parameter = new ExportParameter();
Parameter.Position = new Point3D(0
, 0
, 0);
Parameter.CoordSys = new PrjCoordSys(PrjCoordSysType.EarthLongitudeLatitude);
//材质与着色模式
Parameter.ExportMeterialColor = true;
Parameter.MaterialType = RSMaterialType.ConsistentColors;
Parameter.ExportNetWorkDataset = false;
Parameter.Mode = ExportMode.Triangulate;
return Parameter;
}
2、数据源配置
public Datasource OpenOrCreateDataSource(string udbFile, ExportParameter param)
{
//存在即删除
if (File.Exists(udbFile))
{
File.Delete(udbFile);
}
else
{
string dircetoryName = Path.GetDirectoryName(udbFile);
if (!Directory.Exists(dircetoryName))
{
Directory.CreateDirectory(dircetoryName);
MessageBox.Show("数据源路径不存在!");
}
}
Workspace m_workspace = new Workspace();
DatasourceConnectionInfo datasourceConInfo = new DatasourceConnectionInfo();
datasourceConInfo.Alias = udbFile;
datasourceConInfo.Server = udbFile;
datasourceConInfo.EngineType = EngineType.UDBX;
Datasource m_datasource = m_workspace.Datasources.Create(datasourceConInfo);
if (m_datasource == null)
{
//"提示", "导出失败,请配置SuperMap 9D许可,设置Bin_x64为系统环境变量,并确保其在Path路径的最前端!"
MessageBox.Show("导出失败,请配置SuperMap 9D许可,设置Bin_x64为系统环境变量,并确保其在Path路径的最前端!");
return null;
}
else
{
if (param.CoordSys != null)
{
m_datasource.PrjCoordSys = param.CoordSys;
}
return m_datasource;
}
}
3、导出数据
private bool DoExport(Datasource datasource, List<DocumentNode> Docs, ExportParameter param)
{
bool isSuccess = false;
try
{
if (datasource == null)
{
isSuccess = false;
MessageBox.Show("数据源 打开/创建 失败!");
}
else
{
RevitConvert convert = new RevitConvert(param);
convert.Stepped += (sender, args) => { };
convert.Export(datasource, Docs.ToArray());
//导出明细
convert.ExportSchedule(datasource, Docs.ToArray());
//导出二维CAD
convert.ExportCAD(datasource, false, Docs.ToArray());
isSuccess = true;
}
}
catch (Exception ex)
{
isSuccess = false;
MessageBox.Show(ex.Message, "导出失败");
}
return isSuccess;
}
4、调用实例
//设置参数
var para = setParameter();
//创建数据源
Datasource datasource = OpenOrCreateDataSource(Path.Combine(AppContext.BaseDirectory, "test.udbx"), para);
//打开REVIT文件
RevitFile File = new RevitFile(RevitCore.Instance);
List<DocumentNode> Docs = File.Open(@"G:\temp\1.rvt", new ExportParameter());
if (Docs == null || Docs.Count == 0)
{
// 请检查数据及版本
MessageBox.Show("文档打开失败,请检查数据及版本!");
}
Docs.ForEach(x =>
{
// 设置导出的族类ID,用默认的三维视图
x.Categories = x.GetCategories().Select(id => id.Key).ToList();
});
var isSuccess = DoExport(datasource, Docs, para);

2122

被折叠的 条评论
为什么被折叠?



