protected override void SolveInstance(IGH_DataAccess DA) { BeamProperties prop = null; Line ln = Line.Unset; Vector3d norm = Vector3d.Unset; if (!DA.GetData(0, ref ln)) { return; } if (!DA.GetData(1, ref prop)) { return; } if (!DA.GetData(2, ref norm)) { return; } norm.Unitize(); //Check if angle between tangent and normal is less than 1 degree if(Vector3d.VectorAngle(norm, ln.UnitTangent) < 0.0174 || Vector3d.VectorAngle(-norm, ln.UnitTangent) < 0.0174) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "The given normal is within 1 degree of the tangent of the centre line. Please adjust normal"); return; } double factor = Utilities.GetScalingFactorFromRhino(); WR_Vector wrNorm = new WR_Vector(norm.X, norm.Y, norm.Z); WR_XYZ st = new WR_XYZ(ln.FromX* factor, ln.FromY* factor, ln.FromZ* factor); WR_XYZ en = new WR_XYZ(ln.ToX* factor, ln.ToY* factor, ln.ToZ* factor); WR_Elem3dRcp beam = new WR_Elem3dRcp(st, en, prop.StartRelease, prop.EndRelease, prop.CrossSection, prop.Material, wrNorm, prop.OptimizationProperties); DA.SetData(0, beam); }
static void Main(string[] args) { WR_Structure structure = new WR_Structure(); WR_XSecRect rect = new WR_XSecRect(0.1, 0.1); WR_ReleaseBeam3d rel = new WR_ReleaseBeam3d(true, true, true, true, true, true); WR_XYZ x1 = new WR_XYZ(0, 0, 0); WR_XYZ x2 = new WR_XYZ(0, 1, 0); WR_XYZ x3 = new WR_XYZ(1, 1, 0); WR_XYZ x4 = new WR_XYZ(1, 0, 0); WR_Elem3dRcp rcp1 = new WR_Elem3dRcp(x1, x2, rel, rel, rect, 210000000000, 0.1, new WR_Vector(0, 1, 0)); WR_Elem3dRcp rcp2 = new WR_Elem3dRcp(x2, x3, rel, rel, rect, 210000000000, 0.1, new WR_Vector(0, 1, 0)); WR_Elem3dRcp rcp3 = new WR_Elem3dRcp(x3, x4, rel, rel, rect, 210000000000, 0.1, new WR_Vector(0, 1, 0)); WR_Node3d n1 = new WR_Node3d(0, 0, 0); WR_Node3d n2 = new WR_Node3d(0, 1, 0); WR_Node3d n3 = new WR_Node3d(1, 1, 0); WR_Node3d n4 = new WR_Node3d(1, 0, 0); structure.AddNode(n1); structure.AddNode(n2); structure.AddNode(n3); structure.AddNode(n4); structure.AddElementRcp(rcp1); structure.AddElementRcp(rcp2); structure.AddElementRcp(rcp3); structure.Solve(); }
static void Main(string[] args) { WR_Structure structure = new WR_Structure(); WR_XSecRect rect = new WR_XSecRect(0.1, 0.1); WR_ReleaseBeam3d rel = new WR_ReleaseBeam3d(true, true, true, true, true, true); WR_XYZ x1 = new WR_XYZ(0, 0, 0); WR_XYZ x2 = new WR_XYZ(0, 1, 0); WR_XYZ x3 = new WR_XYZ(1, 1, 0); WR_XYZ x4 = new WR_XYZ(1, 0, 0); WR_Elem3dRcp rcp1 = new WR_Elem3dRcp(x1, x2,rel,rel,rect,210000000000,0.1,new WR_Vector(0,1,0)); WR_Elem3dRcp rcp2 = new WR_Elem3dRcp(x2, x3, rel, rel, rect, 210000000000, 0.1, new WR_Vector(0, 1, 0)); WR_Elem3dRcp rcp3 = new WR_Elem3dRcp(x3, x4, rel, rel, rect, 210000000000, 0.1, new WR_Vector(0, 1, 0)); WR_Node3d n1 = new WR_Node3d(0, 0, 0); WR_Node3d n2 = new WR_Node3d(0, 1, 0); WR_Node3d n3 = new WR_Node3d(1, 1, 0); WR_Node3d n4 = new WR_Node3d(1, 0, 0); structure.AddNode(n1); structure.AddNode(n2); structure.AddNode(n3); structure.AddNode(n4); structure.AddElementRcp(rcp1); structure.AddElementRcp(rcp2); structure.AddElementRcp(rcp3); structure.Solve(); }
protected override void SolveInstance(IGH_DataAccess DA) { ///// INPUTS ///// Point3d pt = Point3d.Unset; List <bool> rels = new List <bool>(); Plane pl = Plane.Unset; if (!DA.GetData(0, ref pt)) { return; } if (!DA.GetDataList <bool>(1, rels)) { //Set as unrestrained if no release information is provided for (int i = 0; i < 6; i++) { rels.Add(false); } } if (rels.Count != 6) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Number of bools in input should be 6"); return; } if (!DA.GetData(2, ref pl)) { // If no plane submitted, use global XY plane pl = new Rhino.Geometry.Plane(new Rhino.Geometry.Point3d(0, 0, 0), new Rhino.Geometry.Vector3d(1, 0, 0), new Rhino.Geometry.Vector3d(0, 1, 0)); } ///// SOLVE ///// double factor = Utilities.GetScalingFactorFromRhino(); WR_XYZ wrXYZ = new WR_XYZ(pt.X * factor, pt.Y * factor, pt.Z * factor); WR_Vector wrX = GetUnitizedWR_Vector(pl.XAxis); WR_Vector wrY = GetUnitizedWR_Vector(pl.YAxis); WR_Vector wrZ = GetUnitizedWR_Vector(pl.ZAxis); WR_Plane wrPl = new WR_Plane(wrX, wrY, wrZ, wrXYZ); WR_Restraint rest = new WR_Restraint(wrPl, rels[0], rels[1], rels[2], rels[3], rels[4], rels[5]); WR_INode node = new WR_Node3d(pt.X * factor, pt.Y * factor, pt.Z * factor, rest); ///// OUTPUTS ///// DA.SetData(0, node); }
protected override void SolveInstance(IGH_DataAccess DA) { BeamProperties prop = null; Line ln = Line.Unset; Vector3d norm = Vector3d.Unset; if (!DA.GetData(0, ref ln)) { return; } if (!DA.GetData(1, ref prop)) { return; } if (!DA.GetData(2, ref norm)) { return; } norm.Unitize(); //Check if angle between tangent and normal is less than 1 degree if (Vector3d.VectorAngle(norm, ln.UnitTangent) < 0.0174 || Vector3d.VectorAngle(-norm, ln.UnitTangent) < 0.0174) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "The given normal is within 1 degree of the tangent of the centre line. Please adjust normal"); return; } double factor = Utilities.GetScalingFactorFromRhino(); WR_Vector wrNorm = new WR_Vector(norm.X, norm.Y, norm.Z); WR_XYZ st = new WR_XYZ(ln.FromX * factor, ln.FromY * factor, ln.FromZ * factor); WR_XYZ en = new WR_XYZ(ln.ToX * factor, ln.ToY * factor, ln.ToZ * factor); WR_Elem3dRcp beam = new WR_Elem3dRcp(st, en, prop.StartRelease, prop.EndRelease, prop.CrossSection, prop.Material, wrNorm, prop.OptimizationProperties); DA.SetData(0, beam); }
public static Point3d ConvertToRhinoPoint(this WR_XYZ wrPt) { double sfac = GetScalingFactorFromRhino(); return(new Point3d(wrPt.X / sfac, wrPt.Y / sfac, wrPt.Z / sfac)); }
/// <summary> /// Takes a WR_XYZ and creates a Rhino Point3d /// </summary> /// <param name="iPt"></param> /// <returns></returns> private Rhino.Geometry.Point3d CreateRhinoPt(WR_XYZ iPt) { double factor = Utilities.GetScalingFactorFromRhino(); return new Rhino.Geometry.Point3d(iPt.X / factor, iPt.Y / factor, iPt.Z / factor); }
/// <summary> /// Takes a WR_XYZ and creates a Rhino Point3d /// </summary> /// <param name="iPt"></param> /// <returns></returns> private Rhino.Geometry.Point3d CreateRhinoPt(WR_XYZ iPt) { double factor = Utilities.GetScalingFactorFromRhino(); return(new Rhino.Geometry.Point3d(iPt.X / factor, iPt.Y / factor, iPt.Z / factor)); }
protected override void SolveInstance(IGH_DataAccess DA) { ///// INPUTS ///// Point3d pt = Point3d.Unset; List<bool> rels = new List<bool>(); Plane pl = Plane.Unset; if (!DA.GetData(0, ref pt)) { return; } if (!DA.GetDataList<bool>(1, rels)) { //Set as unrestrained if no release information is provided for (int i = 0; i < 6; i++) { rels.Add(false); } } if (rels.Count != 6) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Number of bools in input should be 6"); return; } if (!DA.GetData(2, ref pl)) { // If no plane submitted, use global XY plane pl = new Rhino.Geometry.Plane(new Rhino.Geometry.Point3d(0,0,0), new Rhino.Geometry.Vector3d(1,0,0), new Rhino.Geometry.Vector3d(0,1,0)); } ///// SOLVE ///// double factor = Utilities.GetScalingFactorFromRhino(); WR_XYZ wrXYZ = new WR_XYZ(pt.X * factor, pt.Y * factor, pt.Z * factor); WR_Vector wrX = GetUnitizedWR_Vector(pl.XAxis); WR_Vector wrY = GetUnitizedWR_Vector(pl.YAxis); WR_Vector wrZ = GetUnitizedWR_Vector(pl.ZAxis); WR_Plane wrPl = new WR_Plane(wrX, wrY, wrZ, wrXYZ); WR_Restraint rest = new WR_Restraint(wrPl, rels[0], rels[1], rels[2], rels[3], rels[4], rels[5]); WR_INode node = new WR_Node3d(pt.X * factor, pt.Y * factor, pt.Z * factor, rest); ///// OUTPUTS ///// DA.SetData(0, node); }