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()); }
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++; } } }
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); } } }
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); } } }
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); } } }