예제 #1
0
        /// <summary>
        /// Create rebar on the given object to given position using FootingSize from dialog.
        /// Polygon for the rebar is calculated from position and FootingSize from dialog, Polygon could also
        /// be calculated using PadFooting's extrema.
        /// </summary>
        /// <param name="PadFooting">Father of the rebar</param>
        /// <param name="PositionX">X-coordination</param>
        /// <param name="PositionY"></param>
        /// <returns></returns>
        private void CreateRebar(ModelObject PadFooting, double PositionX, double PositionY)
        {
            RebarGroup Rebar         = new RebarGroup();
            Polygon    RebarPolygon1 = new Polygon();

            double MyFootingSize = double.Parse(FootingSize.Text);

            //use given position and footing size
            RebarPolygon1.Points.Add(new Point(PositionX - MyFootingSize / 2.0, PositionY - MyFootingSize / 2.0, 0));
            RebarPolygon1.Points.Add(new Point(PositionX + MyFootingSize / 2.0, PositionY - MyFootingSize / 2.0, 0));
            RebarPolygon1.Points.Add(new Point(PositionX + MyFootingSize / 2.0, PositionY + MyFootingSize / 2.0, 0));
            RebarPolygon1.Points.Add(new Point(PositionX - MyFootingSize / 2.0, PositionY + MyFootingSize / 2.0, 0));
            RebarPolygon1.Points.Add(new Point(PositionX - MyFootingSize / 2.0, PositionY - MyFootingSize / 2.0, 0));
            Rebar.Polygons.Add(RebarPolygon1);

            //or calculate by rebar's solid's Axis Aligned Bounding Box
            //Rebar.Polygons.Add(GetPolygonBySolidsAABB(PadFooting as Beam));

            Rebar.StartPoint.X          = PositionX;
            Rebar.StartPoint.Y          = PositionY;
            Rebar.StartPoint.Z          = 0.0;
            Rebar.EndPoint.X            = PositionX;
            Rebar.EndPoint.Y            = PositionY;
            Rebar.EndPoint.Z            = -500.0;
            Rebar.Father                = PadFooting;
            Rebar.EndPointOffsetType    = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS;
            Rebar.EndPointOffsetValue   = 20.0;
            Rebar.StartPointOffsetType  = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS;
            Rebar.StartPointOffsetValue = 20.0;
            Rebar.Class = 3;
            Rebar.Name  = "FootingRebar";
            Rebar.Grade = GradeTextBox.Text;
            Rebar.Size  = SizeTextBox.Text;

            char[]   Separator = { ' ' };
            string[] Radiuses  = BendingRadiusTextBox.Text.Split(Separator, StringSplitOptions.RemoveEmptyEntries);
            foreach (string Item in Radiuses)
            {
                Rebar.RadiusValues.Add(Convert.ToDouble(Item));
            }

            Rebar.SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_TARGET_SPACE;
            Rebar.Spacings.Add(100.0);
            Rebar.ExcludeType = BaseRebarGroup.ExcludeTypeEnum.EXCLUDE_TYPE_BOTH;
            Rebar.NumberingSeries.StartNumber = 0;
            Rebar.NumberingSeries.Prefix      = "Group";
            Rebar.OnPlaneOffsets.Add(25.0);
            Rebar.FromPlaneOffset = 40;

            //Adding hooks to make rebar stronger
            Rebar.StartHook.Shape = RebarHookData.RebarHookShapeEnum.HOOK_90_DEGREES;
            Rebar.EndHook.Shape   = RebarHookData.RebarHookShapeEnum.HOOK_90_DEGREES;
            Rebar.OnPlaneOffsets.Add(10.0);
            Rebar.OnPlaneOffsets.Add(25.0);

            if (!Rebar.Insert())
            {
                Console.WriteLine("Inserting rebar failed.");
            }
        }
예제 #2
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            int        id         = 0;
            RebarShape rebarShape = null;
            int        count      = 0;
            Curve      curve      = null;
            double     angle      = 0.0;

            DA.GetData(0, ref id);
            DA.GetData(1, ref rebarShape);
            DA.GetData(2, ref curve);
            DA.GetData(3, ref count);
            if (!DA.GetData(4, ref angle))
            {
                return;
            }
            if (_useDegrees)
            {
                angle = RhinoMath.ToRadians(angle);
            }

            RebarGroup rebarGroup = new RebarGroup(id, new RebarSpacing(rebarShape, count, curve, angle));

            DA.SetData(0, rebarGroup);
            DA.SetDataList(1, rebarGroup.RebarGroupMesh);
            DA.SetDataList(2, rebarGroup.RebarGroupCurves);
        }
예제 #3
0
 private void MallinnaTukiraudoitukset(ContourPlate laatta)
 {
     for (int i = 0; i < kentat.Length; i++)
     {
         foreach (string suunta in kentat[i].Tukiraudat.Keys)
         {
             if (Skippaa(kentat[i], suunta))
             {
                 continue;
             }
             RebarGroup rGroup = new RebarGroup();
             rGroup.Class = 10;
             rGroup.Name  = "Tukiraudoitus " + kentat[i].Numero + " " + suunta;
             rGroup.Size  = kentat[i].Tukiraudat[suunta].Koko.ToString();
             rGroup.Grade = kentat[i].Tukiraudat[suunta].Tyyppi;
             rGroup.RadiusValues.Add(30.0);
             rGroup.OnPlaneOffsets.Add(Asetukset.ArvioituMittaYlapinnasta);
             rGroup.FromPlaneOffset       = (Asetukset.LaatanPaksuus - Asetukset.ArvioituMittaYlapinnasta);
             rGroup.StartPointOffsetValue = -1 * kentat[i].Tukiraudat[suunta].TankojenPituus;
             rGroup.EndPointOffsetValue   = -1 * kentat[i].Tukiraudat[suunta].TankojenPituus;
             rGroup.StartPointOffsetType  = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS;
             rGroup.EndPointOffsetType    = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS;
             rGroup.SpacingType           = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_EXACT_SPACE_FLEX_AT_BOTH;
             rGroup.Spacings.Add(kentat[i].Tukiraudat[suunta].Jako);
             rGroup.Father = laatta;
             rGroup.Polygons.Add(HaeTukiraudoituksenPolygon(kentat[i], suunta, rGroup));
             rGroup.ExcludeType = BaseRebarGroup.ExcludeTypeEnum.EXCLUDE_TYPE_NONE;
             rGroup.Insert();
             malli.CommitChanges();
         }
     }
 }
        /// <summary>The get group lines.</summary>
        /// <param name="rebarGroup">The reinforcement bar group.</param>
        /// <param name="groupSegments">The group segments.</param>
        /// <returns>The System.Boolean.</returns>
        private bool GetGroupLines(RebarGroup rebarGroup, out ArrayList groupSegments)
        {
            var result = false;

            groupSegments = new ArrayList();

            var groupGeometries = rebarGroup.GetRebarGeometries(false);

            if (groupGeometries.Count > 1)
            {
                var firstRebarGeometry = groupGeometries[0] as RebarGeometry;
                var lastRebarGeometry  = groupGeometries[groupGeometries.Count - 1] as RebarGeometry;

                if (firstRebarGeometry != null && lastRebarGeometry != null)
                {
                    var firstRebarPoints = firstRebarGeometry.Shape.Points;
                    var lastRebarPoints  = lastRebarGeometry.Shape.Points;

                    groupSegments.Add(new LineSegment((Point)firstRebarPoints[0], (Point)lastRebarPoints[0]));
                    groupSegments.Add(new LineSegment((Point)firstRebarPoints[1], (Point)lastRebarPoints[1]));

                    result = true;
                }
            }

            return(result);
        }
