Exemplo n.º 1
0
 /*-------------------------------------------------------------*/
 private void btnSave_Click(object sender, EventArgs e)
 {
     using (SaveFileDialog saveDialog = new SaveFileDialog())
     {
         saveDialog.Filter           = "Project files|*.PrjPnp|CSV files|*.csv|Text Files|*.txt|All Files|*.*";
         saveDialog.Title            = "Save project";
         saveDialog.FileName         = projectName;
         saveDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
         if (saveDialog.ShowDialog() == DialogResult.OK)
         {
             PnpProject project = new PnpProject(saveDialog.FileName);
             project.Machine                = pnpMachine;
             project.ProjectName            = projectName;
             project.ProjectFolder          = folder;
             project.HorizontalOriginOffset = (float)bscOrigin.ValueX;
             project.VerticalOriginOffset   = (float)bscOrigin.ValueY;
             project.BoardsX                = (int)bscNumberOfBoards.ValueX;
             project.BoardsY                = (int)bscNumberOfBoards.ValueX;
             project.DistanceX              = (float)bscDistBetwBoards.ValueX;
             project.DistanceY              = (float)bscDistBetwBoards.ValueY;
             project.BoardWidth             = (float)bscDimensions.ValueX;
             project.BoardLength            = (float)bscDimensions.ValueY;
             project.IncludedReels          = reelsToPlace;
             project.ExcludedReels          = excludedReels;
             project.StackListers           = stacklisters;
             FileOperations.SaveProject(project);
         }
     }
 }
