public override bool CastFrom(object source) { // This function is called when Grasshopper needs to convert other data // into GsaGridPlane. if (source == null) { return(false); } //Cast from GsaGridPlane if (typeof(GsaGridPlaneSurface).IsAssignableFrom(source.GetType())) { Value = (GsaGridPlaneSurface)source; return(true); } //Cast from Plane Plane pln = new Plane(); if (GH_Convert.ToPlane(source, ref pln, GH_Conversion.Both)) { GsaGridPlaneSurface gridplane = new GsaGridPlaneSurface(pln); this.Value = gridplane; return(true); } return(false); }
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())); } } }
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) { 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) { } } }
/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object can be used to retrieve data from input parameters and /// to store data in output parameters.</param> protected override void SolveInstance(IGH_DataAccess DA) { var curves = new DataTree <Polyline>(); var points = new DataTree <Point3d>(); var frames = new DataTree <Plane>(); int collisions = 0; var gCurves = new GH_Structure <GH_Curve>(); var gPoints = new GH_Structure <GH_Point>(); var gFrames = new GH_Structure <GH_Plane>(); if (!DA.GetDataTree(0, out gPoints)) { return; } if (!DA.GetDataTree(1, out gFrames)) { return; } DA.GetData(2, ref collisions); if (!DA.GetDataTree(3, out gCurves)) { return; } var tempPoint = new Point3d(); foreach (var path in gPoints.Paths) { var branch = gPoints.get_Branch(path); foreach (var item in branch) { GH_Convert.ToPoint3d(item, ref tempPoint, GH_Conversion.Both); points.Add(tempPoint, path); } } Curve tempCurve = null; var tempPoly = new Polyline(); var curvesList = new List <Curve>(); foreach (var path in gCurves.Paths) { var branch = gCurves.get_Branch(path); foreach (var item in branch) { GH_Convert.ToCurve(item, ref tempCurve, GH_Conversion.Both); tempCurve.TryGetPolyline(out tempPoly); curves.Add(tempPoly, path); } } var tempPlane = new Plane(); foreach (var path in gFrames.Paths) { var branch = gFrames.get_Branch(path); foreach (var item in branch) { GH_Convert.ToPlane(item, ref tempPlane, GH_Conversion.Both); frames.Add(tempPlane, path); } } int branches = curves.BranchCount; List <Polyline> listOut = new List <Polyline>(); if (branches == 1) { listOut.AddRange(curves.Branch(0)); } if (branches == 2) { if (collisions != 0) { int branchOneCount = curves.Branch(0).Count; var pointComparer = points.Branch(0)[curves.Branch(0).Count - 1].Z; var comparer = new List <double>(); var listOfCurves = new DataTree <Polyline>(); var listOfCurvesOne = new List <Polyline>(); var listOfCurvesTwo = new List <Polyline>(); listOfCurves.AddRange(curves.Branch(0)); var listOfPlanes = new List <Plane>(); var listOfPlanesOne = new List <Plane>(); listOfPlanes.AddRange(frames.Branch(0)); var pathOne = new GH_Path(1); var pathTwo = new GH_Path(2); for (int i = 0; i < curves.Branch(1).Count; ++i) { comparer.Add(points.Branch(1)[i].Z); if (pointComparer >= comparer[i]) { listOfCurves.Add(curves.Branch(1)[i], pathOne); } else { listOfCurvesOne.Add(curves.Branch(1)[i]); listOfPlanesOne.Add(frames.Branch(1)[i]); } } var listOfUnions = RegionUnion(listOfCurves, listOfPlanes); listOut.AddRange(listOfUnions); listOut.AddRange(listOfCurvesOne); } else { for (int i = 0; i < branches; ++i) { listOut.AddRange(curves.Branch(i)); } } } if (branches == 3) { if (collisions != 0) { int branchOneCount = curves.Branch(0).Count; var pointComparer = points.Branch(0)[curves.Branch(0).Count - 1].Z; var pointComparerOne = points.Branch(1)[curves.Branch(1).Count - 1].Z; var comparer = new List <double>(); var listOfCurves = new DataTree <Polyline>(); var listOfCurvesOne = new DataTree <Polyline>(); var listOfCurvesTwo = new List <Polyline>(); listOfCurves.AddRange(curves.Branch(0)); var listOfPlanes = new List <Plane>(); var listOfPlanesOne = new List <Plane>(); listOfPlanes.AddRange(frames.Branch(0)); var pathOne = new GH_Path(1); var pathTwo = new GH_Path(2); for (int i = 0; i < curves.Branch(1).Count; ++i) { comparer.Add(points.Branch(1)[i].Z); if (pointComparer >= comparer[i]) { listOfCurves.Add(curves.Branch(1)[i], pathOne); } else { listOfCurvesOne.Add(curves.Branch(1)[i], pathOne); listOfCurvesOne.Add(curves.Branch(2)[i], pathTwo); listOfPlanesOne.Add(frames.Branch(1)[i]); } } var comparerOne = new List <double>(); for (int i = 0; i < curves.Branch(2).Count; ++i) { comparerOne.Add(points.Branch(2)[i].Z); if (pointComparer >= comparerOne[i]) { listOfCurves.Add(curves.Branch(2)[i], pathTwo); } if (pointComparerOne >= comparerOne[i]) { } else { listOfCurvesTwo.Add(curves.Branch(2)[i]); } } List <Polyline> listOfUnionObjs = RegionUnion(listOfCurves, listOfPlanes); List <Polyline> listOfUnionObjsOne = RegionUnion(listOfCurvesOne, listOfPlanesOne); listOut.AddRange(listOfUnionObjs); listOut.AddRange(listOfUnionObjsOne); listOut.AddRange(listOfCurvesTwo); } else { for (int i = 0; i < branches; ++i) { listOut.AddRange(curves.Branch(i)); } } } DA.SetDataList(0, listOut); var volume = new DataTree <Brep>(); var polyToCurves = new DataTree <Curve>(); for (int i = 0; i < branches; ++i) { var path = new GH_Path(i); for (int j = 0; j < curves.Branch(i).Count; ++j) { polyToCurves.Add(curves.Branch(i)[j].ToNurbsCurve(), path); } } for (int i = 0; i < branches; ++i) { volume.Add(Brep.CreateFromLoft(polyToCurves.Branch(i), Point3d.Unset, Point3d.Unset, LoftType.Tight, false)[0].CapPlanarHoles(0.0001), new GH_Path(i)); } DA.SetDataTree(1, volume); DA.SetData(2, branches); }
protected override void SolveInstance(IGH_DataAccess DA) { Plane pln = Plane.WorldXY; // 0 Plane GH_Plane gh_pln = new GH_Plane(); if (DA.GetData(0, ref gh_pln)) { GH_Convert.ToPlane(gh_pln, ref pln, GH_Conversion.Both); } // create gsa gridplanesurface from plane GsaGridPlaneSurface gps = new GsaGridPlaneSurface(pln); // 1 Grid plane ID GH_Integer ghint = new GH_Integer(); if (DA.GetData(1, ref ghint)) { int id = 0; GH_Convert.ToInt32(ghint, out id, GH_Conversion.Both); gps.GridPlaneID = id; } // 2 Grid elevation GH_Number ghnum = new GH_Number(); if (DA.GetData(2, ref ghnum)) { double elev = 0; if (GH_Convert.ToDouble(ghnum, out elev, GH_Conversion.Both)) { gps.GridPlane.Elevation = elev; // if elevation is set we want to move the plane in it's normal direction Vector3d vec = pln.Normal; vec.Unitize(); vec.X *= elev; vec.Y *= elev; vec.Z *= elev; Transform xform = Transform.Translation(vec); pln.Transform(xform); gps.Plane = pln; // note this wont move the Grid Plane Axis gps.Axis } } // 3 Name GH_String ghtxt = new GH_String(); if (DA.GetData(3, ref ghtxt)) { string name = ""; if (GH_Convert.ToString(ghtxt, out name, GH_Conversion.Both)) { gps.GridPlane.Name = name; } } // set is story if (_mode == FoldMode.General) { gps.GridPlane.IsStoreyType = false; } else { gps.GridPlane.IsStoreyType = true; // 4 tolerance above GH_Number ghtola = new GH_Number(); if (DA.GetData(4, ref ghtola)) { double tola = 0; if (GH_Convert.ToDouble(ghtola, out tola, GH_Conversion.Both)) { gps.GridPlane.ToleranceAbove = tola; } } // 5 tolerance above GH_Number ghtolb = new GH_Number(); if (DA.GetData(5, ref ghtolb)) { double tolb = 0; if (GH_Convert.ToDouble(ghtolb, out tolb, GH_Conversion.Both)) { gps.GridPlane.ToleranceBelow = tolb; } } } DA.SetData(0, new GsaGridPlaneSurfaceGoo(gps)); }