| | |
| | | /// </remarks> |
| | | public class PlaceBlockService |
| | | { |
| | | //613 526 |
| | | |
| | | /// <summary> |
| | | /// è·åé
ç½®æä»¶ä¸"Spacing"é®å¯¹åºçæ´æ°å¼ï¼è¡¨ç¤ºé´è·å¼ |
| | | /// </summary> |
| | |
| | | /// è·åæè®¾ç½®æå¤§æè½¬é¿åº¦é
ç½®å¼ |
| | | /// </summary> |
| | | public static int MaxRotateLength = AppSettings.GetValue("MaxRotateLength").ObjToInt(); |
| | | |
| | | /// <summary> |
| | | /// æå°å®½åº¦Xåç§»éï¼æ¯«ç±³ï¼ |
| | | /// </summary> |
| | | public static int MinWidthOffset = AppSettings.GetValue("MinWidthOffset").ObjToInt(); |
| | | |
| | | /// <summary> |
| | | /// æå¤§å®½åº¦Xåç§»éï¼æ¯«ç±³ï¼ |
| | | /// </summary> |
| | | public static int MaxWidthOffset = AppSettings.GetValue("MaxWidthOffset").ObjToInt(); |
| | | |
| | | /// <summary> |
| | | /// æå¤§Yåæ éå¶ï¼æ¯«ç±³ï¼ |
| | |
| | | var candidate = new Point3D(x, y, baseZ); |
| | | if (IsPositionValid(candidate, l, w, h)) |
| | | { |
| | | TaskPosition taskPosition = GetTaskPosition(candidate, l, w, h, edge); |
| | | if (IsPositionValid(taskPosition)) |
| | | TaskPosition? taskPosition = GetTaskPosition(candidate, l, w, h, edge); |
| | | if (taskPosition != null) |
| | | { |
| | | return taskPosition; |
| | | if (IsPositionValid(taskPosition)) |
| | | { |
| | | return taskPosition; |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | |
| | | /// <returns>妿Yè½´åæ å¨ææèå´å
è¿åtrueï¼å¦åè¿åfalse</returns> |
| | | private bool IsPositionValid(TaskPosition pos) |
| | | { |
| | | if (pos.Edge == 1 && pos.PutPositionX > 70 || pos.Edge == 2 && pos.PutPositionX < 0) |
| | | { |
| | | return false; |
| | | } |
| | | return pos.PutPositionY <= MaxY && pos.PutPositionY >= 0 && pos.TakePositionY >= 0; |
| | | } |
| | | |
| | |
| | | /// 并计ç®å¸çä¸å¿ç¹ä½ç½®ï¼åæ¶å¤çè¾¹çæ¡ä»¶éå¶ã |
| | | /// æ¨ªåæ¾ç½®æ¶æå°Yåæ ä¸º155ï¼çºµåæ¶ä¸º350ï¼æå¤§Yåæ ä¸º700ã |
| | | /// </remarks> |
| | | public TaskPosition GetTaskPosition(Point3D point3D, int length, int width, int height, int edge) |
| | | public TaskPosition? GetTaskPosition(Point3D point3D, int length, int width, int height, int edge) |
| | | { |
| | | //æ¾è´§ä½ç½®æ¿æä¸å¿ç¹ |
| | | Point3D putCenter = new Point3D(point3D.X + length / 2, point3D.Y + width / 2, point3D.Z + height / 2); |
| | |
| | | int putPositionX = 0; |
| | | int putPositionY = 0; |
| | | int putPositionZ = 0; |
| | | |
| | | int takeCenterX = 0; |
| | | int takeCenterY = 0; |
| | | int takeCenterZ = 0; |
| | | int putCenterX = 0; |
| | | int putCenterY = 0; |
| | | int putCenterZ = 0; |
| | | |
| | | //1.妿é¿åº¦å¤§äº920ï¼å®½åº¦å¤§äºçäº300ï¼åå¯ä»¥ä½¿ç¨åå¸ç横åå¸å |
| | | if (length > 920) //横ååå¸ |
| | |
| | | putPositionY = (putCenter.X - deviceCenter.Y); |
| | | putPositionZ = point3D.Z; |
| | | } |
| | | |
| | | takeCenterX = takePositionX; |
| | | takeCenterY = takePositionY; |
| | | takeCenterZ = takePositionZ; |
| | | putCenterX = putPositionX; |
| | | putCenterY = putPositionY; |
| | | putCenterZ = putPositionZ; |
| | | |
| | | if (takePositionY <= MinY) |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | if (positionR == 2 && edge == 0) |
| | | if (width > MinWidthOffset && width < MaxWidthOffset) |
| | | { |
| | | takePositionX = width - 530; |
| | | putPositionX = point3D.Y; |
| | | takePositionX = takeCenterX; |
| | | putPositionX = putCenterX; |
| | | } |
| | | else if (positionR == 2 && edge == 1) |
| | | else |
| | | { |
| | | takePositionX = 0; |
| | | putPositionX = point3D.Y + width - 530; |
| | | } |
| | | else if (positionR == 1 && edge == 1) |
| | | { |
| | | if(width > ContainerSize.Width) |
| | | { |
| | | takePositionX = 0; |
| | | putPositionX = point3D.Y; |
| | | } |
| | | else |
| | | if (positionR == 2 && edge == 0) |
| | | { |
| | | takePositionX = width - 530; |
| | | putPositionX = point3D.Y + (width - 530); |
| | | putPositionX = point3D.Y; |
| | | } |
| | | } |
| | | else if (positionR == 1 && edge == 0) |
| | | { |
| | | if (putPositionX < 0) |
| | | else if (positionR == 2 && edge == 1) |
| | | { |
| | | takePositionX = 0; |
| | | putPositionX = point3D.Y; |
| | | putPositionX = point3D.Y + width - 530; |
| | | } |
| | | else if (positionR == 1 && edge == 1) |
| | | { |
| | | if (width > ContainerSize.Width) |
| | | { |
| | | takePositionX = 0; |
| | | putPositionX = point3D.Y; |
| | | } |
| | | else |
| | | { |
| | | takePositionX = width - 530; |
| | | putPositionX = point3D.Y + (width - 530); |
| | | } |
| | | } |
| | | else if (positionR == 1 && edge == 0) |
| | | { |
| | | if (putPositionX < 0) |
| | | { |
| | | takePositionX = 0; |
| | | putPositionX = point3D.Y; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | PutPositionX = putPositionX, |
| | | PutPositionY = putPositionY, |
| | | PutPositionZ = putPositionZ, |
| | | TakeCenterPositionX = takeCenter.X, |
| | | TakeCenterPositionY = takeCenter.Y, |
| | | TakeCenterPositionZ = takeCenter.Z, |
| | | PutCenterPositionX = putCenter.X, |
| | | PutCenterPositionY = putCenter.Y, |
| | | PutCenterPositionZ = putCenter.Z, |
| | | TakeCenterPositionX = takeCenterX, |
| | | TakeCenterPositionY = takeCenterY, |
| | | TakeCenterPositionZ = takeCenterZ, |
| | | PutCenterPositionX = putCenterX, |
| | | PutCenterPositionY = putCenterY, |
| | | PutCenterPositionZ = putCenterZ, |
| | | PositionX = point3D.X, |
| | | PositionY = point3D.Y, |
| | | PositionZ = point3D.Z |
| | | PositionZ = point3D.Z, |
| | | Edge = edge, |
| | | }; |
| | | |
| | | |
| | | if (!IsPositionValid(taskPosition)) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | return taskPosition; |
| | | } |
| | | } |