2017-02-14 67 views
0

Я использую следующий код C# для доступа к данным геометрии из файла ifc4. Файл содержит только стену, созданную с использованием Revit 2016. Я использую библиотеку Xbim. Это мой код:Ошибка Xbim Geometry

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 (нуль) - Загрузка сборки из C: \ Примеры \ 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: Invalid Geometry Команда на Xbim.ModelGeometry.Scene.XbimMeshGeometry3D.Read (строковые данные, Nullable 1 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 \ работа \ 860c3b913b6c647f \ Xbim.ModelGeometry .Scene \ XbimMeshGeometry3D.cs: строка 669 в Xbim.ModelGeometry.Scene.Xbim3DModelContext.ShapeGeometryMeshOf (XbimShapeInstance shapeInstance) в C: \ BuildAgent \ работы \ 860c3b913b6c647f \ Xbim.ModelGeometry.Scene \ Xbim3DModelContext.cs: линия 1525 на ifcWall.Program.Main (String [] арг) в C: \ Users \ karshenas \ Documents \ Courses \ CEEN6840 \ VS_Projects \ ifcWall \ ifcWall \ Program.cs: строка 26

Любая помощь в устранении ошибки приветствуется.

ответ

0

Вы столкнулись с областью, в которой 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 может стать очень сложной, поэтому невозможно ответить на ваш вопрос только на основе исключения.

+0

Пожалуйста, используйте кнопку * Post answer * только для получения фактических ответов. Когда у вас будет [достаточно репутации] (https://stackoverflow.com/help/privileges/comment), вы сможете добавлять комментарии к вопросу. –

+0

Отредактирован ответ, чтобы предоставить актуальное решение. –