Beispiel #1
0
 private List <ObjectId> getSortedIdBlrefPanel(List <KeyValuePair <Point3d, ObjectId> > listPtsIdsBlRefMarkAr)
 {
     // группировка по Y с допуском 2000, потом сортировка по X в каждой группе.
     AcadLib.Comparers.DoubleEqualityComparer comparerY = new AcadLib.Comparers.DoubleEqualityComparer(2000);
     return(listPtsIdsBlRefMarkAr.OrderBy(p => p.Key.X).GroupBy(p => p.Key.Y, comparerY)
            .OrderBy(g => g.Key).SelectMany(g => g).Select(g => g.Value).ToList());
 }
Beispiel #2
0
        private void Numbering(List <List <ICounter> > groups)
        {
            var comparer = new AcadLib.Comparers.DoubleEqualityComparer(2000);

            foreach (var item in groups)
            {
                var sort = item.OrderBy(p => p.Position.X).GroupBy(p => p.Position.Y, comparer)
                           .OrderByDescending(g => g.Key).SelectMany(g => g).ToList();
                int number = 1;
                foreach (var s in sort)
                {
                    s.Number = number++;
                }
            }
        }
Beispiel #3
0
        protected void SizesTop(bool doTrans, Matrix3d trans)
        {
            bool hasInterDim = panelBase.PtsForTopDim.Count > 0 || panelBase.XMinPanel <0 || panelBase.XMaxPanel> panelBase.Length;

            // Общий размер
            Point3d ptTopLeft  = new Point3d(panelBase.XMinContour, panelBase.Height, 0);
            Point3d ptTopRight = new Point3d(panelBase.XMaxContour, panelBase.Height, 0);

            yDimLineTopMax = hasInterDim ? panelBase.Height + indentBetweenDimLine + indentDimLineFromDraw : panelBase.Height + indentDimLineFromDraw;
            Point3d ptDimLineTotal = new Point3d(0, yDimLineTopMax, 0);

            CreateDim(ptTopLeft, ptTopRight, ptDimLineTotal, doTrans, trans, rangeSize: rangeSizeHor);
            // добавление промежуточных размеров
            if (hasInterDim)
            {
                panelBase.PtsForTopDim.Sort();
                AcadLib.Comparers.DoubleEqualityComparer comparer = new AcadLib.Comparers.DoubleEqualityComparer(4);
                var ptsX = panelBase.PtsForTopDim.GroupBy(p => p, comparer).Select(g => g.First());

                Point3d ptPrev         = ptTopLeft;
                Point3d ptDimLineInter = new Point3d(0, yDimLineTopMax - indentBetweenDimLine, 0);
                foreach (var x in ptsX)
                {
                    Point3d ptNext = new Point3d(x, ptPrev.Y, 0);
                    CreateDim(ptPrev, ptNext, ptDimLineInter, doTrans, trans, rangeSize: rangeSizeHor);
                    ptPrev = ptNext;
                }
                // Замыкающий размер
                CreateDim(ptPrev, ptTopRight, ptDimLineInter, doTrans, trans, rangeSize: rangeSizeHor);


                //если есть пустые области Outsides, то добавление промежеточных размеров.
                if (Math.Abs(panelBase.XMinPanel - panelBase.XMinContour) > 100)
                {
                    CreateDim(new Point3d(panelBase.XMinPanel, ptPrev.Y, 0),
                              new Point3d(panelBase.XMinContour, ptPrev.Y, 0), ptDimLineInter, doTrans, trans);
                }
                if (Math.Abs(panelBase.XMaxPanel - panelBase.XMaxContour) > 100)
                {
                    CreateDim(new Point3d(panelBase.XMaxContour, ptPrev.Y, 0),
                              new Point3d(panelBase.XMaxPanel, ptPrev.Y, 0), ptDimLineInter, doTrans, trans);
                }
            }
        }
Beispiel #4
0
        private static void CheckHeights(ref List <TreeVisualOption> treeVisOpts)
        {
            var intComparer = new AcadLib.Comparers.DoubleEqualityComparer(1);

            // Сортировка по высоте
            treeVisOpts.Sort((t1, t2) => t1.Height.CompareTo(t2.Height));

            // Группировка по высоте с расхождением в 1м
            var groupsByH = treeVisOpts.GroupBy(g => g.Height, intComparer).Where(w => w.Skip(1).Any()).ToList();

            foreach (var groupH in groupsByH)
            {
                // Удалить лишнюю высоту
                foreach (var item in groupH.Skip(1))
                {
                    treeVisOpts.Remove(item);
                }
            }
        }
