示例#1
0
        /// <summary>
        /// Creates maps based on surface results. The maps can be displayed in the documentation.
        /// </summary>
        /// <param name="element">Revit element for which result document is built</param>
        /// <param name="resultsInPoints">Result in point collection</param>
        /// <param name="resultTypes">The type of results, values and description that can be displayed on the maps.</param>
        /// <returns>Returns list of documets maps based on results that can be displayed in the documentation</returns>
        private List <DocumentMap> CreateResultMapSeriesForSurfaceElements(Element element, ICollection <ResultInPointSurface> resultsInPoints, IEnumerable <Tuple <ResultTypeSurface, string> > resultTypes)
        {
            List <DocumentMap> vDocMap   = new List <DocumentMap>();
            MapDataGenerator   mapPoints = new MapDataGenerator();

            foreach (Tuple <ResultTypeSurface, string> forceDesc in resultTypes)
            {
                List <double> resData = resultsInPoints.Select(s => s[forceDesc.Item1]).ToList();
                if (resData.Max(s => (Math.Abs(s))) < 1.0e-8)
                {
                    continue;
                }
                AnalyticalModel slab        = element as AnalyticalModel;
                DisplayUnit     displayUnit = DisplayUnit.IMPERIAL;
                if (Server.UnitSystem == Autodesk.Revit.DB.ResultsBuilder.UnitsSystem.Metric)
                {
                    displayUnit = DisplayUnit.METRIC;
                }
                ElementAnalyser elementAnalyser = new ElementAnalyser(displayUnit);
                ElementInfo     info            = elementAnalyser.Analyse(element);
                XYZ             xyz             = new XYZ();
                if (info != null)
                {
                    foreach (ResultInPointSurface resInPt in resultsInPoints)
                    {
                        mapPoints.AddPoint(new XYZ(resInPt[ResultTypeSurface.X], resInPt[ResultTypeSurface.Y], resInPt[ResultTypeSurface.Z]), resInPt[forceDesc.Item1]);
                    }
                    var contourAndHoles = getContourAndHolePoints(info);
                    contourAndHoles.Item1.ForEach(s => mapPoints.AddPointToContour(s));
                    contourAndHoles.Item2.ForEach(s => mapPoints.AddHole(s));
                    UnitType    ut     = forceDesc.Item1.GetUnitType();
                    DocumentMap docMap = new DocumentMap(ut, UnitsConverter.GetInternalUnit(ut));
                    docMap.Title = forceDesc.Item2;
                    int nofPoints = mapPoints.Count;
                    for (int ptId = 0; ptId < nofPoints; ptId++)
                    {
                        UV pt = mapPoints.GetPoint(ptId);
                        docMap.AddPoint(pt.U, pt.V, mapPoints.GetValue(ptId));
                    }
                    List <List <int> > holes = mapPoints.Holes;
                    foreach (List <int> hole in holes)
                    {
                        docMap.AddHole(hole);
                    }
                    docMap.DefineContour(mapPoints.Contour);
                    vDocMap.Add(docMap);
                }
                mapPoints.Clear();
            }
            return(vDocMap);
        }
