public override bool Equals(object obj) { CircleSection s2 = obj as CircleSection; if (this.D == s2.D && this.FiB == s2.FiB && this.C == s2.C && this.NoB == s2.NoB && Equals(this.CurrentConcrete, s2.CurrentConcrete) && Equals(this.CurrentSteel, s2.CurrentSteel) && this.Fi == s2.Fi && this.Ab == s2.Ab && this.A == s2.A && this.Fi == s2.Fi) { return(true); } else { return(false); } }
/// <summary> /// Funkcja zwraca szerokość rozwarcia rysy dla zadanej siły podłużnej oraz momentu zginającego /// </summary> /// <param name="section">klasa reprezentująca obliczany przekrój</param> /// <param name="NEd">siła osiowa w kN</param> /// <param name="MEd">moment zginający w kNm</param> /// <param name="k1">współczynnik k1 zależny od przyczepności zbrojenia (0.8 lub 1.6 patrz EC / 0.8 dla prętów żebrowanych)</param> /// <param name="kt">współczynnik kt zależny od czasu trwania obciążenia (0.6 obc. krótkotrwałe, 0.4 obc. długotrwałe)</param> /// <returns>Zwraca szerokość rozwarcia rysy w mm</returns> public double SLS_CrackWidth(double NEd, double MEd, double kt, double k1, bool lowerFace) { StressState naprezenia = SLS_GetStresses(NEd, MEd); double alfaE = CurrentSteel.Es / CurrentConcrete.Ecm; double As; //w milimetrach kwadratowych!! double fi, c, spacing; if (this is RectangleSection) { RectangleSection sec = this as RectangleSection; if (lowerFace) { fi = sec.Fi1; c = sec.C1; spacing = sec.Spacing1; As = Asi[1] * Dimfactor * Dimfactor; } else { fi = sec.Fi2; c = sec.C2; spacing = sec.Spacing2; As = Asi[0] * Dimfactor * Dimfactor; } } else if (this is CircleSection) { CircleSection sec = this as CircleSection; fi = sec.FiB; c = sec.C; spacing = sec.Spacing; As = ZbrRozcPole(naprezenia.WysokośćStrefySciskanej) * Dimfactor * Dimfactor; } else { fi = 0; c = 0; spacing = 0; As = 0; } double roPeff, deltaEpsilon, AcEff, srMax; double sigmaS; if (lowerFace) { sigmaS = naprezenia.BottomSteelStress(this); } else { sigmaS = naprezenia.TopSteelStress(this); } double Es = this.CurrentSteel.Es; double fctEff = this.CurrentConcrete.fctm; double h = HTotal; //wysokosc w milimetrach!! double x = naprezenia.WysokośćStrefySciskanej * Dimfactor; //w milimetrach!! double k2; double k3 = 3.4; double k4 = 0.425; //przypadek gdy nie dochodzi do zarysowania w ogóle if (naprezenia.Faza == 1) { return(0); } if (As == 0) { As = 0.0000001; } if (sigmaS > 0) { return(0); } else { sigmaS = Math.Abs(sigmaS); } /* * if (As == 0) * { * //return 100; * As = 0.000001; * } */ AcEff = Crack_AcEff(x); // w milimetrach kwadratowych!! roPeff = As / AcEff; double deltaEpsilon1 = (sigmaS - kt * fctEff / roPeff * (1 + alfaE * roPeff)) / Es; double deltaEpsilon2 = 0.6 * sigmaS / Es; deltaEpsilon = Math.Max(deltaEpsilon1, deltaEpsilon2); //określenie współczynnika k2 double epsilon1, epsilon2; if (naprezenia.BottomSteelStress(this) * naprezenia.TopSteelStress(this) < 0) { k2 = 0.5; }/* * else if (naprezenia.SteelAs1Stress < 0 && naprezenia.SteelAs1Stress < 0) * { * k2 = 1; * }*/ else if (naprezenia.BottomSteelStress(this) > 0) { k2 = 0; } else { double epsilonAs1 = naprezenia.BottomSteelStress(this) / Es; double epsilonAs2 = naprezenia.TopSteelStress(this) / Es; double epsEdge1 = Math.Abs((epsilonAs1 - epsilonAs2) / (DiE.Max() - DiE.Min()) * DiE.Min() - epsilonAs1); double epsEdge2 = Math.Abs((epsilonAs1 - epsilonAs2) / (DiE.Max() - DiE.Min()) * (HTotal / Dimfactor - DiE.Max()) + epsilonAs2); epsilon1 = Math.Max(epsEdge1, epsEdge2); epsilon2 = Math.Min(epsEdge1, epsEdge2); k2 = (epsilon1 + epsilon2) / (2 * epsilon1); } double maxSpace = 5 * (c + 0.5 * fi); //określenie maksymalnego rozstawu rys if (As == 0 || spacing > maxSpace) { // jesli nie ma zbrojenia lub rozstaw jest zbyt duży srMax = 1.3 * (h - x); // w milimetrach } else { srMax = k3 * c + k4 * (k1 * k2 * fi) / roPeff; // w milimetrach } double wk1 = srMax * deltaEpsilon; return(wk1); //w milimetrach }
// KONIEC OPROGRAMOWANIA KONTROLEK private Section CreateSection(int i) { Section section; if (i == 1) { if (radioBut_Rectangle_sec1.IsChecked == true) { if (comboBox_As1_spac_no_1.Text == "spacing") { section = new RectangleSection( new Concrete((Concrete.classes)comboBox_Concrete_1.SelectedIndex), new Steel((Steel.classes)comboBox_Steel_1.SelectedIndex), Double.Parse(textBox_width_1.Text), Double.Parse(textBox_height_1.Text), Double.Parse(comboBox_diameter_As1_1.Text), Double.Parse(textBox_spac_no_As1_1.Text), Double.Parse(textBox_cover_As1_1.Text), Double.Parse(comboBox_diameter_As2_1.Text), Double.Parse(textBox_spac_no_As2_1.Text), Double.Parse(textBox_cover_As2_1.Text), CreateStirrups(1) ); } else if (comboBox_As1_spac_no_1.Text == "no of bars") { section = new RectangleSection( new Concrete((Concrete.classes)comboBox_Concrete_1.SelectedIndex), new Steel((Steel.classes)comboBox_Steel_1.SelectedIndex), Double.Parse(textBox_width_1.Text), Double.Parse(textBox_height_1.Text), Double.Parse(comboBox_diameter_As1_1.Text), Int32.Parse(textBox_spac_no_As1_1.Text), Double.Parse(textBox_cover_As1_1.Text), Double.Parse(comboBox_diameter_As2_1.Text), Int32.Parse(textBox_spac_no_As2_1.Text), Double.Parse(textBox_cover_As2_1.Text), CreateStirrups(1) ); } else { section = null; } } else if (radioBut_Circular_sec1.IsChecked == true) { section = new CircleSection( new Concrete((Concrete.classes)comboBox_Concrete_1.SelectedIndex), new Steel((Steel.classes)comboBox_Steel_1.SelectedIndex), Double.Parse(textBox_diameter_1.Text), Double.Parse(comboBox_diameter_Circ_1.Text), Double.Parse(textBox_cover_Circ_1.Text), Int32.Parse(textBox_no_Circ_1.Text)); } else { section = null; } } else if (i == 2) { if (radioBut_Rectangle_sec2.IsChecked == true) { if (comboBox_As1_spac_no_2.Text == "spacing") { section = new RectangleSection( new Concrete((Concrete.classes)comboBox_Concrete_2.SelectedIndex), new Steel((Steel.classes)comboBox_Steel_2.SelectedIndex), Double.Parse(textBox_width_2.Text), Double.Parse(textBox_height_2.Text), Double.Parse(comboBox_diameter_As1_2.Text), Double.Parse(textBox_spac_no_As1_2.Text), Double.Parse(textBox_cover_As1_2.Text), Double.Parse(comboBox_diameter_As2_2.Text), Double.Parse(textBox_spac_no_As2_2.Text), Double.Parse(textBox_cover_As2_2.Text), CreateStirrups(2) ); } else if (comboBox_As1_spac_no_2.Text == "no of bars") { section = new RectangleSection( new Concrete((Concrete.classes)comboBox_Concrete_2.SelectedIndex), new Steel((Steel.classes)comboBox_Steel_2.SelectedIndex), Double.Parse(textBox_width_2.Text), Double.Parse(textBox_height_2.Text), Double.Parse(comboBox_diameter_As1_2.Text), Int32.Parse(textBox_spac_no_As1_2.Text), Double.Parse(textBox_cover_As1_2.Text), Double.Parse(comboBox_diameter_As2_2.Text), Int32.Parse(textBox_spac_no_As2_2.Text), Double.Parse(textBox_cover_As2_2.Text), CreateStirrups(2) ); } else { section = null; } } else if (radioBut_Circular_sec2.IsChecked == true) { section = new CircleSection( new Concrete((Concrete.classes)comboBox_Concrete_2.SelectedIndex), new Steel((Steel.classes)comboBox_Steel_2.SelectedIndex), Double.Parse(textBox_diameter_2.Text), Double.Parse(comboBox_diameter_Circ_2.Text), Double.Parse(textBox_cover_Circ_2.Text), Int32.Parse(textBox_no_Circ_2.Text)); } else { section = null; } } else { section = null; } return(section); }