/// <summary> /// Initializes a new instance of the <see cref="TrussElement2Node"/> class. /// </summary> /// <param name="info">The information.</param> /// <param name="context">The context.</param> /// <exception cref="System.NotImplementedException"></exception> private TrussElement2Node(SerializationInfo info, StreamingContext context) : base(info, context) { _a = info.GetDouble("_a"); geometry = (PolygonYz)info.GetValue("geometry", typeof(PolygonYz)); useOverridedProperties = info.GetBoolean("useOverridedProperties"); _massDensity = info.GetDouble("_massDensity"); }
private void AddRigidElement(MeshBuilder bldr, RigidElement elm) { PolygonYz section = null; if (elm.Nodes.Count(i => !ReferenceEquals(i, null)) < 2) { return; } var r = ElementVisualThickness / 2; var cnt = elm.CentralNode; if (cnt == null) { cnt = elm.Nodes.First(i => !ReferenceEquals(i, null)); /* * for (int i = 0; i < elm.Nodes.Count; i++) * { * for (int j = 0; j < elm.Nodes.Count; j++) * { * if(i==j) * continue; * * var st = elm.Nodes[i].Location.ToPoint3D(); * var en = elm.Nodes[j].Location.ToPoint3D(); * * bldr.AddPipe(st, en, ElementVisualThickness / 2, ElementVisualThickness / 1.9, 4); * } * } */ } //else { for (var i = 0; i < elm.Nodes.Count; i++) { if (ReferenceEquals(elm.Nodes[i], null)) { continue; } if (ReferenceEquals(elm.Nodes[i], cnt)) { continue; } var st = elm.Nodes[i].Location.ToPoint3D(); var en = cnt.Location.ToPoint3D(); bldr.AddPipe(st, en, ElementVisualThickness / 2, ElementVisualThickness / 1.9, 4); } } }
private void AddSpringElement(MeshBuilder bldr, Spring1D elm) { PolygonYz section = null; var r = ElementVisualThickness / 2; if (elm.StartNode.Location.Equals(elm.EndNode.Location)) { bldr.AddSphere(new Point3D(elm.StartNode.Location.X, elm.StartNode.Location.Y, elm.StartNode.Location.Z), ElementVisualThickness * 3); } }
private void AddBarElement(MeshBuilder bldr, BarElement elm) { PolygonYz section = null; var r = ElementVisualThickness / 2; if (elm.Section is Sections.UniformParametric1DSection) { section = new PolygonYz( new PointYZ(-r, -r), new PointYZ(-r, r), new PointYZ(r, r), new PointYZ(r, -r), new PointYZ(-r, -r)); } else { section = new PolygonYz((elm.Section as Sections.UniformGeometric1DSection).Geometry); } var tr = elm.GetTransformationManager(); for (var i = 0; i < section.Count - 1; i++) { var v1 = new Vector(0, section[i].Y, section[i].Z); var v2 = new Vector(0, section[i + 1].Y, section[i + 1].Z); var p1 = elm.StartNode.Location + tr.TransformLocalToGlobal(v1); var p2 = elm.StartNode.Location + tr.TransformLocalToGlobal(v2); var v = elm.EndNode.Location - elm.StartNode.Location; if (Math.Abs(v.Z) < 0.01) { Guid.NewGuid(); } var p3 = p1 + v; var p4 = p2 + v; var p13d = new Point3D(p1.X, p1.Y, p1.Z); var p23d = new Point3D(p2.X, p2.Y, p2.Z); var p33d = new Point3D(p3.X, p3.Y, p3.Z); var p43d = new Point3D(p4.X, p4.Y, p4.Z); bldr.AddTriangle(p13d, p33d, p23d); bldr.AddTriangle(p43d, p23d, p33d); } }
private void AddCstElement(MeshBuilder bldr, CstElement elm) { PolygonYz section = null; var r = ElementVisualThickness / 2; var p1 = elm.Nodes[0].Location; var p2 = elm.Nodes[1].Location; var p3 = elm.Nodes[2].Location; bldr.AddTriangle(p1, p3, p2); }
private void AddTrussElement(MeshBuilder bldr, TrussElement2Node elm) { PolygonYz section = null; var r = ElementVisualThickness / 2; if (elm.UseOverridedProperties) { section = new PolygonYz( new PointYZ(-r, -r), new PointYZ(-r, r), new PointYZ(r, r), new PointYZ(r, -r), new PointYZ(-r, -r)); } else { section = elm.Geometry; } for (var i = 0; i < section.Count - 1; i++) { var v1 = new Vector(0, section[i].Y, section[i].Z); var v2 = new Vector(0, section[i + 1].Y, section[i + 1].Z); var p1 = elm.StartNode.Location + elm.TransformLocalToGlobal(v1); var p2 = elm.StartNode.Location + elm.TransformLocalToGlobal(v2); var v = elm.EndNode.Location - elm.StartNode.Location; if (Math.Abs(v.Z) < 0.01) { Guid.NewGuid(); } var p3 = p1 + v; var p4 = p2 + v; var p13d = new Point3D(p1.X, p1.Y, p1.Z); var p23d = new Point3D(p2.X, p2.Y, p2.Z); var p33d = new Point3D(p3.X, p3.Y, p3.Z); var p43d = new Point3D(p4.X, p4.Y, p4.Z); bldr.AddTriangle(p13d, p33d, p23d); bldr.AddTriangle(p43d, p23d, p33d); } }
private void AddTetrahedronElement(MeshBuilder bldr, Tetrahedral elm) { PolygonYz section = null; var r = ElementVisualThickness / 2; var p1 = elm.Nodes[0].Location; var p2 = elm.Nodes[1].Location; var p3 = elm.Nodes[2].Location; var p4 = elm.Nodes[3].Location; bldr.AddTriangle(p1, p3, p4); bldr.AddTriangle(p3, p2, p4); bldr.AddTriangle(p1, p2, p4); bldr.AddTriangle(p1, p2, p3); }
private static void Example2() { Console.WriteLine("Example 1: Simple 3D Frame with distributed loads"); var model = new Model(); var n1 = new Node(-10, 0, 0); var n2 = new Node(-10, 0, 6); var n3 = new Node(0, 0, 8); var n4 = new Node(10, 0, 6); var n5 = new Node(10, 0, 0); model.Nodes.Add(n1, n2, n3, n4, n5); var secAA = new PolygonYz(SectionGenerator.GetISetion(0.24, 0.67, 0.01, 0.006)); var secBB = new PolygonYz(SectionGenerator.GetISetion(0.24, 0.52, 0.01, 0.006)); var e1 = new FrameElement2Node(n1, n2); e1.Label = "e1"; var e2 = new FrameElement2Node(n2, n3); e2.Label = "e2"; var e3 = new FrameElement2Node(n3, n4); e3.Label = "e3"; var e4 = new FrameElement2Node(n4, n5); e4.Label = "e4"; e1.Geometry = e4.Geometry = secAA; e2.Geometry = e3.Geometry = secBB; e1.E = e2.E = e3.E = e4.E = 210e9; e1.G = e2.G = e3.G = e4.G = 210e9 / (2 * (1 + 0.3));//G = E / (2*(1+no)) e1.UseOverridedProperties = e2.UseOverridedProperties = e3.UseOverridedProperties = e4.UseOverridedProperties = false; model.Elements.Add(e1, e2, e3, e4); n1.Constraints = n2.Constraints = n3.Constraints = n4.Constraints = n5.Constraints = Constraints.FixedDY & Constraints.FixedRX & Constraints.FixedRZ;//DY fixed and RX fixed and RZ fixed n1.Constraints = n1.Constraints & Constraints.MovementFixed; n5.Constraints = n5.Constraints & Constraints.MovementFixed; var ll = new UniformLoad1D(-10000, LoadDirection.Z, CoordinationSystem.Global); var lr = new UniformLoad1D(-10000, LoadDirection.Z, CoordinationSystem.Local); e2.Loads.Add(ll); e3.Loads.Add(lr); var wnd = WpfTraceListener.CreateModelTrace(model); new ModelWarningChecker().CheckModel(model); wnd.ShowDialog(); model.Solve(); }