예제 #5
0
        /// <summary>The set new reinforcement bar properties from reinforcement bar group.</summary>
        /// <param name="newRebar">The new rebar.</param>
        /// <param name="originalRebarGroup">The original reinforcement bar group.</param>
        private void SetNewRebarPropertiesFromRebarGroup(SingleRebar newRebar, RebarGroup originalRebarGroup)
        {
            newRebar.Father = originalRebarGroup.Father;
            newRebar.Name   = originalRebarGroup.Name;
            newRebar.Size   = originalRebarGroup.Size;
            newRebar.Grade  = originalRebarGroup.Grade;
            newRebar.Class  = originalRebarGroup.Class;

            newRebar.StartHook.Shape  = originalRebarGroup.StartHook.Shape;
            newRebar.StartHook.Angle  = originalRebarGroup.StartHook.Angle;
            newRebar.StartHook.Radius = originalRebarGroup.StartHook.Radius;
            newRebar.StartHook.Length = originalRebarGroup.StartHook.Length;

            newRebar.EndHook.Shape  = originalRebarGroup.EndHook.Shape;
            newRebar.EndHook.Angle  = originalRebarGroup.EndHook.Angle;
            newRebar.EndHook.Radius = originalRebarGroup.EndHook.Radius;
            newRebar.EndHook.Length = originalRebarGroup.EndHook.Length;

            newRebar.OnPlaneOffsets        = new ArrayList();
            newRebar.FromPlaneOffset       = 0.0;
            newRebar.EndPointOffsetValue   = 0.0;
            newRebar.EndPointOffsetType    = originalRebarGroup.EndPointOffsetType;
            newRebar.StartPointOffsetValue = 0.0;
            newRebar.StartPointOffsetType  = originalRebarGroup.StartPointOffsetType;

            newRebar.NumberingSeries.Prefix      = originalRebarGroup.NumberingSeries.Prefix;
            newRebar.NumberingSeries.StartNumber = originalRebarGroup.NumberingSeries.StartNumber;
            newRebar.RadiusValues = originalRebarGroup.RadiusValues;
        }
예제 #6
0
 public static dynamic GetTSObject(RebarGroup dynObject)
 {
     if (dynObject is null)
     {
         return(null);
     }
     return(dynObject.teklaObject);
 }
예제 #7
0
        private void btn_createUstirrup_Click(object sender, EventArgs e)
        {
            //기본객체 생성
            RebarGroup rebarGroup = new RebarGroup();
            Picker     picker     = new Picker();

            //부재선택
            TSM.ModelObject mainpart = picker.PickObject(Picker.PickObjectEnum.PICK_ONE_PART, "철근을 삽입할 부재를 선택하세요.");
            TSM.Beam        Beam     = mainpart as TSM.Beam;
            rebarGroup.Father = Beam;

            //철근 형태를 결정할 Point 선택
            ArrayList shapePoints = picker.PickPoints(Picker.PickPointEnum.PICK_POLYGON, "철근 형태를 결정할 포인트를 선택하세요.");

            TSM.Polygon polygon = new TSM.Polygon();
            for (int i = 0; i < shapePoints.Count; i++)
            {
                polygon.Points.Add(shapePoints[i]);
            }
            rebarGroup.Polygons.Add(polygon);

            //철근 생성 위치를 결정할 Point 선택
            ArrayList locationPoints = picker.PickPoints(Picker.PickPointEnum.PICK_POLYGON, "철근 생성 위치를 결정할 포인트를 선택하세요.");

            rebarGroup.StartPoint = (TSG.Point)locationPoints[0];
            rebarGroup.EndPoint   = (TSG.Point)locationPoints[1];

            //RebarInfo 클래스에서 불러올 값
            rebarGroup.Name  = "Rebar";
            rebarGroup.Size  = "13";
            rebarGroup.Grade = "SD400";
            rebarGroup.RadiusValues.Add(60.00);
            rebarGroup.Class = 11;

            //Form에서 설정
            rebarGroup.StartHook.Shape = RebarHookData.RebarHookShapeEnum.HOOK_180_DEGREES;
            rebarGroup.EndHook.Shape   = RebarHookData.RebarHookShapeEnum.HOOK_180_DEGREES;

            rebarGroup.OnPlaneOffsets.Add(25.00);
            rebarGroup.FromPlaneOffset       = 25;
            rebarGroup.StartPointOffsetValue = 25;
            rebarGroup.EndPointOffsetValue   = 25;

            rebarGroup.SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_TARGET_SPACE;
            rebarGroup.Spacings.Add(200);
            rebarGroup.ExcludeType = BaseRebarGroup.ExcludeTypeEnum.EXCLUDE_TYPE_NONE;
            rebarGroup.StirrupType = RebarGroup.RebarGroupStirrupTypeEnum.STIRRUP_TYPE_POLYGONAL;

            if (!rebarGroup.Insert())
            {
                Console.WriteLine("insert failed");
            }
            else
            {
                model.CommitChanges();
            }
        }
예제 #8
0
        internal static ModelObject GetRebarGroup()
        {
            var beam  = GetBeam();
            var solid = beam.GetSolid();

            Polygon polygon1 = new Polygon();

            polygon1.Points.Add(new Point(solid.MinimumPoint.X, solid.MaximumPoint.Y, solid.MinimumPoint.Z));
            polygon1.Points.Add(new Point(solid.MinimumPoint.X, solid.MinimumPoint.Y, solid.MinimumPoint.Z));
            polygon1.Points.Add(new Point(solid.MinimumPoint.X, solid.MinimumPoint.Y, solid.MaximumPoint.Z));
            polygon1.Points.Add(new Point(solid.MinimumPoint.X, solid.MaximumPoint.Y, solid.MaximumPoint.Z));

            Polygon polygon2 = new Polygon();

            polygon2.Points.Add(new Point(solid.MaximumPoint.X, solid.MaximumPoint.Y, solid.MinimumPoint.Z));
            polygon2.Points.Add(new Point(solid.MaximumPoint.X, solid.MinimumPoint.Y, solid.MinimumPoint.Z));
            polygon2.Points.Add(new Point(solid.MaximumPoint.X, solid.MinimumPoint.Y, solid.MaximumPoint.Z));
            polygon2.Points.Add(new Point(solid.MaximumPoint.X, solid.MaximumPoint.Y, solid.MaximumPoint.Z));

            RebarGroup rg = new RebarGroup
            {
                Size        = "12",
                Class       = 3,
                Grade       = "A500HW",
                Name        = "RebarGroup",
                Father      = beam,
                SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_TARGET_SPACE,
                ExcludeType = BaseRebarGroup.ExcludeTypeEnum.EXCLUDE_TYPE_BOTH
            };

            rg.Polygons.Add(polygon1);
            rg.Polygons.Add(polygon2);
            rg.RadiusValues.Add(40.0);
            rg.Spacings.Add(30.0);
            rg.NumberingSeries.StartNumber = 0;
            rg.NumberingSeries.Prefix      = "Group";
            rg.StartHook.Shape             = RebarHookData.RebarHookShapeEnum.CUSTOM_HOOK;
            rg.StartHook.Angle             = -90;
            rg.StartHook.Length            = 3;
            rg.StartHook.Radius            = 20;
            rg.EndHook.Shape  = RebarHookData.RebarHookShapeEnum.CUSTOM_HOOK;
            rg.EndHook.Angle  = -90;
            rg.EndHook.Length = 3;
            rg.EndHook.Radius = 20;
            rg.OnPlaneOffsets.Add(25.0);
            rg.OnPlaneOffsets.Add(10.0);
            rg.OnPlaneOffsets.Add(25.0);
            rg.StartPointOffsetType  = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS;
            rg.StartPointOffsetValue = 20;
            rg.EndPointOffsetType    = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS;
            rg.EndPointOffsetValue   = 60;
            rg.FromPlaneOffset       = 40;

            rg.Insert();
            return(rg);
        }
