Example #1
0
 public Builder withSchema(IfcSchema schema)
 {
     this.request.schema = schema;
     return(this);
 }
        public void CreateProductIfcTest()
        {
            // === create request
            string  projectName        = "test project";
            string  projectDescription = "project for test purposes";
            Project project            =
                new Project.Builder().withName(projectName)
                .withDescription(projectDescription)
                .build();
            string personGivenName  = "Cedric";
            string personFamilyName = "Mélange";
            string personIdentifier = "cmela";
            Person person           =
                new Person.Builder().withGivenName(personGivenName)
                .withFamilyName(personFamilyName)
                .withIdentifier(personIdentifier)
                .build();
            string       organizationName        = "EC Life";
            string       organizationDescription = "EC Life - for an easy, economical and ecological life";
            string       organizationIdentifier  = "ECL";
            Organization organization            =
                new Organization.Builder().withName(organizationName)
                .withDescription(organizationDescription)
                .withIdentifier(organizationIdentifier)
                .build();
            string      applicationName       = "ECL IfcCreator";
            string      applicationVersion    = "1.0";
            string      applicationIdentifier = "IfcCreator";
            Application application           =
                new Application.Builder().withName(applicationName)
                .withVersion(applicationVersion)
                .withIdentifier(applicationIdentifier)
                .withOrganization(new Organization.Builder().build())
                .build();
            OwnerHistory owner =
                new OwnerHistory.Builder().withPerson(person)
                .withOrganization(organization)
                .withApllication(application)
                .build();

            string productName        = "test product";
            string productDescription = "product for test purposes";
            string constructionString = "SHAPE({POLYLINE2D([[0,0],[0,1],[1,1],[1,0]])}).EXTRUDE(1)";
            var    material0          = new Material.Builder().withName("material0")
                                        .withColor(new ColorRGBa(1, 0, 0, 1))
                                        .withRoughness(0)
                                        .isMetal()
                                        .build();
            var material1 = new Material.Builder().withName("material1")
                            .withColor(new ColorRGBa(0, 0, 1, 1))
                            .withRoughness(1)
                            .isDielectric()
                            .build();
            RepresentationItem representationItem0 =
                new RepresentationItem.Builder()
                .withConstructionString(constructionString)
                .withMaterial(material0.id)
                .build();
            var rotationQ = new Quaternion();

            rotationQ.SetFromEuler(new double[] { 90, 90, 90 });
            RepresentationItem representationItem1 =
                new RepresentationItem.Builder()
                .withConstructionString(constructionString)
                .withTransformation(new Transformation.Builder()
                                    .withTranslation(new double[] { 2, 0, 0 })
                                    .withRotation(rotationQ.ToArray())
                                    .build())
                .withMaterial(material1.id)
                .build();
            Representation representation =
                new Representation.Builder().AddRepresentationItem(representationItem0)
                .AddRepresentationItem(representationItem1)
                .addMaterial(material0)
                .addMaterial(material1)
                .build();
            Product product =
                new Product.Builder().withName(productName)
                .withDescription(productDescription)
                .withType(ProductType.PROXY)
                .addRepresenation(representation)
                .build();
            IfcSchema         schema  = IfcSchema.IFC2X3;
            ProductIfcRequest request =
                new ProductIfcRequest.Builder().withProject(project)
                .withOwner(owner)
                .withProduct(product)
                .withSchema(schema)
                .build();

            // === convert to IFC stream
            MemoryStream       memStream         = new MemoryStream();
            IProductIfcCreator productIfcCreator = new ProductIfcCreator();

            productIfcCreator.CreateProductIfc(request, memStream);

            // === write to IFC file
            using (FileStream fileStream = File.Create("./product_ifc_creator_test.ifc"))
            {
                memStream.WriteTo(fileStream);
            }

            // === parse IFC stream
            Serializer serializer = new StepSerializer(typeof(IfcProject),
                                                       null,
                                                       schema.ToString(),
                                                       null,
                                                       "ECL IfcCreator");
            IfcProject parsedProject = (IfcProject)serializer.ReadObject(memStream);

            // === test values
            Assert.Equal(projectName, parsedProject.Name);
            Assert.Equal(projectDescription, parsedProject.Description);
            IfcOwnerHistory parsedowner = parsedProject.OwnerHistory;

            Assert.Equal(personGivenName, parsedowner.OwningUser.ThePerson.GivenName);
            Assert.Equal(personFamilyName, parsedowner.OwningUser.ThePerson.FamilyName);
            Assert.Equal(personIdentifier, parsedowner.OwningUser.ThePerson.Identification.Value.Value);
            Assert.Equal(organizationName, parsedowner.OwningUser.TheOrganization.Name);
            Assert.Equal(organizationDescription, parsedowner.OwningUser.TheOrganization.Description);
            Assert.Equal(applicationName, parsedowner.OwningApplication.ApplicationFullName);
            Assert.Equal(applicationVersion, parsedowner.OwningApplication.Version);
            Assert.Equal(applicationIdentifier, parsedowner.OwningApplication.ApplicationIdentifier.Value);
            IfcSite parsedSite = (IfcSite)GetItem(GetItem(parsedProject.IsDecomposedBy, 0).RelatedObjects, 0);

            Assert.Equal(personGivenName, parsedSite.OwnerHistory.OwningUser.ThePerson.GivenName);
            IfcBuilding parsedBuilding = (IfcBuilding)GetItem(GetItem(parsedSite.IsDecomposedBy, 0).RelatedObjects, 0);

            Assert.Equal(personGivenName, parsedBuilding.OwnerHistory.OwningUser.ThePerson.GivenName);
            IfcBuildingStorey parsedStorey = (IfcBuildingStorey)GetItem(GetItem(parsedBuilding.IsDecomposedBy, 0).RelatedObjects, 0);

            Assert.Equal(personGivenName, parsedStorey.OwnerHistory.OwningUser.ThePerson.GivenName);
            IfcProduct parsedProduct = (IfcProduct)GetItem(GetItem(parsedStorey.ContainsElements, 0).RelatedElements, 0);

            Assert.Equal(personGivenName, parsedProduct.OwnerHistory.OwningUser.ThePerson.GivenName);
            Assert.Equal(productName, parsedProduct.Name);
            Assert.Equal(productDescription, parsedProduct.Description);
            Assert.Equal(1, parsedProduct.Representation.Representations.Count);
            IfcRepresentation parsedShapeRepresentation = GetItem(parsedProduct.Representation.Representations, 0);

            Assert.Equal("Body", parsedShapeRepresentation.RepresentationIdentifier);
            Assert.Equal("SolidModel", parsedShapeRepresentation.RepresentationType);
            Assert.Equal(2, parsedShapeRepresentation.Items.Count);
            Assert.IsType <IfcExtrudedAreaSolid>(GetItem(parsedShapeRepresentation.Items, 0));
            Assert.IsType <IfcExtrudedAreaSolid>(GetItem(parsedShapeRepresentation.Items, 1));
            var parsedItem0 = (IfcExtrudedAreaSolid)GetItem(parsedShapeRepresentation.Items, 0);

            Assert.Equal(1, parsedItem0.StyledByItem.Count);
            var StyledItem0 = GetItem(parsedItem0.StyledByItem, 0);

            Assert.Equal("material0", ((IfcSurfaceStyle)GetItem(StyledItem0.Styles, 0)).Name);
            var parsedItem1 = (IfcExtrudedAreaSolid)GetItem(parsedShapeRepresentation.Items, 1);

            Assert.Equal(2, parsedItem1.Position.Location.Coordinates[0].Value);
            Assert.Equal(0, parsedItem1.Position.Location.Coordinates[1].Value);
            Assert.Equal(0, parsedItem1.Position.Location.Coordinates[2].Value);
            Assert.Equal(1, parsedItem1.Position.Axis.DirectionRatios[0].Value, 5);
            Assert.Equal(0, parsedItem1.Position.Axis.DirectionRatios[1].Value, 5);
            Assert.Equal(0, parsedItem1.Position.Axis.DirectionRatios[2].Value, 5);
            Assert.Equal(0, parsedItem1.Position.RefDirection.DirectionRatios[0].Value, 5);
            Assert.Equal(0, parsedItem1.Position.RefDirection.DirectionRatios[1].Value, 5);
            Assert.Equal(1, parsedItem1.Position.RefDirection.DirectionRatios[2].Value, 5);
            Assert.Equal(1, parsedItem0.StyledByItem.Count);
            var StyledItem1 = GetItem(parsedItem1.StyledByItem, 0);

            Assert.Equal("material1", ((IfcSurfaceStyle)GetItem(StyledItem1.Styles, 0)).Name);
        }
Example #3
0
 private ProductIfcRequest()
 {
     this.schema = IfcSchema.IFC2X3;
 }