示例#2
0
        /// <summary>
        /// Gets the document body for label.
        /// </summary>
        /// <param name="label">label.</param>
        /// <param name="document">document.</param>
        /// <returns>
        /// The body of the document.
        /// </returns>
        public override DocumentBody BuildLabelDocumentBody(Entity label, Autodesk.Revit.DB.Document document)
        {
            switch (label.Schema.SchemaName)
            {
            default:
                return(base.BuildLabelDocumentBody(label, document));

            case "LabelColumn":
            {
                DocumentBody body        = new DocumentBody();
                LabelColumn  labelColumn = new LabelColumn();
                labelColumn.SetProperties(label, document);

                body.Elements.Add(new DocumentTitle(Resources.ResourceManager.GetString("CalculationOptions"), 4));

                if (labelColumn.EnabledInternalForces.Count > 0)
                {
                    body.Elements.Add(new DocumentText(Resources.ResourceManager.GetString("EnabledInternalForces") + ":", true));
                    if (labelColumn.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.FX))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("ColumnFX_Note"), true));
                    }
                    if (labelColumn.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.FY))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("ColumnFY_Note"), true));
                    }
                    if (labelColumn.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.FZ))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("ColumnFZ_Note"), true));
                    }
                    if (labelColumn.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.MX))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("ColumnMX_Note"), true));
                    }
                    if (labelColumn.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.MY))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("ColumnMY_Note"), true));
                    }
                    if (labelColumn.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.MZ))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("ColumnMZ_Note"), true));
                    }
                }

                body.Elements.Add(DocumentElement.GetDocumentElement("CreepCoefficient", labelColumn, this, document));

                body.Elements.Add(new DocumentTitle(Resources.ResourceManager.GetString("Buckling"), 4));
                body.Elements.Add(new DocumentTitle(Resources.ResourceManager.GetString("BucklingDirectionY"), 5));
                if (labelColumn.BucklingDirectionY)
                {
                    body.Elements.Add(DocumentElement.GetDocumentElement("LengthCoefficientY", labelColumn, this, document));
                    body.Elements.Add(DocumentElement.GetDocumentElement("ColumnStructureTypeY", labelColumn, this, document));
                }
                else
                {
                    body.Elements.Add(new DocumentText(Resources.ResourceManager.GetString("NotTakenIntoConsideration"), true));
                }


                body.Elements.Add(new DocumentTitle(Resources.ResourceManager.GetString("BucklingDirectionZ"), 5));
                if (labelColumn.BucklingDirectionZ)
                {
                    body.Elements.Add(DocumentElement.GetDocumentElement("LengthCoefficientZ", labelColumn, this, document));
                    body.Elements.Add(DocumentElement.GetDocumentElement("ColumnStructureTypeZ", labelColumn, this, document));
                }
                else
                {
                    body.Elements.Add(new DocumentText(Resources.ResourceManager.GetString("NotTakenIntoConsideration"), true));
                }


                // longitudinal
                body.Elements.Add(new DocumentTitle(Resources.ResourceManager.GetString("LongitudinalReinforcement"), 4));
                if (labelColumn.LongitudinalReinforcement.Material != null)
                {
                    StructuralAsset assL = Autodesk.Revit.DB.CodeChecking.Engineering.Concrete.RebarUtility.GetMaterialStructuralAsset(labelColumn.LongitudinalReinforcement.Material);
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("Material"), assL.Name));
                }
                else
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("Material"), ""));
                }
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("MinimumYieldStress"), labelColumn.LongitudinalReinforcement.MinimumYieldStress, UnitsConverter.GetInternalUnit(UnitType.UT_Stress), UnitType.UT_Stress, document.GetUnits()));

                if (labelColumn.LongitudinalReinforcement.RebarBarType != null)
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("RebarBarType"), labelColumn.LongitudinalReinforcement.RebarBarType.Name));
                }
                else
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("RebarBarType"), ""));
                }
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("DeformationType"), labelColumn.LongitudinalReinforcement.DeformationType.ToString()));
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("BarDiameter"), labelColumn.LongitudinalReinforcement.BarDiameter, UnitsConverter.GetInternalUnit(UnitType.UT_Bar_Diameter), UnitType.UT_Bar_Diameter, document.GetUnits()));

                // transverse
                body.Elements.Add(new DocumentTitle(Resources.ResourceManager.GetString("TransversalReinforcement"), 4));
                if (labelColumn.TransversalReinforcement.Material != null)
                {
                    StructuralAsset assL = Autodesk.Revit.DB.CodeChecking.Engineering.Concrete.RebarUtility.GetMaterialStructuralAsset(labelColumn.TransversalReinforcement.Material);
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("Material"), assL.Name));
                }
                else
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("Material"), ""));
                }
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("MinimumYieldStress"), labelColumn.TransversalReinforcement.MinimumYieldStress, UnitsConverter.GetInternalUnit(UnitType.UT_Stress), UnitType.UT_Stress, document.GetUnits()));

                if (labelColumn.TransversalReinforcement.RebarBarType != null)
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("RebarBarType"), labelColumn.TransversalReinforcement.RebarBarType.Name));
                }
                else
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("RebarBarType"), ""));
                }
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("DeformationType"), labelColumn.TransversalReinforcement.DeformationType.ToString()));
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("BarDiameter"), labelColumn.TransversalReinforcement.BarDiameter, UnitsConverter.GetInternalUnit(UnitType.UT_Bar_Diameter), UnitType.UT_Bar_Diameter, document.GetUnits()));


                return(body);
            }

            case "LabelBeam":
            {
                DocumentBody body      = new DocumentBody();
                LabelBeam    labelBeam = new LabelBeam();
                labelBeam.SetProperties(label, document);


                body.Elements.Add(new DocumentLineBreak(1));
                body.Elements.Add(new DocumentTitle(Resources.ResourceManager.GetString("CalculationOptions"), 4));

                if (labelBeam.EnabledInternalForces.Count > 0)
                {
                    body.Elements.Add(new DocumentText(Resources.ResourceManager.GetString("EnabledInternalForces") + ":", true));
                    if (labelBeam.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.FX))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("BeamFX_Note"), true));
                    }
                    if (labelBeam.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.FY))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("BeamFY_Note"), true));
                    }
                    if (labelBeam.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.FZ))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("BeamFZ_Note"), true));
                    }
                    if (labelBeam.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.MX))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("BeamMX_Note"), true));
                    }
                    if (labelBeam.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.MY))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("BeamMY_Note"), true));
                    }
                    if (labelBeam.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.MZ))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("BeamMZ_Note"), true));
                    }
                }

                body.Elements.Add(DocumentElement.GetDocumentElement("CreepCoefficient", labelBeam, this, document));

                string interaction = Resources.ResourceManager.GetString("No");
                if (labelBeam.SlabBeamInteraction == ConcreteTypes.BeamSectionType.WithSlabBeamInteraction)
                {
                    interaction = Resources.ResourceManager.GetString("Yes");
                }

                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("SlabBeamInteraction"), interaction));

                // longitudinal
                body.Elements.Add(new DocumentTitle(Resources.ResourceManager.GetString("LongitudinalReinforcement"), 4));
                if (labelBeam.LongitudinalReinforcement.Material != null)
                {
                    StructuralAsset assL = Autodesk.Revit.DB.CodeChecking.Engineering.Concrete.RebarUtility.GetMaterialStructuralAsset(labelBeam.LongitudinalReinforcement.Material);
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("Material"), assL.Name));
                }
                else
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("Material"), ""));
                }
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("MinimumYieldStress"), labelBeam.LongitudinalReinforcement.MinimumYieldStress, UnitsConverter.GetInternalUnit(UnitType.UT_Stress), UnitType.UT_Stress, document.GetUnits()));

                if (labelBeam.LongitudinalReinforcement.RebarBarType != null)
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("RebarBarType"), labelBeam.LongitudinalReinforcement.RebarBarType.Name));
                }
                else
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("RebarBarType"), ""));
                }
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("DeformationType"), labelBeam.LongitudinalReinforcement.DeformationType.ToString()));
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("BarDiameter"), labelBeam.LongitudinalReinforcement.BarDiameter, UnitsConverter.GetInternalUnit(UnitType.UT_Bar_Diameter), UnitType.UT_Bar_Diameter, document.GetUnits()));

                // transverse
                body.Elements.Add(new DocumentTitle(Resources.ResourceManager.GetString("TransversalReinforcement"), 4));
                if (labelBeam.TransversalReinforcement.Material != null)
                {
                    StructuralAsset assL = Autodesk.Revit.DB.CodeChecking.Engineering.Concrete.RebarUtility.GetMaterialStructuralAsset(labelBeam.TransversalReinforcement.Material);
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("Material"), assL.Name));
                }
                else
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("Material"), ""));
                }
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("MinimumYieldStress"), labelBeam.TransversalReinforcement.MinimumYieldStress, UnitsConverter.GetInternalUnit(UnitType.UT_Stress), UnitType.UT_Stress, document.GetUnits()));

                if (labelBeam.TransversalReinforcement.RebarBarType != null)
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("RebarBarType"), labelBeam.TransversalReinforcement.RebarBarType.Name));
                }
                else
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("RebarBarType"), ""));
                }
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("DeformationType"), labelBeam.TransversalReinforcement.DeformationType.ToString()));
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("BarDiameter"), labelBeam.TransversalReinforcement.BarDiameter, UnitsConverter.GetInternalUnit(UnitType.UT_Bar_Diameter), UnitType.UT_Bar_Diameter, document.GetUnits()));

                return(body);
            }

            /// <structural_toolkit_2015>
            case "LabelFloor":
            {
                DocumentBody body       = new DocumentBody();
                LabelFloor   LabelFloor = new LabelFloor();
                LabelFloor.SetProperties(label, document);


                body.Elements.Add(new DocumentLineBreak(1));
                body.Elements.Add(new DocumentTitle(Resources.ResourceManager.GetString("CalculationOptions"), 4));

                if (LabelFloor.EnabledInternalForces.Count > 0)
                {
                    body.Elements.Add(new DocumentText(Resources.ResourceManager.GetString("EnabledInternalForces") + ":", true));
                    if (LabelFloor.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.FX))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("FloorF_Note"), true));
                    }
                    if (LabelFloor.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.FZ))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("FloorQ_Note"), true));
                    }
                    if (LabelFloor.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.MY))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("FloorM_Note"), true));
                    }
                }

                body.Elements.Add(DocumentElement.GetDocumentElement("CreepCoefficient", LabelFloor, this, document));
                // Primary
                body.Elements.Add(new DocumentTitle(Resources.ResourceManager.GetString("PrimaryReinforcement"), 4));
                if (LabelFloor.PrimaryReinforcement.Material != null)
                {
                    StructuralAsset assL = Autodesk.Revit.DB.CodeChecking.Engineering.Concrete.RebarUtility.GetMaterialStructuralAsset(LabelFloor.PrimaryReinforcement.Material);
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("Material"), assL.Name));
                }
                else
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("Material"), ""));
                }
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("MinimumYieldStress"), LabelFloor.PrimaryReinforcement.MinimumYieldStress, UnitsConverter.GetInternalUnit(UnitType.UT_Stress), UnitType.UT_Stress, document.GetUnits()));

                if (LabelFloor.PrimaryReinforcement.RebarBarType != null)
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("RebarBarType"), LabelFloor.PrimaryReinforcement.RebarBarType.Name));
                }
                else
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("RebarBarType"), ""));
                }
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("DeformationType"), LabelFloor.PrimaryReinforcement.DeformationType.ToString()));
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("BarDiameter"), LabelFloor.PrimaryReinforcement.BarDiameter, UnitsConverter.GetInternalUnit(UnitType.UT_Bar_Diameter), UnitType.UT_Bar_Diameter, document.GetUnits()));

                // Secondary
                body.Elements.Add(new DocumentTitle(Resources.ResourceManager.GetString("SecondaryReinforcement"), 4));
                if (LabelFloor.SecondaryReinforcement.Material != null)
                {
                    StructuralAsset assL = Autodesk.Revit.DB.CodeChecking.Engineering.Concrete.RebarUtility.GetMaterialStructuralAsset(LabelFloor.SecondaryReinforcement.Material);
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("Material"), assL.Name));
                }
                else
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("Material"), ""));
                }
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("MinimumYieldStress"), LabelFloor.SecondaryReinforcement.MinimumYieldStress, UnitsConverter.GetInternalUnit(UnitType.UT_Stress), UnitType.UT_Stress, document.GetUnits()));

                if (LabelFloor.SecondaryReinforcement.RebarBarType != null)
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("RebarBarType"), LabelFloor.SecondaryReinforcement.RebarBarType.Name));
                }
                else
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("RebarBarType"), ""));
                }
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("DeformationType"), LabelFloor.SecondaryReinforcement.DeformationType.ToString()));
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("BarDiameter"), LabelFloor.SecondaryReinforcement.BarDiameter, UnitsConverter.GetInternalUnit(UnitType.UT_Bar_Diameter), UnitType.UT_Bar_Diameter, document.GetUnits()));

                return(body);
            }

            case "LabelWall":
            {
                DocumentBody body      = new DocumentBody();
                LabelWall    LabelWall = new LabelWall();
                LabelWall.SetProperties(label, document);


                body.Elements.Add(new DocumentLineBreak(1));
                body.Elements.Add(new DocumentTitle(Resources.ResourceManager.GetString("CalculationOptions"), 4));

                if (LabelWall.EnabledInternalForces.Count > 0)
                {
                    body.Elements.Add(new DocumentText(Resources.ResourceManager.GetString("EnabledInternalForces") + ":", true));
                    if (LabelWall.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.FX))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("WallF_Note"), true));
                    }
                    if (LabelWall.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.FZ))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("WallQ_Note"), true));
                    }
                    if (LabelWall.EnabledInternalForces.Contains(ConcreteTypes.EnabledInternalForces.MX))
                    {
                        body.Elements.Add(new DocumentText("- " + Resources.ResourceManager.GetString("WallM_Note"), true));
                    }
                }

                body.Elements.Add(DocumentElement.GetDocumentElement("CreepCoefficient", LabelWall, this, document));
                // Vertical
                body.Elements.Add(new DocumentTitle(Resources.ResourceManager.GetString("VerticalReinforcement"), 4));
                if (LabelWall.VerticalReinforcement.Material != null)
                {
                    StructuralAsset assL = Autodesk.Revit.DB.CodeChecking.Engineering.Concrete.RebarUtility.GetMaterialStructuralAsset(LabelWall.VerticalReinforcement.Material);
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("Material"), assL.Name));
                }
                else
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("Material"), ""));
                }
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("MinimumYieldStress"), LabelWall.VerticalReinforcement.MinimumYieldStress, UnitsConverter.GetInternalUnit(UnitType.UT_Stress), UnitType.UT_Stress, document.GetUnits()));

                if (LabelWall.VerticalReinforcement.RebarBarType != null)
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("RebarBarType"), LabelWall.VerticalReinforcement.RebarBarType.Name));
                }
                else
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("RebarBarType"), ""));
                }
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("DeformationType"), LabelWall.VerticalReinforcement.DeformationType.ToString()));
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("BarDiameter"), LabelWall.VerticalReinforcement.BarDiameter, UnitsConverter.GetInternalUnit(UnitType.UT_Bar_Diameter), UnitType.UT_Bar_Diameter, document.GetUnits()));

                // Horizontal
                body.Elements.Add(new DocumentTitle(Resources.ResourceManager.GetString("HorizontalReinforcement"), 4));
                if (LabelWall.HorizontalReinforcement.Material != null)
                {
                    StructuralAsset assL = Autodesk.Revit.DB.CodeChecking.Engineering.Concrete.RebarUtility.GetMaterialStructuralAsset(LabelWall.HorizontalReinforcement.Material);
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("Material"), assL.Name));
                }
                else
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("Material"), ""));
                }
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("MinimumYieldStress"), LabelWall.HorizontalReinforcement.MinimumYieldStress, UnitsConverter.GetInternalUnit(UnitType.UT_Stress), UnitType.UT_Stress, document.GetUnits()));

                if (LabelWall.HorizontalReinforcement.RebarBarType != null)
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("RebarBarType"), LabelWall.HorizontalReinforcement.RebarBarType.Name));
                }
                else
                {
                    body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("RebarBarType"), ""));
                }
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("DeformationType"), LabelWall.HorizontalReinforcement.DeformationType.ToString()));
                body.Elements.Add(new DocumentValueWithName(Resources.ResourceManager.GetString("BarDiameter"), LabelWall.HorizontalReinforcement.BarDiameter, UnitsConverter.GetInternalUnit(UnitType.UT_Bar_Diameter), UnitType.UT_Bar_Diameter, document.GetUnits()));

                return(body);
            }
                /// </structural_toolkit_2015>
            }
        }
