Пример #1
0
        private void AddDmcPalette()
        {
            var dtoThreads   = new List <ThreadColor>();
            var manufacturer = _dbContext.ThreadManufacturers.First(m => m.Name == "DMC");

            foreach (var thread in Data.DmcColors.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries))
            {
                var parts = thread.Split(',').Select(t => t.Trim()).ToArray();
                var dto   = new ThreadColor(_lazyLoader);
                dto.Manufacturer = manufacturer;
                dto.ColorId      = parts[0];
                dto.ColorName    = parts[1];
                dto.RgbColor     = parts[2];
                dto.Length       = 8;
                dto.Sku          = "117S";
                dtoThreads.Add(dto);
            }

            _dbContext.ThreadColors.AddRange(dtoThreads);
        }
Пример #2
0
        private void AddPnkPalette()
        {
            var dtoThreads   = new List <ThreadColor>();
            var content      = File.ReadAllText("pnk.json");
            var jsonArray    = JsonConvert.DeserializeObject(content) as JArray;
            var manufacturer = _dbContext.ThreadManufacturers.First(m => m.Name.StartsWith("ПНК"));

            foreach (var token in jsonArray)
            {
                var dto = new ThreadColor(_lazyLoader);
                dto.Manufacturer = manufacturer;
                var name = token["Name"].Value <string>();
                dto.ColorId   = name;
                dto.ColorName = name;
                var rgb = token["Rgb"].Value <string>();
                dto.RgbColor = rgb;
                dto.Length   = 10;
                dto.Sku      = "";
                dtoThreads.Add(dto);
            }
            _dbContext.ThreadColors.AddRange(dtoThreads);
        }
Пример #3
0
 public StitchBlock(ThreadColor blockColor)
 {
     _stitches = new List<Stitch>();
     _blockColor = blockColor;
 }
Пример #4
0
        public PesFile(string filePath)
        {
            if (filePath == "")
            {
                throw new ArgumentNullException("filePath");
            }
            if (!File.Exists(filePath))
            {
                throw new FileNotFoundException("File not found.", filePath);
            }

            _filePath = filePath;
            _colors   = new List <int>();
            _blocks   = new List <StitchBlock>();

            log.InfoFormat("Reading file: {0}", _filePath);
            BinaryReader pesData = new BinaryReader(File.OpenRead(_filePath));

            string pesHeader = new string(pesData.ReadChars(4));

            log.DebugFormat("Header string: {0}", pesHeader);
            if (pesHeader != "#PES")
            {
                throw new FileLoadException("The specified file is not a valid PES file.", _filePath);
            }

            _pesVersion = new string(pesData.ReadChars(4));
            log.DebugFormat("Pes version: {0}", _pesVersion);

            uint pecStart = pesData.ReadUInt32();

            log.DebugFormat("Pec start: {0}", pecStart);

            pesData.BaseStream.Position = pecStart + 3;

            _internalName = new string(pesData.ReadChars(16));
            _internalName = _internalName.Trim();
            log.DebugFormat("Internal name: {0}", _internalName);

            pesData.BaseStream.Position = pecStart + 48;
            int colorCount = pesData.ReadByte() + 1;

            log.DebugFormat("Color count: {0}", colorCount);

            log.Info("Reading color data...");
            for (int i = 0; i < colorCount; i++)
            {
                _colors.Add(pesData.ReadByte());
            }

            pesData.BaseStream.Position = pecStart + 514;
            uint pecLength = pesData.ReadUInt16();
            uint pecEnd    = pecStart + 514 + pecLength;

            log.DebugFormat("Pec Length: {0}", pecLength);
            log.DebugFormat("Pec End: {0}", pecEnd);

            pesData.BaseStream.Position = pecStart + 520;
            _width  = pesData.ReadUInt16();
            _height = pesData.ReadUInt16();
            log.DebugFormat("Width: {0}cm", _width);
            log.DebugFormat("Height: {0}cm", _height);

            pesData.BaseStream.Position = pecStart + 532;
            int bx, by, dx, dy, x, y, mx, my, nx, ny;

            bx = by = dx = dy = x = y = mx = my = nx = ny = 0;

            //int x = Convert.ToInt16(_width) / 2;
            //int y = Convert.ToInt16(_height) / 2;

            int         c   = 0;
            bool        jmp = false;
            StitchBlock sb  = new StitchBlock(ThreadColor.FromIndex(_colors[c]));

            log.Info("Reading stitch data...");
            while (pesData.BaseStream.Position < pecEnd)
            {
                bx = pesData.ReadByte();
                by = pesData.ReadByte();
                //log.DebugFormat("Bytes x={0}, y={1}", bx, by);

                if (bx == 255 && by == 0)
                {
                    //log.Info("End of stitch marker");
                    _blocks.Add(sb);
                    break;
                }
                else if (bx == 254 && by == 176)
                {
                    //log.Info("End of color block.");
                    c++;
                    _blocks.Add(sb);
                    sb = new StitchBlock(ThreadColor.FromIndex(_colors[c]));

                    pesData.BaseStream.Position++;
                }
                else
                {
                    //Regular stitch
                    dx = dy = 0;
                    if ((bx & 128) == 128)//$80
                    {
                        //log.Info("Jump stitch on x");
                        dx  = ((bx & 15) * 256) + by;
                        dx  = ((dx & 2048) == 2048) ? (int)(dx | 4294963200) : dx;
                        by  = pesData.ReadByte();
                        jmp = true;
                    }
                    else
                    {
                        dx = (bx > 63) ? bx - 128 : bx;
                    }

                    if ((by & 128) == 128)//$80
                    {
                        //log.Info("Jump stitch on y");
                        bx  = pesData.ReadByte();
                        dy  = ((by & 15) * 256) + bx;
                        dy  = ((dy & 2048) == 2048) ? (int)(dy | 4294963200) : dy;
                        jmp = true;
                    }
                    else
                    {
                        //normal stitch
                        dy = (by > 63) ? by - 128 : by;
                    }
                    //log.DebugFormat("Stitch point: dx={0}, dy={1}", dx, dy);
                    x += dx;
                    y += dy;
                    nx = (x < nx) ? x : nx;
                    ny = (y < ny) ? y : ny;
                    mx = (x > mx) ? x : mx;
                    my = (y > my) ? y : my;
                    StitchType type = (jmp) ? StitchType.Jump : StitchType.Normal;
                    sb.AddStitch(new Stitch(new Point(x, y), type));
                    jmp = false;
                }
                _pixelWidth  = mx - nx;
                _pixelHeight = my - ny;
                _xOffset     = -nx;
                _yOffset     = -ny;
            }
            log.Info("Closing the file.");
            pesData.Close();
        }
Пример #5
0
 public StitchBlock(ThreadColor blockColor)
 {
     _stitches   = new List <Stitch>();
     _blockColor = blockColor;
 }