/// <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."); } }
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); }
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); }
/// <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; }
public static dynamic GetTSObject(RebarGroup dynObject) { if (dynObject is null) { return(null); } return(dynObject.teklaObject); }
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(); } }
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); }
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); }
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); }
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"); }
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); }
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(); }
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); }
/// <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); }
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); }
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(); } }
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(); } }
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); }