【超图对接日志】REVIT插件调用开发

需求背景与目的

        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);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值