コード例 #1
0
ファイル: Helpers.cs プロジェクト: jurgstahl/iom-examples
        /// <summary>
        /// Create member
        /// </summary>
        /// <param name="model">Idea open model</param>
        /// <param name="id">Member id</param>
        /// <param name="type">Member type</param>
        /// <param name="css">Cross section</param>
        /// <param name="startNode">Start node</param>
        /// <param name="endNode">End node</param>
        /// <returns>Connected member</returns>
        public static ConnectedMember CreateMember(OpenModel model, int id, Member1DType type, CrossSection css, string startNode, string endNode)
        {
            // create line segments
            LineSegment3D segment = CreateLineSegment3D(model, startNode, endNode);

            // create polylines
            PolyLine3D polyline = new PolyLine3D();

            polyline.Id = model.GetMaxId(polyline) + 1;
            polyline.Segments.Add(new ReferenceElement(segment));

            // add polylines and segments to the model
            model.AddObject(polyline);
            model.AddObject(segment);

            // create 1D elements
            Element1D element = CreateElement1D(model, css, segment);

            model.AddObject(element);

            // create 1D members
            Member1D member = CreateMember1D(model, id, type, element);

            model.Member1D.Add(member);

            // create and return connected member
            ConnectedMember connectedMember = new ConnectedMember();

            connectedMember.Id       = id;
            connectedMember.MemberId = new ReferenceElement(member);

            return(connectedMember);
        }
コード例 #2
0
        private ConnectedMember AddConnectedMember3point(int idMember, int idCss, int idPointA, int idPointB, int idPointC)
        {
            PolyLine3D polyLine3D = new PolyLine3D();

            polyLine3D.Id = idMember;
            openStructModel.AddObject(polyLine3D);

            //Segments

            LineSegment3D ls1 = new LineSegment3D();

            ls1.Id = openStructModel.GetMaxId(ls1) + 1;
            openStructModel.AddObject(ls1);
            ls1.StartPoint = new ReferenceElement(openStructModel.Point3D.First(c => c.Id == idPointA));
            ls1.EndPoint   = new ReferenceElement(openStructModel.Point3D.First(c => c.Id == idPointB));
            polyLine3D.Segments.Add(new ReferenceElement(ls1));

            LineSegment3D ls2 = new LineSegment3D();

            ls2.Id = openStructModel.GetMaxId(ls2) + 1;
            openStructModel.AddObject(ls2);
            ls2.StartPoint = new ReferenceElement(openStructModel.Point3D.First(c => c.Id == idPointB));
            ls2.EndPoint   = new ReferenceElement(openStructModel.Point3D.First(c => c.Id == idPointC));
            polyLine3D.Segments.Add(new ReferenceElement(ls2));


            Element1D el1 = new Element1D();

            el1.Id                = openStructModel.GetMaxId(el1) + 1;
            el1.Name              = "E" + el1.Id;
            el1.Segment           = new ReferenceElement(ls1);
            el1.CrossSectionBegin = new ReferenceElement(openStructModel.CrossSection.First(c => c.Id == idCss));
            el1.CrossSectionEnd   = new ReferenceElement(openStructModel.CrossSection.First(c => c.Id == idCss));

            openStructModel.AddObject(el1);

            Element1D el2 = new Element1D();

            el2.Id                = openStructModel.GetMaxId(el2) + 1;
            el2.Name              = "E" + el2.Id;
            el2.Segment           = new ReferenceElement(ls2);
            el2.CrossSectionBegin = new ReferenceElement(openStructModel.CrossSection.First(c => c.Id == idCss));
            el2.CrossSectionEnd   = new ReferenceElement(openStructModel.CrossSection.First(c => c.Id == idCss));
            openStructModel.AddObject(el2);

            Member1D mb = new Member1D();

            mb.Id   = idMember;
            mb.Name = "B" + mb.Id;
            mb.Elements1D.Add(new ReferenceElement(el1));
            mb.Elements1D.Add(new ReferenceElement(el2));
            openStructModel.Member1D.Add(mb);

            ConnectedMember conMb = new ConnectedMember();

            conMb.Id       = mb.Id;
            conMb.MemberId = new ReferenceElement(mb);
            return(conMb);
        }
コード例 #3
0
        [TestCase("0,0,0 ; 0,1,1 ; 1,1,2", "0.5,1.5,1.5", "0.5,1,1.5")] // Off curve
        public void ClosestPointToTest(string points, string testPoint, string expectedPoint)
        {
            var testCurve = new PolyLine3D(from x in points.Split(';') select Point3D.Parse(x));
            var test      = Point3D.Parse(testPoint);
            var expected  = Point3D.Parse(expectedPoint);

            AssertGeometry.AreEqual(expected, testCurve.ClosestPointTo(test), 1e-06);
        }
コード例 #4
0
        public void PolyLine3DBinaryFormatter()
        {
            var points = "0, -1.5, 0; 0,1,0; 1,1,0";
            var p      = new PolyLine3D(from x in points.Split(';') select Point3D.Parse(x));
            var result = this.BinaryFormmaterRoundTrip(p);

            Assert.AreEqual(p, result);
        }
