예제 #1
0
 private void ConnectedEdge(ref List <List <LINE> > NewBeamGroup)
 {
     foreach (List <LINE> Beams in NewBeamGroup)
     {
         Dictionary <int, LINE> tmpAddLines = new Dictionary <int, LINE>();
         for (int i = 0; i < Beams.Count; i++)
         {
             LINE L1 = Beams[i];
             LINE L2 = i + 1 == Beams.Count ? Beams[0] : Beams[i + 1];
             if (!L1.IsSameDirection(L2.GetDirection(), true))
             {
                 XYZ crossPoint = L1.GetCrossPoint(L2);
                 Beams[i].ResetParameters(crossPoint, "EndPoint");
                 if (i + 1 == Beams.Count)
                 {
                     Beams[0].ResetParameters(crossPoint, "StartPoint");
                 }
                 else
                 {
                     Beams[i + 1].ResetParameters(crossPoint, "StartPoint");
                 }
             }
         }
     }
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="NewBeamGroup"></param>
        /// <returns></returns>
        private List <List <LINE> > ConnectedEdgeFromMiddleColumns(List <List <LINE> > NewBeamGroup)
        {
            List <List <LINE> > newFloorGroup = new List <List <LINE> >();

            foreach (List <LINE> Beams in NewBeamGroup)
            {
                //SaveTmp(Beams);
                Dictionary <int, LINE> tmpAddLines = new Dictionary <int, LINE>();
                for (int i = 0; i < Beams.Count; i++)
                {
                    LINE L1 = Beams[i];
                    LINE L2 = i + 1 == Beams.Count ? Beams[0] : Beams[i + 1];
                    if (L1.IsSameDirection(L2.GetDirection(), true) && !L1.IsPointInLine(L2.GetStartPoint()))
                    {
                        tmpAddLines[i] = new LINE(L1.GetEndPoint(), L2.GetStartPoint());
                    }
                }

                foreach (int ii in tmpAddLines.Keys)
                {
                    Beams.Add(tmpAddLines[ii]);
                }
                SaveTmp(Beams);
                int         kk       = 0;
                List <LINE> newBeams = new List <LINE>();
                int[]       flag     = new int[Beams.Count];
                flag[kk] = -1;
                newBeams.Add(Beams[0]);
                while (kk < Beams.Count)
                {
                    if (flag[kk] != -1 && newBeams[newBeams.Count - 1].IsPointInLine(Beams[kk].GetStartPoint()))
                    {
                        flag[kk] = -1;
                        newBeams.Add(Beams[kk]);
                        kk = 0;
                    }
                    kk = kk + 1;
                }

                newFloorGroup.Add(newBeams);
                //SaveTmp(newBeams);
            }

            return(newFloorGroup);
        }