private void CalcLoadPoint(double v, ref Polyline pl) { _n_Ed = v; M_Edy_NomStiff.CalcLoading(); M_Edz_NomStiff.CalcLoading(); double M_Ed = new Vector3d(M_Edz_NomStiff.M_Ed, M_Edy_NomStiff.M_Ed, 0).Length; pl.Add(new Point3d(N_Ed, 0, M_Ed)); }
public ColLoadCase DeepCopy(Column newCol) { ColLoadCase other = (ColLoadCase) MemberwiseClone(); other.M_Edz_NomStiff = M_Edz_NomStiff.DeepCopy(); other.M_Edy_NomStiff = M_Edy_NomStiff.DeepCopy(); other.Col = newCol; return other; }
private void CalcUtilizationNominalStiffness2() { Polyline pl_Mz = Col.CrossSec.CalculateStrengthCurve(Plane.WorldXY,Ls); BoundingBox bb = pl_Mz.BoundingBox; double N_Rdmin = bb.Min.X; if (M_Edy_NomStiff != null && M_Edz_NomStiff != null) { //Save original loads double N_temp = N_Ed; //Check is the bigger utilization when the eccentricity is in z, or y-direction and choose that ZorY = true; M_Edy_NomStiff.CalcLoading(); M_Edz_NomStiff.CalcLoading(); Vector3d direction = new Vector3d(M_Edz_NomStiff.M_Ed, M_Edy_NomStiff.M_Ed, 0); M_EdComb = direction.Length; bool success = Col.CrossSec.CalculateStresses(N_Ed, M_Edz_NomStiff.M_Ed, M_Edy_NomStiff.M_Ed, Name,Ls); if (!success) { Utilization[ColumnCalculationMethod.NominalStiffness2] = 999; return; } //Plane calcPlane = new Plane(Point3d.Origin, direction, // Vector3d.CrossProduct(direction, Vector3d.ZAxis)); Plane calcPlane = LoadPlane; if (calcPlane.ZAxis.Z < 0) calcPlane.Flip(); Plane testPlane = new Plane(calcPlane); testPlane.Transform(Transform.PlaneToPlane(Plane.WorldXY, Plane.WorldYZ)); Polyline pl_temp = Col.CrossSec.CalculateStrengthCurve(calcPlane,Ls); pl_temp.Transform(Transform.PlaneToPlane(testPlane, Plane.WorldYZ)); pl_temp.Transform(Transform.PlanarProjection(Plane.WorldZX)); NMCurve = pl_temp; /* Curve pl_M = Col.CrossSec.CalculateStrengthCurve(calcPlane).ToNurbsCurve(); pl_M.Transform(Transform.PlaneToPlane(testPlane, Plane.WorldYZ)); pl_M.Transform(Transform.PlanarProjection(Plane.WorldZX)); */ Curve pl_M = pl_temp.ToNurbsCurve(); BoundingBox bbox = pl_M.GetBoundingBox(false); double MinNormalForce = bbox.Min.X; double[] NormalForceRange = Enumerable.Range(0, 100).ToList().Select(o => (double)o).ToList().Select(o => o * MinNormalForce/100).ToArray(); Polyline pl = new Polyline(); CalcLoadPoint(NormalForceRange[0], ref pl); int i = 1; while (pl_M.Contains(pl[pl.Count - 1],Plane.WorldZX) ==PointContainment.Inside) { CalcLoadPoint(NormalForceRange[i], ref pl); i++; } //Save original values back _n_Ed = N_temp; M_Edy_NomStiff.CalcLoading(); M_Edz_NomStiff.CalcLoading(); Utilization[ColumnCalculationMethod.NominalStiffness2] = N_Ed / pl[pl.Count - 1].X; LoadCurve = pl; } else Utilization[ColumnCalculationMethod.NominalStiffness2] = 999; }