コード例 #5
0
        public void PolyLine3DProtoBuf()
        {
            var points = "0, -1.5, 0; 0,1,0; 1,1,0";
            var p      = new PolyLine3D(from x in points.Split(';') select Point3D.Parse(x));
            var result = this.ProtobufRoundTrip(p);

            Assert.AreEqual(p, result);
        }
コード例 #6
0
        public void GetPointAtFractionAlongCurve(string points, double fraction, string expected)
        {
            // Note that this method also tests GetPointAtLengthFromStart(...)
            var testElement  = new PolyLine3D(from x in points.Split(';') select Point3D.Parse(x));
            var checkElement = Point3D.Parse(expected);

            AssertGeometry.AreEqual(checkElement, testElement.GetPointAtFractionAlongCurve(fraction));
        }
コード例 #7
0
        public void PolyLine3DXml()
        {
            var          points = "0, -1.5, 0; 0,1,0; 1,1,0";
            var          p      = new PolyLine3D(from x in points.Split(';') select Point3D.Parse(x));
            const string Xml    = @"<PolyLine3D><Points><Point X=""0.25"" Y=""0"" /><Point X=""0.5"" Y=""1"" /><Point X=""1"" Y=""-1"" /></Points></PolyLine3D>";
            var          result = AssertXml.XmlSerializerRoundTrip(p, Xml);

            Assert.AreEqual(p, result);
        }
コード例 #8
0
        /// <summary>
        /// Transforms given polyline 3D to LCS using matrix and converts to 2D geometry.
        /// </summary>
        /// <param name="polyline3D">Polyline to convert.</param>
        /// <param name="lcs">Local coordinate system.</param>
        /// <returns>2D geometry.</returns>
        public static IPolyLine2D ConvertTo2D(IPolyLine3D polyline3D, IMatrix44 lcs)
        {
            var polylineCopy = new PolyLine3D(polyline3D);

            GeomOperation.TransformToLCS(lcs, polylineCopy);
            var polyline2D = ConvertTo2D(polylineCopy);

            return(polyline2D);
        }
コード例 #9
0
        public void PolyLine3DDataContract()
        {
            var          points     = "0, -1.5, 0; 0,1,0; 1,1,0";
            var          p          = new PolyLine3D(from x in points.Split(';') select Point3D.Parse(x));
            const string ElementXml = @"<PolyLine3D><Points><Point3D><X>0</X><Y>-1.5</Y><Z>0</Z></Point3D><Point3D><X>0</X><Y>1</Y><Z>0</Z></Point3D><Point3D><X>1</X><Y>1</Y><Z>0</Z></Point3D></Points></PolyLine3D>";
            var          result     = this.DataContractRoundTrip(p, ElementXml);

            Assert.AreEqual(p, result);
        }
コード例 #10
0
        /// <summary>
        /// Create member
        /// </summary>
        /// <param name="model">Idea open model</param>
        /// <param name="id">Member id</param>
        /// <param name="type">Member type</param>
        /// <param name="css">Cross section</param>
        /// <param name="startNode">Start node</param>
        /// <param name="middleNode">Middle node</param>
        /// <param name="endNode">End node</param>
        /// <returns>Connected member</returns>
        public static ConnectedMember CreateMember(OpenModel model, int id, Member1DType type, CrossSection css, string startNode, string middleNode, string endNode)
        {
            // column members have different coordination system in our example
            bool transformCoordSystem = type == Member1DType.Column ? true : false;

            // create line segments
            LineSegment3D segment1 = CreateLineSegment3D(model, startNode, middleNode, transformCoordSystem);

            model.AddObject(segment1);

            LineSegment3D segment2 = CreateLineSegment3D(model, middleNode, endNode, transformCoordSystem);

            model.AddObject(segment2);

            // create polylines
            PolyLine3D polyline = new PolyLine3D();

            polyline.Id = model.GetMaxId(polyline) + 1;
            polyline.Segments.Add(new ReferenceElement(segment1));
            polyline.Segments.Add(new ReferenceElement(segment2));
            model.AddObject(polyline);

            // create 1D elements
            Element1D element1 = CreateElement1D(model, css, segment1);

            model.AddObject(element1);

            Element1D element2 = CreateElement1D(model, css, segment2);

            model.AddObject(element2);

            // create 1D members
            Member1D member = CreateMember1D(model, id, type, element1, element2);

            model.Member1D.Add(member);

            // create and return connected member
            ConnectedMember connectedMember = new ConnectedMember();

            connectedMember.Id       = id;
            connectedMember.MemberId = new ReferenceElement(member);

            return(connectedMember);
        }
