ifcxbim

Class IfcStore not recognized in XbimExtract project


I am trying to use the Xbim Extract project for an application I am working on. However, Visual Studio underlines in red some classes, saying that it cannot find them. I managed to solve some errors, for instance I typed :

using Xbim.XbimExtensions.Interfaces;

and so ReportProgressDelegate is no more underlined. However, I cannot find what package to import for IfcStore. This is the whole code :

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

The class IfcStore is underlined in red anywhere it exists. What should I include?


Solution

  • You need to update your nuget package to last version.

    Xbim.Essentials.3.1.0 didn't referenced Xbim.Ifc.dll which contains Xbim.Ifc namespace and classes.

    updating to Xbim.Essentials.4.0.4 add this reference and let you work with IfcStore class.