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