コード例 #11
0
        private ConnectedMember AddConnectedMember2point(int idMember, int idCss, int idPointA, int idPointB, double eccentricity)
        {
            PolyLine3D polyLine3D = new PolyLine3D();

            polyLine3D.Id = openStructModel.GetMaxId(polyLine3D) + 1;
            openStructModel.AddObject(polyLine3D);


            LineSegment3D ls = new LineSegment3D();

            ls.Id         = openStructModel.GetMaxId(ls) + 1;
            ls.StartPoint = new ReferenceElement(openStructModel.Point3D.First(c => c.Id == idPointA));
            ls.EndPoint   = new ReferenceElement(openStructModel.Point3D.First(c => c.Id == idPointB));
            openStructModel.AddObject(ls);
            polyLine3D.Segments.Add(new ReferenceElement(ls));

            Element1D el = new Element1D();

            el.Id                 = openStructModel.GetMaxId(el) + 1;
            el.Name               = "E" + el.Id.ToString();
            el.Segment            = new ReferenceElement(ls);
            el.EccentricityBeginZ = eccentricity;
            el.CrossSectionBegin  = new ReferenceElement(openStructModel.CrossSection.First(c => c.Id == idCss));
            el.CrossSectionEnd    = new ReferenceElement(openStructModel.CrossSection.First(c => c.Id == idCss));
            openStructModel.AddObject(el);

            Member1D mb = new Member1D();

            mb.Id   = idMember;
            mb.Name = "B" + mb.Id.ToString();
            mb.Elements1D.Add(new ReferenceElement(el));
            openStructModel.Member1D.Add(mb);

            ConnectedMember conMb = new ConnectedMember();

            conMb.Id       = mb.Id;
            conMb.MemberId = new ReferenceElement(mb);
            return(conMb);
        }
コード例 #12
0
        internal static IPolyLine3D ConvertTo3D(IPolygon2D polygon2D, Func <double, double, IPoint3D> createPoint, IMatrix44 lcs = null)
        {
            if (polygon2D == null)
            {
                return(null);
            }

            var count = polygon2D.Count;

            if (count > 1)
            {
                var polyline3D = new PolyLine3D();
                var beg        = createPoint(polygon2D[0].X, polygon2D[0].Y);
                for (var i = 1; i < count; ++i)
                {
                    var end = createPoint(polygon2D[i].X, polygon2D[i].Y);
                    var seg = new LineSegment3D(beg, end);
                    polyline3D.Add(seg);
                    beg = end;
                }

                if (polygon2D.IsClosed)
                {
                    polyline3D.Segments.Last().EndPoint = polyline3D.Segments.First().StartPoint;
                }

                if (lcs != null)
                {
                    GeomOperation.TransformToGCS(lcs, polyline3D);
                }

                return(polyline3D);
            }

            return(null);
        }
