public static object To_DynamoObj_sPointSupport(sPointSupport pointSupport) { sDynamoConverter dyncon = new sDynamoConverter("Meters", "Feet"); Dyn.Point lp = (Dyn.Point)dyncon.EnsureUnit((dyncon.ToDynamoPoint(pointSupport.location))); Dyn.Vector force = null; if (pointSupport.reaction_force != null) { force = dyncon.EnsureUnit_Force(dyncon.ToDynamoVector(pointSupport.reaction_force)); } Dyn.Vector moment = null; if (pointSupport.reaction_moment != null) { moment = dyncon.EnsureUnit_Force(dyncon.ToDynamoVector(pointSupport.reaction_moment)); } return(new Dictionary <string, object> { { "location", lp }, { "supportType", pointSupport.supportType.ToString() }, { "constraints", pointSupport.constraints }, { "reactionForce", force }, { "reactionMoment", moment }, }); }
protected override void SolveInstance(IGH_DataAccess DA) { ISystem ssys = null; if (!DA.GetData(0, ref ssys)) { return; } List <IFrameSet> beams = new List <IFrameSet>(); List <sPointSupport> sups = new List <sPointSupport>(); List <sPointLoad> pls = new List <sPointLoad>(); if (ssys != null) { ISystem sys = ssys as ISystem; foreach (IFrameSet b in sys.frameSets) { beams.Add(b); } foreach (sNode n in sys.nodes) { if (n.pointLoads != null && n.pointLoads.Count > 0) { foreach (sPointLoad pl in n.pointLoads) { pls.Add(pl); } } if (n.boundaryCondition != null && n.boundaryCondition.supportType != eSupportType.NONE) { sPointSupport sup = n.boundaryCondition; sups.Add(sup); } } } DA.SetDataList(0, beams); DA.SetDataList(1, pls); DA.SetDataList(2, sups); }
public bool UpdateNodeFromPointElement(sPointSupport ps, int id) { sNode exNode; if (AwareExistingNode(ps.location, out exNode)) { exNode.UpdatePointElement(ps); return(false); } else { sNode newN = ps.TosNode(); newN.nodeID = id; //newN.elementGUID = Guid.NewGuid(); this.nodes.Add(newN); return(true); } }
protected override void SolveInstance(IGH_DataAccess DA) { sPointSupport sn = null; if (!DA.GetData(0, ref sn)) { return; } string modelUnit = Rhino.RhinoDoc.ActiveDoc.ModelUnitSystem.ToString(); sRhinoConverter rhcon = new sRhinoConverter("Meters", modelUnit); DA.SetData(0, rhcon.EnsureUnit(rhcon.ToRhinoPoint3d(sn.location))); DA.SetData(1, sn.supportType.ToString()); if (sn.constraints != null) { DA.SetDataList(2, sn.constraints.ToList()); } else { DA.SetDataList(2, null); } if (sn.reaction_force != null) { DA.SetData(3, rhcon.EnsureUnit_Force(rhcon.ToRhinoVector3d(sn.reaction_force))); } else { DA.SetData(3, null); } if (sn.reaction_moment != null) { DA.SetData(4, rhcon.EnsureUnit_Moment(rhcon.ToRhinoVector3d(sn.reaction_moment))); } else { DA.SetData(4, null); } }
public static object SplitSegmentize(List <object> sElements, double intersectTolerance = 0.015, double segmentLength = 1.5) { sDynamoConverter dycon = new sDynamoConverter("Feet", "Meters"); List <object> pelements = new List <object>(); List <sFrameSet> beamelements = new List <sFrameSet>(); foreach (object iso in sElements) { sFrameSet fs = iso as sFrameSet; if (fs != null) { beamelements.Add(fs); continue; } sPointLoad pl = iso as sPointLoad; if (pl != null) { pelements.Add(pl); continue; } sPointSupport ps = iso as sPointSupport; if (ps != null) { pelements.Add(ps); continue; } } dycon.SplitSegmentizesBeamSet(ref beamelements, intersectTolerance, segmentLength, pelements); return(new Dictionary <string, object> { { "sBeamSets", beamelements }, { "sPointElements", pelements } }); }
public static object sPointSupport(List <Dyn.Point> points, int supportType, string nodeName = "") { List <sPointSupport> nodes = new List <sPointSupport>(); sDynamoConverter rhcon = new sDynamoConverter("Feet", "Meters"); if (supportType == 0 || supportType == 1) { for (int i = 0; i < points.Count; ++i) { Dyn.Point dp = rhcon.EnsureUnit(points[i]) as Dyn.Point; sXYZ sp = rhcon.TosXYZ(dp); sPointSupport n = new sPointSupport(); n.location = sp; if (supportType == 0) { n.supportType = eSupportType.FIXED; } else if (supportType == 1) { n.supportType = eSupportType.PINNED; } nodes.Add(n); dp.Dispose(); } } return(new Dictionary <string, object> { { "sPointSupport", nodes } }); }
internal void SplitSegmentizesBeamSet(ref List <sFrameSet> beamset, double intTol, double segTol, List <object> pointEle = null) { List <Dyn.Geometry> disposeGeo = new List <Dyn.Geometry>(); List <Dyn.Curve> allCrvs = new List <Dyn.Curve>(); foreach (sFrameSet bs in beamset) { bs.frames.Clear(); Dyn.Curve c = ToDynamoCurve(bs.parentCrv); allCrvs.Add(c); disposeGeo.Add(c); } List <Dyn.Point> pts = new List <Dyn.Point>(); if (pointEle != null) { foreach (object eb in pointEle) { sPointLoad pl = eb as sPointLoad; if (pl != null) { Dyn.Point p = ToDynamoPoint(pl.location); pts.Add(p); disposeGeo.Add(p); } sPointSupport ps = eb as sPointSupport; if (ps != null) { Dyn.Point p = ToDynamoPoint(ps.location); pts.Add(p); disposeGeo.Add(p); } } } if (pts.Count == 0) { pts = null; } foreach (sFrameSet bs in beamset) { Dyn.Curve dc = ToDynamoCurve(bs.parentCrv); int id = 0; List <Dyn.PolyCurve> segCrvs; List <Dyn.Point> assPts; List <Dyn.PolyCurve> segPlns = SplitSegmentizeCurveByCurves(dc, allCrvs, intTol, segTol, out segCrvs, out assPts, pts); if (segPlns.Count > 0) { for (int i = 0; i < segPlns.Count; ++i) { if (segCrvs.Count > 1) { bs.parentSegments.Add(TosCurve(segCrvs[i])); disposeGeo.Add(segCrvs[i]); } Dyn.Curve [] segs = segPlns[i].Curves(); for (int j = 0; j < segs.Length; ++j) { if (segs[j].Length > 0.005) { Dyn.Line dl = Dyn.Line.ByStartPointEndPoint(segs[j].StartPoint, segs[j].EndPoint); bs.AddBeamElement(TosLine(dl), sXYZ.Zaxis(), id); id++; disposeGeo.Add(dl); } disposeGeo.Add(segs[j]); } disposeGeo.Add(segPlns[i]); } if (assPts != null) { bs.associatedLocations = new List <sXYZ>(); foreach (Dyn.Point ap in assPts) { bs.associatedLocations.Add(TosXYZ(ap)); disposeGeo.Add(ap); } } } else { Dyn.Line dl = Dyn.Line.ByStartPointEndPoint(dc.StartPoint, dc.EndPoint); if (dl.Length > 0.005) { bs.AddBeamElement(TosLine(dl), sXYZ.Zaxis(), id); bs.EnsureBeamElement(); id++; } disposeGeo.Add(dl); } bs.AwareElementsFixitiesByParentFixity(intTol); disposeGeo.Add(dc); } this.DisposeGeometries(disposeGeo); }
public static object Build_sSystem(List <object> sElements, object systemSettings = null) { sSystemSetting sysSet = null; if (systemSettings == null) { sysSet = new sSystemSetting(); sysSet.systemOriUnit = "Feet"; sysSet.systemName = "DefaultSetting"; sysSet.currentCase = "DEAD"; sysSet.currentCheckType = eSystemCheckType.StrengthCheck; sysSet.currentStressThreshold_pascal = 25 * 6894757.28; sysSet.currentDeflectionThreshold_mm = 100; sysSet.mergeTolerance_m = 0.005; sysSet.meshDensity_m = 0.5; } else { sysSet = systemSettings as sSystemSetting; } sSystem jsys = new sSystem(); jsys.systemSettings = sysSet; List <IsObject> sobjs = new List <IsObject>(); sDynamoConverter dycon = new sDynamoConverter(); jsys.loadPatterns.Add("DEAD"); int supCount = 0; int nodeID = 0; foreach (object so in sElements) { sFrameSet sb = so as sFrameSet; if (sb != null) { jsys.frameSets.Add(sb); sobjs.Add(sb); if (sb.lineLoads != null) { foreach (sLineLoad ll in sb.lineLoads) { jsys.AwarePatternNames(ll.loadPatternName); } } continue; } sPointSupport psup = so as sPointSupport; if (psup != null) { if (jsys.UpdateNodeFromPointElement(psup, nodeID)) { nodeID++; } supCount++; continue; } sPointLoad pl = so as sPointLoad; if (pl != null) { if (jsys.UpdateNodeFromPointElement(pl, nodeID)) { nodeID++; jsys.AwarePatternNames(pl.loadPatternName); } continue; } sLoadCombination com = so as sLoadCombination; if (com != null) { jsys.SetLoadCombination(com); } } if (supCount > 0) { //jsys.geometrySettings.systemBoundingBox = dycon.TosBoundingBox(sobjs); //jsys.SystemName = sysSet.systemName; return(new Dictionary <string, object> { { "sSystem", jsys } }); } else { return(new Dictionary <string, object> { { "sSystem", null } }); } }
//.....hate to put this here though.... public void SplitSegmentizesBeamSet(ref List <IFrameSet> beamset, double intTol, double segTol, List <object> pointEle = null) { List <Curve> allCrvs = new List <Curve>(); foreach (IFrameSet bs in beamset) { bs.frames.Clear(); //?? allCrvs.Add(ToRhinoCurve(bs.parentCrv)); } List <Point3d> pts = new List <Point3d>(); if (pointEle != null) { foreach (object eb in pointEle) { sPointLoad pl = eb as sPointLoad; if (pl != null) { pts.Add(ToRhinoPoint3d(pl.location)); } sPointSupport ps = eb as sPointSupport; if (ps != null) { pts.Add(ToRhinoPoint3d(ps.location)); } } } if (pts.Count == 0) { pts = null; } foreach (IFrameSet bs in beamset) { Curve rc = ToRhinoCurve(bs.parentCrv); int id = 0; List <Curve> segCrvs; List <Point3d> assPts; List <Polyline> segPlns = SplitSegmentizeCurveByCurves(rc, allCrvs, intTol, segTol, out segCrvs, out assPts, pts); if (segPlns.Count > 0) { for (int i = 0; i < segPlns.Count; ++i) { if (segCrvs.Count > 1) { bs.parentSegments.Add(this.TosCurve(segCrvs[i])); } for (int j = 0; j < segPlns[i].SegmentCount; ++j) { Line segln = segPlns[i].SegmentAt(j); ///////////////////////// //??????????????????????/ ///////////////////////// if (segln.Length > 0.005) { bs.AddBeamElement(TosLine(segln), sXYZ.Zaxis(), id); bs.EnsureBeamElement(); id++; } } } if (assPts != null) { bs.associatedLocations = new List <sXYZ>(); foreach (Point3d ap in assPts) { bs.associatedLocations.Add(TosXYZ(ap)); } } } else { Line segln = new Line(rc.PointAtStart, rc.PointAtEnd); ///////////////////////// //??????????????????????/ ///////////////////////// if (segln.Length > 0.005) { bs.AddBeamElement(TosLine(segln), sXYZ.Zaxis(), id); bs.EnsureBeamElement(); id++; } } bs.AwareElementsFixitiesByParentFixity(intTol); } }
protected override void SolveInstance(IGH_DataAccess DA) { List <object> seles = new List <object>(); double intTol = 0.005; double segTol = 0.5; if (!DA.GetDataList(0, seles)) { return; } if (!DA.GetData(1, ref intTol)) { return; } if (!DA.GetData(2, ref segTol)) { return; } string modelUnit = Rhino.RhinoDoc.ActiveDoc.ModelUnitSystem.ToString(); sRhinoConverter rhcon = new sRhinoConverter(modelUnit, "Meters"); if (modelUnit == "Feet") { intTol = 0.015; segTol = 1.5; } List <object> pelements = new List <object>(); List <IFrameSet> beamelements = new List <IFrameSet>(); foreach (object o in seles) { GH_ObjectWrapper wap = new GH_ObjectWrapper(o); IFrameSet bsori = wap.Value as IFrameSet; if (bsori != null) { beamelements.Add(bsori.DuplicatesFrameSet()); } sPointLoad pl = wap.Value as sPointLoad; if (pl != null) { pelements.Add(pl); } sPointSupport ps = wap.Value as sPointSupport; if (ps != null) { pelements.Add(ps); } } rhcon.SplitSegmentizesBeamSet(ref beamelements, intTol, segTol, pelements); /* * string groupInfo = ""; * DataTree<sBeamSet> beamTree = new DataTree<sBeamSet>(); * var grouped = beamelements.GroupBy(b => b.beamSetName); * int groupID = 0; * foreach (var bgroup in grouped) * { * GH_Path bpth = new GH_Path(groupID); * groupInfo += "BeamSet" + groupID + ": " + bgroup.ElementAt(0).beamSetName + "\n"; * foreach (sBeamSet sb in bgroup) * { * beamTree.Add(sb, bpth); * } * groupID++; * } * * this.Message = groupInfo; */ DA.SetDataList(0, beamelements); DA.SetDataList(1, pelements); }
protected override void SolveInstance(IGH_DataAccess DA) { sSystemSetting sysSetting = null; List <object> sElement = new List <object>(); DA.GetData(0, ref sysSetting); if (!DA.GetDataList(1, sElement)) { return; } sRhinoConverter rhcon = new sRhinoConverter(); string currentUnit = Rhino.RhinoDoc.ActiveDoc.ModelUnitSystem.ToString(); if (sysSetting == null) { sysSetting = new sSystemSetting(); sysSetting.systemOriUnit = currentUnit; sysSetting.systemName = "DefaultSetting"; sysSetting.currentCase = "DEAD"; sysSetting.currentCheckType = eSystemCheckType.StrengthCheck; sysSetting.currentStressThreshold_pascal = 25 * 6894757.28; sysSetting.currentDeflectionThreshold_mm = 100; sysSetting.mergeTolerance_m = 0.005; sysSetting.meshDensity_m = 0.5; } if (currentUnit == "Meters" || currentUnit == "Feet") { ISystem jsys = InitiateISystem(sElement); jsys.systemSettings = sysSetting; List <IsObject> sObjs = new List <IsObject>(); jsys.loadPatterns.Add("DEAD"); int supCount = 0; int nodeID = 0; try { foreach (object so in sElement) { GH_ObjectWrapper wap = new GH_ObjectWrapper(so); IFrameSet bs = wap.Value as IFrameSet; if (bs != null) { //jsys.beamSets.Add(bs); jsys.AddsBeamSet(bs); //?? sObjs.Add(bs); if (bs.lineLoads != null) { foreach (sLineLoad ll in bs.lineLoads) { jsys.AwarePatternNames(ll.loadPatternName); } } } sPointLoad pl = wap.Value as sPointLoad; if (pl != null) { if (jsys.UpdateNodeFromPointElement(pl, nodeID)) { nodeID++; jsys.AwarePatternNames(pl.loadPatternName); } } sLoadCombination com = wap.Value as sLoadCombination; if (com != null) { jsys.SetLoadCombination(com); } } foreach (object so in sElement) { GH_ObjectWrapper wap = new GH_ObjectWrapper(so); sPointSupport psup = wap.Value as sPointSupport; if (psup != null) { if (jsys.UpdateNodeFromPointElement(psup, nodeID)) { nodeID++; } supCount++; } } foreach (sMesh am in jsys.meshes) { // sObjs.Add(am); } if (supCount > 0) { this.Message = "System : " + sysSetting.systemName + "\nis instantiated"; jsys.systemSettings.systemBoundingBox = rhcon.TosBoundingBox(sObjs); //jsys.SystemName = sysSetting.systemName; DA.SetData(0, jsys); } else { this.Message = "System : " + sysSetting.systemName + "\nneeds supports"; //jsys.SystemName = sysSetting.systemName; this.AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, this.Message); DA.SetData(0, null); } } catch (Exception e) { this.Message = "System : " + sysSetting.systemName + "\ninstantiation failed"; this.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, e.Message); DA.SetData(0, null); } } else { this.Message = "ASKSGH.Bridgify only works in\n Meters or Feet"; this.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, this.Message); DA.SetData(0, null); } }
protected override void SolveInstance(IGH_DataAccess DA) { List <Point3d> points = new List <Point3d>(); if (!DA.GetDataList(0, points)) { return; } List <sPointSupport> nodes = new List <sPointSupport>(); string modelUnit = Rhino.RhinoDoc.ActiveDoc.ModelUnitSystem.ToString(); sRhinoConverter rhcon = new sRhinoConverter(modelUnit, "Meters"); if (supType == eSupportType.FIXED || supType == eSupportType.PINNED) { for (int i = 0; i < points.Count; ++i) { sXYZ sp = rhcon.TosXYZ((Point3d)rhcon.EnsureUnit(points[i])); sPointSupport n = new sPointSupport(); n.location = sp; n.supportType = supType; nodes.Add(n); } } else { bool xx = true; bool yy = true; bool zz = true; bool rxx = true; bool ryy = true; bool rzz = true; if (!DA.GetData(1, ref xx)) { return; } if (!DA.GetData(2, ref yy)) { return; } if (!DA.GetData(3, ref zz)) { return; } if (!DA.GetData(4, ref rxx)) { return; } if (!DA.GetData(5, ref ryy)) { return; } if (!DA.GetData(6, ref rzz)) { return; } foreach (Point3d p in points) { sXYZ sp = rhcon.TosXYZ((Point3d)rhcon.EnsureUnit(p)); sPointSupport n = new sPointSupport(); n.location = sp; n.supportType = supType; n.constraints = new bool[6] { xx, yy, zz, rxx, ryy, rzz }; nodes.Add(n); } } if (supType == eSupportType.FIXED) { this.Message = "ALL FIXED"; } else if (supType == eSupportType.PINNED) { this.Message = "ALL PINNED"; } else { this.Message = "By Constraints"; } DA.SetDataList(0, nodes); }