예제 #1
0
        static int Main(string[] args)
        {
            int totErrors = 0;

            // We need to use the logger early to initialise before we use EventTrace
            Logger.Debug("XbimConvert starting...");

            arguments = Params.ParseParams(args);

            if (!arguments.IsValid)
            {
                return(-1);
            }

            var SubMode = SearchOption.TopDirectoryOnly;

            if (arguments.ProcessSubDir)
            {
                SubMode = SearchOption.AllDirectories;
            }
            var files = Directory.GetFiles(arguments.Specdir, arguments.Specpart, SubMode);

            if (files.Length == 0)
            {
                Console.WriteLine("Invalid IFC filename or filter: {0}, current directory is: {1}", args[0], Directory.GetCurrentDirectory());
                return(-1);
            }

            long parseTime = 0;
            long geomTime  = 0;

            foreach (var origFileName in files)
            {
                using (EventTrace eventTrace = LoggerFactory.CreateEventTrace())
                {
                    try
                    {
                        Console.WriteLine("Starting conversion of {0}", origFileName);
                        Logger.InfoFormat("Starting conversion of {0}", origFileName);
                        string xbimFileName = BuildFileName(origFileName, ".xbim");
                        //string xbimGeometryFileName = BuildFileName(arguments.IfcFileName, ".xbimGC");
                        System.Diagnostics.Stopwatch watch        = new System.Diagnostics.Stopwatch();
                        ReportProgressDelegate       progDelegate = delegate(int percentProgress, object userState)
                        {
                            if (!arguments.IsQuiet)
                            {
                                Console.Write(string.Format("{0:D5} Converted", percentProgress));
                                ResetCursor(Console.CursorTop);
                            }
                        };
                        watch.Start();
                        using (XbimModel model = ParseModelFile(origFileName, xbimFileName, arguments.Caching))
                        {
                            parseTime = watch.ElapsedMilliseconds;
                            if (!arguments.NoGeometry)
                            {
                                // prods left null would default to excluding ifcfeatureElements in the mesher.
                                //IEnumerable<IfcProduct> prods = null;
                                //if (arguments.GeometryGeneration == Params.GeometryGenerationOptions.All)
                                //    prods = model.InstancesLocal.OfType<IfcProduct>(); // this one includes ifcfeatureElements instead.
                                //XbimMesher.GenerateGeometry(model, Logger, progDelegate, prods);

                                //if (arguments.GeomVersion == 1)
                                //    XbimMesher.GenerateGeometry(model, Logger, progDelegate);
                                //else //assume 2;

                                var m3D = new Xbim3DModelContext(model);
                                try
                                {
                                    m3D.CreateContext(progDelegate: progDelegate);
                                }
                                catch (Exception ce)
                                {
                                    Console.WriteLine("Error compiling geometry\n" + ce.Message);
                                }

                                geomTime = watch.ElapsedMilliseconds - parseTime;
                                //if (arguments.GenerateScene)
                                //{
                                //    Stopwatch sceneTimer = new Stopwatch();
                                //    if (!arguments.IsQuiet)
                                //        Console.Write("Scene generation started...");
                                //    sceneTimer.Start();
                                //    XbimSceneBuilder sb = new XbimSceneBuilder();
                                //        sb.Options = arguments.GenerateSceneOptions;
                                //    string xbimSceneName = BuildFileName(xbimFileName, ".xbimScene");
                                //        sb.BuildGlobalScene(model, xbimSceneName,
                                //            !arguments.IsQuiet ? Logger : null
                                //            );
                                //    sceneTimer.Stop();
                                //    if (!arguments.IsQuiet)
                                //        Console.WriteLine(string.Format(" Completed in {0} ms", sceneTimer.ElapsedMilliseconds));

                                //}
                            }
                            model.Close();
                            watch.Stop();
                        }

                        // XbimModel.Terminate();
                        GC.Collect();
                        ResetCursor(Console.CursorTop + 1);
                        Console.WriteLine("Success. Parsed in " + parseTime + " ms, geometry meshed in " + geomTime + " ms, total time " + (parseTime + geomTime) + " ms.");
                    }
                    catch (Exception e)
                    {
                        if (e is XbimException || e is NotImplementedException)
                        {
                            // Errors we have already handled or know about. Keep details brief in the log
                            Logger.ErrorFormat("One or more errors converting {0}. Exiting...", origFileName);
                            CreateLogFile(origFileName, eventTrace.Events);

                            DisplayError(string.Format("One or more errors converting {0}, {1}", origFileName, e.Message));
                        }
                        else
                        {
                            // Unexpected failures. Log exception details
                            Logger.Fatal(String.Format("Fatal Error converting {0}. Exiting...", origFileName), e);
                            CreateLogFile(origFileName, eventTrace.Events);

                            DisplayError(string.Format("Fatal Error converting {0}, {1}", origFileName, e.Message));
                        }
                    }
                    int errors = (from e in eventTrace.Events
                                  where (e.EventLevel > EventLevel.INFO)
                                  select e).Count();
                    if (errors > 0)
                    {
                        CreateLogFile(origFileName, eventTrace.Events);
                    }
                    totErrors += errors;
                }
            }
            GetInput();
            Logger.Info("XbimConvert finished successfully...");
            return(totErrors);
        }
