/// <summary> /// 与えられたエンコーダ座標系の地点から最も近いグリッドマーク情報を取得します。 /// </summary> /// <param name="point">エンコーダ座標系の座標</param> /// <returns>最も近いグッドマークをエンコーダ座標系で</returns> public GridMark GetTheNearestGridMark(Vector3 encoderPoint) { GridParameter gridParam = parameterManager.GridParameter; if (gridParam.LoadedGridOriginalFine == false) { throw new Exception("null"); } GridMark retval = new GridMark(); Vector2 pmover = new Vector2(); //Vector2 gmover = new Vector2(); Vector2 gstage = new Vector2(); try { double[,] gridOriginalFineX = gridParam.GridOriginalFineX; double[,] gridOriginalFineY = gridParam.GridOriginalFineY; double minDistance = 99999999.9; for (int ix = 0; ix < gridOriginalFineX.GetLength(0); ++ix) { for (int iy = 0; iy < gridOriginalFineX.GetLength(1); ++iy) { double distanceX = gridOriginalFineX[ix, iy] - encoderPoint.X; double distanceY = gridOriginalFineY[ix, iy] - encoderPoint.Y; double distance = Math.Sqrt(distanceX * distanceX + distanceY * distanceY); if (distance < minDistance) { minDistance = distance; retval.x = gridOriginalFineX[ix, iy]; retval.y = gridOriginalFineY[ix, iy]; } } } } catch { throw new Exception("null"); } //Ipt.MtoG(0, gmover.X, gmover.Y, ref gstage.X, ref gstage.Y); Ipt.GToM("p", retval.x, retval.y, ref gstage.X, ref gstage.Y); retval.x = gstage.X; retval.y = gstage.Y; return(retval); }
/// <summary> /// 座標の補正値を算出して,返します. /// </summary> /// <returns>座標の補正値</returns> private Vector2 calcOffset() { Vector2 offset = new Vector2(); Vector2Int iId = new Vector2Int(); double emX = new double(); double emY = new double(); // 定義されたグリッドマーク数が少ない場合は例外を返す int num = DefinedGridMarkNum; if (num < 2) { throw new Exception("Grid mark data is few(" + num.ToString() + ")."); } if (gridMarks[(int)GridMarkPoint.CenterMiddle].Existed) { offset.X = gridMarks[(int)GridMarkPoint.CenterMiddle].x; offset.Y = gridMarks[(int)GridMarkPoint.CenterMiddle].y; } else { for (int i = 1; i < AllGridMarksNum; ++i) { if (gridMarks[i].Existed) { iId = getXYGridId(i); Ipt.GToM("0", gridOrgX[iId.X, iId.Y], gridOrgY[iId.X, iId.Y], ref emX, ref emY); offset.X += gridMarks[i].x - emX; offset.Y += gridMarks[i].y - emY; } } offset.X /= DefinedGridMarkNum; offset.Y /= DefinedGridMarkNum; } return(offset); }