From f3fcf5174bf43ed9630992247eadd87a4c018e8f Mon Sep 17 00:00:00 2001 From: Viktor Molostov <86685532+ConcreteEcho@users.noreply.github.com> Date: Tue, 21 Nov 2023 23:29:14 +0300 Subject: [PATCH] add rebar group and polygon class (#3) --- .../Fluent.Structures.Model.csproj | 2 +- src/Fluent.Structures.Model/Polygon.cs | 100 +++++ .../PolygonBuilderInterfaces.cs | 37 ++ src/Fluent.Structures.Model/RebarGroup.cs | 410 ++++++++++++++++++ .../RebarGroupBuilderInterfaces.cs | 296 +++++++++++++ 5 files changed, 844 insertions(+), 1 deletion(-) create mode 100644 src/Fluent.Structures.Model/Polygon.cs create mode 100644 src/Fluent.Structures.Model/PolygonBuilderInterfaces.cs create mode 100644 src/Fluent.Structures.Model/RebarGroup.cs create mode 100644 src/Fluent.Structures.Model/RebarGroupBuilderInterfaces.cs diff --git a/src/Fluent.Structures.Model/Fluent.Structures.Model.csproj b/src/Fluent.Structures.Model/Fluent.Structures.Model.csproj index 095d82b..ef05936 100644 --- a/src/Fluent.Structures.Model/Fluent.Structures.Model.csproj +++ b/src/Fluent.Structures.Model/Fluent.Structures.Model.csproj @@ -6,7 +6,7 @@ enable latestmajor Fluent.Structures.Model - 0.1.2 + 0.2.0 ConcreteEcho Fluent.Structures.Model Fluent.Structures.Model diff --git a/src/Fluent.Structures.Model/Polygon.cs b/src/Fluent.Structures.Model/Polygon.cs new file mode 100644 index 0000000..ffc9644 --- /dev/null +++ b/src/Fluent.Structures.Model/Polygon.cs @@ -0,0 +1,100 @@ +using System; +using System.Linq; + +namespace Fluent.Structures.Model; + +/// +/// Represents a Polygon in a Tekla Structures Model with fluent interface for construction. +/// +public class Polygon : IEnumerable +{ + /// + /// Gets the Tekla Structures Polygon associated with this Polygon instance. + /// + public TSM.Polygon TeklaPolygon { get; } + + private Polygon() + => TeklaPolygon = new TSM.Polygon(); + + /// + /// Builder class for creating a Polygon. + /// Implements various interfaces for a fluent and type-safe construction process. + /// + public class BuildPolygon : IEmptyPolygon, ICompletedPolygon + { + private readonly Polygon _polygon = new(); + + private BuildPolygon() {} + + /// + /// Entry point to start configuring the Polygon class + /// + /// An interface for starting the construction process. + public static IEmptyPolygon With() + => new BuildPolygon(); + + public ICompletedPolygon Points(ArrayList points) + { + var list = new List(); + + foreach (var point in points) + if (point is TSG.Point p) + list.Add(p); + else + throw new ArgumentException( + $"Array list contains {point.GetType()} which is not Tekla Structures Point" + ); + + _polygon.Points = list; + return this; + } + + public ICompletedPolygon Points(List points) + { + _polygon.Points = points; + return this; + } + + public ICompletedPolygon Points(params TSG.Point[] points) + { + _polygon.Points = points.ToList(); + return this; + } + + public Polygon Build() + => _polygon; + } + + /// + /// Gets or sets the points of the Polygon. + /// + public List Points + { + get => new(TeklaPolygon.Points.Cast()); + private set => TeklaPolygon.Points = new ArrayList(value); + } + + /// + /// Returns an enumerator that iterates through the points of the Polygon. + /// + public IEnumerator GetEnumerator() + => Points.GetEnumerator(); + + /// + /// Returns an enumerator that iterates through the points of the Polygon. + /// + IEnumerator IEnumerable.GetEnumerator() + => GetEnumerator(); + + /// + /// Implicitly converts a Polygon to a Tekla Structures Polygon. + /// + public static implicit operator TSM.Polygon(Polygon polygon) + => polygon.TeklaPolygon; + + /// + /// Implicitly converts a Tekla Structures Polygon to a Polygon. + /// + public static implicit operator Polygon(TSM.Polygon polygon) + => BuildPolygon.With().Points(polygon.Points).Build(); +} \ No newline at end of file diff --git a/src/Fluent.Structures.Model/PolygonBuilderInterfaces.cs b/src/Fluent.Structures.Model/PolygonBuilderInterfaces.cs new file mode 100644 index 0000000..edd50dc --- /dev/null +++ b/src/Fluent.Structures.Model/PolygonBuilderInterfaces.cs @@ -0,0 +1,37 @@ +namespace Fluent.Structures.Model; + +/// +/// Represents an interface for starting the construction of a Polygon with the builder pattern. +/// +public interface IEmptyPolygon +{ + /// + /// Sets the points of the Polygon from an ArrayList. + /// + /// ArrayList of points to set. + public ICompletedPolygon Points(ArrayList points); + + /// + /// Sets the points of the Polygon from a List of TSG.Points. + /// + /// List of points to set. + public ICompletedPolygon Points(List points); + + /// + /// Sets the points of the Polygon from an array of TSG.Points. + /// + /// Array of points to set. + public ICompletedPolygon Points(params TSG.Point[] points); +} + +/// +/// Represents an interface for finalizing the construction of a Polygon with the builder pattern. +/// +public interface ICompletedPolygon +{ + /// + /// Finalizes the construction and returns the Polygon object. + /// + /// The finalized Polygon object. + public Polygon Build(); +} \ No newline at end of file diff --git a/src/Fluent.Structures.Model/RebarGroup.cs b/src/Fluent.Structures.Model/RebarGroup.cs new file mode 100644 index 0000000..805c316 --- /dev/null +++ b/src/Fluent.Structures.Model/RebarGroup.cs @@ -0,0 +1,410 @@ +using System.Linq; + +namespace Fluent.Structures.Model; + +/// +/// Represents a Rebar Group in a Tekla Structures Model with fluent interface for construction. +/// +public sealed class RebarGroup +{ + /// + /// Initializes a new instance of the class. + /// + private RebarGroup() + => TeklaRebarGroup = new TSM.RebarGroup(); + + /// + /// Gets or sets the Tekla Structures Rebar Group instance. + /// + public TSM.RebarGroup TeklaRebarGroup { get; } + + /// + /// Inserts the Rebar Group into the Tekla Structures model. + /// + /// True on success. + public bool Insert() + => TeklaRebarGroup.Insert(); + + /// + /// Deletes the Rebar Group from the Tekla Structures model. + /// + /// True on success. + public bool Delete() + => TeklaRebarGroup.Delete(); + + /// + /// Builder class for creating a Rebar Group. + /// Implements various interfaces for a fluent and type-safe construction process. + /// + public class BuildRebarGroup : IEmptyRebarGroup, IRebarGroupWithFather, IRebarGroupWithPolygons, + IRebarGroupWithStartPoint, IRebarGroupWithStartAndEndPoints, + IRebarGroupWithGrade, IRebarGroupWithSize, + IRebarGroupWithRadiusValues, IRebarGroupWithClass, + IRebarGroupWithSpacings, IRebarGroupWithStartHook, + ICompletedRebarGroup + { + /// + /// The RebarGroup instance being constructed. + /// + private readonly RebarGroup _rebarGroup = new(); + + /// + /// Initializes a new instance of the class. + /// + private BuildRebarGroup() {} + + /// + /// Initializes a new instance of the class with an existing RebarGroup instance. + /// + /// The existing RebarGroup instance. + private BuildRebarGroup(RebarGroup rebarGroup) {} + + /// + /// Entry point to start configuring the Rebar Group class + /// + /// An interface for starting the construction process. + public static IEmptyRebarGroup With() + => new BuildRebarGroup(); + + public IRebarGroupWithFather Father(TSM.ModelObject father) + { + _rebarGroup.Father = father; + return this; + } + + public IRebarGroupWithPolygons Polygons(ArrayList polygons) + { + _rebarGroup.Polygons = polygons; + return this; + } + + public IRebarGroupWithPolygons Polygons(params TSM.Polygon[] polygons) + { + _rebarGroup.Polygons = new ArrayList(polygons); + return this; + } + + public IRebarGroupWithPolygons Polygons(params TSG.Point[] points) + { + var polygon = Polygon.BuildPolygon.With().Points(points).Build(); + _rebarGroup.Polygons = new ArrayList { polygon.TeklaPolygon }; + return this; + } + + public IRebarGroupWithStartPoint StartPoint(TSG.Point start) + { + _rebarGroup.StartPoint = start; + return this; + } + + public IRebarGroupWithStartAndEndPoints StartAndEndPoints(TSG.Point start, TSG.Point end) + { + _rebarGroup.StartPoint = start; + _rebarGroup.EndPoint = end; + return this; + } + + public IRebarGroupWithStartAndEndPoints EndPoint(TSG.Point end) + { + _rebarGroup.EndPoint = end; + return this; + } + + public IRebarGroupWithGrade Grade(string grade) + { + _rebarGroup.Grade = grade; + return this; + } + + public IRebarGroupWithSize Size(string size) + { + _rebarGroup.Size = size; + return this; + } + + public IRebarGroupWithRadiusValues RadiusValues(ArrayList radiusValues) + { + _rebarGroup.RadiusValues = new List(radiusValues.Cast()); + return this; + } + + public IRebarGroupWithRadiusValues RadiusValues(params double[] radiusValues) + { + _rebarGroup.RadiusValues = radiusValues.ToList(); + return this; + } + + public IRebarGroupWithRadiusValues RadiusValues(List radiusValues) + { + _rebarGroup.RadiusValues = radiusValues; + return this; + } + + public IRebarGroupWithClass Class(int @class) + { + _rebarGroup.Class = @class; + return this; + } + + public IRebarGroupWithSpacings Spacings(ArrayList spacings) + { + _rebarGroup.Spacings = spacings; + return this; + } + + public IRebarGroupWithSpacings Spacings(params double[] spacings) + => Spacings(new ArrayList(spacings)); + + public IRebarGroupWithSpacings Spacings(List spacings) + => Spacings(new ArrayList(spacings)); + + public IRebarGroupWithStartHook StartHook(TSM.RebarHookData startHook) + { + _rebarGroup.StartHook = startHook; + return this; + } + + public IRebarGroupWithStartHook StartHook(TSM.RebarHookData.RebarHookShapeEnum shapeEnum) + => StartHook(new TSM.RebarHookData { Shape = shapeEnum }); + + public ICompletedRebarGroup StartAndEndHooks(TSM.RebarHookData startHook, + TSM.RebarHookData endHook) + { + _rebarGroup.StartHook = startHook; + _rebarGroup.EndHook = endHook; + return this; + } + + public ICompletedRebarGroup StartAndEndHooks( + TSM.RebarHookData.RebarHookShapeEnum startShapeEnum, + TSM.RebarHookData.RebarHookShapeEnum endShapeEnum) + { + var startHookData = new TSM.RebarHookData { Shape = startShapeEnum, }; + var endHookData = new TSM.RebarHookData { Shape = endShapeEnum, }; + _rebarGroup.StartHook = startHookData; + _rebarGroup.EndHook = endHookData; + return this; + } + + public ICompletedRebarGroup EndHook(TSM.RebarHookData endHook) + { + _rebarGroup.EndHook = endHook; + return this; + } + + public ICompletedRebarGroup EndHook(TSM.RebarHookData.RebarHookShapeEnum endShapeEnum) + => EndHook(new TSM.RebarHookData { Shape = endShapeEnum }); + + public ICompletedRebarGroup Name(string name) + { + _rebarGroup.Name = name; + return this; + } + + public ICompletedRebarGroup SpacingType( + TSM.BaseRebarGroup.RebarGroupSpacingTypeEnum spacingType) + { + _rebarGroup.SpacingType = spacingType; + return this; + } + + public ICompletedRebarGroup StartFromPlaneOffset(double startFromPlaneOffset) + { + _rebarGroup.StartFromPlaneOffset = startFromPlaneOffset; + return this; + } + + public ICompletedRebarGroup EndFromPlaneOffset(double endFromPlaneOffset) + { + _rebarGroup.EndFromPlaneOffset = endFromPlaneOffset; + return this; + } + + public ICompletedRebarGroup NumberingSeries(string prefix, int startNumber) + { + _rebarGroup.NumberingSeries = new TSM.NumberingSeries(prefix, startNumber); + return this; + } + + public ICompletedRebarGroup StartPointOffsetValue(double startPointOffsetValue) + { + _rebarGroup.StartPointOffsetValue = startPointOffsetValue; + return this; + } + + public ICompletedRebarGroup EndPointOffsetValue(double endPointOffsetValue) + { + _rebarGroup.EndPointOffsetValue = endPointOffsetValue; + return this; + } + + public RebarGroup Build() + => _rebarGroup; + } + + #region properties + + /// + /// Gets or sets the offset value at the end point of the Rebar Group. + /// + public double EndPointOffsetValue + { + get => TeklaRebarGroup.EndPointOffsetValue; + private set => TeklaRebarGroup.EndPointOffsetValue = value; + } + + /// + /// Gets or sets the offset value at the start point of the Rebar Group. + /// + public double StartPointOffsetValue + { + get => TeklaRebarGroup.StartPointOffsetValue; + private set => TeklaRebarGroup.StartPointOffsetValue = value; + } + + /// + /// Gets or sets the numbering series of the Rebar Group. + /// + public TSM.NumberingSeries NumberingSeries + { + get => TeklaRebarGroup.NumberingSeries; + private set => TeklaRebarGroup.NumberingSeries = value; + } + + /// + /// Gets or sets the offset value from the plane at the end of the Rebar Group. + /// + public double EndFromPlaneOffset + { + get => TeklaRebarGroup.EndFromPlaneOffset; + private set => TeklaRebarGroup.EndFromPlaneOffset = value; + } + + /// + /// Gets or sets the offset value from the plane at the start of the Rebar Group. + /// + public double StartFromPlaneOffset + { + get => TeklaRebarGroup.StartFromPlaneOffset; + private set => TeklaRebarGroup.StartFromPlaneOffset = value; + } + + /// + /// Gets or sets the spacing type of the Rebar Group. + /// + public TSM.BaseRebarGroup.RebarGroupSpacingTypeEnum SpacingType + { + get => TeklaRebarGroup.SpacingType; + private set => TeklaRebarGroup.SpacingType = value; + } + + /// + /// Gets or sets the name of the Rebar Group. + /// + public string Name + { + get => TeklaRebarGroup.Name; + private set => TeklaRebarGroup.Name = value; + } + + /// + /// Gets or sets the end hook data of the Rebar Group. + /// + public TSM.RebarHookData EndHook + { + get => TeklaRebarGroup.EndHook; + private set => TeklaRebarGroup.EndHook = value; + } + + /// + /// Gets or sets the start hook data of the Rebar Group. + /// + public TSM.RebarHookData StartHook + { + get => TeklaRebarGroup.StartHook; + private set => TeklaRebarGroup.StartHook = value; + } + + /// + /// Gets or sets the spacings of the Rebar Group. + /// + public ArrayList Spacings + { + get => TeklaRebarGroup.Spacings; + private set => TeklaRebarGroup.Spacings = value; + } + + /// + /// Gets or sets the class of the Rebar Group. + /// + public int Class + { + get => TeklaRebarGroup.Class; + private set => TeklaRebarGroup.Class = value; + } + + /// + /// Gets or sets the radius values of the Rebar Group. + /// + public List RadiusValues + { + get => new(TeklaRebarGroup.RadiusValues.Cast()); + private set => TeklaRebarGroup.RadiusValues = new ArrayList(value); + } + + /// + /// Gets or sets the size of the Rebar Group. + /// + public string Size + { + get => TeklaRebarGroup.Size; + private set => TeklaRebarGroup.Size = value; + } + + /// + /// Gets or sets the grade of the Rebar Group. + /// + public string Grade + { + get => TeklaRebarGroup.Grade; + private set => TeklaRebarGroup.Grade = value; + } + + /// + /// Gets or sets the end point of the Rebar Group. + /// + public TSG.Point EndPoint + { + get => TeklaRebarGroup.EndPoint; + private set => TeklaRebarGroup.EndPoint = value; + } + + /// + /// Gets or sets the start point of the Rebar Group. + /// + public TSG.Point StartPoint + { + get => TeklaRebarGroup.StartPoint; + private set => TeklaRebarGroup.StartPoint = value; + } + + /// + /// Gets or sets the polygons of the Rebar Group. + /// + public ArrayList Polygons + { + get => TeklaRebarGroup.Polygons; + private set => TeklaRebarGroup.Polygons = value; + } + + /// + /// Gets or sets the father model object of the Rebar Group. + /// + public TSM.ModelObject Father + { + get => TeklaRebarGroup.Father; + private set => TeklaRebarGroup.Father = value; + } + + #endregion +} \ No newline at end of file diff --git a/src/Fluent.Structures.Model/RebarGroupBuilderInterfaces.cs b/src/Fluent.Structures.Model/RebarGroupBuilderInterfaces.cs new file mode 100644 index 0000000..d757d22 --- /dev/null +++ b/src/Fluent.Structures.Model/RebarGroupBuilderInterfaces.cs @@ -0,0 +1,296 @@ +namespace Fluent.Structures.Model; + +/// +/// Represents an interface for starting the construction of a Rebar Group with the builder pattern. +/// +public interface IEmptyRebarGroup +{ + /// + /// Sets the father object for the Rebar Group. + /// + /// The parent . + /// An interface for further construction. + public IRebarGroupWithFather Father(TSM.ModelObject father); +} + +/// +/// Represents a Rebar Group construction state with a specified father object. +/// +public interface IRebarGroupWithFather +{ + /// + /// Sets the polygons for the Rebar Group. + /// + /// ArrayList of polygons for the Rebar Group. + /// An interface for further construction. + public IRebarGroupWithPolygons Polygons(ArrayList polygons); + + /// + /// Sets the polygons for the Rebar Group. + /// + /// Array of Tekla Polygons. + /// An interface for further construction. + public IRebarGroupWithPolygons Polygons(params TSM.Polygon[] polygons); + + /// + /// Sets a single polygon for the Rebar Group using an array of Tekla Points. + /// + /// Array of Tekla Points representing the polygon. + /// An interface for further construction. + public IRebarGroupWithPolygons Polygons(params TSG.Point[] points); +} + +/// +/// Represents a Rebar Group construction state with specified polygons. +/// +public interface IRebarGroupWithPolygons +{ + /// + /// Sets the starting point for the Rebar Group. + /// + /// The starting point. + /// An interface for further construction. + public IRebarGroupWithStartPoint StartPoint(TSG.Point start); + + /// + /// Sets the starting and ending points for the Rebar Group. + /// + /// The starting point. + /// The ending point. + /// An interface for further construction. + public IRebarGroupWithStartAndEndPoints StartAndEndPoints(TSG.Point start, TSG.Point end); +} + +/// +/// Represents a Rebar Group construction state with a specified starting point. +/// +public interface IRebarGroupWithStartPoint +{ + /// + /// Sets the ending point for the Rebar Group. + /// + /// The ending point. + /// An interface for further construction. + public IRebarGroupWithStartAndEndPoints EndPoint(TSG.Point end); +} + +/// +/// Represents a Rebar Group construction state with specified starting and ending points. +/// +public interface IRebarGroupWithStartAndEndPoints +{ + /// + /// Sets the grade for the Rebar Group. + /// + /// The grade of the rebar. + /// An interface for further construction. + public IRebarGroupWithGrade Grade(string grade); +} + +/// +/// Represents a Rebar Group construction state with a specified grade. +/// +public interface IRebarGroupWithGrade +{ + /// + /// Sets the size for the Rebar Group. + /// + /// The size of the rebar. + /// An interface for further construction. + public IRebarGroupWithSize Size(string size); +} + +/// +/// Represents a Rebar Group construction state with a specified size. +/// +public interface IRebarGroupWithSize +{ + /// + /// Sets the radius values for the Rebar Group. + /// + /// ArrayList of radius values. + /// An interface for further construction. + public IRebarGroupWithRadiusValues RadiusValues(ArrayList radiusValues); + + /// + /// Sets the radius values for the Rebar Group using an array. + /// + /// Array of radius values. + /// An interface for further construction. + public IRebarGroupWithRadiusValues RadiusValues(params double[] radiusValues); + + /// + /// Sets the radius values for the Rebar Group using a list. + /// + /// List of radius values. + /// An interface for further construction. + public IRebarGroupWithRadiusValues RadiusValues(List radiusValues); +} + +/// +/// Represents a Rebar Group construction state with specified radius values. +/// +public interface IRebarGroupWithRadiusValues +{ + /// + /// Sets the class for the Rebar Group. + /// + /// The class of the rebar. + /// An interface for further construction. + public IRebarGroupWithClass Class(int @class); +} + +/// +/// Represents a Rebar Group construction state with a specified class. +/// +public interface IRebarGroupWithClass +{ + /// + /// Sets the spacings for the Rebar Group. + /// + /// ArrayList of spacings. + /// An interface for further construction. + public IRebarGroupWithSpacings Spacings(ArrayList spacings); + + /// + /// Sets the spacings for the Rebar Group using an array. + /// + /// Array of spacings. + /// An interface for further construction. + public IRebarGroupWithSpacings Spacings(params double[] spacings); + + /// + /// Sets the spacings for the Rebar Group using a list. + /// + /// List of spacings. + /// An interface for further construction. + public IRebarGroupWithSpacings Spacings(List spacings); +} + +/// +/// Represents a Rebar Group construction state with specified spacings. +/// +public interface IRebarGroupWithSpacings +{ + /// + /// Sets the start hook for the Rebar Group. + /// + /// Rebar hook data for the start. + /// An interface for further construction. + public IRebarGroupWithStartHook StartHook(TSM.RebarHookData startHook); + + /// + /// Sets the start hook for the Rebar Group using a predefined shape. + /// + /// Predefined shape for the start hook. + /// An interface for further construction. + public IRebarGroupWithStartHook StartHook( + TSM.RebarHookData.RebarHookShapeEnum shapeEnum = + TSM.RebarHookData.RebarHookShapeEnum.NO_HOOK); + + /// + /// Sets both start and end hooks for the Rebar Group. + /// + /// Rebar hook data for the start. + /// Rebar hook data for the end. + /// An interface for completing the construction. + public ICompletedRebarGroup StartAndEndHooks(TSM.RebarHookData startHook, + TSM.RebarHookData endHook); + + /// + /// Sets both start and end hooks for the Rebar Group using predefined shapes. + /// + /// Predefined shape for the start hook. + /// Predefined shape for the end hook. + /// An interface for completing the construction. + public ICompletedRebarGroup StartAndEndHooks( + TSM.RebarHookData.RebarHookShapeEnum startShapeEnum = + TSM.RebarHookData.RebarHookShapeEnum.NO_HOOK, + TSM.RebarHookData.RebarHookShapeEnum endShapeEnum = + TSM.RebarHookData.RebarHookShapeEnum.NO_HOOK); +} + +/// +/// Represents a Rebar Group construction state with a specified start hook. +/// +public interface IRebarGroupWithStartHook +{ + /// + /// Sets the end hook for the Rebar Group. + /// + /// Rebar hook data for the end. + /// An interface for completing the construction. + public ICompletedRebarGroup EndHook(TSM.RebarHookData endHook); + + /// + /// Sets the end hook for the Rebar Group using a predefined shape. + /// + /// Predefined shape for the end hook. + /// An interface for completing the construction. + public ICompletedRebarGroup EndHook( + TSM.RebarHookData.RebarHookShapeEnum endShapeEnum = + TSM.RebarHookData.RebarHookShapeEnum.NO_HOOK); +} + +/// +/// Represents a completed state for constructing a Tekla Structures Rebar Group. +/// +public interface ICompletedRebarGroup +{ + /// + /// Sets the name for the Rebar Group. + /// + /// The name of the Rebar Group. + /// An interface for further construction. + public ICompletedRebarGroup Name(string name); + + /// + /// Sets the spacing type for the Rebar Group. + /// + /// Spacing type for the Rebar Group. + /// An interface for further construction. + public ICompletedRebarGroup SpacingType( + TSM.BaseRebarGroup.RebarGroupSpacingTypeEnum spacingType); + + /// + /// Sets the start offset from the reference plane for the Rebar Group. + /// + /// Start offset from the reference plane. + /// An interface for further construction. + public ICompletedRebarGroup StartFromPlaneOffset(double startFromPlaneOffset); + + /// + /// Sets the end offset from the reference plane for the Rebar Group. + /// + /// End offset from the reference plane. + /// An interface for further construction. + public ICompletedRebarGroup EndFromPlaneOffset(double endFromPlaneOffset); + + /// + /// Sets the numbering series for the Rebar Group. + /// + /// Prefix for the numbering series. + /// Starting number for the numbering series. + /// An interface for further construction. + public ICompletedRebarGroup NumberingSeries(string prefix, int startNumber); + + /// + /// Sets the start point offset value for the Rebar Group. + /// + /// Start point offset value. + /// An interface for further construction. + public ICompletedRebarGroup StartPointOffsetValue(double startPointOffsetValue); + + /// + /// Sets the end point offset value for the Rebar Group. + /// + /// End point offset value. + /// An interface for further construction. + public ICompletedRebarGroup EndPointOffsetValue(double endPointOffsetValue); + + /// + /// Builds and returns the finalized Rebar Group. + /// + /// The constructed Rebar Group. + public RebarGroup Build(); +}