コード例 #13
0
        private void AddConnectedMember(List <BearingMember> bearingMembers, ConnectionPoint connectionPoint)
        {
            PolyLine3D polyLine3D = new PolyLine3D();

            polyLine3D.Id = openModel.GetMaxId(polyLine3D) + 1;
            openModel.AddObject(polyLine3D);

            Point3D pA = new Point3D();
            Point3D pB = new Point3D();
            Point3D pC = new Point3D();
            Point3D pD = new Point3D();

            //view from point [B], point [B] is centerpoint of connection
            if (bearingMembers[0].isStartPoint == false)
            {
                if (bearingMembers[1].isStartPoint == true)
                {
                    // [A]=0=>[B]=1=>[C]
                    pA = openModel.Point3D.First(a => a.Id == bearingMembers[0].ElementRAZ.line.Start.id);
                    pB = openModel.Point3D.First(a => a.Id == bearingMembers[0].ElementRAZ.line.End.id);
                    pC = openModel.Point3D.First(a => a.Id == bearingMembers[1].ElementRAZ.line.Start.id);
                    pD = openModel.Point3D.First(a => a.Id == bearingMembers[1].ElementRAZ.line.End.id);
                }
                else
                {
                    // [A]=0=>[B]<=1=[C]
                    pA = openModel.Point3D.First(a => a.Id == bearingMembers[0].ElementRAZ.line.Start.id);
                    pB = openModel.Point3D.First(a => a.Id == bearingMembers[0].ElementRAZ.line.End.id);
                    pC = openModel.Point3D.First(a => a.Id == bearingMembers[1].ElementRAZ.line.End.id);
                    pD = openModel.Point3D.First(a => a.Id == bearingMembers[1].ElementRAZ.line.Start.id);
                }
            }
            else
            {
                if (bearingMembers[1].isStartPoint == true)
                {
                    // [A]<=0=[B]=1=>[C]
                    pA = openModel.Point3D.First(a => a.Id == bearingMembers[0].ElementRAZ.line.End.id);
                    pB = openModel.Point3D.First(a => a.Id == bearingMembers[0].ElementRAZ.line.Start.id);
                    pC = openModel.Point3D.First(a => a.Id == bearingMembers[1].ElementRAZ.line.Start.id);
                    pD = openModel.Point3D.First(a => a.Id == bearingMembers[1].ElementRAZ.line.End.id);
                }
                else
                {
                    // [A]<=0=[B]<=1=[C]
                    pA = openModel.Point3D.First(a => a.Id == bearingMembers[0].ElementRAZ.line.End.id);
                    pB = openModel.Point3D.First(a => a.Id == bearingMembers[0].ElementRAZ.line.Start.id);
                    pC = openModel.Point3D.First(a => a.Id == bearingMembers[1].ElementRAZ.line.End.id);
                    pD = openModel.Point3D.First(a => a.Id == bearingMembers[1].ElementRAZ.line.Start.id);

                    /*
                     * pA = openModel.Point3D.First(a => a.Id == bearingMembers[1].ElementRAZ.line.End.id);
                     * pB = openModel.Point3D.First(a => a.Id == bearingMembers[1].ElementRAZ.line.Start.id);
                     * pC = openModel.Point3D.First(a => a.Id == bearingMembers[0].ElementRAZ.line.End.id);
                     * pD = openModel.Point3D.First(a => a.Id == bearingMembers[0].ElementRAZ.line.Start.id);
                     */
                }
            }


            //segments

            /*
             * Point3D pA = openModel.Point3D.First(a => a.Id == bearingMembers[0].ideaLine.Start.id);
             * Point3D pB = openModel.Point3D.First(a => a.Id == bearingMembers[0].ideaLine.End.id);
             * Point3D pC = openModel.Point3D.First(a => a.Id == bearingMembers[1].ideaLine.Start.id);
             * Point3D pD = openModel.Point3D.First(a => a.Id == bearingMembers[1].ideaLine.End.id);
             */

            List <Point3D> points = new List <Point3D>()
            {
                pA, pB, pC, pD
            };
            //Point3D pointB = points.Where(a => a.Id == connectionPoint.Id).First();
            //Point3D pointA = points.Where(a => a.Id != connectionPoint.Id).ToList()[0];//logica
            //Point3D pointC = points.Where(a => a.Id != connectionPoint.Id).ToList()[1];

            //Note: not most robust solution, e.g. does not hold in case of segments with inverse vectors
            Point3D pointA = pA; //Endpoint of first member
            Point3D pointB = pB; //Startpoint of first member
            Point3D pointC = pD; //Endpoint of second member


            LineSegment3D lineSegment1 = new LineSegment3D();

            lineSegment1.Id = openModel.GetMaxId(lineSegment1) + 1;
            openModel.AddObject(lineSegment1);
            lineSegment1.StartPoint = new ReferenceElement(pointA);
            lineSegment1.EndPoint   = new ReferenceElement(pointB);
            polyLine3D.Segments.Add(new ReferenceElement(lineSegment1));


            ///*
            //Defining LCS for First lineSegment
            double xcor = bearingMembers[0].ElementRAZ.line.vector.X;
            double ycor = bearingMembers[0].ElementRAZ.line.vector.Y;
            double zcor = bearingMembers[0].ElementRAZ.line.vector.Z;

            //Define LCS (local-y in XY plane) and unitize
            VectorRAZ vx = new VectorRAZ(xcor, ycor, zcor).Unitize();
            VectorRAZ vy = new VectorRAZ();
            VectorRAZ vz = new VectorRAZ();

            if (xcor == 0.0 && ycor == 0.0)
            {
                vy = new VectorRAZ(0.0, 1.0, 0.0).Unitize();
                vz = new VectorRAZ((-zcor), 0.0, (xcor)).Unitize();
            }
            else
            {
                vy = new VectorRAZ(-ycor, xcor, 0.0).Unitize();
                vz = new VectorRAZ((-zcor * xcor), (-zcor * ycor), ((xcor * xcor) + (ycor * ycor))).Unitize();
            }



            var LocalCoordinateSystem = new CoordSystemByVector();

            LocalCoordinateSystem.VecX = new Vector3D()
            {
                X = vx.X, Y = vx.Y, Z = vx.Z
            };
            LocalCoordinateSystem.VecY = new Vector3D()
            {
                X = vy.X, Y = vy.Y, Z = vy.Z
            };
            LocalCoordinateSystem.VecZ = new Vector3D()
            {
                X = vz.X, Y = vz.Y, Z = vz.Z
            };

            lineSegment1.LocalCoordinateSystem = LocalCoordinateSystem;

            //*/

            LineSegment3D lineSegment2 = new LineSegment3D();

            lineSegment2.Id = openModel.GetMaxId(lineSegment2) + 1;
            openModel.AddObject(lineSegment2);
            lineSegment2.StartPoint = new ReferenceElement(pointB);
            lineSegment2.EndPoint   = new ReferenceElement(pointC);
            polyLine3D.Segments.Add(new ReferenceElement(lineSegment2));


            ///*
            /////Defining LCS for Second lineSegment
            double xcor2 = bearingMembers[1].ElementRAZ.line.vector.X;
            double ycor2 = bearingMembers[1].ElementRAZ.line.vector.Y;
            double zcor2 = bearingMembers[1].ElementRAZ.line.vector.Z;

            //Define LCS (local-y in XY plane) and unitize
            VectorRAZ vx2 = new VectorRAZ(xcor2, ycor2, zcor2).Unitize();
            VectorRAZ vy2 = new VectorRAZ();
            VectorRAZ vz2 = new VectorRAZ();

            if (xcor2 == 0.0 && ycor2 == 0.0)
            {
                vy2 = new VectorRAZ(0.0, 1.0, 0.0).Unitize();
                vz2 = new VectorRAZ((-zcor2), 0.0, (xcor2)).Unitize();
            }
            else
            {
                vy2 = new VectorRAZ(-ycor2, xcor2, 0.0).Unitize();
                vz2 = new VectorRAZ((-zcor2 * xcor2), (-zcor2 * ycor2), ((xcor2 * xcor2) + (ycor2 * ycor2))).Unitize();
            }



            var LocalCoordinateSystem2 = new CoordSystemByVector();

            LocalCoordinateSystem2.VecX = new Vector3D()
            {
                X = vx2.X, Y = vx2.Y, Z = vx2.Z
            };
            LocalCoordinateSystem2.VecY = new Vector3D()
            {
                X = vy2.X, Y = vy2.Y, Z = vy2.Z
            };
            LocalCoordinateSystem2.VecZ = new Vector3D()
            {
                X = vz2.X, Y = vz2.Y, Z = vz2.Z
            };

            lineSegment2.LocalCoordinateSystem = LocalCoordinateSystem2;
            //*/

            //create elements
            Element1D el1 = new Element1D();

            //el1.Id = openModel.GetMaxId(el1) + 1;

            el1.Id = bearingMembers[0].ElementRAZ.id + 1; //Use of Id from Grasshopper Model + Plus One

            el1.Name    = "E" + el1.Id.ToString();
            el1.Segment = new ReferenceElement(lineSegment1);
            IdeaRS.OpenModel.CrossSection.CrossSection crossSection = openModel.CrossSection.First(a => a.Id == bearingMembers[0].ElementRAZ.crossSection.id);
            el1.CrossSectionBegin = new ReferenceElement(crossSection);
            el1.CrossSectionEnd   = new ReferenceElement(crossSection);
            openModel.AddObject(el1);

            Element1D el2 = new Element1D();

            //el2.Id = openModel.GetMaxId(el2) + 1;

            el2.Id = bearingMembers[1].ElementRAZ.id + 1; //Use of Id from Grasshopper Model + Plus One

            el2.Name              = "E" + el2.Id.ToString();
            el2.Segment           = new ReferenceElement(lineSegment2);
            el2.CrossSectionBegin = new ReferenceElement(crossSection);
            el2.CrossSectionEnd   = new ReferenceElement(crossSection);
            openModel.AddObject(el2);

            //create member
            Member1D member1D = new Member1D();

            member1D.Id   = openModel.GetMaxId(member1D) + 1;
            member1D.Name = "Member" + member1D.Id.ToString();
            member1D.Elements1D.Add(new ReferenceElement(el1));
            member1D.Elements1D.Add(new ReferenceElement(el2));
            openModel.Member1D.Add(member1D);

            //create connected member
            ConnectedMember connectedMember = new ConnectedMember();

            connectedMember.Id       = member1D.Id;
            connectedMember.MemberId = new ReferenceElement(member1D);
            connectionPoint.ConnectedMembers.Add(connectedMember);
        }
