internal ThinWallSegmentGroup(List <Line> Lines, double WallThickness, double ScaleFactor) { Segments = Lines.Select(l => { Point2D nodeI = new Point2D(l.StartPoint.X * ScaleFactor, l.StartPoint.Y * ScaleFactor); Point2D nodeJ = new Point2D(l.EndPoint.X * ScaleFactor, l.EndPoint.Y * ScaleFactor); Line2D line = new Line2D(nodeI, nodeJ); ThinWallSegment s = new ThinWallSegment(line, WallThickness); return(s); }).ToList(); }
private List <ThinWallSegment> GetRotatedSegments(List <ThinWallSegment> segments) { //Flip X and Y coordinates List <ThinWallSegment> newSegs = segments.Select(s => { ThinWallSegment sg = new ThinWallSegment(new Line2D(new Point2D(s.Line.StartPoint.Y, s.Line.StartPoint.X), new Point2D(s.Line.EndPoint.Y, s.Line.EndPoint.X)), s.WallThickness); return(sg); }).ToList(); return(newSegs); }
private List <ThinWallSegment> GetSubdividedYSegments(List <double> YUnique, List <ThinWallSegment> Segs) { List <ThinWallSegment> segments = new List <ThinWallSegment>(); for (int i = 0; i < YUnique.Count(); i++) { //double DeltaY = YUnique[i + 1] - YUnique[i]; List <ThinWallSegment> crossingVericalSegments = Segs.Where(s => { //if this is a level line if (s.Line.YMax != s.Line.YMin) { if (i != 0) { if (s.Line.YMin < YUnique[i] && s.Line.YMax >= YUnique[i]) { return(true); } else { return(false); } } //if this is the lowest coordinate else { return(false); } //s.Line.YMin <= YUnique[i] & s.Line.YMin >= YUnique[i + 1] } else { return(false); } } ).ToList(); if (crossingVericalSegments.Count() == 0) { //if this segment is a gap if (i != 0) { segments.Add(new ThinWallSegment(YUnique[i - 1], YUnique[i], 0)); } } else { //if this segment is NOT a gap foreach (var s in crossingVericalSegments) { if (i != 0) { Line2D subLine = s.Line.GetSubSegment(YUnique[i - 1], YUnique[i]); ThinWallSegment seg = new ThinWallSegment(subLine, s.WallThickness); segments.Add(seg); } else { ThinWallSegment seg = new ThinWallSegment(s.Line, s.WallThickness); segments.Add(seg); } } } List <ThinWallSegment> crossingHorizontalSegments = Segs.Where(s => { //if this is a level line if (s.Line.YMax == s.Line.YMin) { if (s.Line.YMin == YUnique[i]) { return(true); } else { return(false); } } else { return(false); } }).ToList(); segments.AddRange(crossingHorizontalSegments); } return(segments.OrderBy(c => c.Line.StartPoint.Y).ToList()); }