private static Vector2 LeftToRight( Vector2 locationPos, Vector2 originOffset, PartExtents dims, List <Vector2> result, OriginPositionEnum originPosition, PartExtents partNextDims, int spacing) { locationPos += new Vector2(-originOffset.X, -originOffset.Y); result.Add(locationPos); locationPos += new Vector2(originOffset.X, originOffset.Y); if (originPosition == OriginPositionEnum.Center) { //move forward by 1/2 this ones width and 1/2 of the next ones width locationPos += new Vector2(dims.Width / 2, 0); if (partNextDims != null) { locationPos += new Vector2(partNextDims.Width / 2, 0); } } else { locationPos += new Vector2(dims.Width, 0); } locationPos += Utils.Right(spacing); return(locationPos); }
private static Vector2 TopToBottom( Vector2 locationPos, Vector2 originOffset, PartExtents dims, List <Vector2> result, OriginPositionEnum originPosition, PartExtents partNextDims, int spacing) { locationPos += new Vector2(-originOffset.X, -originOffset.Y); result.Add(locationPos); locationPos += new Vector2(originOffset.X, originOffset.Y); if (originPosition == OriginPositionEnum.Center) { //move forward by 1/2 this ones width and 1/2 of the next ones width locationPos += new Vector2(0, dims.Height / 2); if (partNextDims != null) { locationPos += new Vector2(0, partNextDims.Height / 2); } } else if (originPosition == OriginPositionEnum.LeftBottom) { if (partNextDims != null) { locationPos += new Vector2(0, partNextDims.Height); } } else { locationPos += new Vector2(0, dims.Height); } locationPos += Utils.Down(spacing); return(locationPos); }
public static List <Vector2> CalcLayout(Pattern pattern, OriginPositionEnum partOriginPosition, Vector2 padding) { List <Vector2> result = new List <Vector2>(); Vector2 locationPos = new Vector2(); for (int i = 0; i < pattern.Parts.Count; i++) { PatternPart part = pattern.Parts[i]; PartExtents extents = PartExtents.CalcPartExtents(part); Vector2 pageSize = new Vector2(extents.Width, extents.Height); Vector2 originOffset = PartExtents.CalcOffsetForOrigin(part, partOriginPosition); switch (partOriginPosition) { default: case OriginPositionEnum.LeftTop: locationPos += new Vector2(padding.X, padding.Y); locationPos = PlacePart(locationPos, originOffset, result); locationPos -= new Vector2(padding.X, padding.Y); break; case OriginPositionEnum.LeftBottom: locationPos += new Vector2(padding.X, pageSize.Y - padding.Y); locationPos = PlacePart(locationPos, originOffset, result); locationPos -= new Vector2(padding.X, pageSize.Y - padding.Y); break; case OriginPositionEnum.Center: locationPos += new Vector2((pageSize.X + padding.X) / 2, (pageSize.Y + padding.Y) / 2); locationPos = PlacePart(locationPos, originOffset, result); locationPos -= new Vector2((pageSize.X + padding.X) / 2, (pageSize.Y + padding.Y) / 2); break; } } return(result); }
public override void PrintPattern(float scale, Pattern pattern, List <Vector2> positions, Vector2 padding, string path) { this.scale = scale; //PDF pages are sized in point units. 1 pt == 1/72 inch == 127/360 mm. //< table > //< thead >< tr >< th class="tdw1">Size</th><th class="tdw2">Width x Height(mm)</th><th class="tdw2">Width x Height(in)</th></tr></thead> //<tbody> //<tr><td>4A0</td><td>1682 x 2378 mm</td><td>66.2 x 93.6 in</td></tr> //<tr><td>2A0</td><td>1189 x 1682 mm</td><td>46.8 x 66.2 in</td></tr> //<tr><td>A0</td><td>841 x 1189 mm</td><td>33.1 x 46.8 in</td></tr> //<tr><td>A1</td><td>594 x 841 mm</td><td>23.4 x 33.1 in</td></tr> //<tr><td>A2</td><td>420 x 594 mm</td><td>16.5 x 23.4 in</td></tr> //<tr><td>A3</td><td>297 x 420 mm</td><td>11.7 x 16.5 in</td></tr> //<tr><td>A4</td><td> 210 x 297 mm</td><td>8.3 x 11.7 in</td></tr> //<tr><td>A5</td><td>148 x 210 mm</td><td>5.8 x 8.3 in</td></tr> //<tr><td>A6</td><td>105 x 148 mm</td><td>4.1 x 5.8 in</td></tr> //<tr><td>A7</td><td>74 x 105 mm</td><td>2.9 x 4.1 in</td></tr> //<tr><td>A8</td><td>52 x 74 mm</td><td>2.0 x 2.9 in</td></tr> //<tr><td>A9</td><td>37 x 52 mm</td><td>1.5 x 2.0 in</td></tr> //<tr><td>A10</td><td>26 x 37 mm</td><td>1.0 x 1.5 in</td></tr> //</tbody> //</table> SKDocumentPdfMetadata metadata = new SKDocumentPdfMetadata { Author = "Hoodie Maker", Creation = DateTime.Now, Creator = "Hoodie Maker", Keywords = "PDF, Hoodie, Pattern", Modified = DateTime.Now, Producer = "Hoodie Maker", Subject = "Hoodie Maker Pattern", Title = "Hoodie Pattern", }; using (SKFileWStream stream = new SKFileWStream(path)) using (SKDocument document = SKDocument.CreatePdf(stream, metadata)) { for (int i = 0; i < pattern.Parts.Count; i++) { Vector2 position = positions[i]; PatternPart part = pattern.Parts[i]; //A0 841mm x 1189 mm //float width = pageSize.X * Utils.pntPerMM; //float height = pageSize.Y * Utils.pntPerMM; PartExtents extents = PartExtents.CalcPartExtents(part); using (SKCanvas pdfCanvas = document.BeginPage(Scale(extents.Width + padding.X), Scale(extents.Height + padding.Y))) { canvas = pdfCanvas; DrawPart(part, position, colorFillPrint, MapEntityColorsForPrint(EntityType.Normal), MapEntityColorsForPrint(EntityType.Text)); document.EndPage(); } } document.Close(); } System.Diagnostics.Debug.WriteLine(path); //Task.Run(async () => await OpenDoc(path)); }
public static List <Vector2> CalcLayout( Pattern pattern, Vector2 offsetOnSurface, PartLayoutEnum layout, OriginPositionEnum partOriginPosition, int spacing) { List <Vector2> result = new List <Vector2>(); Vector2 start = new Vector2() { X = 0 + offsetOnSurface.X, Y = 0 + offsetOnSurface.Y }; Vector2 locationPos = new Vector2(); locationPos += start; if (partOriginPosition == OriginPositionEnum.LeftBottom && layout == PartLayoutEnum.LeftToRight) { float tallest = Pattern.CalcTallestPart(pattern); locationPos += new Vector2(0, tallest); } if (partOriginPosition == OriginPositionEnum.Center && layout == PartLayoutEnum.LeftToRight) { float tallest = Pattern.CalcTallestPart(pattern); locationPos += new Vector2(0, tallest / 2); } for (int i = 0; i < pattern.Parts.Count; i++) { PatternPart part = pattern.Parts[i]; Vector2 originOffset = PartExtents.CalcOffsetForOrigin(part, partOriginPosition); PartExtents dims = PartExtents.CalcPartExtents(part); PartExtents partNextDims = null; if (i + 1 < pattern.Parts.Count) { PatternPart partNext = pattern.Parts[i + 1]; partNextDims = PartExtents.CalcPartExtents(partNext); } switch (layout) { default: case PartLayoutEnum.LeftToRight: switch (partOriginPosition) { default: case OriginPositionEnum.LeftTop: case OriginPositionEnum.LeftBottom: case OriginPositionEnum.Center: locationPos = LeftToRight(locationPos, originOffset, dims, result, partOriginPosition, partNextDims, spacing); break; } break; case PartLayoutEnum.TopToBottom: switch (partOriginPosition) { default: case OriginPositionEnum.LeftTop: case OriginPositionEnum.LeftBottom: case OriginPositionEnum.Center: locationPos = TopToBottom(locationPos, originOffset, dims, result, partOriginPosition, partNextDims, spacing); break; } break; } } return(result); }
public static List <List <Vector2> > CalcLayout(List <Pattern> allPatterns, Vector2 offsetOnSurface) { Pattern mainPattern = allPatterns.First(); List <Pattern> layerPatterns = new List <Pattern>(); for (int i = 1; i < allPatterns.Count; i++) //skip first { layerPatterns.Add(allPatterns[i]); } List <List <Vector2> > result = new List <List <Vector2> >(); result.Add(new List <Vector2>()); //mainPattern result layerPatterns.ForEach(x => result.Add(new List <Vector2>())); Vector2 start = new Vector2() { X = 0 + offsetOnSurface.X, Y = 0 + offsetOnSurface.Y }; Vector2 locationPos = new Vector2(); locationPos += start; float tallest = Pattern.CalcTallestPart(mainPattern); locationPos += new Vector2(0, tallest / 2); for (int i = 0; i < mainPattern.Parts.Count; i++) { PatternPart mainPart = mainPattern.Parts[i]; Vector2 mainPartOriginOffset = PartExtents.CalcOffsetForOrigin(mainPart, OriginPositionEnum.Center); PartExtents mainPartExtents = PartExtents.CalcPartExtents(mainPart); PartExtents mainPartNextDims = null; if (i + 1 < mainPattern.Parts.Count) { PatternPart mainPartNext = mainPattern.Parts[i + 1]; mainPartNextDims = PartExtents.CalcPartExtents(mainPartNext); } //pattern main locationPos += new Vector2(-mainPartOriginOffset.X, -mainPartOriginOffset.Y); result[0].Add(locationPos); locationPos += new Vector2(mainPartOriginOffset.X, mainPartOriginOffset.Y); for (int j = 0; j < layerPatterns.Count; j++) { //pattern layer PatternPart layerPart = layerPatterns[j].Parts[i]; Vector2 layerPartOriginOffset = PartExtents.CalcOffsetForOrigin(layerPart, OriginPositionEnum.Center); locationPos += new Vector2(-layerPartOriginOffset.X, -layerPartOriginOffset.Y); result[j + 1].Add(locationPos); locationPos += new Vector2(layerPartOriginOffset.X, layerPartOriginOffset.Y); } //use pattern main to layout locationPos += new Vector2(mainPartExtents.Width / 2, 0); if (mainPartNextDims != null) { locationPos += new Vector2(mainPartNextDims.Width / 2, 0); } locationPos += new Vector2(50, 0);//spacing between parts } return(result); }