예제 #9
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            RebarGroup rebarGroup = null;

            DA.GetData(0, ref rebarGroup);

            DA.SetData(0, rebarGroup.Id);
            DA.SetData(1, rebarGroup.Diameter);
            DA.SetData(2, rebarGroup.Amount);
            DA.SetData(3, rebarGroup.Material);
            DA.SetData(4, rebarGroup.Volume);
            DA.SetData(5, rebarGroup.Mass);
        }
예제 #10
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            int id = 0;
            List <RebarShape> rebarShapes = new List <RebarShape>();

            DA.GetData(0, ref id);
            DA.GetDataList(1, rebarShapes);

            RebarGroup rebarGroup = new RebarGroup(id, rebarShapes);

            DA.SetData(0, rebarGroup);
            DA.SetDataList(1, rebarGroup.RebarGroupMesh);
            DA.SetDataList(2, rebarGroup.RebarGroupCurves);
        }
예제 #11
0
        private void btnLimpiarFierro_Click(object sender, EventArgs e)
        {
            ModelObjectEnumerator r;

            r = model.GetModelObjectSelector().GetAllObjectsWithType(Tekla.Structures.Model.ModelObject.ModelObjectEnum.REBARGROUP);

            while (r.MoveNext())
            {
                RebarGroup rg = (RebarGroup)r.Current;
                rg.Grade = "Undefined";
                rg.Modify();
            }

            model.CommitChanges();

            MessageBox.Show("termine");
        }
예제 #12
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            int        id         = 0;
            RebarShape rebarShape = null;
            Vector3d   vector     = new Vector3d();
            int        count      = 0;

            DA.GetData(0, ref id);
            DA.GetData(1, ref rebarShape);
            DA.GetData(2, ref vector);
            DA.GetData(3, ref count);

            RebarGroup rebarGroup = new RebarGroup(id, new RebarSpacing(rebarShape, vector, count));

            DA.SetData(0, rebarGroup);
            DA.SetDataList(1, rebarGroup.RebarGroupMesh);
            DA.SetDataList(2, rebarGroup.RebarGroupCurves);
        }
예제 #13
0
        private void btnBorrarDiagonales_Click(object sender, EventArgs e)
        {
            if (!validarMuroSeleccionado())
            {
                return;
            }

            ModelObjectEnumerator r = this.muro.GetReinforcements();

            while (r.MoveNext())
            {
                RebarGroup rg = (RebarGroup)r.Current;

                if (rg.Name == "diagonales")
                {
                    rg.Delete();
                }
            }

            model.CommitChanges();
        }
예제 #14
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            int        id              = 0;
            RebarShape rebarShape      = null;
            Vector3d   vector          = new Vector3d();
            double     spacingDistance = double.NaN;
            int        spacingType     = 0;
            double     tolerance       = double.NaN;

            DA.GetData(0, ref id);
            DA.GetData(1, ref rebarShape);
            DA.GetData(2, ref vector);
            DA.GetData(3, ref spacingDistance);
            DA.GetData(4, ref spacingType);
            DA.GetData(5, ref tolerance);

            RebarGroup rebarGroup = new RebarGroup(id, new RebarSpacing(rebarShape, vector, spacingDistance, spacingType, tolerance));

            DA.SetData(0, rebarGroup);
            DA.SetDataList(1, rebarGroup.RebarGroupMesh);
            DA.SetDataList(2, rebarGroup.RebarGroupCurves);
        }
        /// <summary>The reinforcement bar groups can be spliced.</summary>
        /// <param name="primaryRebarGroup">The primary reinforcement bar group.</param>
        /// <param name="secondaryRebarGroup">The secondary reinforcement bar group.</param>
        /// <returns>The System.Boolean.</returns>
        private bool RebarGroupsCanBeSpliced(RebarGroup primaryRebarGroup, RebarGroup secondaryRebarGroup)
        {
            var       result = false;
            ArrayList primaryGroupSegments, secondaryGroupSegments;

            this.GetGroupLines(primaryRebarGroup, out primaryGroupSegments);
            this.GetGroupLines(secondaryRebarGroup, out secondaryGroupSegments);

            for (var primaryIndex = 0; primaryIndex < primaryGroupSegments.Count && !result; primaryIndex++)
            {
                var primarySegment = primaryGroupSegments[primaryIndex] as LineSegment;

                for (var secondaryIndex = 0; secondaryIndex < secondaryGroupSegments.Count && !result; secondaryIndex++)
                {
                    var secondarySegment = secondaryGroupSegments[secondaryIndex] as LineSegment;

                    /*if (PrimarySegment != null && SecondarySegment != null &&
                     *  Parallel.LineSegmentToLineSegment(PrimarySegment, SecondarySegment, ANGLE_EPSILON) &&
                     *  ((Distance.PointToPoint(PrimarySegment.Point1, SecondarySegment.Point1) < DISTANCE_EPSILON &&
                     *  Distance.PointToPoint(PrimarySegment.Point2, SecondarySegment.Point2) < DISTANCE_EPSILON) ||
                     *  (Distance.PointToPoint(PrimarySegment.Point1, SecondarySegment.Point2) < DISTANCE_EPSILON &&
                     *  Distance.PointToPoint(PrimarySegment.Point2, SecondarySegment.Point1) < DISTANCE_EPSILON)))
                     * {*/
                    if (primarySegment != null && secondarySegment != null &&
                        Parallel.LineSegmentToLineSegment(primarySegment, secondarySegment, AngleEpsilon) &&
                        Distance.PointToPoint(primarySegment.Point1, secondarySegment.Point1) < DistanceEpsilon &&
                        Distance.PointToPoint(primarySegment.Point2, secondarySegment.Point2) < DistanceEpsilon)
                    {
                        var primaryVector   = this.GetRebarVectorForGroup(primaryIndex, primaryGroupSegments);
                        var secondaryVector = this.GetRebarVectorForGroup(secondaryIndex, secondaryGroupSegments);
                        result = this.RebarsDoNotOverlap(primaryVector, secondaryVector);
                    }
                }
            }

            return(result);
        }
예제 #16
0
        /// <summary>The get single rebar.</summary>
        /// <param name="rebarPoints">The reinforcement bar points.</param>
        /// <returns>The Tekla.Structures.Model.SingleRebar.</returns>
        public SingleRebar GetSingleRebar(ArrayList rebarPoints)
        {
            SingleRebar newRebar = new SingleRebar();

            newRebar.Polygon.Points = new ArrayList(rebarPoints);

            SingleRebar originalSingleRebar = this.originalRebar as SingleRebar;

            if (originalSingleRebar != null)
            {
                this.SetNewRebarPropertiesFromSingleRebar(newRebar, originalSingleRebar);
            }
            else
            {
                RebarGroup originalRebarGroup = this.originalRebar as RebarGroup;

                if (originalRebarGroup != null)
                {
                    this.SetNewRebarPropertiesFromRebarGroup(newRebar, originalRebarGroup);
                }
            }

            // Needed to ensure that the reinforcement bar ends will not overcome the cover thinkness.
            if (newRebar.EndPointOffsetType == Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS &&
                newRebar.EndPointOffsetValue < OverhangEpsilon)
            {
                newRebar.EndPointOffsetValue = OverhangEpsilon;
            }

            if (newRebar.StartPointOffsetType == Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS &&
                newRebar.StartPointOffsetValue < OverhangEpsilon)
            {
                newRebar.StartPointOffsetValue = OverhangEpsilon;
            }

            return(newRebar);
        }
