コード例 #1
0
 /// <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");
 }
コード例 #2
0
        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);
                }
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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();
        }