Класс 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.

Другие вопросы по тегам