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