コード例 #14
0
        private ConnectedMember AddConnectedMember(int idMember, int idCss, int idPointA, int idPointB, int idPointC, int idPointD, int idPointE)
        {
            PolyLine3D polyLine3D = new PolyLine3D();

            polyLine3D.Id = idMember;
            openStructModel.AddObject(polyLine3D);


            //SEGMENTEN (voeg ls3 en ls4 toe)

            LineSegment3D ls1 = new LineSegment3D();

            ls1.Id = openStructModel.GetMaxId(ls1) + 1;
            openStructModel.AddObject(ls1);
            ls1.StartPoint = new ReferenceElement(openStructModel.Point3D.First(c => c.Id == idPointA));
            ls1.EndPoint   = new ReferenceElement(openStructModel.Point3D.First(c => c.Id == idPointB));
            polyLine3D.Segments.Add(new ReferenceElement(ls1));

            LineSegment3D ls2 = new LineSegment3D();

            ls2.Id = openStructModel.GetMaxId(ls2) + 1;
            openStructModel.AddObject(ls2);
            ls2.StartPoint = new ReferenceElement(openStructModel.Point3D.First(c => c.Id == idPointB));
            ls2.EndPoint   = new ReferenceElement(openStructModel.Point3D.First(c => c.Id == idPointC));
            polyLine3D.Segments.Add(new ReferenceElement(ls2));

            LineSegment3D ls3 = new LineSegment3D();

            ls3.Id = openStructModel.GetMaxId(ls3) + 1;
            openStructModel.AddObject(ls3);
            ls3.StartPoint = new ReferenceElement(openStructModel.Point3D.First(c => c.Id == idPointC));
            ls3.EndPoint   = new ReferenceElement(openStructModel.Point3D.First(c => c.Id == idPointD));
            polyLine3D.Segments.Add(new ReferenceElement(ls3));

            LineSegment3D ls4 = new LineSegment3D();

            ls4.Id = openStructModel.GetMaxId(ls4) + 1;
            openStructModel.AddObject(ls4);
            ls4.StartPoint = new ReferenceElement(openStructModel.Point3D.First(c => c.Id == idPointD));
            ls4.EndPoint   = new ReferenceElement(openStructModel.Point3D.First(c => c.Id == idPointE));
            polyLine3D.Segments.Add(new ReferenceElement(ls4));



            //ELEMENTEN (Crosssections toekennen)


            Element1D el1 = new Element1D();

            el1.Id                = openStructModel.GetMaxId(el1) + 1;
            el1.Name              = "E" + el1.Id;
            el1.Segment           = new ReferenceElement(ls1);
            el1.CrossSectionBegin = new ReferenceElement(openStructModel.CrossSection.First(c => c.Id == idCss));
            el1.CrossSectionEnd   = new ReferenceElement(openStructModel.CrossSection.First(c => c.Id == idCss));

            openStructModel.AddObject(el1);

            Element1D el2 = new Element1D();

            el2.Id                = openStructModel.GetMaxId(el2) + 1;
            el2.Name              = "E" + el2.Id;
            el2.Segment           = new ReferenceElement(ls2);
            el2.CrossSectionBegin = new ReferenceElement(openStructModel.CrossSection.First(c => c.Id == idCss));
            el2.CrossSectionEnd   = new ReferenceElement(openStructModel.CrossSection.First(c => c.Id == idCss));
            openStructModel.AddObject(el2);

            Element1D el3 = new Element1D();

            el3.Id                = openStructModel.GetMaxId(el3) + 1;
            el3.Name              = "E" + el3.Id;
            el3.Segment           = new ReferenceElement(ls3);
            el3.CrossSectionBegin = new ReferenceElement(openStructModel.CrossSection.First(c => c.Id == idCss));
            el3.CrossSectionEnd   = new ReferenceElement(openStructModel.CrossSection.First(c => c.Id == idCss));
            openStructModel.AddObject(el3);

            Element1D el4 = new Element1D();

            el4.Id                = openStructModel.GetMaxId(el4) + 1;
            el4.Name              = "E" + el4.Id;
            el4.Segment           = new ReferenceElement(ls4);
            el4.CrossSectionBegin = new ReferenceElement(openStructModel.CrossSection.First(c => c.Id == idCss));
            el4.CrossSectionEnd   = new ReferenceElement(openStructModel.CrossSection.First(c => c.Id == idCss));
            openStructModel.AddObject(el4);



            //MEMBERS

            Member1D mb = new Member1D();

            mb.Id   = idMember;
            mb.Name = "B" + mb.Id;
            mb.Elements1D.Add(new ReferenceElement(el1));
            mb.Elements1D.Add(new ReferenceElement(el2));
            mb.Elements1D.Add(new ReferenceElement(el3));
            mb.Elements1D.Add(new ReferenceElement(el4));
            openStructModel.Member1D.Add(mb);

            ConnectedMember conMb = new ConnectedMember();

            conMb.Id       = mb.Id;
            conMb.MemberId = new ReferenceElement(mb);
            return(conMb);
        }