예제 #2
0
        static int Main(string[] args)
        {
            var serviceProvider = ConfigureServices();

            SetupXbimLogging(serviceProvider);
            IfcStore.ModelProviderFactory.UseHeuristicModelProvider();

            int totErrors = 0;

            // We need to use the logger early to initialise before we use EventTrace
            Logger.LogDebug("XbimConvert starting...");

            arguments = Params.ParseParams(args);

            if (!arguments.IsValid)
            {
                return(-1);
            }

            var SubMode = SearchOption.TopDirectoryOnly;

            if (arguments.ProcessSubDir)
            {
                SubMode = SearchOption.AllDirectories;
            }

            var files = Directory.GetFiles(arguments.Specdir, arguments.Specpart, SubMode);

            if (files.Length == 0)
            {
                Console.WriteLine("Invalid IFC filename or filter: {0}, current directory is: {1}", args[0], Directory.GetCurrentDirectory());
                return(-1);
            }

            long parseTime = 0;
            long geomTime  = 0;

            foreach (var origFileName in files)
            {
                using (Logger.BeginScope(origFileName))
                {
                    try
                    {
                        Console.WriteLine("Starting conversion of {0}", origFileName);
                        Logger.LogInformation("Starting conversion of {0}", origFileName);
                        string xbimFileName = BuildFileName(origFileName, ".xbim");
                        System.Diagnostics.Stopwatch watch        = new System.Diagnostics.Stopwatch();
                        ReportProgressDelegate       progDelegate = delegate(int percentProgress, object userState)
                        {
                            if (!arguments.IsQuiet)
                            {
                                Console.Write(string.Format("{0:D5} Converted", percentProgress));
                                ResetCursor(Console.CursorTop);
                            }
                        };
                        watch.Start();
                        using (var model = ParseModelFile(origFileName, xbimFileName, arguments.Caching))
                        {
                            parseTime = watch.ElapsedMilliseconds;
                            if (!arguments.NoGeometry)
                            {
                                // Process Geometry
                                var wexbimFile = BuildFileName(origFileName, ".wexbim");
                                var m3D        = new Xbim3DModelContext(model);
                                try
                                {
                                    m3D.CreateContext(progDelegate: progDelegate);
                                }
                                catch (Exception ce)
                                {
                                    Console.WriteLine("Error compiling geometry\n" + ce.Message);
                                    Logger.LogError(ce, "Failed to compile geometry");
                                }

                                geomTime = watch.ElapsedMilliseconds - parseTime;

                                using (var wexbimStream = new FileStream(wexbimFile, FileMode.Create, FileAccess.Write))
                                {
                                    using (var wexBimBinaryWriter = new BinaryWriter(wexbimStream))
                                    {
                                        model.SaveAsWexBim(wexBimBinaryWriter);
                                        wexBimBinaryWriter.Close();
                                    }
                                    wexbimStream.Close();
                                }
                                Logger.LogInformation("Created Wexbim file {wexbim}", wexbimFile);
                            }

                            model.SaveAs(xbimFileName);
                            Logger.LogInformation("Created Xbim File {xbim}", xbimFileName);
                            model.Dispose();
                            watch.Stop();
                        }

                        GC.Collect();
                        ResetCursor(Console.CursorTop + 1);
                        Console.WriteLine("Success. Parsed in " + parseTime + " ms, geometry meshed in " + geomTime + " ms, total time " + (parseTime + geomTime) + " ms.");
                    }
                    catch (Exception e)
                    {
                        if (e is XbimException || e is NotImplementedException)
                        {
                            // Errors we have already handled or know about. Keep details brief in the log
                            Logger.LogError("One or more errors converting {0}. Exiting...", origFileName);

                            DisplayError(string.Format("One or more errors converting {0}, {1}", origFileName, e.Message));
                        }
                        else
                        {
                            // Unexpected failures. Log exception details
                            Logger.LogError(String.Format("Fatal Error converting {0}. Exiting...", origFileName), e);

                            DisplayError(string.Format("Fatal Error converting {0}, {1}", origFileName, e.Message));
                        }
                    }
                }
            }
            GetInput();
            Logger.LogInformation("XbimConvert finished successfully...");
            return(totErrors);
        }