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"); } }
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); } }