我正在使用以下C#代码访问ifc4文件中的几何数据。该文件仅包含使用Revit 2016创建的墙。我正在使用Xbim库。这是我的代码:
class Program
{
private static readonly ILog logger =
LogManager.GetLogger(typeof(Program));
static string _ifcFile = @"C:ExamplesOneWall.ifc";
static void Main(string[] args)
{
BasicConfigurator.Configure();
IfcStore model = IfcStore.Open(_ifcFile);
Xbim3DModelContext context = new Xbim3DModelContext(model);
context.CreateContext();
XbimMeshGeometry3D mesh = mesh = (XbimMeshGeometry3D)context.ShapeGeometryMeshOf(context.ShapeInstances().FirstOrDefault());
//The rest of my code
}
}
我得到以下错误。我正在使用visual studio 2015。
1226[1]调试Xbim.Geometry.Engine.Interop.XbimCustomAssemblyResolver(null)-从以下位置加载程序集:C:\Examples\ifcWall\ifcWall\bin\DEBUG\x86\Xbim.Geometry.Enginee32.dll1404[1]调试Xbim.Geometry.Engine.Interop.XbimCustomAssemblyResolver(null)-从以下位置加载程序集:C:\Examples\ifcWall\ifcWall\bin\DEBUG\x86\Xbim.Geometry.Enginee32.dll
未处理的异常:System.Exception:无效的几何体命令在c:\BuildAgent\work\860c3b913b6c647f\Xbim.ModelGeometry.Scene.XbimMeshGeometry3D.Read(字符串数据,可为空的1 trans) in c:BuildAgentwork860c3b913b6c647fXbim.ModelGeometry.SceneXbimMeshGeometry3D.cs:line 219
at Xbim.ModelGeometry.Scene.XbimMeshGeometry3D.Add(String mesh, Int16 productTypeId, Int32 productLabel, Int32 geometryLabel, Nullable
转换,Int16 modelId)中在c:\BuildAgent\work\860c3b913b6c647f\Xbim.ModelGeometry.Scene.Xbim3DModelContext.ShapeGeometryMeshOf(XbimShapeInstance-shapeInstance)位于C:\Users\karshenas\Documents\CEEN6840\VS_Projects\ifcWall\ifcWall\Program.cs:line 26 中的ifcWall.Program.Main(String[]args)
如有任何帮助,我们将不胜感激。
您会遇到一个API发生变化的区域,而这个特定的函数需要不同格式的数据。如果你需要的是形状的三角测量,这个代码应该适合你:
using System.IO;
using Xbim.Common.Geometry;
using Xbim.Ifc;
using Xbim.ModelGeometry.Scene;
using Xbim.Common.XbimExtensions;
namespace CreateWexBIM
{
class Program
{
static void Main(string[] args)
{
const string file = @"4walls1floorSite.ifc";
var model = IfcStore.Open(file);
var context = new Xbim3DModelContext(model);
context.CreateContext();
var instances = context.ShapeInstances();
foreach (var instance in instances)
{
var geometry = context.ShapeGeometry(instance);
var data = ((IXbimShapeGeometryData)geometry).ShapeData;
using (var stream = new MemoryStream(data))
{
using (var reader = new BinaryReader(stream))
{
var mesh = reader.ReadShapeTriangulation();
}
}
}
}
}
}
最好的方法是在xBIM GitHub问题中询问并共享文件。IFC几何图形可能会变得非常复杂,因此不可能仅根据例外情况来真正回答您的问题。