Exemplo n.º 1
0
        /***************************************************/
        /**** Public Methods - Curves                   ****/
        /***************************************************/

        public static List <BuildingElement> SplitBuildingElementsByOverlap(this List <BuildingElement> elementsToSplit)
        {
            List <BuildingElement> rtnElements = new List <BuildingElement>();
            List <BuildingElement> oriElements = new List <BuildingElement>(elementsToSplit);

            while (elementsToSplit.Count > 0)
            {
                BuildingElement        currentElement = elementsToSplit[0];
                List <BuildingElement> overlaps       = currentElement.IdentifyOverlaps(elementsToSplit);
                overlaps.AddRange(currentElement.IdentifyOverlaps(rtnElements));

                if (overlaps.Count == 0)
                {
                    rtnElements.Add(currentElement);
                }
                else
                {
                    //Cut the smaller building element out of the bigger one as an opening
                    List <Line> cuttingLines = new List <Line>();
                    foreach (BuildingElement be in overlaps)
                    {
                        cuttingLines.AddRange(be.PanelCurve.ICollapseToPolyline(BH.oM.Geometry.Tolerance.Angle).SubParts());
                    }


                    rtnElements.AddRange(currentElement.Split(cuttingLines));
                }

                elementsToSplit.RemoveAt(0);
            }

            return(rtnElements);
        }
Exemplo n.º 2
0
        /***************************************************/
        /**** Public Methods                            ****/
        /***************************************************/

        public static List <BuildingElement> CullOverlaps(this List <BuildingElement> elements)
        {
            List <BuildingElement> ori      = new List <BuildingElement>(elements);
            List <BuildingElement> toReturn = new List <BuildingElement>();

            while (ori.Count > 0)
            {
                BuildingElement        current  = ori[0];
                List <BuildingElement> overlaps = current.IdentifyOverlaps(elements);

                foreach (BuildingElement be in overlaps)
                {
                    ori.Remove(be);
                }

                toReturn.Add(current);
                ori.RemoveAt(0);
            }

            return(toReturn);
        }