コード例 #1
0
        private static void WriteXml(IModel model, string path)
        {
            using (var xml = XmlWriter.Create(path, new XmlWriterSettings {
                Indent = true
            }))
            {
                var writer    = new XbimXmlWriter4(configuration.IFC4Add1);
                var project   = model.Instances.OfType <IfcProject>();
                var products  = model.Instances.OfType <IfcObject>();
                var relations = model.Instances.OfType <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, xml, all);
                xml.Close();
            }
        }
コード例 #2
0
        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;
                }
            }
        }
コード例 #3
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();
            }
        }
コード例 #4
0
        public void Ifc4HeaderSerialization()
        {
            const string outPath = "..\\..\\HeaderSampleIfc4.xml";

            using (var model = new IO.Memory.MemoryModel(new EntityFactory()))
            {
                model.Header.FileName.Name = "Sample model";
                model.Header.FileName.AuthorName.Add("Martin");
                model.Header.FileName.AuthorizationMailingAddress.Add("*****@*****.**");
                model.Header.FileName.AuthorizationName = "Martin Cerny, xBIM Team";
                model.Header.FileName.Organization.Add("xBIM Team");
                model.Header.FileName.OriginatingSystem   = "xBIM Toolkit";
                model.Header.FileName.PreprocessorVersion = "4.0";
                model.Header.FileName.TimeStamp           = DateTime.Now.ToString("s");
                model.Header.FileDescription.Description.Add("xBIM Team Model View Definition");
                model.Header.FileDescription.ImplementationLevel = "1.0";

                using (var xml = XmlWriter.Create(outPath, new XmlWriterSettings {
                    Indent = true
                }))
                {
                    var writer = new XbimXmlWriter4(configuration.IFC4Add1);
                    writer.Write(model, xml);
                    xml.Close();
                }

                var errs = ValidateIfc4(outPath);
                Assert.AreEqual(0, errs);
            }

            //read it back and validate it is the same
            using (var model = new IO.Memory.MemoryModel(new EntityFactory()))
            {
                model.LoadXml(outPath);

                Assert.IsTrue(model.Header.FileName.Name == "Sample model");
                Assert.IsTrue(model.Header.FileName.OriginatingSystem == "xBIM Toolkit");
                Assert.IsTrue(model.Header.FileName.PreprocessorVersion == "4.0");
            }

            //check version info
            using (var file = File.OpenRead(outPath))
            {
                var header = XbimXmlReader4.ReadHeader(file);
                Assert.AreEqual("IFC4, IFC4Add1", header.SchemaVersion);
            }
        }
コード例 #5
0
ファイル: Helper.cs プロジェクト: martin1cerny/ProductData
        //public static  string GetPathInSamples(string directory, string name)
        //{
        //    var dir = Path.Combine(@"..\..\..\..\SampleFiles", directory);
        //    if (!Directory.Exists(dir))
        //        Directory.CreateDirectory(dir);

        //    return Path.Combine(dir, name);
        //}


        /// <summary>
        /// Writes IFC4 XML file with prefered root types. For example IfcProject or IfcProjectLibrary are usually
        /// used as roots. But if for the purpose of an example there is other main entity that should be used as
        /// a root so that the general structure of the XML file is most clear for this entity.
        /// </summary>
        /// <param name="model">xBIM Model</param>
        /// <param name="path">XML output path</param>
        /// <param name="rootTypes">Prefered types. Orded is used for the preference.</param>
        public static void SaveXmlWithRoots(IModel model, string path, params Type[] rootTypes)
        {
            using (var xml = XmlWriter.Create(path, new XmlWriterSettings {
                Indent = true, IndentChars = "  "
            }))
            {
                var w = new XbimXmlWriter4(XbimXmlSettings.IFC4Add2);

                // by defining order we can say what will be used as the root object
                IEnumerable <IPersistEntity> entities = new IPersistEntity[0];
                foreach (var t in rootTypes)
                {
                    entities = entities.Concat(model.Instances.OfType(t.Name, false));
                }
                // add everything. Duplicated entities will be written only once.
                entities = entities.Concat(model.Instances);

                w.Write(model, xml, entities);
                xml.Close();
            }
        }
コード例 #6
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();
            }
        }
