Класс IfcStore не распознан в проекте XbimExtract
Я пытаюсь использовать проект Xbim Extract для приложения, над которым я работаю. Однако Visual Studio подчеркивает красным некоторые классы, говоря, что не может их найти. Мне удалось решить некоторые ошибки, например, я набрал:
using Xbim.XbimExtensions.Interfaces;
так что ReportProgressDelegate
больше не подчеркивается. Однакоя не могу найти, какой пакет для импортаIfcStore
, Это весь код:
using System;
using System.IO;
using System.Linq;
using System.Reflection;
using log4net;
using log4net.Config;
using Xbim.Common;
using Xbim.Ifc;
using Xbim.XbimExtensions.Interfaces;
using System.Collections.Generic;
using Xbim.IO;
using Xbim.ModelGeometry.Scene;
using Xbim.Common.Logging;
using Xbim.Ifc2x3.Kernel;
using Xbim.Common.Exceptions;
using Xbim.Common.Geometry;
using Xbim.Ifc2x3.ProductExtension;
using Xbim.XbimExtensions.Interfaces;
namespace XbimExtract
{
class Program
{
public static ILog Logger = LogManager.GetLogger(typeof(Program));
private static readonly string ApplicationName = Path.GetFileName(Assembly.GetExecutingAssembly().CodeBase);
public static string AppName
{
get { return ApplicationName; }
}
static void Main(string[] args)
{
XmlConfigurator.Configure();
Logger.InfoFormat("{0} Started", AppName);
var arguments = Params.ParseParams(args);
if (arguments.IsValid)
{
try
{
ReportProgressDelegate progDelegate = delegate(int percentProgress, object userState)
{
Console.Write("{0:D5}", percentProgress);
ResetCursor(Console.CursorTop);
};
using (var source = IfcStore.Open(arguments.SourceModelName))
{
Logger.InfoFormat("Reading {0}", arguments.SourceModelName);
Logger.InfoFormat("Extracting and copying to " + arguments.TargetModelName);
using (var target = IfcStore.Create(source.IfcSchemaVersion, XbimStoreType.InMemoryModel))
{
var maps = new XbimInstanceHandleMap(source, target); //prevents the same thing being written twice
using (var txn = target.BeginTransaction())
{
try
{
var toInsert = arguments.EntityLabels.Select(label => source.Instances[label]).ToList();
var products = toInsert.OfType<IfcProduct>().ToList();
var others = toInsert.Except(products).ToList();
if (products.Any())
target.InsertCopy(products, true, true, maps);
if (others.Any())
foreach (var entity in others)
target.InsertCopy(entity, maps, null, false, true);
}
catch (Exception)
{
Logger.Error("Some entity labels don't exist in the source file.");
return;
}
txn.Commit();
}
File.Delete(arguments.TargetModelName);
Logger.Info("Saving to " + arguments.TargetModelName);
target.SaveAs(arguments.TargetModelName, null, progDelegate);
Logger.Info("Success");
}
}
}
catch (Exception e)
{
Logger.FatalFormat("{0}\n{1}", e.Message, e.StackTrace);
}
}
else
{
Logger.Error("Supplied params are invalid");
}
Logger.InfoFormat("{0} Ended", AppName);
#if DEBUG
Console.WriteLine("Press any key...");
Console.ReadKey();
#endif
}
private static void ResetCursor(int top)
{
try
{
if (top >= Console.BufferHeight)
return;
Console.SetCursorPosition(0, top);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
}
}
Класс IfcStore
подчеркнут красным, где бы он ни находился. Что я должен включить?
1 ответ
Решение
Вам нужно обновить пакет nuget до последней версии.
Xbim.Essentials.3.1.0 не ссылался на Xbim.Ifc.dll, который содержит пространство имен и классы Xbim.Ifc.
Обновление до Xbim.Essentials.4.0.4 добавит эту ссылку и позволит вам работать с классом IfcStore.