예제 #17
0
        private Polygon HaeTukiraudoituksenPolygon(Kentta kentta, string suunta, RebarGroup rGroup)
        {
            Polygon polygon = new Polygon();

            switch (suunta)
            {
            case "vasen":
                rGroup.StartPoint = new Point(kentta.Tukiraudat[suunta].SijaintiAlku.X, kentta.Tukiraudat[suunta].SijaintiAlku.Y, 3000);
                rGroup.EndPoint   = new Point(kentta.Tukiraudat[suunta].SijaintiLoppu.X, kentta.Tukiraudat[suunta].SijaintiLoppu.Y, 3000);
                polygon.Points.Add(new Point(kentta.VasenAlanurkka.X - 100, kentta.VasenAlanurkka.Y, 3000));
                polygon.Points.Add(new Point(kentta.VasenAlanurkka.X + 100, kentta.VasenAlanurkka.Y, 3000));
                break;

            case "ylos":
                rGroup.StartPoint = new Point(kentta.Tukiraudat[suunta].SijaintiAlku.X, kentta.Tukiraudat[suunta].SijaintiAlku.Y, 3000);
                rGroup.EndPoint   = new Point(kentta.Tukiraudat[suunta].SijaintiLoppu.X, kentta.Tukiraudat[suunta].SijaintiLoppu.Y, 3000);
                polygon.Points.Add(new Point(kentta.VasenAlanurkka.X, kentta.VasenAlanurkka.Y + kentta.Korkeus * 1000 + 100, 3000));
                polygon.Points.Add(new Point(kentta.VasenAlanurkka.X, kentta.VasenAlanurkka.Y + kentta.Korkeus * 1000 - 100, 3000));
                break;

            case "oikea":
                rGroup.EndPoint   = new Point(kentta.Tukiraudat[suunta].SijaintiAlku.X, kentta.Tukiraudat[suunta].SijaintiAlku.Y, 3000);
                rGroup.StartPoint = new Point(kentta.Tukiraudat[suunta].SijaintiLoppu.X, kentta.Tukiraudat[suunta].SijaintiLoppu.Y, 3000);
                polygon.Points.Add(new Point(kentta.VasenAlanurkka.X + kentta.Leveys * 1000 - 100, kentta.VasenAlanurkka.Y, 3000));
                polygon.Points.Add(new Point(kentta.VasenAlanurkka.X + kentta.Leveys * 1000 + 100, kentta.VasenAlanurkka.Y, 3000));
                break;

            case "alas":
                rGroup.StartPoint = new Point(kentta.Tukiraudat[suunta].SijaintiAlku.X, kentta.Tukiraudat[suunta].SijaintiAlku.Y, 3000);
                rGroup.EndPoint   = new Point(kentta.Tukiraudat[suunta].SijaintiLoppu.X, kentta.Tukiraudat[suunta].SijaintiLoppu.Y, 3000);
                polygon.Points.Add(new Point(kentta.VasenAlanurkka.X, kentta.VasenAlanurkka.Y + 100, 3000));
                polygon.Points.Add(new Point(kentta.VasenAlanurkka.X, kentta.VasenAlanurkka.Y - 100, 3000));
                break;
            }
            return(polygon);
        }
예제 #18
0
        private void btn_createMainRebar_Click(object sender, EventArgs e)
        {
            //기본객체 생성
            RebarGroup rebarGroup = new RebarGroup();
            Picker     picker     = new Picker();

            //부재선택
            TSM.ModelObject mainpart = picker.PickObject(Picker.PickObjectEnum.PICK_ONE_PART, "철근을 삽입할 부재를 선택하세요.");
            TSM.Beam        Beam     = mainpart as TSM.Beam;
            rebarGroup.Father = Beam;

            //Beam 프로퍼티 확인용
            Solid solid = Beam.GetSolid();

            if (solid != null)
            {
                EdgeEnumerator edgeEnumerator = solid.GetEdgeEnumerator();
                int            edgeCount      = 0;
                while (edgeEnumerator.MoveNext())
                {
                    var edge = edgeEnumerator.Current as Edge;
                    if (edge != null)
                    {
                        Console.WriteLine("Start : " + edge.StartPoint.ToString());
                        Console.WriteLine("End : " + edge.EndPoint.ToString());
                        Console.WriteLine("Type : " + edge.Type.ToString());
                        edgeCount++;
                    }
                }

                Console.WriteLine("Edge count : " + edgeCount.ToString());
            }



            //철근 형태를 결정할 Point 선택
            ArrayList shapePoints = picker.PickPoints(Picker.PickPointEnum.PICK_POLYGON, "철근 형태를 결정할 포인트를 선택하세요.");

            TSM.Polygon polygon = new TSM.Polygon();
            for (int i = 0; i < shapePoints.Count; i++)
            {
                polygon.Points.Add(shapePoints[i]);
            }
            rebarGroup.Polygons.Add(polygon);

            //철근 생성 위치를 결정할 Point 선택
            ArrayList locationPoints = picker.PickPoints(Picker.PickPointEnum.PICK_POLYGON, "철근 생성 위치를 결정할 포인트를 선택하세요.");

            rebarGroup.StartPoint = (TSG.Point)locationPoints[0];
            rebarGroup.EndPoint   = (TSG.Point)locationPoints[1];

            //RebarInfo 클래스에서 불러올 값
            rebarGroup.Name  = "Rebar";
            rebarGroup.Size  = "13";
            rebarGroup.Grade = "SD400";
            rebarGroup.RadiusValues.Add(60.00);
            rebarGroup.Class = 11;

            //Form에서 설정
            rebarGroup.StartHook.Shape = RebarHookData.RebarHookShapeEnum.NO_HOOK;
            rebarGroup.EndHook.Shape   = RebarHookData.RebarHookShapeEnum.NO_HOOK;

            rebarGroup.OnPlaneOffsets.Add(25.00);
            rebarGroup.FromPlaneOffset       = 25;
            rebarGroup.StartPointOffsetValue = 25;
            rebarGroup.EndPointOffsetValue   = 25;

            rebarGroup.SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_TARGET_SPACE;
            rebarGroup.Spacings.Add(200);
            rebarGroup.ExcludeType = BaseRebarGroup.ExcludeTypeEnum.EXCLUDE_TYPE_NONE;
            rebarGroup.StirrupType = RebarGroup.RebarGroupStirrupTypeEnum.STIRRUP_TYPE_POLYGONAL;

            if (!rebarGroup.Insert())
            {
                Console.WriteLine("insert failed");
            }
            else
            {
                model.CommitChanges();
            }
        }
