做网站复杂吗erp沙盘模拟实训报告
news/
2025/10/7 3:00:42/
文章来源:
做网站复杂吗,erp沙盘模拟实训报告,毕业设计做啥网站好,四川建设机械网站首页在项目中需要读取rvt文件#xff0c;但是因为该格式为非公开格式#xff0c;其数据需要revit的支持#xff0c;但批量读取不可能一个一个用revit软件去打开。不过该方法还是需要revit的依赖#xff0c;速度比开软件快了知道多少1.1. 新建一个控制台项目1.2. 添加Revit API引…在项目中需要读取rvt文件但是因为该格式为非公开格式其数据需要revit的支持但批量读取不可能一个一个用revit软件去打开。不过该方法还是需要revit的依赖速度比开软件快了知道多少1.1. 新建一个控制台项目1.2. 添加Revit API引用我们找到revit安装目录下的这两个DLL添加到项目引用中RevitNET.dllRevitAPI.dll修改属性复制本地FALSE1.3. 为MAIN函数添加STAThread特性[STAThread]//一定要有static void Main(string[] args){}如果未添加则报错异常SEHException: 外部组件发生异常。1.4. 修改控制台项目为64位由于revit为64位程序所以我们的控制台程序一定要为64位才可正常使用。1.5. 添加封装好的revitContext类可以直接使用可以根据自己需要去修改其中的Application就是revit主要的public class RevitContext{#region private fieldsProduct _revitProduct;private static bool isLoadEnv false;//是否已添加过环境变量#endregion#region public fields/// /// revit程序目录/// public static string RevitPath;#endregion#region eventpublic event EventHandler InitRevitFinished;#endregion#region public properties/// /// 打开REVIT文件时的设置/// public OpenOptions OpenOptions { get; set; }/// /// Revit Application/// public Autodesk.Revit.ApplicationServices.Application Application this._revitProduct?.Application;#endregion#region constructors/// ////// /// revit安装目录public RevitContext(string revitPath){RevitPath revitPath;AddEnv();}/// /// 使用此构造方法前需要调用 RevitContext.AddEnv();/// public RevitContext(){}#endregion#region public methodspublic void InitRevit(){this.OpenOptions new OpenOptions{Audit true,AllowOpeningLocalByWrongUser false,DetachFromCentralOption DetachFromCentralOption.DetachAndDiscardWorksets //从中心模型分离};_revitProduct Product.GetInstalledProduct();var clientApplicationId new ClientApplicationId(Guid.NewGuid(), RevitContext, BIM);_revitProduct.SetPreferredLanguage(Autodesk.Revit.ApplicationServices.LanguageType.Chinese_Simplified);_revitProduct.Init(clientApplicationId, I am authorized by Autodesk to use this UI-less functionality.);OnInitRevitFinished();}public Document OpenFile(string filename, OpenOptions options null){if (options null){options this.OpenOptions;}ModelPath model new FilePath(filename);return this._revitProduct.Application.OpenDocumentFile(model, options);}/// /// 获取默认三维视图/// /// 文档/// public View3D GetView3D(Document document){if (document.ActiveView is View3D view3D !view3D.IsPerspective view3D.CanBePrinted){return view3D;}FilteredElementCollector filternew FilteredElementCollector(document);return (View3D) filter.OfClass(typeof(View3D)).FirstElement();}/// /// 获取指定三维视图/// /// 文档/// 指定视图名称/// public View3D GetView3D(Document document,string viewName){FilteredElementCollector filter new FilteredElementCollector(document);return (View3D)filter.OfClass(typeof(View3D)).FirstOrDefault(x x.NameviewName);}public IList GetElementsWithView(View3D view){FilteredElementCollector collectornew FilteredElementCollector(view.Document,view.Id);return collector.ToElements();}#endregion#region public static methods/// /// 添加revit安装路径到环境变量以便加载相应的DLL/// /// 添加revit安装路径public static void AddEnv(string revitPathnull){if (isLoadEnv){return;}if (revitPath!null){RevitPath revitPath;}AddEnvironmentPaths(RevitPath);AppDomain.CurrentDomain.AssemblyResolve CurrentDomain_AssemblyResolve;}#endregion#region private static methods/// /// 添加环境变量/// /// revit安装路径static void AddEnvironmentPaths(params string[] paths){string[] first {Environment.GetEnvironmentVariable(PATH) ?? string.Empty};string value string.Join(Path.PathSeparator.ToString(), first.Concat(paths));Environment.SetEnvironmentVariable(PATH, value);}/// /// 动态加载revit相关的dll/// /// /// /// static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args){var assemblyName new AssemblyName(args.Name);var text ${Path.Combine(RevitPath, assemblyName.Name)}.dll;Assembly result;if (File.Exists(text)){Console.WriteLine($Load Revit Dll Path:{text});result Assembly.LoadFrom(text);}else{result null;}return result;}#endregion#region private methodsprivate void OnInitRevitFinished(){this.InitRevitFinished?.Invoke(this, this._revitProduct);}#endregion}1.6. 使用并测试class Program{static RevitContext revit;static Program(){RevitContext.AddEnv(D:\Program Files\Autodesk\Navisworks Manage 2020\Loaders\Rx\);}[STAThread]//一定要有static void Main(string[] args){revit new RevitContext();revit.InitRevitFinished InitRevitFinished;revit.InitRevit();Console.ReadKey();}private static void InitRevitFinished(object sender, Product revitProduct){Console.WriteLine(当前使用Revit版本为 revitProduct.Application.VersionName);Document document revit.OpenFile(E:\test\2019\经典小文件\2020.rvt);View3D view revit.GetView3D(document);if (view!null){Console.WriteLine(view.Name);var elements revit.GetElementsWithView(view);foreach (var element in elements){Console.WriteLine(element.Name);}}}}完成1.7. 留下的坑如何在不指定revit路径的情况下加载(动态获取revit安装路径)根据revit文件版本加载相应的revit路径一个程序动态支持多版本revit以上问题本人已有相应的方法。原文出处https://www.cnblogs.com/tchivs/p/11925856.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929924.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!