public void TestCreateBool6() { // create new bool6 GsaBool6 b6 = new GsaBool6(); b6.X = true; b6.Y = true; b6.Z = true; b6.XX = true; b6.YY = true; b6.ZZ = true; Assert.IsTrue(b6.X); Assert.IsTrue(b6.Y); Assert.IsTrue(b6.Z); Assert.IsTrue(b6.XX); Assert.IsTrue(b6.YY); Assert.IsTrue(b6.ZZ); b6.X = false; b6.Y = false; b6.Z = false; b6.XX = false; b6.YY = false; b6.ZZ = false; Assert.IsFalse(b6.X); Assert.IsFalse(b6.Y); Assert.IsFalse(b6.Z); Assert.IsFalse(b6.XX); Assert.IsFalse(b6.YY); Assert.IsFalse(b6.ZZ); }
public void TestCreateGsaNodeRestrained() { // create new Bool6 GsaBool6 bool6 = new GsaBool6 { X = true, Y = false, Z = true, XX = false, YY = true, ZZ = false }; // create new node from point with bool6 restraint GsaNode node = new GsaNode(new Point3d(5.3, 9.9, 2017), bool6); Assert.AreEqual(5.3, node.Point.X); Assert.AreEqual(9.9, node.Point.Y); Assert.AreEqual(2017, node.Point.Z); Assert.IsTrue(node.Node.Restraint.X); Assert.IsFalse(node.Node.Restraint.Y); Assert.IsTrue(node.Node.Restraint.Z); Assert.IsFalse(node.Node.Restraint.XX); Assert.IsTrue(node.Node.Restraint.YY); Assert.IsFalse(node.Node.Restraint.ZZ); }
protected override void SolveInstance(IGH_DataAccess DA) { GsaBool6 mybool = new GsaBool6(); GsaBool6 gsabool = new GsaBool6(); if (DA.GetData(0, ref gsabool)) { mybool = gsabool.Duplicate(); } if (mybool != null) { //inputs bool x = new bool(); if (DA.GetData(1, ref x)) { mybool.X = x; } bool y = new bool(); if (DA.GetData(2, ref y)) { mybool.Y = y; } bool z = new bool(); if (DA.GetData(3, ref z)) { mybool.Z = z; } bool xx = new bool(); if (DA.GetData(4, ref xx)) { mybool.XX = xx; } bool yy = new bool(); if (DA.GetData(5, ref yy)) { mybool.YY = yy; } bool zz = new bool(); if (DA.GetData(6, ref zz)) { mybool.ZZ = zz; } //outputs DA.SetData(0, new GsaBool6Goo(mybool)); DA.SetData(1, mybool.X); DA.SetData(2, mybool.Y); DA.SetData(3, mybool.Z); DA.SetData(4, mybool.XX); DA.SetData(5, mybool.YY); DA.SetData(6, mybool.ZZ); } }
protected override void SolveInstance(IGH_DataAccess DA) { GH_Boolean ghBolX = new GH_Boolean(); if (DA.GetData(0, ref ghBolX)) { GH_Convert.ToBoolean(ghBolX, out x, GH_Conversion.Both); //use Grasshopper to convert, these methods covers many cases and are consistent } GH_Boolean ghBolY = new GH_Boolean(); if (DA.GetData(1, ref ghBolY)) { GH_Convert.ToBoolean(ghBolY, out y, GH_Conversion.Both); } GH_Boolean ghBolZ = new GH_Boolean(); if (DA.GetData(2, ref ghBolZ)) { GH_Convert.ToBoolean(ghBolZ, out z, GH_Conversion.Both); } GH_Boolean ghBolXX = new GH_Boolean(); if (DA.GetData(3, ref ghBolXX)) { GH_Convert.ToBoolean(ghBolXX, out xx, GH_Conversion.Both); } GH_Boolean ghBolYY = new GH_Boolean(); if (DA.GetData(4, ref ghBolYY)) { GH_Convert.ToBoolean(ghBolYY, out yy, GH_Conversion.Both); } GH_Boolean ghBolZZ = new GH_Boolean(); if (DA.GetData(5, ref ghBolZZ)) { GH_Convert.ToBoolean(ghBolZZ, out zz, GH_Conversion.Both); } GsaBool6 bool6 = new GsaBool6 { X = x, Y = y, Z = z, XX = xx, YY = yy, ZZ = zz }; DA.SetData(0, new GsaBool6Goo(bool6.Duplicate())); // output as Goo-type for consistency. }
protected override void SolveInstance(IGH_DataAccess DA) { GH_Point ghpt = new GH_Point(); if (DA.GetData(0, ref ghpt)) { Point3d pt = new Point3d(); if (GH_Convert.ToPoint3d(ghpt, ref pt, GH_Conversion.Both)) { GH_Plane gH_Plane = new GH_Plane(); Plane localAxis = Plane.WorldXY; if (DA.GetData(1, ref gH_Plane)) { GH_Convert.ToPlane(gH_Plane, ref localAxis, GH_Conversion.Both); } GsaNode node = new GsaNode(pt); GsaBool6 bool6 = new GsaBool6(); if (DA.GetData(2, ref bool6)) { x = bool6.X; y = bool6.Y; z = bool6.Z; xx = bool6.XX; yy = bool6.YY; zz = bool6.ZZ; } GsaSpring spring = new GsaSpring(); if (DA.GetData(3, ref spring)) { node.Spring = spring; } node.LocalAxis = localAxis; node.Node.Restraint.X = x; node.Node.Restraint.Y = y; node.Node.Restraint.Z = z; node.Node.Restraint.XX = xx; node.Node.Restraint.YY = yy; node.Node.Restraint.ZZ = zz; DA.SetData(0, new GsaNodeGoo(node.Duplicate())); } } }
public void TestCreateGsaElem1dGetReleases() { // create new line Line ln = new Line(new Point3d(1, 4, 6), new Point3d(-2, 3, -5)); // create element GsaElement1d elem = new GsaElement1d(new LineCurve(ln)); GsaBool6 rel1 = elem.ReleaseStart; Assert.IsFalse(rel1.X); Assert.IsFalse(rel1.Y); Assert.IsFalse(rel1.Z); Assert.IsFalse(rel1.XX); Assert.IsFalse(rel1.YY); Assert.IsFalse(rel1.ZZ); }
public void TestCreateGsaNodeIdRestrainLocAxis() { // create new Bool6 GsaBool6 bool6 = new GsaBool6 { X = false, Y = true, Z = false, XX = true, YY = false, ZZ = true }; // create new rhino plane for local axis Plane pln = Plane.WorldZX; // set ID int id = 44; // create new node from point with id, bool6 restraint and plane local axis: GsaNode node = new GsaNode(new Point3d(-40, -3.654, -99), id, bool6, pln); Assert.AreEqual(-40, node.Point.X); Assert.AreEqual(-3.654, node.Point.Y); Assert.AreEqual(-99, node.Point.Z); Assert.AreEqual(44, node.ID); Assert.IsFalse(node.Node.Restraint.X); Assert.IsTrue(node.Node.Restraint.Y); Assert.IsFalse(node.Node.Restraint.Z); Assert.IsTrue(node.Node.Restraint.XX); Assert.IsFalse(node.Node.Restraint.YY); Assert.IsTrue(node.Node.Restraint.ZZ); // the local plane origin point should be moved to the node position Assert.AreEqual(-40, node.LocalAxis.OriginX); Assert.AreEqual(-3.654, node.LocalAxis.OriginY); Assert.AreEqual(-99, node.LocalAxis.OriginZ); Assert.AreEqual(0, node.LocalAxis.Normal.X); Assert.AreEqual(1, node.LocalAxis.Normal.Y); Assert.AreEqual(0, node.LocalAxis.Normal.Z); }
public void TestDuplicateBool6() { // create new bool6 GsaBool6 origB6 = new GsaBool6(); origB6.X = true; origB6.Y = false; origB6.Z = true; origB6.XX = false; origB6.YY = true; origB6.ZZ = false; // duplicate GsaBool6 dup = origB6.Duplicate(); // make some changes to original origB6.X = false; origB6.Y = true; origB6.Z = false; origB6.XX = true; origB6.YY = false; origB6.ZZ = true; Assert.IsTrue(dup.X); Assert.IsFalse(dup.Y); Assert.IsTrue(dup.Z); Assert.IsFalse(dup.XX); Assert.IsTrue(dup.YY); Assert.IsFalse(dup.ZZ); Assert.IsFalse(origB6.X); Assert.IsTrue(origB6.Y); Assert.IsFalse(origB6.Z); Assert.IsTrue(origB6.XX); Assert.IsFalse(origB6.YY); Assert.IsTrue(origB6.ZZ); }
protected override void SolveInstance(IGH_DataAccess DA) { GH_ObjectWrapper gh_typ = new GH_ObjectWrapper(); if (DA.GetData(0, ref gh_typ)) { GsaNode gsaNode = new GsaNode(); Point3d tempPt = new Point3d(); if (gh_typ.Value is GsaNodeGoo) { gh_typ.CastTo(ref gsaNode); if (gsaNode == null) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Node input is null"); } if (gsaNode.Node == null) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Node input is null"); } } else if (GH_Convert.ToPoint3d(gh_typ.Value, ref tempPt, GH_Conversion.Both)) { gsaNode = new GsaNode(tempPt); } else { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Unable to convert input to Node"); return; } GsaNode node = gsaNode.Duplicate(); // #### inputs #### // 1 ID GH_Integer ghInt = new GH_Integer(); if (DA.GetData(1, ref ghInt)) { if (GH_Convert.ToInt32(ghInt, out int id, GH_Conversion.Both)) { node.ID = id; } } // 2 Point GH_Point ghPt = new GH_Point(); if (DA.GetData(2, ref ghPt)) { Point3d pt = new Point3d(); if (GH_Convert.ToPoint3d(ghPt, ref pt, GH_Conversion.Both)) { node.Point = pt; node.Node.Position.X = pt.X; node.Node.Position.Y = pt.Y; node.Node.Position.Z = pt.Z; } } // 3 plane GH_Plane ghPln = new GH_Plane(); if (DA.GetData(3, ref ghPln)) { Plane pln = new Plane(); if (GH_Convert.ToPlane(ghPln, ref pln, GH_Conversion.Both)) { pln.Origin = node.Point; node.LocalAxis = pln; } } // 4 Restraint GsaBool6 restraint = new GsaBool6(); if (DA.GetData(4, ref restraint)) { node.Node.Restraint.X = restraint.X; node.Node.Restraint.Y = restraint.Y; node.Node.Restraint.Z = restraint.Z; node.Node.Restraint.XX = restraint.XX; node.Node.Restraint.YY = restraint.YY; node.Node.Restraint.ZZ = restraint.ZZ; } // 5 Spring GsaSpring spring = new GsaSpring(); if (DA.GetData(5, ref spring)) { if (spring != null) { node.Spring = spring; } } // 6 Name GH_String ghStr = new GH_String(); if (DA.GetData(6, ref ghStr)) { if (GH_Convert.ToString(ghStr, out string name, GH_Conversion.Both)) { node.Node.Name = name; } } // 7 Colour GH_Colour ghcol = new GH_Colour(); if (DA.GetData(7, ref ghcol)) { if (GH_Convert.ToColor(ghcol, out System.Drawing.Color col, GH_Conversion.Both)) { node.Colour = col; } } // #### outputs #### DA.SetData(0, new GsaNodeGoo(node)); DA.SetData(1, node.ID); DA.SetData(2, node.Point); DA.SetData(3, node.LocalAxis); GsaBool6 restraint1 = new GsaBool6 { X = node.Node.Restraint.X, Y = node.Node.Restraint.Y, Z = node.Node.Restraint.Z, XX = node.Node.Restraint.XX, YY = node.Node.Restraint.YY, ZZ = node.Node.Restraint.ZZ }; DA.SetData(4, restraint1); GsaSpring spring1 = new GsaSpring(); if (node.Spring != null) { spring1 = node.Spring.Duplicate(); } DA.SetData(5, new GsaSpringGoo(spring1)); DA.SetData(6, node.Node.Name); DA.SetData(7, node.Colour); try { DA.SetDataList(8, node.Node.ConnectedElements); } catch (Exception) { } try { DA.SetDataList(9, node.Node.ConnectedMembers); } catch (Exception) { } } }
protected override void SolveInstance(IGH_DataAccess DA) { GH_Curve ghcrv = new GH_Curve(); if (DA.GetData(0, ref ghcrv)) { if (ghcrv == null) { AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Curve input is null"); } Curve crv = null; if (GH_Convert.ToCurve(ghcrv, ref crv, GH_Conversion.Both)) { GsaMember1d mem = new GsaMember1d(crv); GsaBool6 rel1 = new GsaBool6 { X = x1, Y = y1, Z = z1, XX = xx1, YY = yy1, ZZ = zz1 }; mem.ReleaseStart = rel1; GsaBool6 rel2 = new GsaBool6 { X = x2, Y = y2, Z = z2, XX = xx2, YY = yy2, ZZ = zz2 }; mem.ReleaseEnd = rel2; // 1 section GH_ObjectWrapper gh_typ = new GH_ObjectWrapper(); GsaSection section = new GsaSection(); if (DA.GetData(1, ref gh_typ)) { if (gh_typ.Value is GsaSectionGoo) { gh_typ.CastTo(ref section); mem.Section = section; } else { if (GH_Convert.ToInt32(gh_typ.Value, out int idd, GH_Conversion.Both)) { mem.Member.Property = idd; } else { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Unable to convert PB input to a Section Property of reference integer"); return; } } } DA.SetData(0, new GsaMember1dGoo(mem)); }
protected override void SolveInstance(IGH_DataAccess DA) { GsaElement1d gsaElement1d = new GsaElement1d(); if (DA.GetData(0, ref gsaElement1d)) { GsaElement1d elem = gsaElement1d.Duplicate(); // #### inputs #### // 1 curve GH_Line ghcrv = new GH_Line(); if (DA.GetData(1, ref ghcrv)) { Line crv = new Line(); if (GH_Convert.ToLine(ghcrv, ref crv, GH_Conversion.Both)) { LineCurve ln = new LineCurve(crv); GsaElement1d tmpelem = new GsaElement1d(ln) { ID = elem.ID, Element = elem.Element, ReleaseEnd = elem.ReleaseEnd, ReleaseStart = elem.ReleaseStart }; elem = tmpelem; } } // 2 section GH_ObjectWrapper gh_typ = new GH_ObjectWrapper(); if (DA.GetData(2, ref gh_typ)) { GsaSection section = new GsaSection(); if (gh_typ.Value is GsaSection) { gh_typ.CastTo(ref section); } else if (gh_typ.Value is GH_Number) { if (GH_Convert.ToInt32((GH_Number)gh_typ.Value, out int idd, GH_Conversion.Both)) { section.ID = idd; } } elem.Section = section; } // 3 offset GsaOffset offset = new GsaOffset(); if (DA.GetData(3, ref offset)) { elem.Element.Offset.X1 = offset.X1; elem.Element.Offset.X2 = offset.X2; elem.Element.Offset.Y = offset.Y; elem.Element.Offset.Z = offset.Z; } // 4 start release GsaBool6 start = new GsaBool6(); if (DA.GetData(4, ref start)) { elem.ReleaseStart = start; //should handle setting the release in elem.Element.SetRelease } // 5 end release GsaBool6 end = new GsaBool6(); if (DA.GetData(5, ref end)) { elem.ReleaseEnd = end; //should handle setting the release in elem.Element.SetRelease } // 6 orientation angle GH_Number ghangle = new GH_Number(); if (DA.GetData(6, ref ghangle)) { if (GH_Convert.ToDouble(ghangle, out double angle, GH_Conversion.Both)) { elem.Element.OrientationAngle = angle; } } // 7 orientation node GH_Integer ghori = new GH_Integer(); if (DA.GetData(7, ref ghori)) { if (GH_Convert.ToInt32(ghori, out int orient, GH_Conversion.Both)) { elem.Element.OrientationNode = orient; } } // 8 type GH_Integer ghinteg = new GH_Integer(); if (DA.GetData(8, ref ghinteg)) { if (GH_Convert.ToInt32(ghinteg, out int type, GH_Conversion.Both)) { elem.Element.Type = Util.Gsa.GsaToModel.Element1dType(type); } } // 9 ID GH_Integer ghID = new GH_Integer(); if (DA.GetData(9, ref ghID)) { if (GH_Convert.ToInt32(ghID, out int id, GH_Conversion.Both)) { elem.ID = id; } } // 10 name GH_String ghnm = new GH_String(); if (DA.GetData(10, ref ghnm)) { if (GH_Convert.ToString(ghnm, out string name, GH_Conversion.Both)) { elem.Element.Name = name; } } // 11 Group GH_Integer ghgrp = new GH_Integer(); if (DA.GetData(11, ref ghgrp)) { if (GH_Convert.ToInt32(ghgrp, out int grp, GH_Conversion.Both)) { elem.Element.Group = grp; } } // 12 Colour GH_Colour ghcol = new GH_Colour(); if (DA.GetData(12, ref ghcol)) { if (GH_Convert.ToColor(ghcol, out System.Drawing.Color col, GH_Conversion.Both)) { elem.Element.Colour = col; } } // #### outputs #### DA.SetData(0, new GsaElement1dGoo(elem)); DA.SetData(1, elem.Line); DA.SetData(2, elem.Section); GsaOffset offset1 = new GsaOffset { X1 = elem.Element.Offset.X1, X2 = elem.Element.Offset.X2, Y = elem.Element.Offset.Y, Z = elem.Element.Offset.Z }; DA.SetData(3, offset1); DA.SetData(4, elem.ReleaseStart); DA.SetData(5, elem.ReleaseEnd); DA.SetData(6, elem.Element.OrientationAngle); DA.SetData(7, elem.Element.OrientationNode); DA.SetData(8, elem.Element.Type); DA.SetData(9, elem.ID); DA.SetData(10, elem.Element.Name); DA.SetData(11, elem.Element.Group); DA.SetData(12, elem.Element.Colour); try { DA.SetData(13, elem.Element.ParentMember.Member); } catch (Exception) { } //DA.SetData(16, gsaElement1d.Element.IsDummy); } }
protected override void SolveInstance(IGH_DataAccess DA) { GsaNode gsaNode = new GsaNode(); if (!DA.GetData(0, ref gsaNode)) { gsaNode = new GsaNode(new Point3d(0, 0, 0)); } if (gsaNode != null) { // #### inputs #### GH_Integer ghInt = new GH_Integer(); if (DA.GetData(1, ref ghInt)) { if (GH_Convert.ToInt32(ghInt, out int id, GH_Conversion.Both)) { gsaNode.ID = id; } } GH_String ghStr = new GH_String(); if (DA.GetData(2, ref ghStr)) { if (GH_Convert.ToString(ghStr, out string name, GH_Conversion.Both)) { gsaNode.Node.Name = name; } } GH_Point ghPt = new GH_Point(); if (DA.GetData(3, ref ghPt)) { Point3d pt = new Point3d(); if (GH_Convert.ToPoint3d(ghPt, ref pt, GH_Conversion.Both)) { gsaNode.Point = pt; gsaNode.Node.Position.X = pt.X; gsaNode.Node.Position.Y = pt.Y; gsaNode.Node.Position.Z = pt.Z; } } GH_Plane ghPln = new GH_Plane(); if (DA.GetData(4, ref ghPln)) { Plane pln = new Plane(); if (GH_Convert.ToPlane(ghPln, ref pln, GH_Conversion.Both)) { pln.Origin = gsaNode.Point; gsaNode.LocalAxis = pln; } } GsaBool6 restraint = new GsaBool6(); if (DA.GetData(5, ref restraint)) { restraint.X = gsaNode.Node.Restraint.X; restraint.Y = gsaNode.Node.Restraint.Y; restraint.Z = gsaNode.Node.Restraint.Z; restraint.XX = gsaNode.Node.Restraint.XX; restraint.YY = gsaNode.Node.Restraint.YY; restraint.ZZ = gsaNode.Node.Restraint.ZZ; } GsaSpring spring = new GsaSpring(); if (DA.GetData(6, ref spring)) { if (gsaNode.Spring != null) { gsaNode.Spring = spring; } } // #### outputs #### DA.SetData(0, new GsaNodeGoo(gsaNode)); DA.SetData(1, gsaNode.ID); DA.SetData(2, gsaNode.Node.Name); DA.SetData(3, gsaNode.Point); DA.SetData(4, gsaNode.LocalAxis); GsaBool6 restraint1 = new GsaBool6 { X = gsaNode.Node.Restraint.X, Y = gsaNode.Node.Restraint.Y, Z = gsaNode.Node.Restraint.Z, XX = gsaNode.Node.Restraint.XX, YY = gsaNode.Node.Restraint.YY, ZZ = gsaNode.Node.Restraint.ZZ }; DA.SetData(5, restraint1); GsaSpring spring1 = new GsaSpring(); if (gsaNode.Spring != null) { spring1 = gsaNode.Spring.Duplicate(); } DA.SetData(6, new GsaSpringGoo(spring1)); try { DA.SetDataList(7, gsaNode.Node.ConnectedElements); } catch (Exception) { } try { DA.SetDataList(8, gsaNode.Node.ConnectedMembers); } catch (Exception) { } } }
public static void DrawReleases(GH_PreviewWireArgs args, PolyCurve crv, double angle, GsaBool6 start, GsaBool6 end) { if (start == null | end == null) { return; } #region translation start if (start.X == true) { Point3d pt; double scale = 1; if (crv.GetLength() < 1) { pt = crv.PointAtNormalizedLength(0.05); scale = crv.GetLength(); } else { pt = crv.PointAtLength(0.05); } Plane pln = new Plane(); crv.PerpendicularFrameAt(0.02, out pln); pln.Rotate(angle, pln.Normal); Vector3d vec1 = new Vector3d(pln.XAxis); vec1.Unitize(); vec1 = new Vector3d(vec1.X * 0.025 * scale, vec1.Y * 0.025 * scale, vec1.Z * 0.025 * scale); Vector3d vec2 = new Vector3d(vec1); vec2.Reverse(); Transform xf1 = Rhino.Geometry.Transform.Translation(vec1); Transform xf2 = Rhino.Geometry.Transform.Translation(vec2); Point3d pt1 = new Point3d(pt); pt1.Transform(xf1); Point3d pt2 = new Point3d(pt); pt2.Transform(xf2); Vector3d vec = new Vector3d(pln.Normal); vec.Unitize(); vec = new Vector3d(vec.X * 0.25 * scale, vec.Y * 0.25 * scale, vec.Z * 0.25 * scale); Line ln1 = new Line(pt1, vec); args.Pipeline.DrawLine(ln1, UI.Colour.Support); Line ln2 = new Line(pt2, vec); args.Pipeline.DrawLine(ln2, UI.Colour.Support); } if (start.Y == true) { Point3d pt; double scale = 1; if (crv.GetLength() < 1) { pt = crv.PointAtNormalizedLength(0.05); scale = crv.GetLength(); } else { pt = crv.PointAtLength(0.05); } Plane pln = new Plane(); crv.PerpendicularFrameAt(0.02, out pln); pln.Rotate(angle, pln.Normal); Vector3d vec1 = new Vector3d(pln.XAxis); vec1.Unitize(); vec1 = new Vector3d(vec1.X * 0.05 * scale, vec1.Y * 0.05 * scale, vec1.Z * 0.05 * scale); Vector3d vec2 = new Vector3d(vec1); vec2.Reverse(); Transform xf1 = Rhino.Geometry.Transform.Translation(vec1); Transform xf2 = Rhino.Geometry.Transform.Translation(vec2); Point3d pt1 = new Point3d(pt); pt1.Transform(xf1); Point3d pt2 = new Point3d(pt); pt2.Transform(xf2); Vector3d vec3 = new Vector3d(pln.Normal); vec3.Unitize(); vec3 = new Vector3d(vec3.X * 0.025 * scale, vec3.Y * 0.025 * scale, vec3.Z * 0.025 * scale); Vector3d vec4 = new Vector3d(vec3); vec4.Reverse(); Transform xf3 = Rhino.Geometry.Transform.Translation(vec3); Transform xf4 = Rhino.Geometry.Transform.Translation(vec4); Point3d pt3A = new Point3d(pt1); pt3A.Transform(xf3); Point3d pt3B = new Point3d(pt2); pt3B.Transform(xf3); Point3d pt4A = new Point3d(pt1); pt4A.Transform(xf4); Point3d pt4B = new Point3d(pt2); pt4B.Transform(xf4); Vector3d vec = new Vector3d(pln.XAxis); vec.Unitize(); vec = new Vector3d(vec.X * 0.15 * scale, vec.Y * 0.15 * scale, vec.Z * 0.15 * scale); Vector3d vecRev = new Vector3d(vec); vecRev.Reverse(); Line ln1A = new Line(pt3A, vec); args.Pipeline.DrawLine(ln1A, UI.Colour.Support); Line ln1B = new Line(pt3B, vecRev); args.Pipeline.DrawLine(ln1B, UI.Colour.Support); Line ln2A = new Line(pt4A, vec); args.Pipeline.DrawLine(ln2A, UI.Colour.Support); Line ln2B = new Line(pt4B, vecRev); args.Pipeline.DrawLine(ln2B, UI.Colour.Support); } if (start.Z == true) { Point3d pt; double scale = 1; if (crv.GetLength() < 1) { pt = crv.PointAtNormalizedLength(0.05); scale = crv.GetLength(); } else { pt = crv.PointAtLength(0.05); } Plane pln = new Plane(); crv.PerpendicularFrameAt(0.02, out pln); pln.Rotate(angle, pln.Normal); Vector3d vec1 = new Vector3d(pln.YAxis); vec1.Unitize(); vec1 = new Vector3d(vec1.X * 0.05 * scale, vec1.Y * 0.05 * scale, vec1.Z * 0.05 * scale); Vector3d vec2 = new Vector3d(vec1); vec2.Reverse(); Transform xf1 = Rhino.Geometry.Transform.Translation(vec1); Transform xf2 = Rhino.Geometry.Transform.Translation(vec2); Point3d pt1 = new Point3d(pt); pt1.Transform(xf1); Point3d pt2 = new Point3d(pt); pt2.Transform(xf2); Vector3d vec3 = new Vector3d(pln.Normal); vec3.Unitize(); vec3 = new Vector3d(vec3.X * 0.025 * scale, vec3.Y * 0.025 * scale, vec3.Z * 0.025 * scale); Vector3d vec4 = new Vector3d(vec3); vec4.Reverse(); Transform xf3 = Rhino.Geometry.Transform.Translation(vec3); Transform xf4 = Rhino.Geometry.Transform.Translation(vec4); Point3d pt3A = new Point3d(pt1); pt3A.Transform(xf3); Point3d pt3B = new Point3d(pt2); pt3B.Transform(xf3); Point3d pt4A = new Point3d(pt1); pt4A.Transform(xf4); Point3d pt4B = new Point3d(pt2); pt4B.Transform(xf4); Vector3d vec = new Vector3d(pln.YAxis); vec.Unitize(); vec = new Vector3d(vec.X * 0.15 * scale, vec.Y * 0.15 * scale, vec.Z * 0.15 * scale); Vector3d vecRev = new Vector3d(vec); vecRev.Reverse(); Line ln1A = new Line(pt3A, vec); args.Pipeline.DrawLine(ln1A, UI.Colour.Support); Line ln1B = new Line(pt3B, vecRev); args.Pipeline.DrawLine(ln1B, UI.Colour.Support); Line ln2A = new Line(pt4A, vec); args.Pipeline.DrawLine(ln2A, UI.Colour.Support); Line ln2B = new Line(pt4B, vecRev); args.Pipeline.DrawLine(ln2B, UI.Colour.Support); } #endregion #region translation end if (end.X == true) { Point3d pt; double scale = 1; if (crv.GetLength() < 1) { pt = crv.PointAtNormalizedLength(0.95); scale = crv.GetLength(); } else { double len = crv.GetLength(); pt = crv.PointAtLength(len - 0.05); } Plane pln = new Plane(); crv.PerpendicularFrameAt(0.98, out pln); pln.Rotate(angle, pln.Normal); Vector3d vec1 = new Vector3d(pln.XAxis); vec1.Unitize(); vec1 = new Vector3d(vec1.X * 0.025 * scale, vec1.Y * 0.025 * scale, vec1.Z * 0.025 * scale); Vector3d vec2 = new Vector3d(vec1); vec2.Reverse(); Transform xf1 = Rhino.Geometry.Transform.Translation(vec1); Transform xf2 = Rhino.Geometry.Transform.Translation(vec2); Point3d pt1 = new Point3d(pt); pt1.Transform(xf1); Point3d pt2 = new Point3d(pt); pt2.Transform(xf2); Vector3d vec = new Vector3d(pln.Normal); vec.Unitize(); vec = new Vector3d(vec.X * 0.25 * scale, vec.Y * 0.25 * scale, vec.Z * 0.25 * scale); vec.Reverse(); Line ln1 = new Line(pt1, vec); args.Pipeline.DrawLine(ln1, UI.Colour.Support); Line ln2 = new Line(pt2, vec); args.Pipeline.DrawLine(ln2, UI.Colour.Support); } if (end.Y == true) { Point3d pt; double scale = 1; if (crv.GetLength() < 1) { pt = crv.PointAtNormalizedLength(0.95); scale = crv.GetLength(); } else { double len = crv.GetLength(); pt = crv.PointAtLength(len - 0.05); } Plane pln = new Plane(); crv.PerpendicularFrameAt(0.02, out pln); pln.Rotate(angle, pln.Normal); Vector3d vec1 = new Vector3d(pln.XAxis); vec1.Unitize(); vec1 = new Vector3d(vec1.X * 0.05 * scale, vec1.Y * 0.05 * scale, vec1.Z * 0.05 * scale); Vector3d vec2 = new Vector3d(vec1); vec2.Reverse(); Transform xf1 = Rhino.Geometry.Transform.Translation(vec1); Transform xf2 = Rhino.Geometry.Transform.Translation(vec2); Point3d pt1 = new Point3d(pt); pt1.Transform(xf1); Point3d pt2 = new Point3d(pt); pt2.Transform(xf2); Vector3d vec3 = new Vector3d(pln.Normal); vec3.Unitize(); vec3 = new Vector3d(vec3.X * 0.025 * scale, vec3.Y * 0.025 * scale, vec3.Z * 0.025 * scale); Vector3d vec4 = new Vector3d(vec3); vec4.Reverse(); Transform xf3 = Rhino.Geometry.Transform.Translation(vec3); Transform xf4 = Rhino.Geometry.Transform.Translation(vec4); Point3d pt3A = new Point3d(pt1); pt3A.Transform(xf3); Point3d pt3B = new Point3d(pt2); pt3B.Transform(xf3); Point3d pt4A = new Point3d(pt1); pt4A.Transform(xf4); Point3d pt4B = new Point3d(pt2); pt4B.Transform(xf4); Vector3d vec = new Vector3d(pln.XAxis); vec.Unitize(); vec = new Vector3d(vec.X * 0.15 * scale, vec.Y * 0.15 * scale, vec.Z * 0.15 * scale); Vector3d vecRev = new Vector3d(vec); vecRev.Reverse(); Line ln1A = new Line(pt3A, vec); args.Pipeline.DrawLine(ln1A, UI.Colour.Support); Line ln1B = new Line(pt3B, vecRev); args.Pipeline.DrawLine(ln1B, UI.Colour.Support); Line ln2A = new Line(pt4A, vec); args.Pipeline.DrawLine(ln2A, UI.Colour.Support); Line ln2B = new Line(pt4B, vecRev); args.Pipeline.DrawLine(ln2B, UI.Colour.Support); } if (end.Z == true) { Point3d pt; double scale = 1; if (crv.GetLength() < 1) { pt = crv.PointAtNormalizedLength(0.95); scale = crv.GetLength(); } else { double len = crv.GetLength(); pt = crv.PointAtLength(len - 0.05); } Plane pln = new Plane(); crv.PerpendicularFrameAt(0.02, out pln); pln.Rotate(angle, pln.Normal); Vector3d vec1 = new Vector3d(pln.YAxis); vec1.Unitize(); vec1 = new Vector3d(vec1.X * 0.05 * scale, vec1.Y * 0.05 * scale, vec1.Z * 0.05 * scale); Vector3d vec2 = new Vector3d(vec1); vec2.Reverse(); Transform xf1 = Rhino.Geometry.Transform.Translation(vec1); Transform xf2 = Rhino.Geometry.Transform.Translation(vec2); Point3d pt1 = new Point3d(pt); pt1.Transform(xf1); Point3d pt2 = new Point3d(pt); pt2.Transform(xf2); Vector3d vec3 = new Vector3d(pln.Normal); vec3.Unitize(); vec3 = new Vector3d(vec3.X * 0.025 * scale, vec3.Y * 0.025 * scale, vec3.Z * 0.025 * scale); Vector3d vec4 = new Vector3d(vec3); vec4.Reverse(); Transform xf3 = Rhino.Geometry.Transform.Translation(vec3); Transform xf4 = Rhino.Geometry.Transform.Translation(vec4); Point3d pt3A = new Point3d(pt1); pt3A.Transform(xf3); Point3d pt3B = new Point3d(pt2); pt3B.Transform(xf3); Point3d pt4A = new Point3d(pt1); pt4A.Transform(xf4); Point3d pt4B = new Point3d(pt2); pt4B.Transform(xf4); Vector3d vec = new Vector3d(pln.YAxis); vec.Unitize(); vec = new Vector3d(vec.X * 0.15 * scale, vec.Y * 0.15 * scale, vec.Z * 0.15 * scale); Vector3d vecRev = new Vector3d(vec); vecRev.Reverse(); Line ln1A = new Line(pt3A, vec); args.Pipeline.DrawLine(ln1A, UI.Colour.Support); Line ln1B = new Line(pt3B, vecRev); args.Pipeline.DrawLine(ln1B, UI.Colour.Support); Line ln2A = new Line(pt4A, vec); args.Pipeline.DrawLine(ln2A, UI.Colour.Support); Line ln2B = new Line(pt4B, vecRev); args.Pipeline.DrawLine(ln2B, UI.Colour.Support); } #endregion #region rotation start if (start.XX == true) { Point3d pt; double scale = 1; if (crv.GetLength() < 1) { pt = crv.PointAtNormalizedLength(0.05); scale = crv.GetLength(); } else { pt = crv.PointAtLength(0.05); } Plane pln = new Plane(); crv.PerpendicularFrameAt(0.02, out pln); Vector3d vec = new Vector3d(pln.Normal); vec.Unitize(); vec = new Vector3d(vec.X * 0.25 * scale, vec.Y * 0.25 * scale, vec.Z * 0.25 * scale); Line ln1 = new Line(pt, vec); args.Pipeline.DrawLine(ln1, UI.Colour.Release, 3); } if (start.YY == true) { Point3d pt; double scale = 1; if (crv.GetLength() < 1) { pt = crv.PointAtNormalizedLength(0.05); scale = crv.GetLength(); } else { pt = crv.PointAtLength(0.05); } Plane pln = new Plane(); crv.PerpendicularFrameAt(0.02, out pln); pln.Rotate(angle, pln.Normal); Vector3d vec1 = new Vector3d(pln.XAxis); vec1.Unitize(); vec1 = new Vector3d(vec1.X * 0.05 * scale, vec1.Y * 0.05 * scale, vec1.Z * 0.05 * scale); Vector3d vec2 = new Vector3d(vec1); vec2.Reverse(); Transform xf1 = Rhino.Geometry.Transform.Translation(vec1); Transform xf2 = Rhino.Geometry.Transform.Translation(vec2); Point3d pt1 = new Point3d(pt); pt1.Transform(xf1); Point3d pt2 = new Point3d(pt); pt2.Transform(xf2); Vector3d vec = new Vector3d(pln.XAxis); vec.Unitize(); vec = new Vector3d(vec.X * 0.15 * scale, vec.Y * 0.15 * scale, vec.Z * 0.15 * scale); Vector3d vecRev = new Vector3d(vec); vecRev.Reverse(); Line ln1A = new Line(pt1, vec); args.Pipeline.DrawLine(ln1A, UI.Colour.Release); Line ln1B = new Line(pt2, vecRev); args.Pipeline.DrawLine(ln1B, UI.Colour.Release); } if (start.ZZ == true) { Point3d pt; double scale = 1; if (crv.GetLength() < 1) { pt = crv.PointAtNormalizedLength(0.05); scale = crv.GetLength(); } else { pt = crv.PointAtLength(0.05); } Plane pln = new Plane(); crv.PerpendicularFrameAt(0.02, out pln); pln.Rotate(angle, pln.Normal); Vector3d vec1 = new Vector3d(pln.YAxis); vec1.Unitize(); vec1 = new Vector3d(vec1.X * 0.05 * scale, vec1.Y * 0.05 * scale, vec1.Z * 0.05 * scale); Vector3d vec2 = new Vector3d(vec1); vec2.Reverse(); Transform xf1 = Rhino.Geometry.Transform.Translation(vec1); Transform xf2 = Rhino.Geometry.Transform.Translation(vec2); Point3d pt1 = new Point3d(pt); pt1.Transform(xf1); Point3d pt2 = new Point3d(pt); pt2.Transform(xf2); Vector3d vec = new Vector3d(pln.YAxis); vec.Unitize(); vec = new Vector3d(vec.X * 0.15 * scale, vec.Y * 0.15 * scale, vec.Z * 0.15 * scale); Vector3d vecRev = new Vector3d(vec); vecRev.Reverse(); Line ln1A = new Line(pt1, vec); args.Pipeline.DrawLine(ln1A, UI.Colour.Release); Line ln1B = new Line(pt2, vecRev); args.Pipeline.DrawLine(ln1B, UI.Colour.Release); } #endregion #region rotation end if (end.XX == true) { Point3d pt; double scale = 1; if (crv.GetLength() < 1) { pt = crv.PointAtNormalizedLength(0.95); scale = crv.GetLength(); } else { double len = crv.GetLength(); pt = crv.PointAtLength(len - 0.05); } Plane pln = new Plane(); crv.PerpendicularFrameAt(0.02, out pln); Vector3d vec = new Vector3d(pln.Normal); vec.Unitize(); vec.Reverse(); vec = new Vector3d(vec.X * 0.25 * scale, vec.Y * 0.25 * scale, vec.Z * 0.25 * scale); Line ln1 = new Line(pt, vec); args.Pipeline.DrawLine(ln1, UI.Colour.Release, 3); } if (end.YY == true) { Point3d pt; double scale = 1; if (crv.GetLength() < 1) { pt = crv.PointAtNormalizedLength(0.95); scale = crv.GetLength(); } else { double len = crv.GetLength(); pt = crv.PointAtLength(len - 0.05); } Plane pln = new Plane(); crv.PerpendicularFrameAt(0.02, out pln); pln.Rotate(angle, pln.Normal); Vector3d vec1 = new Vector3d(pln.XAxis); vec1.Unitize(); vec1 = new Vector3d(vec1.X * 0.05 * scale, vec1.Y * 0.05 * scale, vec1.Z * 0.05 * scale); Vector3d vec2 = new Vector3d(vec1); vec2.Reverse(); Transform xf1 = Rhino.Geometry.Transform.Translation(vec1); Transform xf2 = Rhino.Geometry.Transform.Translation(vec2); Point3d pt1 = new Point3d(pt); pt1.Transform(xf1); Point3d pt2 = new Point3d(pt); pt2.Transform(xf2); Vector3d vec = new Vector3d(pln.XAxis); vec.Unitize(); vec = new Vector3d(vec.X * 0.15 * scale, vec.Y * 0.15 * scale, vec.Z * 0.15 * scale); Vector3d vecRev = new Vector3d(vec); vecRev.Reverse(); Line ln1A = new Line(pt1, vec); args.Pipeline.DrawLine(ln1A, UI.Colour.Release); Line ln1B = new Line(pt2, vecRev); args.Pipeline.DrawLine(ln1B, UI.Colour.Release); } if (end.ZZ == true) { Point3d pt; double scale = 1; if (crv.GetLength() < 1) { pt = crv.PointAtNormalizedLength(0.95); scale = crv.GetLength(); } else { double len = crv.GetLength(); pt = crv.PointAtLength(len - 0.05); } Plane pln = new Plane(); crv.PerpendicularFrameAt(0.02, out pln); pln.Rotate(angle, pln.Normal); Vector3d vec1 = new Vector3d(pln.YAxis); vec1.Unitize(); vec1 = new Vector3d(vec1.X * 0.05 * scale, vec1.Y * 0.05 * scale, vec1.Z * 0.05 * scale); Vector3d vec2 = new Vector3d(vec1); vec2.Reverse(); Transform xf1 = Rhino.Geometry.Transform.Translation(vec1); Transform xf2 = Rhino.Geometry.Transform.Translation(vec2); Point3d pt1 = new Point3d(pt); pt1.Transform(xf1); Point3d pt2 = new Point3d(pt); pt2.Transform(xf2); Vector3d vec = new Vector3d(pln.YAxis); vec.Unitize(); vec = new Vector3d(vec.X * 0.15 * scale, vec.Y * 0.15 * scale, vec.Z * 0.15 * scale); Vector3d vecRev = new Vector3d(vec); vecRev.Reverse(); Line ln1A = new Line(pt1, vec); args.Pipeline.DrawLine(ln1A, UI.Colour.Release); Line ln1B = new Line(pt2, vecRev); args.Pipeline.DrawLine(ln1B, UI.Colour.Release); } #endregion }
protected override void SolveInstance(IGH_DataAccess DA) { GH_Curve ghcrv = new GH_Curve(); if (DA.GetData(0, ref ghcrv)) { Curve crv = null; if (GH_Convert.ToCurve(ghcrv, ref crv, GH_Conversion.Both)) { GsaMember1d mem = new GsaMember1d(crv); GsaBool6 rel1 = new GsaBool6 { X = x1, Y = y1, Z = z1, XX = xx1, YY = yy1, ZZ = zz1 }; mem.ReleaseStart = rel1; GsaBool6 rel2 = new GsaBool6 { X = x2, Y = y2, Z = z2, XX = xx2, YY = yy2, ZZ = zz2 }; mem.ReleaseEnd = rel2; // 1 section GH_ObjectWrapper gh_typ = new GH_ObjectWrapper(); GsaSection section = new GsaSection(); if (DA.GetData(1, ref gh_typ)) { if (gh_typ.Value is GsaSection) { gh_typ.CastTo(ref section); } else if (gh_typ.Value is GH_Number) { if (GH_Convert.ToInt32((GH_Number)gh_typ.Value, out int idd, GH_Conversion.Both)) { section.ID = idd; } } } else { section.ID = 1; } mem.Section = section; DA.SetData(0, new GsaMember1dGoo(mem)); } } }
protected override void SolveInstance(IGH_DataAccess DA) { GsaMember1d gsaMember1d = new GsaMember1d(); if (DA.GetData(0, ref gsaMember1d)) { GsaMember1d mem = gsaMember1d.Duplicate(); // #### inputs #### // 1 curve GH_Curve ghcrv = new GH_Curve(); if (DA.GetData(1, ref ghcrv)) { Curve crv = null; if (GH_Convert.ToCurve(ghcrv, ref crv, GH_Conversion.Both)) { GsaMember1d tmpmem = new GsaMember1d(crv) { ID = mem.ID, Member = mem.Member, ReleaseEnd = mem.ReleaseEnd, ReleaseStart = mem.ReleaseStart }; mem = tmpmem; } } // 2 section GH_ObjectWrapper gh_typ = new GH_ObjectWrapper(); if (DA.GetData(2, ref gh_typ)) { GsaSection section = new GsaSection(); if (gh_typ.Value is GsaSection) { gh_typ.CastTo(ref section); } else if (gh_typ.Value is GH_Number) { if (GH_Convert.ToInt32((GH_Number)gh_typ.Value, out int idd, GH_Conversion.Both)) { section.ID = idd; } } mem.Section = section; } // 3 type GH_Integer ghint = new GH_Integer(); if (DA.GetData(4, ref ghint)) { if (GH_Convert.ToInt32(ghint, out int type, GH_Conversion.Both)) { mem.Member.Type = Util.Gsa.GsaToModel.Member1dType(type); } } // 4 element type GH_Integer ghinteg = new GH_Integer(); if (DA.GetData(4, ref ghinteg)) { if (GH_Convert.ToInt32(ghinteg, out int type, GH_Conversion.Both)) { mem.Member.Type1D = Util.Gsa.GsaToModel.Element1dType(type); } } // 5 offset GsaOffset offset = new GsaOffset(); if (DA.GetData(5, ref offset)) { mem.Member.Offset.X1 = offset.X1; mem.Member.Offset.X2 = offset.X2; mem.Member.Offset.Y = offset.Y; mem.Member.Offset.Z = offset.Z; } // 6 start release GsaBool6 start = new GsaBool6(); if (DA.GetData(6, ref start)) { mem.ReleaseStart = start; } // 7 end release GsaBool6 end = new GsaBool6(); if (DA.GetData(7, ref end)) { mem.ReleaseEnd = end; } // 8 orientation angle GH_Number ghangle = new GH_Number(); if (DA.GetData(8, ref ghangle)) { if (GH_Convert.ToDouble(ghangle, out double angle, GH_Conversion.Both)) { mem.Member.OrientationAngle = angle; } } // 9 orientation node GH_Integer ghori = new GH_Integer(); if (DA.GetData(9, ref ghori)) { if (GH_Convert.ToInt32(ghori, out int orient, GH_Conversion.Both)) { mem.Member.OrientationNode = orient; } } // 10 mesh size GH_Number ghmsz = new GH_Number(); if (DA.GetData(10, ref ghmsz)) { if (GH_Convert.ToDouble(ghmsz, out double msz, GH_Conversion.Both)) { mem.Member.MeshSize = msz; } } // 11 mesh with others GH_Boolean ghbool = new GH_Boolean(); if (DA.GetData(11, ref ghbool)) { if (GH_Convert.ToBoolean(ghbool, out bool mbool, GH_Conversion.Both)) { //mem.member.MeshWithOthers } } // 12 ID GH_Integer ghID = new GH_Integer(); if (DA.GetData(12, ref ghID)) { if (GH_Convert.ToInt32(ghID, out int id, GH_Conversion.Both)) { mem.ID = id; } } // 13 name GH_String ghnm = new GH_String(); if (DA.GetData(13, ref ghnm)) { if (GH_Convert.ToString(ghnm, out string name, GH_Conversion.Both)) { mem.Member.Name = name; } } // 14 Group GH_Integer ghgrp = new GH_Integer(); if (DA.GetData(14, ref ghgrp)) { if (GH_Convert.ToInt32(ghgrp, out int grp, GH_Conversion.Both)) { mem.Member.Group = grp; } } // 15 Colour GH_Colour ghcol = new GH_Colour(); if (DA.GetData(15, ref ghcol)) { if (GH_Convert.ToColor(ghcol, out System.Drawing.Color col, GH_Conversion.Both)) { mem.Member.Colour = col; } } // 16 Dummy GH_Boolean ghdum = new GH_Boolean(); if (DA.GetData(16, ref ghdum)) { if (GH_Convert.ToBoolean(ghdum, out bool dum, GH_Conversion.Both)) { mem.Member.IsDummy = dum; } } // #### outputs #### DA.SetData(0, new GsaMember1dGoo(mem)); DA.SetData(1, mem.PolyCurve); DA.SetData(2, mem.Section); DA.SetData(3, mem.Member.Type); DA.SetData(4, mem.Member.Type1D); GsaOffset gsaOffset = new GsaOffset { X1 = mem.Member.Offset.X1, X2 = mem.Member.Offset.X2, Y = mem.Member.Offset.Y, Z = mem.Member.Offset.Z }; DA.SetData(5, gsaOffset); DA.SetData(6, mem.ReleaseStart); DA.SetData(7, mem.ReleaseEnd); DA.SetData(8, mem.Member.OrientationAngle); DA.SetData(9, mem.Member.OrientationNode); DA.SetData(10, mem.Member.MeshSize); //DA.SetData(11, mem.member.MeshSize); //mesh with others bool DA.SetData(12, mem.ID); DA.SetData(13, mem.Member.Name); DA.SetData(14, mem.Member.Group); DA.SetData(15, mem.Member.Colour); DA.SetData(16, mem.Member.IsDummy); } }