예제 #19
0
        private void btn_createCstirrup_Click(object sender, EventArgs e)
        {
            //기본객체 생성
            RebarGroup rebarGroup = new RebarGroup();
            Picker     picker     = new Picker();

            //부재선택
            TSM.ModelObject mainpart = picker.PickObject(Picker.PickObjectEnum.PICK_ONE_PART, "철근을 삽입할 부재를 선택하세요.");
            TSM.Beam        Beam     = mainpart as TSM.Beam;
            rebarGroup.Father = Beam;

            //철근 형태를 결정할 Point 선택
            TSM.Polygon polygon = new TSM.Polygon();

            double MinX = Beam.GetSolid().MinimumPoint.X;
            double MinY = Beam.GetSolid().MinimumPoint.Y;
            double MinZ = Beam.GetSolid().MinimumPoint.Z;
            double MaxX = Beam.GetSolid().MaximumPoint.X;
            double MaxY = Beam.GetSolid().MaximumPoint.Y;
            double MaxZ = Beam.GetSolid().MaximumPoint.Z;

            polygon.Points.Add(new TSG.Point(MaxX, MinY, MinZ));
            polygon.Points.Add(new TSG.Point(MaxX, MaxY, MinZ));
            polygon.Points.Add(new TSG.Point(MaxX, MaxY, MaxZ));
            polygon.Points.Add(new TSG.Point(MaxX, MinY, MaxZ));
            polygon.Points.Add(new TSG.Point(MaxX, MinY, MinZ));
            rebarGroup.Polygons.Add(polygon);

            //철근 생성 위치를 결정할 Point 선택
            //ArrayList locationPoints = picker.PickPoints(Picker.PickPointEnum.PICK_POLYGON, "철근 생성 위치를 결정할 포인트를 선택하세요.");
            rebarGroup.StartPoint = new TSG.Point(MaxX, MinY, MinZ);
            rebarGroup.EndPoint   = new TSG.Point(MinX, MinY, MinZ);

            //RebarInfo 클래스에서 불러올 값
            rebarGroup.Name  = "Rebar";
            rebarGroup.Size  = "13";
            rebarGroup.Grade = "SD400";
            rebarGroup.RadiusValues.Add(60.00);
            rebarGroup.Class = 11;

            //Form에서 설정
            rebarGroup.StartHook.Shape  = RebarHookData.RebarHookShapeEnum.HOOK_135_DEGREES;
            rebarGroup.StartHook.Length = 100.0;
            rebarGroup.StartHook.Radius = 20.0;
            rebarGroup.EndHook.Shape    = RebarHookData.RebarHookShapeEnum.HOOK_135_DEGREES;
            rebarGroup.EndHook.Length   = 100.0;
            rebarGroup.EndHook.Radius   = 20.0;

            rebarGroup.OnPlaneOffsets.Add(25.00);
            rebarGroup.FromPlaneOffset       = 25;
            rebarGroup.StartPointOffsetValue = 25;
            rebarGroup.EndPointOffsetValue   = 25;

            rebarGroup.SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_TARGET_SPACE;
            rebarGroup.Spacings.Add(200);
            rebarGroup.ExcludeType = BaseRebarGroup.ExcludeTypeEnum.EXCLUDE_TYPE_NONE;
            rebarGroup.StirrupType = RebarGroup.RebarGroupStirrupTypeEnum.STIRRUP_TYPE_POLYGONAL;

            if (!rebarGroup.Insert())
            {
                Console.WriteLine("insert failed");
            }
            else
            {
                model.CommitChanges();
            }
        }
