static void Main(string[] args)
        {
            var ut_name = "Alignment-TUMAdsk-1";

            var db = new DatabaseIfc(ModelView.Ifc4X3NotAssigned);

            db.Factory.Options.GenerateOwnerHistory = false;

            var site = new IfcSite(db, "site");

            var project = new IfcProject(db, ut_name)
            {
                Name        = ut_name,
                Description = "sample for a single horizontal line segment - geometry + semantic part"
            };

            new IfcRelAggregates(project, new List <IfcObjectDefinition>()
            {
                site
            });

            // alignment
            var alignment = new IfcAlignment(site);

            alignment.AddComment("Entry point for alignment container");

            var horiz = new IfcAlignmentHorizontal(alignment);

            horiz.AddComment("groups all horizontal segments using an IfcRelNests rel");

            var pt1 = new IfcCartesianPoint(db, 3, 1, 0);

            var semanticPartOfTheSegment = new IfcAlignmentHorizontalSegment(
                pt1,
                0,
                0,
                0,
                56.4,
                IfcAlignmentHorizontalSegmentTypeEnum.LINE);

            semanticPartOfTheSegment.AddComment("Semantic part of the line segment");

            var semanticSegment1 = new IfcAlignmentSegment(horiz, semanticPartOfTheSegment);

            semanticSegment1.AddComment("link semantic segment with horizontal alignment container");

            // build geometric part
            var line = new IfcLine(pt1, new IfcVector(new IfcDirection(db, 0, 0), 1));

            line.AddComment("line geometry");
            var curveSeg = new IfcCurveSegment(IfcTransitionCode.CONTINUOUS, new IfcAxis1Placement(pt1), new IfcNonNegativeLengthMeasure(0), new IfcNonNegativeLengthMeasure(56.4), line);

            curveSeg.AddComment("Trim the entire line");

            var shapeRep = new IfcShapeRepresentation(curveSeg, ShapeRepresentationType.Curve2D);
            IfcProductDefinitionShape shape1 = new IfcProductDefinitionShape(shapeRep)
            {
                Name = "Horizontal alignment geom rep"
            };

            shape1.AddComment("link the geometric rep of a line to the representation of the horizontal segment");

            horiz.Representation = shape1;

            db.WriteFile(ut_name + ".ifc");
        }