コード例 #15
0
        public void GetPointAtFractionAlongCurveThrowsArgumentException(string points, double fraction, string expected)
        {
            var testElement = new PolyLine3D(from x in points.Split(';') select Point3D.Parse(x));

            Assert.Throws <ArgumentException>(() => { testElement.GetPointAtFractionAlongCurve(fraction); });
        }
コード例 #16
0
        private void AddConnectedMember(AttachedMember attachedMember, ConnectionPoint connectionPoint)
        {
            PolyLine3D polyLine3D = new PolyLine3D();

            polyLine3D.Id = openModel.GetMaxId(polyLine3D) + 1;
            openModel.AddObject(polyLine3D);

            //endpoints
            Point3D pA = openModel.Point3D.First(a => a.Id == attachedMember.ideaLine.Start.id);
            Point3D pB = openModel.Point3D.First(a => a.Id == attachedMember.ideaLine.End.id);

            //create line segment
            LineSegment3D lineSegment = new LineSegment3D();

            lineSegment.Id         = openModel.GetMaxId(lineSegment) + 1;
            lineSegment.StartPoint = new ReferenceElement(pA);
            lineSegment.EndPoint   = new ReferenceElement(pB);
            openModel.AddObject(lineSegment);
            polyLine3D.Segments.Add(new ReferenceElement(lineSegment));

            SetLCS(attachedMember, lineSegment);


            //create element
            Element1D element1D = new Element1D();

            //element1D.Id = openModel.GetMaxId(element1D) + 1;

            element1D.Id = attachedMember.ElementRAZ.id + 1; //Use of Id from Grasshopper Model + Plus One

            element1D.Name    = "Element " + element1D.Id.ToString();
            element1D.Segment = new ReferenceElement(lineSegment);

            IdeaRS.OpenModel.CrossSection.CrossSection crossSection = openModel.CrossSection.First(a => a.Id == attachedMember.ElementRAZ.crossSection.id);
            element1D.CrossSectionBegin = new ReferenceElement(crossSection);
            element1D.CrossSectionEnd   = new ReferenceElement(crossSection);
            //element1D.RotationRx = attachedMember.ElementRAZ.rotationLCS;

            if (attachedMember is ConnectingMember)
            {
                ConnectingMember connectingMember = attachedMember as ConnectingMember;
                double           eccentricty      = new double();
                if (connectingMember.localEccentricity == -0)
                {
                    eccentricty = 0;
                }
                else
                {
                    eccentricty = connectingMember.localEccentricity;
                }
                element1D.EccentricityBeginZ = eccentricty;
                element1D.EccentricityEndZ   = eccentricty;
            }

            openModel.AddObject(element1D);

            //create member
            Member1D member1D = new Member1D();

            member1D.Id   = openModel.GetMaxId(member1D) + 1;
            member1D.Name = "Member " + member1D.Id.ToString();
            member1D.Elements1D.Add(new ReferenceElement(element1D));
            openModel.Member1D.Add(member1D);

            //create connected member
            ConnectedMember connectedMember = new ConnectedMember();

            connectedMember.Id       = member1D.Id;
            connectedMember.MemberId = new ReferenceElement(member1D);
            connectionPoint.ConnectedMembers.Add(connectedMember);
        }