예제 #20
0
        public override bool Run(List <InputDefinition> Input)
        {
            try
            {
                GetValuesFromDialog();

                //get the footing
                Identifier id           = ((InputDefinition)Input[0]).GetInput() as Identifier;
                Beam       inputFooting = _Model.SelectModelObject(id) as Beam;

                var test = "";

                //Get the needed object properties
                var topLevelFootingGlobal    = 0.0;
                var bottomLevelFootingGlobal = 0.0;
                inputFooting.GetReportProperty("TOP_LEVEL_GLOBAL_UNFORMATTED", ref topLevelFootingGlobal);
                inputFooting.GetReportProperty("BOTTOM_LEVEL_GLOBAL_UNFORMATTED", ref bottomLevelFootingGlobal);

                //get the material properties
                var material = "";
                inputFooting.GetReportProperty("MATERIAL", ref material);

                //Determine the corner points of the footing
                var centerlineFooting = inputFooting.GetCenterLine(false).Cast <Point>().ToList();
                var startPointFooting = centerlineFooting[0];
                var endPointFooting   = centerlineFooting[1];

                double heightFooting = inputFooting.getDouble("HEIGHT") * 0.5;
                double widthFooting  = inputFooting.getDouble("WIDTH") * 0.5;

                var vectorX = inputFooting.GetCoordinateSystem().AxisX.GetNormal();
                var vectorY = inputFooting.GetCoordinateSystem().AxisY.GetNormal();
                var vectorZ = vectorX.Cross(vectorY).GetNormal();

                var leftBottomStart  = centerlineFooting[0] + new Point(-heightFooting * vectorY) + new Point(widthFooting * vectorZ);
                var rightBottomStart = centerlineFooting[0] + new Point(-heightFooting * vectorY) + new Point(-widthFooting * vectorZ);
                var leftTopStart     = centerlineFooting[0] + new Point(heightFooting * vectorY) + new Point(widthFooting * vectorZ);
                var rightTopStart    = centerlineFooting[0] + new Point(heightFooting * vectorY) + new Point(-widthFooting * vectorZ);

                var leftBottomEnd  = centerlineFooting[1] + new Point(-heightFooting * vectorY) + new Point(widthFooting * vectorZ);
                var rightBottomEnd = centerlineFooting[1] + new Point(-heightFooting * vectorY) + new Point(-widthFooting * vectorZ);
                var leftTopEnd     = centerlineFooting[1] + new Point(heightFooting * vectorY) + new Point(widthFooting * vectorZ);
                var rightTopEnd    = centerlineFooting[1] + new Point(heightFooting * vectorY) + new Point(-widthFooting * vectorZ);

                var rightHalfStart   = centerlineFooting[0] + new Point(heightFooting * vectorY);
                var leftHalfStart    = centerlineFooting[0] + new Point(-heightFooting * vectorY);
                var topHalfStart     = centerlineFooting[0] + new Point(widthFooting * vectorZ);
                var bottomtHalfStart = centerlineFooting[0] + new Point(-widthFooting * vectorZ);

                //var controlPoint1 = new ControlPoint(rightHalfStart);
                //var controlPoint2 = new ControlPoint(leftHalfStart);
                //var controlPoint3 = new ControlPoint(topHalfStart);
                //var controlPoint4 = new ControlPoint(bottomtHalfStart);

                //controlPoint1.Insert();
                //controlPoint2.Insert();
                //controlPoint3.Insert();
                //controlPoint4.Insert();

                //
                //BR1 (Bottom Rebar 1st Layer)
                //
                //list needed for the spacings list
                var BR1Spacing     = DistanceList.Parse(_BR1Spacing);
                var BR1SpacingList = BR1Spacing.Select(d => d.Value).ToList();

                //Define spacing type
                var BR1SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_TARGET_SPACE;

                switch (_BR1SpacingType)
                {
                case 0:
                    BR1SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_TARGET_SPACE;
                    break;

                case 1:
                    BR1SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_EXACT_NUMBER;
                    break;

                case 2:
                    BR1SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_EXACT_SPACINGS;
                    break;
                }

                //create rebar instance bottom rebar 1(BR1)
                RebarGroup BR1 = new RebarGroup()
                {
                    Father     = inputFooting,
                    StartPoint = leftBottomStart,
                    EndPoint   = leftTopStart,
                    Polygons   = new ArrayList
                    {
                        new Polygon
                        {
                            Points = new ArrayList {
                                leftBottomEnd, leftBottomStart, rightBottomStart, rightBottomEnd
                            }
                        }
                    },
                    Size         = _BR1Diameter,
                    RadiusValues = new ArrayList {
                        _BR1Radius
                    },
                    Grade           = _BR1Grade,
                    StirrupType     = RebarGroup.RebarGroupStirrupTypeEnum.STIRRUP_TYPE_POLYGONAL,
                    Name            = "onderwapening",
                    Class           = 4,
                    NumberingSeries = new NumberingSeries {
                        Prefix = "R", StartNumber = 1
                    },
                    StartHook = new RebarHookData
                    {
                        Shape = RebarHookData.RebarHookShapeEnum.NO_HOOK
                    },
                    EndHook = new RebarHookData
                    {
                        Shape = RebarHookData.RebarHookShapeEnum.NO_HOOK
                    },
                    StartPointOffsetType  = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS,
                    StartPointOffsetValue = _CoverTop,
                    EndPointOffsetType    = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS,
                    EndPointOffsetValue   = _CoverTop,
                    OnPlaneOffsets        = new ArrayList {
                        _CoverSide, _CoverBottom, _CoverSide
                    },
                    StartFromPlaneOffset = _CoverSide,
                    EndFromPlaneOffset   = _CoverSide,
                    SpacingType          = BR1SpacingType,
                    Spacings             = new ArrayList(BR1SpacingList),
                    ExcludeType          = BaseRebarGroup.ExcludeTypeEnum.EXCLUDE_TYPE_NONE
                };

                BR1.Insert();

                ArrayList BR1GeometryList = new ArrayList(BR1.GetRebarGeometries(false));
                double    BR1RealDiameter = 0.0;
                foreach (RebarGeometry item in BR1GeometryList)
                {
                    BR1RealDiameter = item.Diameter;
                }

                //
                //TR1 (Top Rebar 1st Layer)
                //
                //list needed for the spacings list
                var TR1Spacing     = DistanceList.Parse(_TR1Spacing);
                var TR1SpacingList = TR1Spacing.Select(d => d.Value).ToList();

                //Define spacing type
                var TR1SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_TARGET_SPACE;

                switch (_TR1SpacingType)
                {
                case 0:
                    TR1SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_TARGET_SPACE;
                    break;

                case 1:
                    TR1SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_EXACT_NUMBER;
                    break;

                case 2:
                    TR1SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_EXACT_SPACINGS;
                    break;
                }

                //create rebar instance top rebar 1(TR1)
                RebarGroup TR1 = new RebarGroup()
                {
                    Father     = inputFooting,
                    StartPoint = leftBottomEnd,
                    EndPoint   = leftTopEnd,
                    Polygons   = new ArrayList
                    {
                        new Polygon
                        {
                            Points = new ArrayList {
                                leftBottomStart, leftBottomEnd, rightBottomEnd, rightBottomStart
                            }
                        }
                    },
                    Size         = _TR1Diameter,
                    RadiusValues = new ArrayList {
                        _TR1Radius
                    },
                    Grade           = _TR1Grade,
                    StirrupType     = RebarGroup.RebarGroupStirrupTypeEnum.STIRRUP_TYPE_POLYGONAL,
                    Name            = "bovenwapening",
                    Class           = 2,
                    NumberingSeries = new NumberingSeries {
                        Prefix = "R", StartNumber = 1
                    },
                    StartHook = new RebarHookData
                    {
                        Shape = RebarHookData.RebarHookShapeEnum.NO_HOOK
                    },
                    EndHook = new RebarHookData
                    {
                        Shape = RebarHookData.RebarHookShapeEnum.NO_HOOK
                    },
                    StartPointOffsetType  = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS,
                    StartPointOffsetValue = _CoverBottom,
                    EndPointOffsetType    = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS,
                    EndPointOffsetValue   = _CoverBottom,
                    OnPlaneOffsets        = new ArrayList {
                        _CoverSide, _CoverTop, _CoverSide
                    },
                    StartFromPlaneOffset = _CoverSide,
                    EndFromPlaneOffset   = _CoverSide,
                    SpacingType          = TR1SpacingType,
                    Spacings             = new ArrayList(TR1SpacingList),
                    ExcludeType          = BaseRebarGroup.ExcludeTypeEnum.EXCLUDE_TYPE_NONE
                };

                TR1.Insert();

                ArrayList TR1GeometryList = new ArrayList(TR1.GetRebarGeometries(false));
                double    TR1RealDiameter = 0.0;
                foreach (RebarGeometry item in TR1GeometryList)
                {
                    TR1RealDiameter = item.Diameter;
                }

                //
                //BR2 (Bottom Rebar 2nd Layer)
                //
                //list needed for the spacings list
                var BR2Spacing     = DistanceList.Parse(_BR2Spacing);
                var BR2SpacingList = BR2Spacing.Select(d => d.Value).ToList();

                //Define spacing type
                var BR2SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_TARGET_SPACE;

                switch (_BR2SpacingType)
                {
                case 0:
                    BR2SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_TARGET_SPACE;
                    break;

                case 1:
                    BR2SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_EXACT_NUMBER;
                    break;

                case 2:
                    BR2SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_EXACT_SPACINGS;
                    break;
                }

                //create rebar instance bottom rebar 2(BR2)
                RebarGroup BR2 = new RebarGroup()
                {
                    Father     = inputFooting,
                    StartPoint = leftBottomStart,
                    EndPoint   = rightBottomStart,
                    Polygons   = new ArrayList
                    {
                        new Polygon
                        {
                            Points = new ArrayList {
                                leftBottomEnd, leftBottomStart, leftTopStart, leftTopEnd
                            }
                        }
                    },
                    Size         = _BR2Diameter,
                    RadiusValues = new ArrayList {
                        _BR2Radius
                    },
                    Grade           = _BR2Grade,
                    StirrupType     = RebarGroup.RebarGroupStirrupTypeEnum.STIRRUP_TYPE_POLYGONAL,
                    Name            = "onderwapening",
                    Class           = 11,
                    NumberingSeries = new NumberingSeries {
                        Prefix = "R", StartNumber = 1
                    },
                    StartHook = new RebarHookData
                    {
                        Shape = RebarHookData.RebarHookShapeEnum.NO_HOOK
                    },
                    EndHook = new RebarHookData
                    {
                        Shape = RebarHookData.RebarHookShapeEnum.NO_HOOK
                    },
                    StartPointOffsetType  = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS,
                    StartPointOffsetValue = _CoverTop,
                    EndPointOffsetType    = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS,
                    EndPointOffsetValue   = _CoverTop,
                    OnPlaneOffsets        = new ArrayList {
                        _CoverSide, _CoverBottom, _CoverSide
                    },
                    StartFromPlaneOffset = _CoverSide,
                    EndFromPlaneOffset   = _CoverSide,
                    SpacingType          = BR2SpacingType,
                    Spacings             = new ArrayList(BR2SpacingList),
                    ExcludeType          = BaseRebarGroup.ExcludeTypeEnum.EXCLUDE_TYPE_NONE
                };

                BR2.Insert();

                ArrayList BR2GeometryList = new ArrayList(BR2.GetRebarGeometries(false));
                double    BR2RealDiameter = 0.0;
                foreach (RebarGeometry item in BR2GeometryList)
                {
                    BR2RealDiameter = item.Diameter;
                }

                //
                //TR2 (Top Rebar 2nd Layer)
                //
                //list needed for the spacings list
                var TR2Spacing     = DistanceList.Parse(_TR2Spacing);
                var TR2SpacingList = TR2Spacing.Select(d => d.Value).ToList();

                //Define spacing type
                var TR2SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_TARGET_SPACE;

                switch (_TR2SpacingType)
                {
                case 0:
                    TR2SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_TARGET_SPACE;
                    break;

                case 1:
                    TR2SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_EXACT_NUMBER;
                    break;

                case 2:
                    TR2SpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_EXACT_SPACINGS;
                    break;
                }

                //create rebar instance top rebar 2(TR2)
                RebarGroup TR2 = new RebarGroup()
                {
                    Father     = inputFooting,
                    StartPoint = leftBottomEnd,
                    EndPoint   = rightBottomEnd,
                    Polygons   = new ArrayList
                    {
                        new Polygon
                        {
                            Points = new ArrayList {
                                leftBottomStart, leftBottomEnd, leftTopEnd, leftTopStart
                            }
                        }
                    },
                    Size         = _TR2Diameter,
                    RadiusValues = new ArrayList {
                        _TR2Radius
                    },
                    Grade           = _TR2Grade,
                    StirrupType     = RebarGroup.RebarGroupStirrupTypeEnum.STIRRUP_TYPE_POLYGONAL,
                    Name            = "bovenwapening",
                    Class           = 13,
                    NumberingSeries = new NumberingSeries {
                        Prefix = "R", StartNumber = 1
                    },
                    StartHook = new RebarHookData
                    {
                        Shape = RebarHookData.RebarHookShapeEnum.NO_HOOK
                    },
                    EndHook = new RebarHookData
                    {
                        Shape = RebarHookData.RebarHookShapeEnum.NO_HOOK
                    },
                    StartPointOffsetType  = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS,
                    StartPointOffsetValue = _CoverBottom,
                    EndPointOffsetType    = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS,
                    EndPointOffsetValue   = _CoverBottom,
                    OnPlaneOffsets        = new ArrayList {
                        _CoverSide, _CoverTop, _CoverSide
                    },
                    StartFromPlaneOffset = _CoverSide,
                    EndFromPlaneOffset   = _CoverSide,
                    SpacingType          = TR2SpacingType,
                    Spacings             = new ArrayList(TR2SpacingList),
                    ExcludeType          = BaseRebarGroup.ExcludeTypeEnum.EXCLUDE_TYPE_NONE
                };

                TR2.Insert();

                ArrayList TR2GeometryList = new ArrayList(TR2.GetRebarGeometries(false));
                double    TR2RealDiameter = 0.0;
                foreach (RebarGeometry item in TR2GeometryList)
                {
                    TR2RealDiameter = item.Diameter;
                }

                //if (_FlipBR == true)
                //{
                //    BR1 = BR2;
                //    BR2 = BR1;
                //}

                ////Determine the distance between the upper and bottom max bend radiusses
                //var footingHeight = inputFooting.getDouble("LENGTH");
                //var distance = footingHeight - _CoverTop - Math.Max(TR1RealDiameter, TR2RealDiameter) - Math.Max(_TR1Radius, _TR2Radius) -
                //    Math.Max(_BR1Radius, _BR2Radius) - Math.Max(BR1RealDiameter, BR2RealDiameter) - _CoverBottom;

                //define needed variables
                double     SR1RealDiameter = 0.0;
                RebarGroup SR1             = new RebarGroup();
                RebarGroup SR2             = new RebarGroup();


                if (_SRYN == 0)
                {
                    //
                    //SR (Side rebar 1st layer)
                    //
                    //list needed for the spacings list
                    var SRSpacing     = DistanceList.Parse(_SRSpacing);
                    var SRSpacingList = SRSpacing.Select(d => d.Value).ToList();

                    //Define spacing type
                    var SRSpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_TARGET_SPACE;

                    switch (_SRSpacingType)
                    {
                    case 0:
                        SRSpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_TARGET_SPACE;
                        break;

                    case 1:
                        SRSpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_EXACT_NUMBER;
                        break;

                    case 2:
                        SRSpacingType = BaseRebarGroup.RebarGroupSpacingTypeEnum.SPACING_TYPE_EXACT_SPACINGS;
                        break;
                    }

                    //Create rebar instance side rebar 1 (SR1)
                    SR1.Father     = inputFooting;
                    SR1.StartPoint = leftBottomStart;
                    SR1.EndPoint   = leftBottomEnd;
                    SR1.Polygons   = new ArrayList
                    {
                        new Polygon
                        {
                            Points = new ArrayList {
                                leftHalfStart, leftBottomStart, leftTopStart, rightHalfStart
                            }
                        }
                    };
                    SR1.Size         = _SRDiameter;
                    SR1.RadiusValues = new ArrayList {
                        _SRRadius
                    };
                    SR1.Grade           = _SRGrade;
                    SR1.StirrupType     = RebarGroup.RebarGroupStirrupTypeEnum.STIRRUP_TYPE_POLYGONAL;
                    SR1.Name            = "flank";
                    SR1.Class           = 6;
                    SR1.NumberingSeries = new NumberingSeries {
                        Prefix = "R", StartNumber = 1
                    };
                    SR1.StartHook = new RebarHookData
                    {
                        Shape = RebarHookData.RebarHookShapeEnum.NO_HOOK
                    };
                    SR1.EndHook = new RebarHookData
                    {
                        Shape = RebarHookData.RebarHookShapeEnum.NO_HOOK
                    };
                    SR1.StartPointOffsetType  = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS;
                    SR1.StartPointOffsetValue = -0.5 * Overlappingsberekening.Overlappingslengte(Convert.ToInt32(_SRDiameter), material, true);
                    SR1.EndPointOffsetType    = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS;
                    SR1.EndPointOffsetValue   = -0.5 * Overlappingsberekening.Overlappingslengte(Convert.ToInt32(_SRDiameter), material, true);
                    SR1.OnPlaneOffsets        = new ArrayList {
                        _CoverSide, _CoverSide, _CoverSide
                    };
                    SR1.StartFromPlaneOffset = _CoverBottom;
                    SR1.EndFromPlaneOffset   = _CoverTop;
                    SR1.SpacingType          = SRSpacingType;
                    SR1.Spacings             = new ArrayList(SRSpacingList);
                    SR1.ExcludeType          = BaseRebarGroup.ExcludeTypeEnum.EXCLUDE_TYPE_NONE;

                    SR1.Insert();

                    ArrayList SRGeometryList = new ArrayList(SR1.GetRebarGeometries(false));
                    foreach (RebarGeometry item in SRGeometryList)
                    {
                        SR1RealDiameter = item.Diameter;
                    }

                    //Create rebar instance side rebar 2 (SR2)
                    SR2.Father     = inputFooting;
                    SR2.StartPoint = leftBottomStart;
                    SR2.EndPoint   = leftBottomEnd;
                    SR2.Polygons   = new ArrayList
                    {
                        new Polygon
                        {
                            Points = new ArrayList {
                                rightHalfStart, rightTopStart, rightBottomStart, leftHalfStart
                            }
                        }
                    };
                    SR2.Size         = _SRDiameter;
                    SR2.RadiusValues = new ArrayList {
                        _SRRadius
                    };
                    SR2.Grade           = _SRGrade;
                    SR2.StirrupType     = RebarGroup.RebarGroupStirrupTypeEnum.STIRRUP_TYPE_POLYGONAL;
                    SR2.Name            = "flank";
                    SR2.Class           = 6;
                    SR2.NumberingSeries = new NumberingSeries {
                        Prefix = "R", StartNumber = 1
                    };
                    SR2.StartHook = new RebarHookData
                    {
                        Shape = RebarHookData.RebarHookShapeEnum.NO_HOOK
                    };
                    SR2.EndHook = new RebarHookData
                    {
                        Shape = RebarHookData.RebarHookShapeEnum.NO_HOOK
                    };
                    SR2.StartPointOffsetType  = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS;
                    SR2.StartPointOffsetValue = -0.5 * Overlappingsberekening.Overlappingslengte(Convert.ToInt32(_SRDiameter), material, true);
                    SR2.EndPointOffsetType    = Reinforcement.RebarOffsetTypeEnum.OFFSET_TYPE_COVER_THICKNESS;
                    SR2.EndPointOffsetValue   = -0.5 * Overlappingsberekening.Overlappingslengte(Convert.ToInt32(_SRDiameter), material, true);
                    SR2.OnPlaneOffsets        = new ArrayList {
                        _CoverSide, _CoverSide, _CoverSide
                    };
                    SR2.StartFromPlaneOffset = _CoverBottom;
                    SR2.EndFromPlaneOffset   = _CoverTop;
                    SR2.SpacingType          = SRSpacingType;
                    SR2.Spacings             = new ArrayList(SRSpacingList);
                    SR2.ExcludeType          = BaseRebarGroup.ExcludeTypeEnum.EXCLUDE_TYPE_NONE;

                    SR2.Insert();
                }



                //
                //Modify rebars
                //
                //Modify BR1
                BR1.StartPointOffsetValue = _CoverTop + _TR1Radius + TR1RealDiameter;
                BR1.EndPointOffsetValue   = _CoverTop + _TR1Radius + TR1RealDiameter;

                if (_TR2Radius > _BR2Radius)
                {
                    BR1.StartFromPlaneOffset = _CoverSide + TR2RealDiameter + _TR2Radius + TR1RealDiameter + SR1RealDiameter;
                }
                else
                {
                    BR1.StartFromPlaneOffset = _CoverSide + BR2RealDiameter + _BR2Radius + TR1RealDiameter + SR1RealDiameter;
                }

                if (_TR2Radius > _BR2Radius)
                {
                    BR1.EndFromPlaneOffset = _CoverSide + TR2RealDiameter + _TR2Radius + SR1RealDiameter;
                }
                else
                {
                    BR1.EndFromPlaneOffset = _CoverSide + BR2RealDiameter + _BR2Radius + SR1RealDiameter;
                }

                BR1.OnPlaneOffsets = new ArrayList {
                    _CoverSide + SR1RealDiameter, _CoverBottom, _CoverSide + SR1RealDiameter
                };

                //Modify TR1
                TR1.StartPointOffsetValue = _CoverBottom + _BR1Radius + BR1RealDiameter;
                TR1.EndPointOffsetValue   = _CoverBottom + _BR1Radius + BR1RealDiameter;

                if (_TR2Radius > _BR2Radius)
                {
                    TR1.StartFromPlaneOffset = _CoverSide + TR2RealDiameter + _TR2Radius + SR1RealDiameter;
                }
                else
                {
                    TR1.StartFromPlaneOffset = _CoverSide + BR2RealDiameter + _BR2Radius + SR1RealDiameter;
                }

                if (_TR2Radius > _BR2Radius)
                {
                    TR1.EndFromPlaneOffset = _CoverSide + TR2RealDiameter + _TR2Radius + BR1RealDiameter + SR1RealDiameter;
                }
                else
                {
                    TR1.EndFromPlaneOffset = _CoverSide + BR2RealDiameter + _BR2Radius + BR1RealDiameter + SR1RealDiameter;
                }

                TR1.OnPlaneOffsets = new ArrayList {
                    _CoverSide + SR1RealDiameter, _CoverTop, _CoverSide + SR1RealDiameter
                };

                //Modify BR2
                BR2.StartPointOffsetValue = _CoverTop + TR1RealDiameter + TR2RealDiameter + _TR2Radius;
                BR2.EndPointOffsetValue   = _CoverTop + TR1RealDiameter + TR2RealDiameter + _TR2Radius;

                if (_TR1Radius > _BR1Radius)
                {
                    BR2.StartFromPlaneOffset = _CoverSide + TR1RealDiameter + _TR1Radius - BR2RealDiameter * 0.5 + SR1RealDiameter;
                }
                else
                {
                    BR2.StartFromPlaneOffset = _CoverSide + BR1RealDiameter + _BR1Radius - BR2RealDiameter * 0.5 + SR1RealDiameter;
                }

                if (_TR1Radius > _BR1Radius)
                {
                    BR2.EndFromPlaneOffset = _CoverSide + TR1RealDiameter + _TR1Radius + TR2RealDiameter - TR2RealDiameter * 0.5 + SR1RealDiameter;
                }
                else
                {
                    BR2.EndFromPlaneOffset = _CoverSide + BR1RealDiameter + _BR1Radius + TR2RealDiameter - TR2RealDiameter * 0.5 + SR1RealDiameter;
                }

                BR2.OnPlaneOffsets = new ArrayList {
                    _CoverSide + SR1RealDiameter, _CoverBottom + BR1RealDiameter, _CoverSide + SR1RealDiameter
                };

                //Modify TR2
                TR2.StartPointOffsetValue = _CoverBottom + BR1RealDiameter + BR2RealDiameter + _BR2Radius;
                TR2.EndPointOffsetValue   = _CoverBottom + BR1RealDiameter + BR2RealDiameter + _BR2Radius;

                if (_TR1Radius > _BR1Radius)
                {
                    TR2.StartFromPlaneOffset = _CoverSide + TR1RealDiameter + _TR1Radius + BR2RealDiameter - BR2RealDiameter * 0.5 + SR1RealDiameter;
                }
                else
                {
                    TR2.StartFromPlaneOffset = _CoverSide + BR1RealDiameter + _BR1Radius + BR2RealDiameter - BR2RealDiameter * 0.5 + SR1RealDiameter;
                }

                if (_TR1Radius > _BR1Radius)
                {
                    TR2.EndFromPlaneOffset = _CoverSide + TR1RealDiameter + _TR1Radius - TR2RealDiameter * 0.5 + SR1RealDiameter;
                }
                else
                {
                    TR2.EndFromPlaneOffset = _CoverSide + BR1RealDiameter + _BR1Radius - TR2RealDiameter * 0.5 + SR1RealDiameter;
                }

                TR2.OnPlaneOffsets = new ArrayList {
                    _CoverSide + SR1RealDiameter, _CoverTop + TR1RealDiameter, _CoverSide + SR1RealDiameter
                };

                //Modify SR1
                SR1.StartFromPlaneOffset = _CoverBottom + _BR2Radius + BR1RealDiameter + SR1RealDiameter;
                SR1.EndFromPlaneOffset   = _CoverTop + _TR2Radius + TR1RealDiameter;

                //Modify SR2
                SR2.StartFromPlaneOffset = _CoverBottom + _BR2Radius + BR1RealDiameter;
                SR2.EndFromPlaneOffset   = _CoverTop + _TR2Radius + TR2RealDiameter + SR1RealDiameter;

                //
                //insert modifications
                //
                BR1.Modify();
                TR1.Modify();
                BR2.Modify();
                TR2.Modify();
                SR1.Modify();
                SR2.Modify();

                //Set the phase of the rebar
                var rebarGroupList = new List <RebarGroup>()
                {
                    BR1, TR1, BR2, TR2, SR1, SR2
                };
                foreach (RebarGroup item in rebarGroupList)
                {
                    item.SetPhase(new Phase(221));
                }
            }
            catch (Exception Exc)
            {
                MessageBox.Show(Exc.ToString());
            }

            return(true);
        }