public sCurve TosCurve(object rc) { sCurve sc = null; Curve c = rc as Curve; if (c != null) { if (c.Degree == 3 || c.Degree == 2) { sc = TosNurbsCurve(c as NurbsCurve); sc.curveType = eCurveType.NURBSCURVE; } else { Curve[] segs = c.DuplicateSegments(); if (segs.Length > 0) { Polyline rpl; c.TryGetPolyline(out rpl); sc = TosPolyline(rpl); sc.curveType = eCurveType.POLYLINE; } else { Line rl = new Line(c.PointAtStart, c.PointAtEnd); sc = TosLine(rl); sc.curveType = eCurveType.LINE; } } } return(sc); }
internal Dyn.Curve ToDynamoCurve(sCurve sc) { Dyn.Curve rc = null; if (sc.curveType == eCurveType.LINE) { rc = ToDynamoLine(sc as sLine) as Dyn.Curve; } else if (sc.curveType == eCurveType.POLYLINE) { rc = ToDynamoPolyCurve(sc as sPolyLine) as Dyn.Curve; } else if (sc.curveType == eCurveType.NURBSCURVE) { //rc = ToRhinoNurbsCurve(sc as sNurbsCurve); } return(rc); }
public Curve ToRhinoCurve(sCurve sc) { Curve rc = null; if (sc.curveType == eCurveType.LINE) { rc = ToRhinoLine(sc as sLine).ToNurbsCurve(); } else if (sc.curveType == eCurveType.POLYLINE) { rc = ToRhinoPolyline(sc as sPolyLine).ToNurbsCurve(); } else if (sc.curveType == eCurveType.NURBSCURVE) { rc = ToRhinoNurbsCurve(sc as sNurbsCurve); } return(rc); }
internal sCurve TosCurve(Dyn.Curve dc) { sCurve sc = null; Dyn.Line dl = dc as Dyn.Line; if (dl != null) { sc = TosLine(dl); sc.curveType = eCurveType.LINE; dl.Dispose(); } Dyn.PolyCurve pc = dc as Dyn.PolyCurve; if (pc != null) { if (pc.NumberOfCurves == 1) { //// //what if this segement is nurbsCurve?????? //PolyCurve can be joined nurbsCurve!!!!!!!!! /// Dyn.Line dtl = Dyn.Line.ByStartPointEndPoint(pc.StartPoint, pc.EndPoint); sc = TosLine(dtl); sc.curveType = eCurveType.LINE; dtl.Dispose(); } else { sc = TosPolyLine(pc); sc.curveType = eCurveType.POLYLINE; } pc.Dispose(); } // Dyn.NurbsCurve nc = dc as Dyn.NurbsCurve; // if(nc != null) // { // // } return(sc); }
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 void EnsureBeamElement() { if (this.frames.Count == 0) { sCurve bc = this.parentCrv; if (bc.curveType == eCurveType.LINE) { sLine ln = bc as sLine; //??? UPVECTOR??? this.AddBeamElement(new sLine(ln.startPoint, ln.PointAt(0.5)), sXYZ.Zaxis(), 0); this.AddBeamElement(new sLine(ln.PointAt(0.5), ln.endPoint), sXYZ.Zaxis(), 1); } } else if (this.frames.Count == 1) { sFrame sTemp = this.frames[0].DuplicatesFrame(); this.frames.Clear(); this.AddBeamElement(new sLine(sTemp.axis.startPoint, sTemp.axis.PointAt(0.5)), sTemp.upVector, 0); this.AddBeamElement(new sLine(sTemp.axis.PointAt(0.5), sTemp.axis.endPoint), sTemp.upVector, 1); } }
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); }
public sFrameSet(sCurve pCrv) { this.parentCrv = pCrv; SetDefaults(); }
public sSteelFrameSet(sCurve pCrv, bool asComposite = false) { this.parentCrv = pCrv; SetDefaults(); this.AsComposite = asComposite; }