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);
        }
Exemple #2
0
 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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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 }
            });
        }
Exemple #6
0
        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);
        }
Exemple #8
0
 public sFrameSet(sCurve pCrv)
 {
     this.parentCrv = pCrv;
     SetDefaults();
 }
Exemple #9
0
 public sSteelFrameSet(sCurve pCrv, bool asComposite = false)
 {
     this.parentCrv = pCrv;
     SetDefaults();
     this.AsComposite = asComposite;
 }