public static void SetGeometry(Brep surface, ref RFOpening rfOpening)
        {
            var myBoundaryLines = new List <NurbsCurve>();

            foreach (var brepEdge in surface.Edges)
            {
                myBoundaryLines.Add(brepEdge.ToNurbsCurve());
            }
            var joinedEdges = Curve.JoinCurves(myBoundaryLines).ToList();

            // In case of openings, countours must be sorted
            if (joinedEdges.Count > 1)
            {
                joinedEdges = joinedEdges.OrderByDescending(x => x.GetLength()).ToList();
            }
            var edges = new List <RFLine>();

            foreach (var e in joinedEdges[0].DuplicateSegments())
            {
                var myRFLine = new RFLine();
                Component_RFLine.SetGeometry(e, ref myRFLine);
                edges.Add(myRFLine);
            }
            if (!(rfOpening.IsPlanar()))
            {
                return;
            }
            rfOpening.Edges = edges.ToArray();
        }
        /// <summary>
        /// This is the method that actually does the work.
        /// </summary>
        /// <param name="DA">The DA object can be used to retrieve data from input parameters and
        /// to store data in output parameters.</param>
        protected override void SolveInstance(IGH_DataAccess DA, EvaluationUnit unit)
        {
            //var line = new LineCurve();
            Brep inSrfc    = null;
            var  noIndex   = 0;
            var  comment   = "";
            var  rfOpening = new RFOpening();
            var  inRFEM    = new GH_RFEM();
            var  rfEdges   = new List <RFLine>();
            var  mod       = false;
            var  del       = false;
            var  boundList = "";
            var  inSrfcNo  = 0;
            int  intPoints = 4;

            //int newNo = 0;

            if (DA.GetData(6, ref inRFEM))
            {
                rfOpening = new RFOpening((RFOpening)inRFEM.Value);
            }
            else if (DA.GetData(0, ref inSrfc))
            {
                DA.GetData(5, ref intPoints);
                Component_RFOpening.SetGeometry(inSrfc, intPoints, ref rfOpening);
            }
            else
            {
                return;
            }
            if (DA.GetData(7, ref mod))
            {
                rfOpening.ToModify = mod;
            }
            if (DA.GetData(8, ref del))
            {
                rfOpening.ToDelete = del;
            }
            if (DA.GetData(1, ref noIndex))
            {
                rfOpening.No = noIndex;
            }
            if (DA.GetData(3, ref comment))
            {
                rfOpening.Comment = comment;
            }
            if (DA.GetData(2, ref inSrfcNo))
            {
                rfOpening.InSurfaceNo = inSrfcNo;
            }
            if (DA.GetData(4, ref boundList))
            {
                rfOpening.BoundaryLineList = boundList;
            }

            DA.SetData(0, rfOpening);
        }
        public static void SetGeometry(Brep surface, int interpolatedPoints, ref RFOpening rfOpening)
        {
            var myBoundaryLines = new List <NurbsCurve>();

            foreach (var brepEdge in surface.Edges)
            {
                myBoundaryLines.Add(brepEdge.ToNurbsCurve());
            }
            var joinedEdges = Curve.JoinCurves(myBoundaryLines).ToList();
            // In case of openings, countours must be sorted
            var edges = new List <RFLine>();

            foreach (var e in joinedEdges[0].DuplicateSegments())
            {
                var myRFLine = new RFLine();
                Component_RFLine.SetGeometry(e, ref myRFLine);
                edges.Add(myRFLine);
            }
            rfOpening.Edges = edges.ToArray();
        }
Ejemplo n.º 4
0
        public override void SolveInstance(IGH_DataAccess DA, out string msg, out GH_RuntimeMessageLevel level)
        {
            msg   = "";
            level = GH_RuntimeMessageLevel.Blank;
            //var line = new LineCurve();
            Brep inSrfc    = null;
            var  noIndex   = 0;
            var  comment   = "";
            var  rfOpening = new RFOpening();
            var  inRFEM    = new GH_RFEM();
            var  rfEdges   = new List <RFLine>();
            var  mod       = false;
            var  del       = false;
            var  boundList = "";
            var  inSrfcNo  = 0;

            //int newNo = 0;

            if (DA.GetData(5, ref inRFEM))
            {
                rfOpening = new RFOpening((RFOpening)inRFEM.Value);
                if (DA.GetData(0, ref inSrfc))
                {
                    Component_RFOpening.SetGeometry(inSrfc, ref rfOpening);
                }
            }
            else if (DA.GetData(0, ref inSrfc))
            {
                Component_RFOpening.SetGeometry(inSrfc, ref rfOpening);
            }
            else
            {
                msg   = "Insufficient input parameters. Provide either Input Opening Shape or existing RFOpening Object. ";
                level = GH_RuntimeMessageLevel.Warning;
                return;
            }
            if (DA.GetData(6, ref mod))
            {
                rfOpening.ToModify = mod;
            }
            if (DA.GetData(7, ref del))
            {
                rfOpening.ToDelete = del;
            }
            if (DA.GetData(1, ref noIndex))
            {
                rfOpening.No = noIndex;
            }
            if (DA.GetData(3, ref comment))
            {
                rfOpening.Comment = comment;
            }
            if (DA.GetData(2, ref inSrfcNo))
            {
                rfOpening.InSurfaceNo = inSrfcNo;
            }
            if (DA.GetData(4, ref boundList))
            {
                rfOpening.BoundaryLineList = boundList;
            }

            DA.SetData(0, rfOpening);
        }