Xbim Geometry error
Я использую следующий код C# для доступа к данным геометрии из файла ifc4. Файл содержит только стену, созданную с помощью Revit 2016. Я использую библиотеку Xbim. Это мой код:
class Program
{
private static readonly ILog logger =
LogManager.GetLogger(typeof(Program));
static string _ifcFile = @"C:\Examples\OneWall.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] DEBUG Xbim.Geometry.Engine.Interop.XbimCustomAssemblyResolver (null) - загрузка сборки из: C:\ examples\ifcWall\ifcWall\bin\Debug\x86\Xbim.Geometry.Engine32.dll 1404 [1] DEBUG Xbim.Geometry.Engine.Interop.XbimCustomAssemblyResolver (null) - загрузка сборки из: C:\ examples \ ifcWall \ ifcWall \ bin \ Debug \ x86 \ Xbim.Geometry.Engine32.dll
Необработанное исключение: System.Exception: недопустимая команда геометрии в Xbim.ModelGeometry.Scene.XbimMeshGeometry3D.Read (String data, Nullable1 trans) in c:\BuildAgent\work\860c3b913b6c647f\Xbim.ModelGeometry.Scene\XbimMeshGeometry3D.cs:line 219
at Xbim.ModelGeometry.Scene.XbimMeshGeometry3D.Add(String mesh, Int16 productTypeId, Int32 productLabel, Int32 geometryLabel, Nullable
1 преобразование, Int16 modelId) в c:\BuildAgent\work\860c3b913b6c647f\Xbim.ModelGeometry.Scene\XbimMeshGeometry3D.cs: строка 669 в Xbim.ModelGeometry.Scene. 860c3b913b6c647f\Xbim.ModelGeometry.Scene\Xbim3DModelContext.cs: строка 1525 в ifcWall.Program.Main(String[] args) в C:\Users\karshenas\Documents\Courses\CEEN6840\VS_Projects\ifWall \ ifcall строка 26
Любая помощь для исправления ошибки приветствуется.
1 ответ
Вы попадаете в область, где 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 Issues и поделиться файлом. Геометрия IFC может быть очень сложной, поэтому невозможно действительно ответить на ваш вопрос только на основании исключения.