Beispiel #5
0
        private List <Pile> Sort(List <Pile> piles)
        {
            List <Pile> resVal;
            var         rowWidth = Options.PileSide * (PileOptions.PileRatioLmin == 0?1 :PileOptions.PileRatioLmin) * 0.5;

            AcadLib.Comparers.DoubleEqualityComparer comparer = new AcadLib.Comparers.DoubleEqualityComparer(rowWidth);
            if (Options.NumberingOrder == EnumNumberingOrder.RightToLeft)
            {
                // Слева-направо
                resVal = piles.OrderBy(p => p.Position.X).GroupBy(p => p.Position.Y, comparer)
                         .OrderByDescending(g => g.Key).SelectMany(g => g).ToList();
                var leftToR = piles.OrderBy(p => p.Position.X);
            }
            else
            {
                // Сверху-вниз
                resVal = piles.OrderByDescending(p => p.Position.Y).GroupBy(p => p.Position.X, comparer)
                         .OrderBy(g => g.Key).SelectMany(g => g).ToList();
            }
            return(resVal);
        }
 private List<ObjectId> getSortedIdBlrefPanel(List<KeyValuePair<Point3d, ObjectId>> listPtsIdsBlRefMarkAr)
 {
     // группировка по Y с допуском 2000, потом сортировка по X в каждой группе.
     AcadLib.Comparers.DoubleEqualityComparer comparerY = new AcadLib.Comparers.DoubleEqualityComparer(2000);
     return listPtsIdsBlRefMarkAr.OrderBy(p => p.Key.X).GroupBy(p => p.Key.Y, comparerY)
              .OrderBy(g => g.Key).SelectMany(g => g).Select(g => g.Value).ToList();
 }
        protected void SizesTop(bool doTrans, Matrix3d trans)
        {
            bool hasInterDim = panelBase.PtsForTopDim.Count > 0 || panelBase.XMinPanel < 0 || panelBase.XMaxPanel > panelBase.Length;

             // Общий размер
             Point3d ptTopLeft = new Point3d(panelBase.XMinContour, panelBase.Height, 0);
             Point3d ptTopRight = new Point3d(panelBase.XMaxContour, panelBase.Height, 0);
             yDimLineTopMax = hasInterDim ? panelBase.Height + indentBetweenDimLine + indentDimLineFromDraw : panelBase.Height + indentDimLineFromDraw;
             Point3d ptDimLineTotal = new Point3d(0, yDimLineTopMax, 0);
             CreateDim(ptTopLeft, ptTopRight, ptDimLineTotal, doTrans, trans, rangeSize: rangeSizeHor);
             // добавление промежуточных размеров
             if (hasInterDim)
             {
            panelBase.PtsForTopDim.Sort();
            AcadLib.Comparers.DoubleEqualityComparer comparer = new AcadLib.Comparers.DoubleEqualityComparer(4);
            var ptsX = panelBase.PtsForTopDim.GroupBy(p => p, comparer).Select(g => g.First());

            Point3d ptPrev = ptTopLeft;
            Point3d ptDimLineInter = new Point3d(0, yDimLineTopMax - indentBetweenDimLine, 0);
            foreach (var x in ptsX)
            {
               Point3d ptNext = new Point3d(x, ptPrev.Y, 0);
               CreateDim(ptPrev, ptNext, ptDimLineInter, doTrans, trans, rangeSize: rangeSizeHor);
               ptPrev = ptNext;
            }
            // Замыкающий размер
            CreateDim(ptPrev, ptTopRight, ptDimLineInter, doTrans, trans, rangeSize: rangeSizeHor);

            //если есть пустые области Outsides, то добавление промежеточных размеров.
            if (Math.Abs(panelBase.XMinPanel - panelBase.XMinContour)>100)
            {
               CreateDim(new Point3d(panelBase.XMinPanel, ptPrev.Y, 0),
                         new Point3d(panelBase.XMinContour, ptPrev.Y, 0), ptDimLineInter, doTrans, trans);
            }
            if (Math.Abs(panelBase.XMaxPanel - panelBase.XMaxContour) > 100)
            {
               CreateDim(new Point3d(panelBase.XMaxContour, ptPrev.Y, 0),
                         new Point3d(panelBase.XMaxPanel, ptPrev.Y, 0), ptDimLineInter, doTrans, trans);
            }
             }
        }