protected void OnNext(object sender, EventArgs e)
    {
        // instantiate canvasCoord
        var canvasCoord = new CanvasCoordConverter(850, 550, PtMin, PtMax);
        // read box positions serialized as Json in field HFBoxArray
        string sValue = HFBoxArray.Value;
        var    bposJS = JsonConvert.DeserializeObject <IList <BoxPositionJS> >(sValue);

        // convert array of BoxPositionJS to BoxPositionIndexed array
        if (null != bposJS)
        {
            var listBoxPositions = new List <BoxPositionIndexed>();
            foreach (var bpjs in bposJS)
            {
                var listIndex = canvasCoord.ToBoxPositionIndexed(bpjs, DimCase);
                listBoxPositions.AddRange(listIndex);
            }
            // sort according to index
            BoxPositionIndexed.Sort(ref listBoxPositions);
            // save session wide
            BoxPositions = listBoxPositions;
            // to validation page
            Response.Redirect("ValidationWebGL.aspx");
        }
    }
Example #2
0
        public BoxPositionJS BPosWorldToCanvas(BoxPositionIndexed bposi, int number, Vector3D dimCase)
        {
            // angle
            double   angle     = 0;
            Vector2D offsetPos = Vector2D.Zero;

            switch (bposi.BPos.DirectionLength)
            {
            case HalfAxis.HAxis.AXIS_X_P: angle = 0.0; offsetPos = new Vector2D(0.0, -dimCase.Y); break;

            case HalfAxis.HAxis.AXIS_Y_P: angle = 90.0; offsetPos = new Vector2D(0.0, -dimCase.X); break;

            case HalfAxis.HAxis.AXIS_X_N: angle = 180.0; offsetPos = new Vector2D(0.0, dimCase.Y); break;

            case HalfAxis.HAxis.AXIS_Y_N: angle = 270.0; offsetPos = new Vector2D(0.0, dimCase.X); break;

            default: break;
            }

            Vector2D canvasPosition = PtWorldToCanvas(new Vector2D(bposi.BPos.Position.X, bposi.BPos.Position.Y) - offsetPos);

            return(new BoxPositionJS()
            {
                X = canvasPosition.X,
                Y = canvasPosition.Y,
                Angle = angle,
                NumberCase = number,
                Index = bposi.Index
            });
        }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            CanvasCoordConverter canvasCoord = new CanvasCoordConverter(850, 550, PtMin, PtMax);

            // pallet dimensions
            var palletTopLeft     = canvasCoord.PtWorldToCanvas(new Vector2D(0.0, DimPallet.Y));
            var palletBottomRight = canvasCoord.PtWorldToCanvas(new Vector2D(DimPallet.X, 0.0));
            _palletDims.X1 = palletTopLeft.X;
            _palletDims.Y1 = palletTopLeft.Y;
            _palletDims.X2 = palletBottomRight.X;
            _palletDims.Y2 = palletBottomRight.Y;

            // generate images
            _casePixelWidth  = (int)(canvasCoord.LengthWorldToCanvas(DimCase.X));
            _casePixelHeight = (int)(canvasCoord.LengthWorldToCanvas(DimCase.Y));


            int palletPixelWidth  = (int)(canvasCoord.LengthWorldToCanvas(DimPallet.X));
            int palletPixelHeight = (int)(canvasCoord.LengthWorldToCanvas(DimPallet.Y));

            // generate box position from
            MultiCaseImageGenerator.GenerateDefaultCaseImage(DimCase, new Size(_casePixelWidth, _casePixelHeight), 1, MultiCaseImageGenerator.CaseAlignement.SHARING_LENGTH, Path.Combine(Output, "case1.png"));
            MultiCaseImageGenerator.GenerateDefaultCaseImage(DimCase, new Size(_casePixelWidth, _casePixelHeight), 2, MultiCaseImageGenerator.CaseAlignement.SHARING_LENGTH, Path.Combine(Output, "case2.png"));
            MultiCaseImageGenerator.GenerateDefaultCaseImage(DimCase, new Size(_casePixelWidth, _casePixelHeight), 3, MultiCaseImageGenerator.CaseAlignement.SHARING_LENGTH, Path.Combine(Output, "case3.png"));
            MultiCaseImageGenerator.GenerateDefaultCaseImage(DimCase, new Size(_casePixelWidth, _casePixelHeight), 4, MultiCaseImageGenerator.CaseAlignement.SHARING_LENGTH, Path.Combine(Output, "case4.png"));
            MultiCaseImageGenerator.GenerateDefaultPalletImage(DimPallet, PalletIndex == 0? "EUR" : "EUR2", new Size(palletPixelWidth, palletPixelHeight), Path.Combine(Output, "pallet.png"));

            // build reduced list of unique box positions indexed
            BoxPositionIndexed.ReduceListBoxPositionIndexed(BoxPositions, out List <BoxPositionIndexed> listBPIReduced, out Dictionary <int, int> dictIndexNumber);
            foreach (var bp in listBPIReduced)
            {
                _boxPositionsJS.Add(canvasCoord.BPosWorldToCanvas(bp, dictIndexNumber[bp.Index], DimCase));
            }
        }
    }
        public static void Import(Stream csvStream,
                                  ref List <BoxPositionIndexed> boxPositions,
                                  ref Vector3D dimCase, ref double weightCase,
                                  ref Vector3D dimPallet, ref double weightPallet,
                                  ref int numberOfLayers,
                                  ref bool layersMirrorX, ref bool layersMirrorY,
                                  ref List <bool> interlayers)
        {
            using (TextFieldParser csvParser = new TextFieldParser(csvStream))
            {
                csvParser.CommentTokens = new string[] { "#" };
                csvParser.SetDelimiters(new string[] { ";" });
                csvParser.HasFieldsEnclosedInQuotes = false;

                // Skip the row with the column names
                csvParser.ReadLine();
                csvParser.ReadLine();

                double zMin = double.MaxValue;
                numberOfLayers = 0;

                while (!csvParser.EndOfData)
                {
                    // Read current line fields, pointer moves to the next line.
                    string[] fields = csvParser.ReadFields();

                    string f1 = fields[1];
                    if (f1.Contains("Program:StackBuilder.Box") && f1.EndsWith(".C"))
                    {
                        try
                        {
                            int angle = int.Parse(fields[3]);
                            fields = csvParser.ReadFields();
                            double x = double.Parse(fields[3], NumberFormatInfo.InvariantInfo);
                            fields = csvParser.ReadFields();
                            double y = double.Parse(fields[3], NumberFormatInfo.InvariantInfo);
                            fields = csvParser.ReadFields();
                            double z = double.Parse(fields[3], NumberFormatInfo.InvariantInfo);
                            fields = csvParser.ReadFields();
                            int index = int.Parse(fields[3], NumberFormatInfo.InvariantInfo);
                            if (angle == 0 && x == 0 && y == 0 && z == 0 && index == 0)
                            {
                                continue;
                            }
                            if (z < zMin)
                            {
                                zMin = z;
                            }

                            HalfAxis.HAxis axisL = HalfAxis.HAxis.AXIS_X_P;
                            HalfAxis.HAxis axisW = HalfAxis.HAxis.AXIS_Y_P;
                            switch (angle)
                            {
                            case 0:
                                axisL = HalfAxis.HAxis.AXIS_X_P;
                                axisW = HalfAxis.HAxis.AXIS_Y_P;
                                break;

                            case 90:
                                axisL = HalfAxis.HAxis.AXIS_Y_P;
                                axisW = HalfAxis.HAxis.AXIS_X_N;
                                break;

                            case 180:
                                axisL = HalfAxis.HAxis.AXIS_X_N;
                                axisW = HalfAxis.HAxis.AXIS_Y_N;
                                break;

                            case 270:
                                axisL = HalfAxis.HAxis.AXIS_Y_N;
                                axisW = HalfAxis.HAxis.AXIS_X_P;
                                break;

                            default:
                                break;
                            }
                            if (Math.Abs(z - zMin) < 1.0E-06)
                            {
                                boxPositions.Add(new BoxPositionIndexed(new Vector3D(x, y, z), axisL, axisW, index));
                            }
                        }
                        catch (Exception ex)
                        {
                            _log.Error(ex.ToString());
                        }
                    }
                    else if (f1.Contains("Program:StackBuilder.InterlayerOnOff"))
                    {
                        interlayers.Add(string.Equals(fields[3], "TRUE", StringComparison.InvariantCultureIgnoreCase));
                    }
                    else if (f1.Contains("Program:StackBuilder.BoxDimension.L"))
                    {
                        dimCase.X  = double.Parse(fields[3], NumberFormatInfo.InvariantInfo);
                        fields     = csvParser.ReadFields();
                        dimCase.Y  = double.Parse(fields[3], NumberFormatInfo.InvariantInfo);
                        fields     = csvParser.ReadFields();
                        dimCase.Z  = double.Parse(fields[3], NumberFormatInfo.InvariantInfo);
                        fields     = csvParser.ReadFields();
                        weightCase = double.Parse(fields[3], NumberFormatInfo.InvariantInfo);
                    }
                    else if (f1.Contains("Program:StackBuilder.PalletDimension"))
                    {
                        dimPallet.X  = double.Parse(fields[3], NumberFormatInfo.InvariantInfo);
                        fields       = csvParser.ReadFields();
                        dimPallet.Y  = double.Parse(fields[3], NumberFormatInfo.InvariantInfo);
                        fields       = csvParser.ReadFields();
                        dimPallet.Z  = double.Parse(fields[3], NumberFormatInfo.InvariantInfo);
                        fields       = csvParser.ReadFields();
                        weightPallet = double.Parse(fields[3], NumberFormatInfo.InvariantInfo);
                    }
                    else if (f1.Contains("Program:StackBuilder.NumberOfLayers"))
                    {
                        numberOfLayers = int.Parse(fields[3], NumberFormatInfo.InvariantInfo);
                    }
                    else if (f1.Contains("Program:StackBuilder.LayersMirrorXOnOff"))
                    {
                        layersMirrorX = String2Bool(fields[3]);
                    }
                    else if (f1.Contains("Program:StackBuilder.LayersMirrorYOnOff"))
                    {
                        layersMirrorY = String2Bool(fields[3]);
                    }
                }
            }

            // reset position
            for (int i = 0; i < boxPositions.Count; ++i)
            {
                var            bpos       = boxPositions[i];
                HalfAxis.HAxis axisLength = bpos.BPos.DirectionLength;
                HalfAxis.HAxis axisWidth  = bpos.BPos.DirectionWidth;
                Vector3D       vI         = HalfAxis.ToVector3D(axisLength);
                Vector3D       vJ         = HalfAxis.ToVector3D(axisWidth);
                Vector3D       vK         = Vector3D.CrossProduct(vI, vJ);
                var            v          = bpos.BPos.Position - 0.5 * dimCase.X * vI - 0.5 * dimCase.Y * vJ - 0.5 * dimCase.Z * vK - dimPallet.Z * Vector3D.ZAxis;
                int            index      = bpos.Index;
                boxPositions[i] = new BoxPositionIndexed(v, axisLength, axisWidth, index);
            }
        }