コード例 #7
0
        public static void ComplexProperty()
        {
            var credentials = new XbimEditorCredentials
            {
                ApplicationDevelopersName = "xBIM Team",
                ApplicationFullName       = "xBIM Toolkit",
                ApplicationIdentifier     = "xBIM",
                ApplicationVersion        = "4.0",
                EditorsFamilyName         = "Cerny",
                EditorsGivenName          = "Martin",
                EditorsOrganisationName   = "CAS"
            };

            using (var model = IfcStore.Create(credentials, XbimSchemaVersion.Ifc4, XbimStoreType.InMemoryModel))
            //using (var model = new MemoryModel(new Xbim.Ifc4.EntityFactoryIfc4()))
            {
                ComplexPropertiesExample.model = model;

                using (var txn = model.BeginTransaction("Example"))
                {
                    var lib = New <IfcProjectLibrary>(l => l.Name = "Declaration of Performance");
                    var mm  = New <IfcSIUnit>(u => {
                        u.Name     = Xbim.Ifc4.Interfaces.IfcSIUnitName.METRE;
                        u.Prefix   = Xbim.Ifc4.Interfaces.IfcSIPrefix.MILLI;
                        u.UnitType = Xbim.Ifc4.Interfaces.IfcUnitEnum.LENGTHUNIT;
                    });
                    lib.UnitsInContext = New <IfcUnitAssignment>(ua => {
                        ua.Units.Add(mm);
                    });

                    var declarations = New <IfcRelDeclares>(rel =>
                    {
                        rel.RelatingContext = lib;
                    }).RelatedDefinitions;

                    var psetTemplate = New <IfcPropertySetTemplate>(ps => {
                        ps.Name             = "dimensions";
                        ps.ApplicableEntity = nameof(IfcElement);
                    });

                    declarations.Add(psetTemplate);

                    var lengthTemplate = New <IfcComplexPropertyTemplate>(c => {
                        c.Name = "length";
                        c.HasPropertyTemplates.AddRange(new[] {
                            New <IfcSimplePropertyTemplate>(v => {
                                v.Name               = "Value";
                                v.TemplateType       = Xbim.Ifc4.Interfaces.IfcSimplePropertyTemplateTypeEnum.P_SINGLEVALUE;
                                v.PrimaryUnit        = mm;
                                v.PrimaryMeasureType = nameof(IfcLengthMeasure);
                            }),
                            New <IfcSimplePropertyTemplate>(v => {
                                v.Name               = "ReferenceDocument";
                                v.TemplateType       = Xbim.Ifc4.Interfaces.IfcSimplePropertyTemplateTypeEnum.P_REFERENCEVALUE;
                                v.PrimaryMeasureType = nameof(IfcDocumentReference);
                            })
                        });
                    });
                    psetTemplate.HasPropertyTemplates.Add(lengthTemplate);


                    var brick = New <IfcBuildingElementPart>(b => {
                        b.Name           = "Porotherm 50 EKO+ Profi R";
                        b.PredefinedType = Xbim.Ifc4.Interfaces.IfcBuildingElementPartTypeEnum.USERDEFINED;
                        b.ObjectType     = "BRICK";
                    });
                    declarations.Add(brick);

                    var pset = New <IfcPropertySet>(ps => {
                        ps.Name = psetTemplate.Name;
                        ps.HasProperties.Add(New <IfcComplexProperty>(c => {
                            c.Name = lengthTemplate.Name?.ToString();
                            c.HasProperties.AddRange(new IfcProperty[] {
                                New <IfcPropertySingleValue>(v => {
                                    v.Name         = "Value";
                                    v.Unit         = mm;
                                    v.NominalValue = new IfcLengthMeasure(300);
                                }),
                                New <IfcPropertyReferenceValue>(v => {
                                    v.Name = "ReferenceDocument";
                                    v.PropertyReference = New <IfcDocumentReference>(d => {
                                        d.Identification = "EN 772-1";
                                    });
                                })
                            });
                        }));
                    });
                    New <IfcRelDefinesByTemplate>(r => {
                        r.RelatedPropertySets.Add(pset);
                        r.RelatingTemplate = psetTemplate;
                    });
                    New <IfcRelDefinesByProperties>(r => {
                        r.RelatingPropertyDefinition = pset;
                        r.RelatedObjects.Add(brick);
                    });

                    txn.Commit();
                }

                //model.SaveAs("complex_length.ifcxml");
                model.SaveAs("complex_length.ifc");
                var w   = new XbimXmlWriter4(XbimXmlSettings.IFC4Add2);
                var xml = XmlWriter.Create("complex_length.ifcxml", new XmlWriterSettings {
                    Indent = true, IndentChars = "  "
                });
                var entities = new IPersistEntity[0]
                               .Concat(model.Instances.OfType <IfcProjectLibrary>())
                               .Concat(model.Instances);
                w.Write(model, xml, entities);
                xml.Close();
            }
        }