コード例 #1
0
        // edge curve convenience method
        private List <ICurve> GetSurfaceBrepEdges(RH.Brep brep, bool getExterior = true, bool getInterior = false, bool getBottom = false)
        {
            double tol = Doc.ModelAbsoluteTolerance * 1;

            RH.Curve[] brpCurves = null;
            if (getInterior)
            {
                brpCurves = brep.DuplicateNakedEdgeCurves(false, true);
            }
            else
            {
                brpCurves = brep.DuplicateNakedEdgeCurves(true, false);
            }
            if (getBottom)
            {
                double lowestPt = brpCurves.Min(o => o.PointAtStart.Z);
                brpCurves = brpCurves.Where(o => o.PointAt(0.5).Z == lowestPt).ToArray();
            }

            List <ICurve> outCurves = null;

            if (brpCurves != null)
            {
                outCurves = RH.Curve.JoinCurves(brpCurves, tol).Select(o => (ICurve)ConvertToSpeckle(o)).ToList();
            }
            return(outCurves);
        }
コード例 #2
0
ファイル: FromRhino.cs プロジェクト: BHoM/Rhinoceros_Toolkit
        /***************************************************/

        public static BHG.IGeometry FromRhino(this RHG.Brep brep)
        {
            if (brep == null)
            {
                return(null);
            }

            string log;

            if (!brep.IsValidWithLog(out log))
            {
                Reflection.Compute.RecordError("Conversion failed, Rhino Brep is invalid: " + log);
                return(null);
            }

            if (brep.Faces.Count == 0)
            {
                return(null);
            }

            if (brep.IsSolid)
            {
                return(brep.ToBHoMSolid());
            }

            if (brep.IsPlanarSurface())
            {
                BHG.ICurve        externalEdge  = RHG.Curve.JoinCurves(brep.DuplicateNakedEdgeCurves(true, false)).FirstOrDefault().FromRhino();
                List <BHG.ICurve> internalEdges = RHG.Curve.JoinCurves(brep.DuplicateNakedEdgeCurves(false, true)).Select(c => c.FromRhino()).ToList();
                return(new BHG.PlanarSurface(externalEdge, internalEdges));
            }

            if (brep.Faces.Count == 1)
            {
                return(brep.Faces[0].FromRhino());
            }

            // Default case - return open Polysurface
            return(new BHG.PolySurface()
            {
                Surfaces = brep.Faces.Select(s => s.FromRhino()).ToList()
            });
        }
コード例 #3
0
        // edge curve convenience method
        private List <ICurve> GetSurfaceBrepEdges(RH.Brep brep, bool getExterior = true, bool getInterior = false, bool getBottom = false)
        {
            double tol = Doc.ModelAbsoluteTolerance * 1;

            RH.Curve[] brpCurves = null;
            if (getInterior)
            {
                brpCurves = brep.DuplicateNakedEdgeCurves(false, true);
            }
            else
            {
                brpCurves = brep.DuplicateNakedEdgeCurves(true, false);
            }
            if (getBottom)
            {
                var bottomCrv = brpCurves.
                                Where(o => o.IsLinear())?.
                                Where(o => new Vector3d(o.PointAtEnd.X - o.PointAtStart.X, o.PointAtEnd.Y - o.PointAtStart.Y, o.PointAtEnd.Z - o.PointAtStart.Z).IsPerpendicularTo(Vector3d.ZAxis))?.
                                Aggregate((curMin, o) => curMin == null || o.PointAtStart.Z < curMin.PointAtStart.Z ? o : curMin);
                if (bottomCrv != null)
                {
                    brpCurves = new RH.Curve[] { bottomCrv }
                }
                ;
            }

            List <ICurve> outCurves = null;

            if (brpCurves != null && brpCurves.Count() > 0)
            {
                outCurves = (brpCurves.Count() == 1) ? new List <ICurve>()
                {
                    (ICurve)ConvertToSpeckle(brpCurves[0])
                }
            }
            : RH.Curve.JoinCurves(brpCurves, tol).Select(o => (ICurve)ConvertToSpeckle(o)).ToList();
            return(outCurves);
        }
    }
}