private BoundingBox GetRhinoBoundingBox(List <IsObject> objs) { List <Point3d> pts = new List <Point3d>(); foreach (IsObject so in objs) { if (so is sFrameSet) { sFrameSet sb = so as sFrameSet; Curve rc = ToRhinoCurve(sb.parentCrv); Point3d[] dpts; rc.DivideByCount(3, true, out dpts); for (int i = 0; i < dpts.Length; ++i) { pts.Add(dpts[i]); } } if (so is sMesh) { sMesh sm = so as sMesh; foreach (sVertex sv in sm.vertices) { pts.Add(ToRhinoPoint3d(sv.location)); } } } return(new BoundingBox(pts)); }
//????????????? public List <Curve> ToRhinoCrosssectionProfile(sFrameSet bs, double lenTol) { List <Curve> profiles = new List <Curve>(); for (int i = 0; i < bs.frames.Count; ++i) { } return(profiles); }
public static object sBeamSetByCurves(string beamSetName, List <Dyn.Curve> beamSetCurves, List <sCrossSection> crossSections) { List <sFrameSet> sets = new List <sFrameSet>(); //how to get Revit Unit?... sDynamoConverter dycon = new sDynamoConverter("Feet", "Meters"); for (int i = 0; i < beamSetCurves.Count; ++i) { double len = beamSetCurves[i].Length; if (len > 0.005) { Dyn.Curve dc = dycon.EnsureUnit(beamSetCurves[i]) as Dyn.Curve; sCurve setCrv = dycon.TosCurve(Dyn.PolyCurve.ByJoinedCurves(new Dyn.Curve[] { dc })); sFrameSet bset = new sFrameSet(setCrv); bset.frameSetName = beamSetName; bset.setId = i; if (crossSections.Count == 1) { bset.crossSection = crossSections[0] as sCrossSection; } else if (crossSections.Count == beamSetCurves.Count) { bset.crossSection = crossSections[i] as sCrossSection; } sets.Add(bset); dc.Dispose(); } } //for(int i = 0; i < beamSetCurves.Count; ++i) //{ // beamSetCurves[i].Dispose(); //} return(new Dictionary <string, object> { { "sBeamSets", sets } }); }
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 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 } }); } }
protected override void SolveInstance(IGH_DataAccess DA) { string beamSetName = ""; List <Curve> beamSetCurves = new List <Curve>(); List <sCrossSection> crossSections = new List <sCrossSection>(); List <object> lineLoadObjs = new List <object>(); if (!DA.GetData(0, ref beamSetName)) { return; } if (!DA.GetDataList(1, beamSetCurves)) { return; } if (!DA.GetDataList(2, crossSections)) { return; } DA.GetDataList(3, lineLoadObjs); List <IFrameSet> sets = new List <IFrameSet>(); string modelUnit = Rhino.RhinoDoc.ActiveDoc.ModelUnitSystem.ToString(); sRhinoConverter rhcon = new sRhinoConverter(modelUnit, "Meters"); int minuteCount = 0; for (int i = 0; i < beamSetCurves.Count; ++i) { if (beamSetCurves[i].GetLength() > 0.005) { Curve rc = rhcon.EnsureUnit(beamSetCurves[i]); sCurve setCrv = rhcon.TosCurve(rc); IFrameSet bset = new sFrameSet(setCrv); bset.frameSetName = beamSetName; bset.setId = i; if (crossSections.Count == 1) { bset.crossSection = crossSections[0] as sCrossSection; } else if (crossSections.Count == beamSetCurves.Count) { bset.crossSection = crossSections[i] as sCrossSection; } if (lineLoadObjs.Count > 0) { foreach (object lo in lineLoadObjs) { GH_ObjectWrapper wap = new GH_ObjectWrapper(lo); sLineLoad sl = wap.Value as sLineLoad; if (sl != null) { bset.UpdateLineLoad(sl); } sLineLoadGroup sg = wap.Value as sLineLoadGroup; if (sg != null) { if (sg.loads.Count == beamSetCurves.Count) { bset.UpdateLineLoad(sg.loads[i]); } else { return; } } } } sets.Add(bset); } else { minuteCount++; } } if (minuteCount > 0) { AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, minuteCount + "Beams are too short"); } DA.SetDataList(0, sets); }