2017-02-14 2 views
0

Ich verwende den folgenden C# -Code, um auf Geometriedaten aus einer ifc4-Datei zuzugreifen. Die Datei enthält nur eine mit Revit 2016 erstellte Wand. Ich verwende die Xbim-Bibliothek. Das ist mein Code:Xbim Geometriefehler

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 
    } 
} 

Ich bekomme den folgenden Fehler. Ich verwende Visual Studio 2015.

1226 [1] DEBUG Xbim.Geometry.Engine.Interop.XbimCustomAssemblyResolver (null) - Laden von Assembly aus: C: \ Beispiele \ ifcWall \ ifcWall \ bin \ Debug \ x86 \ Xbim. Geometry.Engine32.dll 1404 [1] DEBUG Xbim.Geometry.Engine.Interop.XbimCustomAssemblyResolver (null) - Laden der Assembly von: C: \ Examples \ ifcWall \ ifcWall \ bin \ Debug \ x86 \ Xbim.Geometry.Engine32.dll

Unbehandelte Ausnahme: System.Exception: Ungültiger Befehl Geometrie bei Xbim.ModelGeometry.Scene.XbimMeshGeometry3D.Read (String-Daten, 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 wandeln, Int16 ModelID) in C: \ BuildAgent \ work \ 860c3b913b6c647f \ Xbim.ModelGeometry .Scene \ XbimMeshGeometry3D.cs: Zeile 669 bei Xbim.ModelGeometry.Scene.Xbim3DModelContext.ShapeGeometryMeshOf (XbimShapeInstance shapeInstance) in c: \ BuildAgent \ work \ 860c3b913b6c647f \ Xbim.ModelGeometry.Scene \ Xbim3DModelContext.cs: Zeile 1525 bei ifcWall.Program.Main (String [] args) in C: \ Benutzer \ Karshenas \ Dokumente \ Kurse \ CEEN6840 \ VS_Projects \ ifcWall \ ifcWall \ Program.cs: Zeile 26

Jede Hilfe, um den Fehler zu beheben, wird geschätzt.

Antwort

0

Sie stoßen auf einen Bereich, in dem sich die API geändert hat und diese spezielle Funktion Daten in einem anderen Format erwartet. Wenn das, was Sie brauchen eine Triangulierung der Form ist, sollte dieser Code für Sie arbeiten:

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(); 
        } 
       } 
      } 
     } 

    } 
} 

Das Beste ist in xBIM GitHub Issues zu stellen und um die Datei zu teilen. IFC-Geometrie kann sehr komplex werden, so dass es nicht möglich ist, Ihre Frage nur basierend auf der Ausnahme zu beantworten.

+0

Bitte verwenden Sie die * Antwort * -Taste nur für die tatsächlichen Antworten. Sobald Sie [genug rep] haben (https://stackoverflow.com/help/privileges/comment), können Sie der Frage Kommentare hinzufügen. –

+0

Bearbeitete die Antwort, um tatsächliche Lösung bereitzustellen. –