zoukankan      html  css  js  c++  java
  • Revit二次开发之十五 RevitNet.dll 的使用

    在revit开发中,经常面临如下问题

    1、不开启revit创建项目;

    2、不开启revit读取rvt的数据信息等

    RevitNet.dll是Autodesk 用于开启一个revit操作的基本DLL 、无需启动界面并对 Revit 进行操作。也就是使用此dll可做到无需启动Revit便可进行创建、修改、读取等等。其基本API定义如下:

    主要是获取Product对象,其代码如下:

    using Autodesk.Revit;
    using Autodesk.Revit.DB;
    using Autodesk.RevitAddIns;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Sample
    {
        class Program
        {
            static readonly string[] Searchs = RevitProductUtility.GetAllInstalledRevitProducts().Select(x => x.InstallLocation).ToArray();
            static Program() {
    
                AddEnvironmentPaths(Searchs);
    
                //对程序集解析失败的时候发生
                AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve;
            }
    
            /// <summary>
            /// 当前的主函数
            /// </summary>
            /// <param name="args"></param>
            [STAThread]
            static void Main(string[] args)
            {
         
                Product _product = Product.GetInstalledProduct();
    
                var clientId = new ClientApplicationId(Guid.NewGuid(), "Fangjitx", "BIMAPI");
    
                // I am authorized by Autodesk to use this UI-less functionality. 必须是此字符串。 Autodesk 规定的.
    
                _product.Init(clientId, "I am authorized by Autodesk to use this UI-less functionality.");
    
                var Application = _product.Application;
    
            }
    
            /// <summary>
            /// 向系统中添加环境变量
            /// </summary>
            /// <param name="paths"></param>
            static void AddEnvironmentPaths(params string[] paths)
            {
                var path = new[] { Environment.GetEnvironmentVariable("PATH") ?? string.Empty };
    
                var newPath = string.Join(System.IO.Path.PathSeparator.ToString(), path.Concat(paths));
    
                Environment.SetEnvironmentVariable("PATH", newPath);
            }
    
            /// <summary>
            /// 程序加载失败
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="args"></param>
            /// <returns></returns>
            private static Assembly OnAssemblyResolve(object sender, ResolveEventArgs args)
            {
                var assemblyName = new AssemblyName(args.Name);
    
                foreach (var item in Searchs)
                {
                    var file = string.Format("{0}.dll", System.IO.Path.Combine(item, assemblyName.Name));
    
                    if (File.Exists(file))
                    {
                        return Assembly.LoadFile(file);
                    }
                }
    
                return args.RequestingAssembly;
            }
        }
    }

     注意事项:

    1、Main函数必须标识为      [STAThread]

    2、应用程序启动前,必须指定环境路径

    主要类的函数说明:

    Product:

            public APISettings Settings { get; }
            public Application Application { get; }   //当前的应用程序服务Application对象
            public static ICriticalSituationProcessor GetCriticalSituationProcessor();
            public static Product GetInstalledProduct();
            public static void RegisterCriticalSituationProcessor(ICriticalSituationProcessor processor);
            public sealed override void Dispose();
            public void EnableIFC(bool enable);
            public void Exit();
            public void Init(DB.ClientApplicationId id, string clientData);
            public void SetPreferredLanguage(ApplicationServices.LanguageType language);
            public void SetSettingsFileLocation(string strSettingsFileLocation);
     
    创建一个新项目
             var projectrTemplate = Application.DefaultProjectTemplate;
    
    
                if (!File.Exists(projectrTemplate))
                {
                    throw new FileNotFoundException("默认项目路径不存在 , 请指定 !");
                }
    
                var document = Application.NewProjectDocument(projectrTemplate);

    打开一个老项目

          var Application = _product.Application;
    
               Document doc=  Application.OpenDocumentFile("url");
    
               var view = doc.ActiveView;
          
     
  • 相关阅读:
    053467
    053466
    053465
    NC201613 Jelly
    NC14608 after与迷宫
    NC14572 走出迷宫
    340. 通信线路
    1135. 新年好
    903. 昂贵的聘礼
    P5767 [NOI1997]最优乘车
  • 原文地址:https://www.cnblogs.com/minhost/p/11927361.html
Copyright © 2011-2022 走看看