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;
      

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM