/// <summary> /// Create a new circular cross section and add it to the CrossSectionData object /// </summary> /// <param name="csData">Cross section data object</param> public static void CreateAndAddCircularCrossSection(CrossSectionData csData) { // Creates a class representing a cross section with raw data attached. CrossSectionFactory builder = new CrossSectionFactory(); builder.BuildCircular(2); // Defines the location of the current cross section. The Z-coordinate // is the bottom level of the cross section (unless defined by the // raw data (the open cross sections)). builder.SetLocation(new ZLocation("pipe A", 10) { Z = 0 }); // Set flow resistance FlowResistance flowResistance = new FlowResistance(); flowResistance.ResistanceDistribution = ResistanceDistribution.ExponentVarying; flowResistance.ResistanceValue = 75; flowResistance.ResistanceTopValue = 85; flowResistance.ExpDepExponent = 1.5; flowResistance.Formulation = ResistanceFormulation.Manning_M; builder.SetFlowResistance(flowResistance); // Get cross section from builder CrossSectionLocated cs = builder.GetCrossSection(); cs.TopoID = "1"; // Calculates the processed levels, storage areas, radii, etc, ie, fill in all // ProcessedXXX properties. cs.BaseCrossSection.CalculateProcessedData(); // Validates the data. The constraints are that the levels and the areas after sorting // must be monotonically increasing. IDiagnostics diagnostics = cs.Validate(); if (diagnostics.ErrorCountRecursive > 0) { throw new Exception(String.Format("Number of errors: {0}", diagnostics.Errors.Count)); } // Add the cross section csData.Add(cs); }