Exemplo n.º 2
0
 /*-------------------------------------------------------------*/
 private void btnLoad_Click(object sender, EventArgs e)
 {
     try
     {
         using (OpenFileDialog openDialog = new OpenFileDialog())
         {
             openDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
             openDialog.Filter           = "Project files|*.PrjPnp|CSV files|*.csv|Text Files|*.txt|All Files|*.*";
             openDialog.Title            = "Please select a pick and place project file...";
             if (openDialog.ShowDialog() == DialogResult.OK)
             {
                 PnpProject project = new PnpProject(openDialog.FileName);
                 FileOperations.LoadProject(project);
                 ClearPhases();
                 projectName              = project.ProjectName;
                 folder                   = project.ProjectFolder;
                 bscOrigin.ValueX         = (decimal)project.HorizontalOriginOffset;
                 bscOrigin.ValueY         = (decimal)project.VerticalOriginOffset;
                 bscNumberOfBoards.ValueX = (decimal)project.BoardsX;
                 bscNumberOfBoards.ValueY = (decimal)project.BoardsY;
                 bscDistBetwBoards.ValueX = (decimal)project.DistanceX;
                 bscDistBetwBoards.ValueY = (decimal)project.DistanceY;
                 bscDimensions.ValueX     = (decimal)project.BoardWidth;
                 bscDimensions.ValueY     = (decimal)project.BoardLength;
                 reelsToPlace             = project.IncludedReels;
                 excludedReels            = project.ExcludedReels;
                 //stacklisters = project.StackListers;
                 //pnpMachine = project.Machine;
                 ChangeMachineType(project.Machine);
                 stacklisters = project.StackListers;
                 //UpdateListView(); (included in change machinetype)
                 if (stacklisters.Count != 0)
                 {
                     for (int i = 0; i < stacklisters.Count; i++)
                     {
                         stacklisters[i].updateAllListsEvent += UpdateAllListsEvent;
                         GenerateTabPage(stacklisters[i]);
                         if (stacklisters[i].Layer == ReelLayer.Top)
                         {
                             stacklisters[i].SetTotalList(project.TopReels);
                         }
                         else
                         {
                             stacklisters[i].SetTotalList(project.BottomReels);
                         }
                     }
                     this.pnlExportButtons.Enabled = true;
                 }
             }
         }
     }
     catch (Exception exc)
     {
         MessageBox.Show(exc.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
        /// <summary>
        /// Save a pick and place project
        /// </summary>
        /// <param name="project">Project to save</param>
        public static void SaveProject(PnpProject project)
        {
            using (StreamWriter writer = new StreamWriter(project.Path))
            {
                //part 1: project information
                writer.WriteLine("ProjectName=" + project.ProjectName);
                writer.WriteLine("ProjectFolder=" + project.ProjectFolder);
                writer.WriteLine();

                //part 2: machine information
                writer.WriteLine("#Machine information:");
                string equippedNozzles = "";
                int    numberOfNozzles = project.Machine.EquippedNozzles.Length;
                for (int i = 0; i < numberOfNozzles; i++)
                {
                    equippedNozzles += project.Machine.EquippedNozzles[i].ToString();
                    if (i != numberOfNozzles - 1)
                    {
                        equippedNozzles += ",";
                    }
                }
                writer.WriteLine("MachineType={0},speed={1},equipped nozzles={2}{3}",
                                 new object[] { project.Machine.GetType(), project.Machine.DefaultSpeed, equippedNozzles, Environment.NewLine });

                //Part 3: Offset and panelization
                writer.WriteLine("#Offset and panelization:");
                writer.WriteLine("originOffsetX={1},originOffsetY={2}{0}boardsX={3},boardsY={4}{0}distanceX={5},distanceY={6}{0}boardDimX={7},boardDimY={8}{0}",
                                 new object[] { Environment.NewLine, project.HorizontalOriginOffset, project.VerticalOriginOffset,
                                                project.BoardsX, project.BoardsY,
                                                project.DistanceX, project.DistanceY,
                                                project.BoardWidth, project.BoardLength });

                //part 4: components
                writer.WriteLine("#Included components/reels:");
                writer.WriteLine(SaveStringComponents(project.IncludedReels, true));
                writer.WriteLine();
                writer.WriteLine("#Excluded components/reels:");
                writer.WriteLine(SaveStringComponents(project.ExcludedReels, false));
                writer.WriteLine();

                //part 5: stackConfiguration
                writer.WriteLine("#Stack setup(s):");
                for (int i = 0; i < project.StackListers.Count; i++)
                {
                    StackList stackList_ = project.StackListers[i];
                    writer.WriteLine("Phase=" + stackList_.PhaseNumber.ToString());
                    writer.WriteLine(stackList_.GetSaveString());
                }
            }
        }
        /// <summary>
        /// Load a pick and place project from the project.path
        /// </summary>
        /// <param name="project">Project to load data to</param>
        /// <exception cref="PickAndPlace.FileOperationsException">Thrown when data is missing or when a line could not be decoded</exception>
        public static void LoadProject(PnpProject project)
        {
            List <PnpComponent> includedComponents = new List <PnpComponent>();
            List <PnpComponent> excludedComponents = new List <PnpComponent>();

            //project.stackListers = new List<StackList>();
            using (StreamReader reader = new StreamReader(project.Path))
            {
                while (!reader.EndOfStream)
                {
                    string curLine = reader.ReadLine();
                    //# is a line with comment
                    if (curLine.StartsWith("#") || String.IsNullOrWhiteSpace(curLine))
                    {
                        continue;
                    }
                    string[] splitedLine = curLine.Split(new char[] { ',', '=' }, StringSplitOptions.None);
                    switch (splitedLine[0])
                    {
                    case "ProjectName":
                        project.ProjectName = splitedLine[1];
                        break;

                    case "ProjectFolder":
                        project.ProjectFolder = splitedLine[1];
                        break;

                    case "MachineType":
                        project.Machine = (IMachine)Assembly.GetExecutingAssembly().CreateInstance(splitedLine[1]);
                        project.Machine.DefaultSpeed = Convert.ToInt32(splitedLine[3]);
                        for (int i = 5; i < splitedLine.Length; i++)
                        {
                            Nozzle nozzle = PNPconverterTools.StringToNozzle(splitedLine[i]);
                            project.Machine.SetNozzle(i - 5, nozzle);
                        }
                        break;

                    case "originOffsetX":
                        project.HorizontalOriginOffset = float.Parse(splitedLine[1]);
                        project.VerticalOriginOffset   = float.Parse(splitedLine[3]);
                        break;

                    case "boardsX":
                        project.BoardsX = Convert.ToInt32(splitedLine[1]);
                        project.BoardsY = Convert.ToInt32(splitedLine[3]);
                        break;

                    case "distanceX":
                        project.DistanceX = float.Parse(splitedLine[1]);
                        project.DistanceY = float.Parse(splitedLine[3]);
                        break;

                    case "boardDimX":
                        project.BoardWidth  = float.Parse(splitedLine[1]);
                        project.BoardLength = float.Parse(splitedLine[3]);
                        break;

                    case "Designator":
                        //load new component
                        string designator = splitedLine[1];
                        string manufacturerPartNumber_ = splitedLine[3];
                        float  x        = float.Parse(splitedLine[5]);
                        float  y        = float.Parse(splitedLine[7]);
                        int    rotation = Convert.ToInt32(splitedLine[9]);
                        Layer  layer_;
                        if (splitedLine[11] == Layer.Bottom.ToString())
                        {
                            layer_ = Layer.Bottom;
                        }
                        else
                        {
                            layer_ = Layer.Top;
                        }
                        Location     location_ = new Location(x, y, rotation, layer_);
                        string       comment   = splitedLine[13];
                        bool         included  = Convert.ToBoolean(splitedLine[15]);
                        PnpComponent comp      = new PnpComponent(designator, location_, comment, manufacturerPartNumber_);
                        if (included)
                        {
                            includedComponents.Add(comp);
                        }
                        else
                        {
                            excludedComponents.Add(comp);
                        }
                        break;

                    case "Phase":
                        //last part of the file
                        string   remainingLines        = reader.ReadToEnd();
                        string[] remainingLinesSplited = remainingLines.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);
                        //1) make reels from the components:

                        project.IncludedReels = ComponentsToReels(includedComponents, project.Machine.DefaultSpeed);
                        project.ExcludedReels = ComponentsToReels(excludedComponents, project.Machine.DefaultSpeed);

                        List <Reel> completeReelList = new List <Reel>(project.IncludedReels);
                        completeReelList.AddRange(project.ExcludedReels);
                        //the completeReelList contains all reels, however these reels where not splited
                        List <Reel> topReels, bottomReels;
                        Reel.SplitReelList(completeReelList, out topReels, out bottomReels);
                        completeReelList.Clear();
                        completeReelList.AddRange(topReels);
                        completeReelList.AddRange(bottomReels);
                        //topReels and bottomReels contain all reels, also the excluded reels
                        //they will be reused later

                        //2) read each line
                        StackList newStackList = new StackList(project.Machine, Convert.ToInt32(splitedLine[1]));
                        newStackList.Name = "stackList";
                        project.StackListers.Add(newStackList);
                        int index = -1;

                        for (int i = 0; i < remainingLinesSplited.Length; i++)
                        {
                            splitedLine = remainingLinesSplited[i].Split(new char[] { '=', ',' });
                            if (splitedLine[0] != "Phase")
                            {
                                index++;     //Stacks are saved in order (starting at reel 0 -> reel n)
                                string designator_ = splitedLine[1];
                                if (String.IsNullOrWhiteSpace(designator_))
                                {
                                    continue;                                             //empty stack
                                }
                                bool locked = Convert.ToBoolean(splitedLine[5]);
                                //find the reel in the completeReelList
                                Reel matchingReel = completeReelList.Find(reel => reel.GetDesignators().Contains(designator_));
                                matchingReel.Speed = Convert.ToInt32(splitedLine[3]);
                                newStackList.AddReel(matchingReel, locked, index);
                                project.ReelsInStackList.Add(matchingReel);
                            }
                            else
                            {
                                //make a new phase
                                //Phase=X (X=phase number)
                                newStackList      = new StackList(project.Machine, Convert.ToInt32(splitedLine[1]));
                                newStackList.Name = "stackList";
                                project.StackListers.Add(newStackList);
                                index = -1;
                            }
                        }
                        //Reusing topReels and bottomReels
                        Reel.SplitReelList(project.ReelsInStackList, out topReels, out bottomReels);
                        project.TopReels    = topReels;
                        project.BottomReels = bottomReels;

                        break;

                    default:
                        throw new FileOperationsException(String.Format("Unable to read file: {0}{2}Problem with reading folowing line:{2}{1}", project.Path, curLine, Environment.NewLine));
                    }
                }
            }
            if (project.StackListers.Count == 0)
            {
                //no phases saved
                project.IncludedReels = ComponentsToReels(includedComponents, project.Machine.DefaultSpeed);
                project.ExcludedReels = ComponentsToReels(excludedComponents, project.Machine.DefaultSpeed);
            }
            if ((project.HorizontalOriginOffset == -1f) || (project.VerticalOriginOffset == -1f) ||
                (project.BoardsX == -1) || (project.BoardsY == -1) ||
                (project.DistanceX == -1f) || (project.DistanceY == -1f) ||
                (project.BoardWidth == -1f) || (project.BoardLength == -1f) ||
                (project.Machine == null))
            {
                throw new FileOperationsException("Not all data was found in the file");
            }
        }