/// <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); }
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); }
[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); }
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); }
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); }
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)); }
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); }
/// <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); }
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); }
/// <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); }
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); }
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); }
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); }
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); }
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); }); }
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); }
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); }
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); }
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); }