コード例 #17
0
        public void GetPolyLineLengthTests(string points, double expected)
        {
            var testElement = new PolyLine3D(from x in points.Split(';') select Point3D.Parse(x));

            Assert.AreEqual(expected, testElement.Length, 1e-10);
        }
コード例 #18
0
        private void AddConnectedMember(AttachedMember attachedMember, ConnectionPoint connectionPoint)
        {
            PolyLine3D polyLine3D = new PolyLine3D();

            polyLine3D.Id = openModel.GetMaxId(polyLine3D) + 1;
            openModel.AddObject(polyLine3D);

            //endpoints
            Point3D pA = openModel.Point3D.First(a => a.Id == attachedMember.ideaLine.Start.id);
            Point3D pB = openModel.Point3D.First(a => a.Id == attachedMember.ideaLine.End.id);

            //create line segment
            LineSegment3D lineSegment = new LineSegment3D();

            lineSegment.Id         = openModel.GetMaxId(lineSegment) + 1;
            lineSegment.StartPoint = new ReferenceElement(pA);
            lineSegment.EndPoint   = new ReferenceElement(pB);
            openModel.AddObject(lineSegment);
            polyLine3D.Segments.Add(new ReferenceElement(lineSegment));

            ///*
            double xcor = attachedMember.ElementRAZ.line.vector.X;
            double ycor = attachedMember.ElementRAZ.line.vector.Y;
            double zcor = attachedMember.ElementRAZ.line.vector.Z;

            //Define LCS (local-y in XY plane) and unitize
            VectorRAZ vx = new VectorRAZ(xcor, ycor, zcor).Unitize();
            VectorRAZ vy = new VectorRAZ();
            VectorRAZ vz = new VectorRAZ();

            if (xcor == 0.0 && ycor == 0.0)
            {
                vy = new VectorRAZ(0.0, 1.0, 0.0).Unitize();
                vz = new VectorRAZ((-zcor), 0.0, (xcor)).Unitize();
            }
            else
            {
                vy = new VectorRAZ(-ycor, xcor, 0.0).Unitize();
                vz = new VectorRAZ((-zcor * xcor), (-zcor * ycor), ((xcor * xcor) + (ycor * ycor))).Unitize();
            }



            var LocalCoordinateSystem = new CoordSystemByVector();

            LocalCoordinateSystem.VecX = new Vector3D()
            {
                X = vx.X, Y = vx.Y, Z = vx.Z
            };
            LocalCoordinateSystem.VecY = new Vector3D()
            {
                X = vy.X, Y = vy.Y, Z = vy.Z
            };
            LocalCoordinateSystem.VecZ = new Vector3D()
            {
                X = vz.X, Y = vz.Y, Z = vz.Z
            };

            lineSegment.LocalCoordinateSystem = LocalCoordinateSystem;
            //*/

            //create element
            Element1D element1D = new Element1D();

            //element1D.Id = openModel.GetMaxId(element1D) + 1;

            element1D.Id = attachedMember.ElementRAZ.id + 1; //Use of Id from Grasshopper Model + Plus One

            element1D.Name    = "Element " + element1D.Id.ToString();
            element1D.Segment = new ReferenceElement(lineSegment);

            IdeaRS.OpenModel.CrossSection.CrossSection crossSection = openModel.CrossSection.First(a => a.Id == attachedMember.ElementRAZ.crossSection.id);
            element1D.CrossSectionBegin = new ReferenceElement(crossSection);
            element1D.CrossSectionEnd   = new ReferenceElement(crossSection);

            if (attachedMember is ConnectingMember)
            {
                ConnectingMember connectingMember = attachedMember as ConnectingMember;
                double           eccentricty      = new double();
                if (connectingMember.localEccentricity == -0)
                {
                    eccentricty = 0;
                }
                else
                {
                    eccentricty = connectingMember.localEccentricity;
                }
                element1D.EccentricityBeginZ = eccentricty;
                element1D.EccentricityEndZ   = eccentricty;
            }

            openModel.AddObject(element1D);

            //create member
            Member1D member1D = new Member1D();

            member1D.Id   = openModel.GetMaxId(member1D) + 1;
            member1D.Name = "Member " + member1D.Id.ToString();
            member1D.Elements1D.Add(new ReferenceElement(element1D));
            openModel.Member1D.Add(member1D);

            //create connected member
            ConnectedMember connectedMember = new ConnectedMember();

            connectedMember.Id       = member1D.Id;
            connectedMember.MemberId = new ReferenceElement(member1D);
            connectionPoint.ConnectedMembers.Add(connectedMember);
        }
