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/20325.html

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

相关推荐

发表回复

登录后才能评论