我正在尝试将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
在其存在的任何地方都带有红色下划线。我应该包括什么?