コード例 #19
0
        private void AddConnectedMember(List <BearingMember> bearingMembers, ConnectionPoint connectionPoint)
        {
            PolyLine3D polyLine3D = new PolyLine3D();

            polyLine3D.Id = openModel.GetMaxId(polyLine3D) + 1;
            openModel.AddObject(polyLine3D);



            Point3D pA  = new Point3D();
            Point3D pB  = new Point3D();
            Point3D pB2 = new Point3D();
            Point3D pC  = new Point3D();

            pA  = openModel.Point3D.First(a => a.Id == bearingMembers[0].ElementRAZ.line.Start.id);
            pB  = openModel.Point3D.First(a => a.Id == bearingMembers[0].ElementRAZ.line.End.id);
            pB2 = openModel.Point3D.First(a => a.Id == bearingMembers[1].ElementRAZ.line.Start.id);
            pC  = openModel.Point3D.First(a => a.Id == bearingMembers[1].ElementRAZ.line.End.id);

            List <Point3D> points = new List <Point3D>()
            {
                pA, pB, pB2, pC
            };

            Point3D pointA = pA; //Endpoint of first member
            Point3D pointB = pB; //Startpoint of first member
            Point3D pointC = pC; //Endpoint of second member


            LineSegment3D lineSegment1 = new LineSegment3D();

            lineSegment1.Id = openModel.GetMaxId(lineSegment1) + 1;
            openModel.AddObject(lineSegment1);
            lineSegment1.StartPoint = new ReferenceElement(pointA);
            lineSegment1.EndPoint   = new ReferenceElement(pointB);
            polyLine3D.Segments.Add(new ReferenceElement(lineSegment1));

            SetLCS(bearingMembers[0], lineSegment1);

            LineSegment3D lineSegment2 = new LineSegment3D();

            lineSegment2.Id = openModel.GetMaxId(lineSegment2) + 1;
            openModel.AddObject(lineSegment2);
            lineSegment2.StartPoint = new ReferenceElement(pointB);
            lineSegment2.EndPoint   = new ReferenceElement(pointC);
            polyLine3D.Segments.Add(new ReferenceElement(lineSegment2));

            SetLCS(bearingMembers[1], lineSegment2);

            //create elements
            Element1D el1 = new Element1D();

            //el1.Id = openModel.GetMaxId(el1) + 1;

            el1.Id = bearingMembers[0].ElementRAZ.id + 1; //Use of Id from Grasshopper Model + Plus One

            el1.Name    = "E" + el1.Id.ToString();
            el1.Segment = new ReferenceElement(lineSegment1);
            IdeaRS.OpenModel.CrossSection.CrossSection crossSection = openModel.CrossSection.First(a => a.Id == bearingMembers[0].ElementRAZ.crossSection.id);
            el1.CrossSectionBegin = new ReferenceElement(crossSection);
            el1.CrossSectionEnd   = new ReferenceElement(crossSection);
            //el1.RotationRx = bearingMembers[0].ElementRAZ.rotationLCS;
            openModel.AddObject(el1);

            Element1D el2 = new Element1D();

            //el2.Id = openModel.GetMaxId(el2) + 1;

            el2.Id = bearingMembers[1].ElementRAZ.id + 1; //Use of Id from Grasshopper Model + Plus One

            el2.Name              = "E" + el2.Id.ToString();
            el2.Segment           = new ReferenceElement(lineSegment2);
            el2.CrossSectionBegin = new ReferenceElement(crossSection);
            el2.CrossSectionEnd   = new ReferenceElement(crossSection);
            //el2.RotationRx = bearingMembers[1].ElementRAZ.rotationLCS;
            openModel.AddObject(el2);

            //create member
            Member1D member1D = new Member1D();

            member1D.Id   = openModel.GetMaxId(member1D) + 1;
            member1D.Name = "Member" + member1D.Id.ToString();
            member1D.Elements1D.Add(new ReferenceElement(el1));
            member1D.Elements1D.Add(new ReferenceElement(el2));
            openModel.Member1D.Add(member1D);


            //create connected member
            ConnectedMember connectedMember = new ConnectedMember();

            connectedMember.Id       = member1D.Id;
            connectedMember.MemberId = new ReferenceElement(member1D);
            connectionPoint.ConnectedMembers.Add(connectedMember);
        }