public virtual void SaveAsXml(Stream stream, XmlWriterSettings xmlSettings, XbimXmlSettings xbimSettings = null,
                                      configuration configuration = null, ReportProgressDelegate progress = null)
        {
            var schema = Header.FileSchema.Schemas.FirstOrDefault();

            using (var xmlWriter = XmlWriter.Create(stream, xmlSettings))
            {
                switch (SchemaVersion)
                {
                case XbimSchemaVersion.Ifc2X3:
                    var writer3 = new IfcXmlWriter3();
                    writer3.Write(this, xmlWriter, GetXmlOrderedEntities(schema));
                    break;

                case XbimSchemaVersion.Ifc4:
                    var writer4 = new XbimXmlWriter4(XbimXmlSettings.IFC4Add2);
                    writer4.Write(this, xmlWriter, GetXmlOrderedEntities(schema));
                    break;

                default:
                    if (xbimSettings == null)
                    {
                        Logger.LogWarning("No xbimsettings set. Defaulting to Ifc4 Add2");
                        xbimSettings = XbimXmlSettings.IFC4Add2;
                    }
                    var writer = new XbimXmlWriter4(xbimSettings);
                    writer.Write(this, xmlWriter);
                    break;
                }
            }
        }
Example #2
0
        public virtual void SaveAsXml(Stream stream, XmlWriterSettings xmlSettings, XbimXmlSettings xbimSettings = null, configuration configuration = null, ReportProgressDelegate progress = null)
        {
            using (var xmlWriter = XmlWriter.Create(stream, xmlSettings))
            {
                var schema = _entityFactory.SchemasIds.FirstOrDefault();
                switch (schema)
                {
                case "IFC2X3":
                    var writer3 = new IfcXmlWriter3();
                    writer3.Write(this, xmlWriter, GetXmlOrderedEntities(schema));
                    break;

                case "IFC4":
                    var writer4 = new XbimXmlWriter4(configuration.IFC4Add1, XbimXmlSettings.IFC4Add1);
                    writer4.Write(this, xmlWriter, GetXmlOrderedEntities(schema));
                    break;

                case "COBIE_EXPRESS":
                    var writerCobie = new XbimXmlWriter4(configuration.COBieExpress, XbimXmlSettings.COBieExpress);
                    writerCobie.Write(this, xmlWriter, GetXmlOrderedEntities(schema));
                    break;

                default:
                    var writer = new XbimXmlWriter4(configuration, xbimSettings);
                    writer.Write(this, xmlWriter);
                    break;
                }
                xmlWriter.Close();
            }
        }
Example #3
0
        /// <summary>
        /// Saves a model as IfcXML file
        /// </summary>
        /// <param name="model"></param>
        /// <param name="stream"></param>
        /// <param name="progDelegate"></param>
        public static void SaveAsIfcXml(this IModel model, Stream stream, ReportProgressDelegate progDelegate = null)
        {
            var settings = new XmlWriterSettings {
                Indent = true
            };
            var schema = model.SchemaVersion;

            using (var xmlWriter = XmlWriter.Create(stream, settings))
            {
                if (schema == XbimSchemaVersion.Ifc2X3)
                {
                    var writer = new IfcXmlWriter3();
                    writer.Write(model, xmlWriter, model.Instances);
                }
                else if (schema == XbimSchemaVersion.Ifc4 || schema == XbimSchemaVersion.Ifc4x1)
                {
                    var writer    = new XbimXmlWriter4(XbimXmlSettings.IFC4Add2);
                    var project   = model.Instances.OfType <Ifc4.Kernel.IfcProject>();
                    var products  = model.Instances.OfType <Ifc4.Kernel.IfcObject>();
                    var relations = model.Instances.OfType <Ifc4.Kernel.IfcRelationship>();

                    var all =
                        new IPersistEntity[] { }
                    //start from root
                    .Concat(project)
                    //add all products not referenced in the project tree
                    .Concat(products)
                    //add all relations which are not inversed
                    .Concat(relations)
                    //make sure all other objects will get written
                    .Concat(model.Instances);

                    writer.Write(model, xmlWriter, all);
                }
                xmlWriter.Close();
            }
        }