示例#3
0
        /// <summary>
        /// Runs calculation\operations for cref="BeamElement" and cref="ColumnElement".
        /// </summary>
        /// <param name="obj">cref="BeamElement" object or cref="ColumnElement" object.</param>
        /// <returns>Result of calculation.</returns>
        public bool Run(ObjectDataBase obj)
        {
            ElementDataBase elementData = obj as ElementDataBase;

            if (obj != null)
            {
                switch (elementData.Category)
                {
                default:
                    break;

                case Autodesk.Revit.DB.BuiltInCategory.OST_ColumnAnalytical:
                case Autodesk.Revit.DB.BuiltInCategory.OST_BeamAnalytical:
                    if (elementData.Result is ResultLinearElement)
                    {
                        CodeCheckingConcreteExample.Main.ResultLinearElement res = elementData.Result as ResultLinearElement;
                        if (res != null)
                        {
                            elementData.ListSectionData.ForEach(s => res.ValuesInPointsData.AddRange((s as LinearSection).GetCalcResultsInPoint().DataRaw));
                        }

                        UnitType        xUnitType = ResultTypeLinear.X.GetUnitType();
                        DisplayUnitType xInternalDisplayUnitType = UnitsConverter.GetInternalUnit(xUnitType);

                        // add info
                        IEnumerable <IGrouping <String, Tuple <String, Double> > > infoInSec = elementData.ListSectionData.
                                                                                               SelectMany(lsd => (lsd as LinearSection).DesignInfo.Select(dw => new Tuple <String, Double>(dw, (lsd.CalcPoint as CalcPointLinear).CoordAbsolute))).
                                                                                               GroupBy(s => s.Item1);

                        // add warnings
                        IEnumerable <IGrouping <String, Tuple <String, Double> > > warningsInSec = elementData.ListSectionData.
                                                                                                   SelectMany(lsd => (lsd as LinearSection).DesignWarning.Select(dw => new Tuple <String, Double>(dw, (lsd.CalcPoint as CalcPointLinear).CoordAbsolute))).
                                                                                                   GroupBy(s => s.Item1);

                        // add errors
                        IEnumerable <IGrouping <String, Tuple <String, Double> > > errosInSec = elementData.ListSectionData.
                                                                                                SelectMany(lsd => (lsd as LinearSection).DesignError.Select(dw => new Tuple <String, Double>(dw, (lsd.CalcPoint as CalcPointLinear).CoordAbsolute))).
                                                                                                GroupBy(s => s.Item1);

                        if (errosInSec.Count() > 0)
                        {
                            getResultStatusMessage(errosInSec, xInternalDisplayUnitType).ForEach(s => elementData.AddFormatedError(s));
                            elementData.Status.Status = Status.Failed;
                        }
                        else
                        {
                            if (warningsInSec.Count() > 0)
                            {
                                getResultStatusMessage(warningsInSec, xInternalDisplayUnitType).ForEach(s => elementData.AddFormatedWarning(s));
                                if (Status.Failed != elementData.Status.Status)
                                {
                                    elementData.Status.Status = Status.Warning;
                                }
                            }
                            if (infoInSec.Count() > 0)
                            {
                                getResultStatusMessage(infoInSec, xInternalDisplayUnitType).ForEach(s => elementData.AddFormatedInfo(s));
                            }
                        }
                        if (Autodesk.Revit.DB.CodeChecking.Storage.Status.Undefined == elementData.Status.Status)
                        {
                            elementData.Status.Status = Autodesk.Revit.DB.CodeChecking.Storage.Status.Succeed;
                        }
                    }
                    break;
                }
            }

            return(true);
        }
        /// <summary>
        /// Fills document body object with formatted reinforcement calculation results
        /// </summary>
        /// <param name="body">DocumentBody to be filled</param>
        /// <param name="linearElementResult">Calculation results schema class</param>
        /// <param name="document">Active Revit document</param>
        /// <param name="elementType">Structural element type</param>
        private void WriteResultsToNoteForLinearElements(DocumentBody body, ResultLinearElement linearElementResult, Autodesk.Revit.DB.Document document, ElementType elementType)
        {
            /////////////////////////// Prepare data
            // Get revit units
            Units units = document.GetUnits();

            // Get raw calculation results as a collection of ResultInPointLinear objects for all element sections ( one ResultInPointLinear per section)
            List <ResultInPointLinear> resultsInPoints = linearElementResult.GetResultsInPointsCollection();

            if (resultsInPoints.Count == 0)
            {
                return;
            }

            /////////////////////////// Add a general reinforcement review to the body( mean and extreme values of reinfocement )

            // Create document section
            DocumentSection resultSummary = new DocumentSection(Resources.ResourceManager.GetString("Summary"), 5);
            // Calculate mean and extreme values
            IEnumerable <ResultTypeLinear> longRnf = new List <ResultTypeLinear> {
                ResultTypeLinear.Atop, ResultTypeLinear.Abottom, ResultTypeLinear.Aleft, ResultTypeLinear.Aright
            };
            double maxLongitudinal  = resultsInPoints.Max(s => (longRnf.Sum(q => s[q]))),
                   minLongitudinal  = resultsInPoints.Min(s => (longRnf.Sum(q => s[q]))),
                   maxSpacing       = resultsInPoints.Max(s => s[ResultTypeLinear.StirrupsSpacing]),
                   minSpacing       = resultsInPoints.Min(s => s[ResultTypeLinear.StirrupsSpacing]),
                   maxX             = resultsInPoints.Max(s => s[ResultTypeLinear.X]),
                   minX             = resultsInPoints.Min(s => s[ResultTypeLinear.X]),
                   meanLongitudinal = resultsInPoints.Average(s => (longRnf.Sum(q => s[q]))),
                   meanTransversal  = resultsInPoints.Average(s => s[ResultTypeLinear.TransversalReinforcemenDensity]);

            // Add them to the section
            resultSummary.Body.Elements.Add((new DocumentValueWithName(Resources.ResourceManager.GetString("MeanReinforcemenDensityLongitudinal"), meanLongitudinal, UnitsConverter.GetInternalUnit(UnitType.UT_Reinforcement_Area), UnitType.UT_Reinforcement_Area, document.GetUnits())));
            resultSummary.Body.Elements.Add((new DocumentValueWithName(Resources.ResourceManager.GetString("MeanTransversalReinforcemenDensity"), meanTransversal, UnitsConverter.GetInternalUnit(UnitType.UT_Reinforcement_Area_per_Unit_Length), UnitType.UT_Reinforcement_Area_per_Unit_Length, document.GetUnits())));
            resultSummary.Body.Elements.Add((new DocumentValueWithName(Resources.ResourceManager.GetString("MaximumLongitudinalReinforcement"), maxLongitudinal, UnitsConverter.GetInternalUnit(UnitType.UT_Reinforcement_Area), UnitType.UT_Reinforcement_Area, document.GetUnits())));
            resultSummary.Body.Elements.Add((new DocumentValueWithName(Resources.ResourceManager.GetString("MinimumLongitudinalReinforcement"), minLongitudinal, UnitsConverter.GetInternalUnit(UnitType.UT_Reinforcement_Area), UnitType.UT_Reinforcement_Area, document.GetUnits())));
            resultSummary.Body.Elements.Add((new DocumentValueWithName(Resources.ResourceManager.GetString("MaximumStirrupsSpacing"), maxSpacing, UnitsConverter.GetInternalUnit(UnitType.UT_Section_Dimension), UnitType.UT_Section_Dimension, document.GetUnits())));
            resultSummary.Body.Elements.Add((new DocumentValueWithName(Resources.ResourceManager.GetString("MinimumStirrupsSpacing"), minSpacing, UnitsConverter.GetInternalUnit(UnitType.UT_Section_Dimension), UnitType.UT_Section_Dimension, document.GetUnits())));
            resultSummary.Level = DetailLevel.General;
            // Add section to the document body
            body.Elements.Add(resultSummary);



            /////////////////////////// Create result tables for deflection, internal forces and reinforcement

            // Create reinforcement table
            List <ResultTypeLinear> nonZeroReinforcement = ResultTypeLinearHelper.ReinforcementResults.Where(s => resultsInPoints.Any(r => Math.Abs(r[s]) > Double.Epsilon)).ToList();

            if (nonZeroReinforcement.Count() > 0)
            {
                DocumentSection section = CreateSectionTableAndDiagramForLinearElements(resultsInPoints, nonZeroReinforcement, document, elementType, true, false, false, Resources.ResourceManager.GetString("Reinforcement"));
                if (section != null)
                {
                    body.Elements.Add(section);
                }
                string diagramTitle = "";
                bool   reversedAxis = false;

                foreach (ResultTypeLinear resultType in nonZeroReinforcement)
                {
                    switch (resultType)
                    {
                    case ResultTypeLinear.Abottom:
                        diagramTitle = Resources.ResourceManager.GetString("LongReinforcementBottom");
                        break;

                    case ResultTypeLinear.Atop:
                        diagramTitle = Resources.ResourceManager.GetString("LongReinforcementTop");
                        break;

                    case ResultTypeLinear.Aleft:
                        diagramTitle = Resources.ResourceManager.GetString("LongReinforcementLeft");
                        break;

                    case ResultTypeLinear.Aright:
                        diagramTitle = Resources.ResourceManager.GetString("LongReinforcementRight");
                        break;

                    case ResultTypeLinear.TransversalReinforcemenDensity:
                        diagramTitle = Resources.ResourceManager.GetString("TransversalReinforcement");
                        break;

                    case ResultTypeLinear.StirrupsSpacing:
                        diagramTitle = Resources.ResourceManager.GetString("StirrupsSpacing");
                        break;
                    }
                    List <ResultTypeLinear> oneNonZeroReinforcement = new List <ResultTypeLinear>(1);
                    oneNonZeroReinforcement.Add(resultType);
                    section = CreateSectionTableAndDiagramForLinearElements(resultsInPoints, oneNonZeroReinforcement, document, elementType, false, true, reversedAxis, "", "", diagramTitle);
                    if (section != null)
                    {
                        body.Elements.Add(section);
                    }
                }
            }
            // Create internal forces tables and graph
            List <ResultTypeLinear> nonZeroInternalForces = ResultTypeLinearHelper.InternalForcesResults.Where(s => resultsInPoints.Any(r => Math.Abs(r[s]) > Double.Epsilon)).ToList();

            if (nonZeroInternalForces.Count() > 0)
            {
                DocumentSection section = CreateSectionTableAndDiagramForLinearElements(resultsInPoints, nonZeroInternalForces, document, elementType, true, true, false, Resources.ResourceManager.GetString("InternalForces"), "", Resources.ResourceManager.GetString("Internal_Forces"));
                if (section != null)
                {
                    body.Elements.Add(section);
                }
            }
            List <ResultTypeLinear> nonZeroInternalMoments = ResultTypeLinearHelper.InternalMomentsResults.Where(s => resultsInPoints.Any(r => Math.Abs(r[s]) > Double.Epsilon)).ToList();

            if (nonZeroInternalMoments.Count() > 0)
            {
                DocumentSection section = null;
                if (nonZeroInternalForces.Count() != 0)
                {
                    section = CreateSectionTableAndDiagramForLinearElements(resultsInPoints, nonZeroInternalMoments, document, elementType, true, true, true, "", "", Resources.ResourceManager.GetString("Internal_Moments"));
                }
                else
                {
                    section = CreateSectionTableAndDiagramForLinearElements(resultsInPoints, nonZeroInternalMoments, document, elementType, true, true, true, Resources.ResourceManager.GetString("InternalForces"), "", Resources.ResourceManager.GetString("Internal_Moments"));
                }
                if (section != null)
                {
                    body.Elements.Add(section);
                }
            }

            // Create deflection table and graph
            List <ResultTypeLinear> nonZeroDeflection = ResultTypeLinearHelper.RealDeflectionResults.Where(s => resultsInPoints.Any(r => Math.Abs(r[s]) > Double.Epsilon)).ToList();

            if (nonZeroDeflection.Count() > 0)
            {
                List <ResultTypeLinear> displacement = new List <ResultTypeLinear>(nonZeroDeflection.Count());
                List <ResultTypeLinear> displacementAndDeflection = new List <ResultTypeLinear>(nonZeroDeflection.Count() * 2);
                displacementAndDeflection.AddRange(nonZeroDeflection);
                foreach (ResultTypeLinear resultType in nonZeroDeflection)
                {
                    switch (resultType)
                    {
                    case ResultTypeLinear.UxRealMax:
                        displacement.Add(ResultTypeLinear.UxMax);
                        break;

                    case ResultTypeLinear.UxRealMin:
                        displacement.Add(ResultTypeLinear.UxMin);
                        break;

                    case ResultTypeLinear.UyRealMax:
                        displacement.Add(ResultTypeLinear.UyMax);
                        break;

                    case ResultTypeLinear.UyRealMin:
                        displacement.Add(ResultTypeLinear.UyMin);
                        break;

                    case ResultTypeLinear.UzRealMax:
                        displacement.Add(ResultTypeLinear.UzMax);
                        break;

                    case ResultTypeLinear.UzRealMin:
                        displacement.Add(ResultTypeLinear.UzMin);
                        break;
                    }
                }
                displacementAndDeflection.AddRange(displacement);
                DocumentSection section = CreateSectionTableAndDiagramForLinearElements(resultsInPoints, displacementAndDeflection, document, elementType, true, false, false, Resources.ResourceManager.GetString("Deflection"), "", Resources.ResourceManager.GetString("DeflectionEnvelope"));
                if (section != null)
                {
                    body.Elements.Add(section);
                    section = CreateSectionTableAndDiagramForLinearElements(resultsInPoints, nonZeroDeflection, document, elementType, false, true, false, "", "", Resources.ResourceManager.GetString("DeflectionEnvelope"));
                    if (section != null)
                    {
                        body.Elements.Add(section);
                        section = CreateSectionTableAndDiagramForLinearElements(resultsInPoints, displacement, document, elementType, false, true, false, "", "", Resources.ResourceManager.GetString("DisplacementEnvelope"));
                        if (section != null)
                        {
                            body.Elements.Add(section);
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Creats the section of document with diagram
        /// </summary>
        /// <param name="title">Title of the diagram</param>
        /// <param name="resultsInPoints"> Result in point collection</param>
        /// <param name="resultTypes">The type of results that will be displayed in the diagram.</param>
        /// <param name="document">Active Revit document</param>
        /// <param name="elementType">Structural element type</param>
        /// <param name="reversedAxis">Sets the direction of the Y axis on the graph</param>
        /// <returns>Returns section of document with diagram</returns>
        private DocumentDiagram CreateResultDiagramForLinearElements(String title, IEnumerable <ResultInPointLinear> resultsInPoints, List <ResultTypeLinear> resultTypes, Autodesk.Revit.DB.Document document, ElementType elementType, bool reversedAxis)
        {
            Units           units = document.GetUnits();
            DocumentDiagram chart = new DocumentDiagram();

            if (resultTypes != null)
            {
                if (resultTypes.Count() > 0)
                {
                    if (title.Length != 0)
                    {
                        chart.Title = title;
                    }
                    chart.Height = 200;
                    chart.Width  = 4 * chart.Height;

                    UnitType        unitTypeX                = ResultTypeLinear.X.GetUnitType();
                    FormatOptions   formatOptions            = units.GetFormatOptions(unitTypeX);
                    DisplayUnitType displayUnitTypeX         = formatOptions.DisplayUnits;
                    DisplayUnitType internalDisplayUnitTypeX = UnitsConverter.GetInternalUnit(unitTypeX);
                    UnitSymbolType  unitSymbolTypeX          = formatOptions.UnitSymbol;
                    String          axisTitle                = "";
                    if (ElementType.Column == elementType)
                    {
                        axisTitle = Resources.ResourceManager.GetString("AxisHeight");
                    }
                    else
                    {
                        axisTitle = Resources.ResourceManager.GetString("AxisLength");
                    }
                    if (UnitSymbolType.UST_NONE != unitSymbolTypeX)
                    {
                        axisTitle += " " + LabelUtils.GetLabelFor(unitSymbolTypeX);
                    }
                    chart.AxisX.Title    = axisTitle;
                    chart.AxisY.Reversed = reversedAxis;
                    UnitType unitTypeY = resultTypes.First().GetUnitType();
                    formatOptions = units.GetFormatOptions(unitTypeY);
                    DisplayUnitType displayUnitTypeY         = formatOptions.DisplayUnits;
                    DisplayUnitType internalDisplayUnitTypeY = UnitsConverter.GetInternalUnit(unitTypeY);
                    UnitSymbolType  unitSymbolTypeY          = formatOptions.UnitSymbol;
                    switch (unitTypeY)
                    {
                    case UnitType.UT_Reinforcement_Area:
                        axisTitle = Resources.ResourceManager.GetString("AxisArea");
                        break;

                    case UnitType.UT_Force:
                        axisTitle = Resources.ResourceManager.GetString("AxisForce");
                        break;

                    case UnitType.UT_Moment:
                        axisTitle = Resources.ResourceManager.GetString("AxisMoment");
                        break;

                    case UnitType.UT_Displacement_Deflection:
                        axisTitle = Resources.ResourceManager.GetString("AxisDisplacmentDeflection");
                        break;

                    case UnitType.UT_Section_Dimension:
                        axisTitle = Resources.ResourceManager.GetString("AxisSpacing");
                        break;

                    case UnitType.UT_Reinforcement_Area_per_Unit_Length:
                        axisTitle = Resources.ResourceManager.GetString("AxisDencity");
                        break;

                    default:
                        break;
                    }
                    axisTitle += " ";
                    if (UnitSymbolType.UST_NONE == unitSymbolTypeY)
                    {
                        if (DisplayUnitType.DUT_FEET_FRACTIONAL_INCHES == displayUnitTypeY)
                        {
                            axisTitle += LabelUtils.GetLabelFor(UnitSymbolType.UST_FT);
                        }
                        else if (DisplayUnitType.DUT_FRACTIONAL_INCHES == displayUnitTypeY)
                        {
                            axisTitle += LabelUtils.GetLabelFor(UnitSymbolType.UST_IN);
                        }
                    }
                    else
                    {
                        axisTitle += LabelUtils.GetLabelFor(unitSymbolTypeY);
                    }
                    chart.AxisY.Title = axisTitle;
                    double valX = 0;
                    double valY = 0;
                    foreach (ResultTypeLinear resultType in resultTypes)
                    {
                        DocumentDiagramSeries series = new DocumentDiagramSeries(resultType.ToString());
                        chart.Legend = true;
                        chart.Series.Add(series);
                        series.Color = ResultTypeLinearToColorDictionary[resultType];
                        series.Name  = Resources.ResourceManager.GetString(resultType.ToString());
                        int lblNbr  = 5;
                        int lblN    = 0;
                        int lblStep = resultsInPoints.Count <ResultInPointLinear>() / lblNbr;
                        // Labels on the X axis will be formatted according to Revit preferences
                        //formatOptions = units.GetFormatOptions(unitTypeX);
                        //string accuracy = formatOptions.Accuracy.ToString();
                        //accuracy = accuracy.Replace("1", "0");
                        string valXAsString = "";
                        foreach (ResultInPointLinear resultInPoint in resultsInPoints)
                        {
                            valX = Autodesk.Revit.DB.UnitUtils.Convert(resultInPoint[ResultTypeLinear.X], internalDisplayUnitTypeX, displayUnitTypeX);
                            valY = Autodesk.Revit.DB.UnitUtils.Convert(resultInPoint[resultType], internalDisplayUnitTypeY, displayUnitTypeY);
                            series.AddXY(valX, valY);
                            if (lblStep == 0 || lblN % lblStep == 0)
                            {
                                //DocumentValue docVal = new DocumentValue(resultInPoint[ResultTypeLinear.X], displayUnitTypeX, unitTypeX, units);
                                DocumentValue docVal = new DocumentValue(valX, displayUnitTypeX, unitTypeX, units);
                                valXAsString = (string)docVal.Value;
                                chart.AxisX.Labels.Add(new DocumentDiagramAxisLabel(valX, valXAsString));
                            }
                            lblN++;
                        }
                    }
                }
            }
            return(chart);
        }
示例#6
0
        /// <summary>
        /// Fills document body object with formatted reinforcement calculation results
        /// </summary>
        /// <param name="body">DocumentBody to be filled</param>
        /// <param name="resultSurfaceElement">Calculation results schema class</param>
        /// <param name="document">Active Revit document</param>
        /// <param name="element">Structural element</param>
        /// <param name="elementType">Typ of element</param>
        private void WriteResultsToNoteForSurfaceElements(DocumentBody body, ResultSurfaceElement resultSurfaceElement, Autodesk.Revit.DB.Document document, Element element, ElementType elementType)
        {
            List <ResultInPointSurface> resultsInPointsCollection = resultSurfaceElement.GetResultsInPointsCollection();

            /////////////////////////// Basic Level ///////////////////////////////////////

            //////////////////// Summary
            {
                if (resultSurfaceElement.MultiLayer)
                {
                    DocumentSection resultLeyerSection = new DocumentSection(Resources.ResourceManager.GetString("Layers"), 5);
                    resultLeyerSection.Level = DetailLevel.General;
                    List <Tuple <string, double> > structuralLayers = resultSurfaceElement.GetStructuralLayers();
                    double calculationThickness = 0;
                    resultLeyerSection.Body.Elements.Add(new DocumentText(Resources.ResourceManager.GetString("LayerTakenIntoConsideration"), true));
                    for (int layersId = 0; layersId < structuralLayers.Count(); layersId++)
                    {
                        resultLeyerSection.Body.Elements.Add((new DocumentValueWithName("- " + structuralLayers[layersId].Item1, structuralLayers[layersId].Item2, UnitsConverter.GetInternalUnit(UnitType.UT_Section_Dimension), UnitType.UT_Section_Dimension, document.GetUnits())));
                        calculationThickness += structuralLayers[layersId].Item2;
                    }
                    resultLeyerSection.Body.Elements.Add((new DocumentValueWithName(Resources.ResourceManager.GetString("ThicknessTakenIntoConsideration"), calculationThickness, UnitsConverter.GetInternalUnit(UnitType.UT_Section_Dimension), UnitType.UT_Section_Dimension, document.GetUnits())));
                    body.Elements.Add(resultLeyerSection);
                }

                // Create document section
                DocumentSection resultSummarySection = new DocumentSection(Resources.ResourceManager.GetString("Summary"), 5);
                resultSummarySection.Level = DetailLevel.General;

                // Calculate mean and extreme values
                IEnumerable <ResultTypeSurface> primary = new List <ResultTypeSurface> {
                    ResultTypeSurface.AxxTop, ResultTypeSurface.AxxBottom
                };
                IEnumerable <ResultTypeSurface> secondary = new List <ResultTypeSurface> {
                    ResultTypeSurface.AyyTop, ResultTypeSurface.AyyBottom
                };
                double meanPrimary   = resultsInPointsCollection.Average(s => (primary.Sum(q => s[q]))),
                       meanSecondary = resultsInPointsCollection.Average(s => (secondary.Sum(q => s[q])));

                // Add them to the section
                string meanPrimaryString   = elementType == ElementType.Floor ? "MeanPrimaryReinforcementDensity" : "MeanVerticallReinforcementDensity";
                string meanSecondaryString = elementType == ElementType.Floor ? "MeanSecondaryReinforcementDensity" : "MeanHorizontalReinforcementDensity";
                meanPrimaryString   = Resources.ResourceManager.GetString(meanPrimaryString);
                meanSecondaryString = Resources.ResourceManager.GetString(meanSecondaryString);
                resultSummarySection.Body.Elements.Add((new DocumentValueWithName(meanPrimaryString, meanPrimary, UnitsConverter.GetInternalUnit(UnitType.UT_Reinforcement_Area_per_Unit_Length), UnitType.UT_Reinforcement_Area_per_Unit_Length, document.GetUnits())));
                resultSummarySection.Body.Elements.Add((new DocumentValueWithName(meanSecondaryString, meanSecondary, UnitsConverter.GetInternalUnit(UnitType.UT_Reinforcement_Area_per_Unit_Length), UnitType.UT_Reinforcement_Area_per_Unit_Length, document.GetUnits())));


                // Add extreme reinforcement table
                resultSummarySection.Body.Elements.Add(new DocumentText(Resources.ResourceManager.GetString("ExtremeValuesOfReinforcement")));
                resultSummarySection.Body.Elements.Add(CreateExtremeResultTableForSurfaceElements(resultsInPointsCollection, new List <ResultTypeSurface>()
                {
                    ResultTypeSurface.AxxBottom, ResultTypeSurface.AxxTop, ResultTypeSurface.AyyBottom, ResultTypeSurface.AyyTop
                }, document, elementType));


                // Add section to the document body
                body.Elements.Add(resultSummarySection);
            }
            /////////////////////////// Other levels ///////////////////////////////////////

            //////////////////// Reinforcement table
            {
                // Create document section
                DocumentSection reinforcementTableSection = new DocumentSection(Resources.ResourceManager.GetString("Reinforcement"), 5);
                reinforcementTableSection.Level = DetailLevel.Medium;

                // Add extreme reinforcement table
                reinforcementTableSection.Body.Elements.Add(CreateResultTableForSurfaceElements(resultsInPointsCollection, new List <ResultTypeSurface>()
                {
                    ResultTypeSurface.AxxBottom, ResultTypeSurface.AxxTop, ResultTypeSurface.AyyBottom, ResultTypeSurface.AyyTop
                }, document, elementType));

                // Add section to the document body
                body.Elements.Add(reinforcementTableSection);
            }

            //////////////////// Reinforcement maps
            {
                // Create document section
                DocumentSection reinforcementMapsSection = new DocumentSection(Resources.ResourceManager.GetString("ReinforcementMaps"), 5);
                reinforcementMapsSection.Level = DetailLevel.Detail;

                // Create and add reinforcement maps
                ResultTypeSurface[] vForceType = { ResultTypeSurface.AxxBottom, ResultTypeSurface.AyyBottom, ResultTypeSurface.AxxTop, ResultTypeSurface.AyyTop };
                List <DocumentMap>  vMap       = CreateResultMapSeriesForSurfaceElements(element, resultsInPointsCollection, vForceType.Select(s => new Tuple <ResultTypeSurface, string>(s, ResultDescription(elementType, s))));
                foreach (DocumentMap map in vMap)
                {
                    reinforcementMapsSection.Body.Elements.Add(map);
                }
                // Add section to the document body
                body.Elements.Add(reinforcementMapsSection);
            }

            //////////////////// Extreme forces table
            List <ResultTypeSurface> nonZeroInternalForces = ResultTypeSurfaceHelper.InternalForcesResults.Where(s => resultsInPointsCollection.Any(r => Math.Abs(r[s]) > Double.Epsilon)).ToList();
            bool isNonZeroInternalForces = (nonZeroInternalForces.Count() > 0);
            {
                // Only for non-zero values
                if (isNonZeroInternalForces)
                {
                    // Create document section
                    DocumentSection extremeForcesTable = new DocumentSection(Resources.ResourceManager.GetString("ExtremeAxialForces"), 5);
                    extremeForcesTable.Level = DetailLevel.Medium;

                    // Add extreme force  table
                    extremeForcesTable.Body.Elements.Add(CreateExtremeResultTableForSurfaceElements(resultsInPointsCollection, ResultTypeSurfaceHelper.InternalForcesResults, document, elementType));

                    // Add section to the document body
                    body.Elements.Add(extremeForcesTable);
                }
            }

            //////////////////// Extreme moments table
            List <ResultTypeSurface> nonZeroInternalMoments = ResultTypeSurfaceHelper.InternalMomentsResults.Where(s => resultsInPointsCollection.Any(r => Math.Abs(r[s]) > Double.Epsilon)).ToList();
            bool isNonZeroInternalMoments = (nonZeroInternalMoments.Count() > 0);
            {
                // Only for non-zero values
                if (isNonZeroInternalMoments)
                {
                    // Create document section
                    DocumentSection extremeMomentsTable = new DocumentSection(Resources.ResourceManager.GetString("ExtremeBendingMoments"), 5);
                    extremeMomentsTable.Level = DetailLevel.Medium;

                    // Add extreme moment  table
                    extremeMomentsTable.Body.Elements.Add(CreateExtremeResultTableForSurfaceElements(resultsInPointsCollection, ResultTypeSurfaceHelper.InternalMomentsResults, document, elementType));

                    // Add section to the document body
                    body.Elements.Add(extremeMomentsTable);
                }
            }

            //////////////////// Force envelopes table
            {
                // Only for non-zero values
                if (isNonZeroInternalForces)
                {
                    // Create document section
                    DocumentSection forceEnvelopesTable = new DocumentSection(Resources.ResourceManager.GetString("EnvelopeF"), 5);
                    forceEnvelopesTable.Level = DetailLevel.Detail;

                    // Add extreme force  table
                    forceEnvelopesTable.Body.Elements.Add(CreateResultTableForSurfaceElements(resultsInPointsCollection, ResultTypeSurfaceHelper.InternalForcesResults, document, elementType));

                    // Add section to the document body
                    body.Elements.Add(forceEnvelopesTable);
                }
            }

            //////////////////// Moments envelopes table
            {
                // Only for non-zero values
                if (isNonZeroInternalMoments)
                {
                    // Create document section
                    DocumentSection momentEnvelopesTable = new DocumentSection(Resources.ResourceManager.GetString("EnvelopeM"), 5);
                    momentEnvelopesTable.Level = DetailLevel.Detail;

                    // Add extreme force  table
                    momentEnvelopesTable.Body.Elements.Add(CreateResultTableForSurfaceElements(resultsInPointsCollection, ResultTypeSurfaceHelper.InternalMomentsResults, document, elementType));

                    // Add section to the document body
                    body.Elements.Add(momentEnvelopesTable);
                }
            }
        }