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();
+}