vs2015对revit2018二次开发之不启动Revit,读取rvt文件里墙及其属性详解编程语言

1.使用vs2015新建控制台应用程序

2.在项目中引入

RevitNet.dll,Revit.dll

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; 
 
namespace ReadRvt 
{ 
    class Program 
    { 
        static readonly string[] searchs = new string[] { "D:/Program Files/Autodesk/Revit 2018" }; 
 
        static Program() 
        { 
 
            AddEnvironmentPaths(searchs); 
            AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve; 
 
        } 
        [STAThread]//一定要有 
        static void Main(string[] args) 
        { 
            try 
            { 
                Product _product = Product.GetInstalledProduct(); 
                var clientId = new ClientApplicationId(Guid.NewGuid(), "RevitNetTest", "TEST"); 
                _product.Init(clientId, "I am authorized by Autodesk to use this UI-less functionality."); 
                Autodesk.Revit.ApplicationServices.Application _application = _product.Application; 
                string _modelPath = @"E:/项目2-2018.rvt"; 
                Document doc = _application.OpenDocumentFile(_modelPath); 
                Console.WriteLine("RVT文件已经打开");                Console.WriteLine("   start   "); 
                ReadRvt(doc); 
                Console.WriteLine("   ok   "); 
                doc.Close(false); 
                _product?.Exit(); 
                Console.ReadKey(true); 
            } 
            catch (Exception ex) 
            { 
                Console.WriteLine(ex.ToString()); 
            } 
        } 
 
        static void ReadRvt(Document doc) 
        { 
            FilteredElementCollector wallCollector = new FilteredElementCollector(doc); 
            var walls = wallCollector.OfClass(typeof(Wall)).ToArray(); 
            Console.WriteLine("Walls:"); 
            foreach (Wall wall in walls) 
            { 
                Console.WriteLine("ElementId:{0}", wall.Id.IntegerValue); 
                Console.WriteLine("   name:{0}", wall.Name.ToString()); 
                Console.WriteLine("   type:{0}", wall.WallType.ToString()); 
                Console.WriteLine("   width:{0}", wall.Width.ToString()); 
                Console.WriteLine("   UniqueId:{0}", wall.UniqueId.ToString()); 
                Console.WriteLine("   Category:{0}", wall.Category.Name); 
                Console.WriteLine("   WallType:{0}", wall.WallType.Name); 
                Console.WriteLine("params ===============   "); 
                ParameterSet parameters = wall.Parameters; 
                Console.WriteLine("   Parameters"); 
                int i = 0; 
                foreach (Autodesk.Revit.DB.Parameter param in parameters) 
                { 
                    if (param == null) continue; 
                    String value = ""; 
                    switch (param.StorageType) 
                    { 
                        case StorageType.Double: 
                            value = param.AsValueString(); 
                            break; 
                        case StorageType.Integer: 
                            value = param.AsDouble().ToString(); 
                            break; 
                        case StorageType.ElementId: 
                            ElementId elemId = new ElementId(param.AsElementId().IntegerValue); 
                            Element elem = doc.GetElement(elemId); 
                            value = elem != null ? elem.Name : "Not set"; 
                            break; 
                        case StorageType.String: 
                            value = param.AsString(); 
                            break; 
                        case StorageType.None: 
                            value = param.AsString(); 
                            break; 
                        default: 
                            break; 
                    } 
                    if (param.HasValue) 
                    { 
                        Console.Write("     name:{0}", param.Definition.Name); 
                        Console.Write(" , value:{0}", value); 
                        Console.Write(" , type:{0}", param.StorageType.ToString()); 
                        Console.WriteLine(" "); 
                    } 
                     
                } 
            } 
        }
static void AddEnvironmentPaths(params string[] paths) { try { var path = new[] { Environment.GetEnvironmentVariable("PATH") ?? string.Empty }; var newPath = string.Join(System.IO.Path.PathSeparator.ToString(), paths.Concat(path)); Environment.SetEnvironmentVariable("PATH", newPath); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } private static Assembly OnAssemblyResolve(object sender, ResolveEventArgs args) { try { 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); } } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } return args.RequestingAssembly; } } }

运行结果

RVT文件已经打开
start
Walls:
ElementId:467418
name:建筑外墙 – 砌块墙200mm
type:Autodesk.Revit.DB.WallType
width:0.761154855643045
UniqueId:c078a616-a3ac-4c7a-a695-e1c8a369a896-000721da
Category:墙
WallType:建筑外墙 – 砌块墙200mm
params ===============
Parameters
name:结构用途 , value:0 , type:Integer
name:顶部延伸距离 , value:0 , type:Double
name:类型 ID , value:建筑外墙 – 砌块墙200mm , type:ElementId
name:类别 , value:Not set , type:ElementId
name:启用分析模型 , value:0 , type:Integer
name:类别 , value:Not set , type:ElementId
name:面积 , value:495.253 m2 , type:Double
name:与体量相关 , value:0 , type:Integer
name:长度 , value:41000 , type:Double
name:设计选项 , value:Not set , type:ElementId
name:底部约束 , value:F1 , type:ElementId
name:顶部偏移 , value:0 , type:Double
name:拆除的阶段 , value:Not set , type:ElementId
name:类型 , value:建筑外墙 – 砌块墙200mm , type:ElementId
name:底部偏移 , value:0 , type:Double
name:房间边界 , value:0 , type:Integer
name:创建的阶段 , value:新构造 , type:ElementId
name:结构 , value:0 , type:Integer
name:已附着顶部 , value:0 , type:Integer
name:族 , value:建筑外墙 – 砌块墙200mm , type:ElementId
name:顶部约束 , value:Not set , type:ElementId
name:定位线 , value:0 , type:Integer
name:族与类型 , value:建筑外墙 – 砌块墙200mm , type:ElementId
name:无连接高度 , value:12079 , type:Double
name:体积 , value:114.899 m3 , type:Double
name:底部延伸距离 , value:0 , type:Double
name:已附着底部 , value:0 , type:Integer

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/20325.html

(0)
上一篇 2021年7月19日 23:20
下一篇 2021年7月19日 23:20

相关推荐

发表回复

登录后才能评论