Example #1
0
        public ScanWorkPacket(Vector3 centerOfVoxelBlob, ScanningCamera c)
        {
            image  = new BitArray(c.mostRecentImage);
            width  = c.imageWidth;
            height = c.imageHeight;

            position                 = c.worldPosition + centerOfVoxelBlob;
            cameraIntrinsics         = c.intrinsics.ToArray();
            worldToCameraRotation    = c.worldToCameraRotation.ToArray();
            worldToCameraTranslation = c.worldToCameraTranslation.ToArray();
        }
Example #2
0
    void SaveIntrinsics(string cameraPosition, ScanningCamera aCam)
    {
        for (int i = 0; i < 3; i++)
        {
            PlayerPrefs.SetFloat(cameraPosition + kTranslation + i,
                                 aCam.worldToCameraTranslation[i, 0]);

            for (int j = 0; j < 3; j++)
            {
                PlayerPrefs.SetFloat(cameraPosition + kRotation + i + j,
                                     aCam.worldToCameraRotation[i, j]);
                PlayerPrefs.SetFloat(cameraPosition + kIntrinsics + i + j,
                                     aCam.intrinsics[i, j]);
            }
        }
    }
Example #3
0
    void LoadIntrinsics(string cameraPosition, ScanningCamera aCam)
    {
        aCam.worldToCameraTranslation = new Matrix(3, 1);
        aCam.worldToCameraRotation    = new Matrix(3, 3);
        aCam.intrinsics = new Matrix(3, 3);
        for (int i = 0; i < 3; i++)
        {
            aCam.worldToCameraTranslation[i, 0] = PlayerPrefs.GetFloat(
                cameraPosition + kTranslation + i);

            for (int j = 0; j < 3; j++)
            {
                aCam.worldToCameraRotation[i, j] = PlayerPrefs.GetFloat(
                    cameraPosition + kRotation + i + j);
                aCam.intrinsics[i, j] = PlayerPrefs.GetFloat(
                    cameraPosition + kIntrinsics + i + j);
            }
        }
    }
Example #4
0
    /// <summary>
    /// Moves the printer to multiple locations so that the chosen camera can find the calibration points
    /// and eventually calibrate itself
    /// </summary>
    /// <returns>The calibration points and calibrate.</returns>
    /// <param name="aCamera">A camera.</param>
    /// <param name="verticalPosition">Vertical position.</param>
    IEnumerator FindCalibrationPointsAndCalibrate(ScanningCamera aCamera,
                                                  float verticalPosition)
    {
        yield return(Scheduler.StartCoroutine(aCamera.StartCapturing()));

        scanningView.renderer.material.mainTexture = aCamera.webcamImage;
        yield return(Scheduler.StartCoroutine(aCamera.TakePicture()));

        while (!aCamera.AddPointsFromChessboardPicture(verticalPosition))
        {
            Text.Warning("Attempting to find chessboard in another picture...");
            yield return(Scheduler.StartCoroutine(aCamera.TakePicture()));
        }

        int picturesToTake = Mathf.FloorToInt(ScanningCamera.kNumberOfPicturesPerCameraMm / ScanningCamera.kCalibrationVertMoveMm) - 1;

        for (int i = 0; i < picturesToTake; ++i)
        {
            // Move to next position
            pc.BeginMotorChanges(m_workingPrinter);
            pc.MoveVerticallyBy(-ScanningCamera.kCalibrationVertMoveMm, Change.Execute);
            pc.EndMotorChanges();
            verticalPosition += ScanningCamera.kCalibrationVertMoveMm;

            yield return(Scheduler.StartCoroutine(pc.WaitUntilDoneMoving()));

            yield return(new WaitSeconds(1f));

            yield return(Scheduler.StartCoroutine(aCamera.TakePicture()));

            while (!aCamera.AddPointsFromChessboardPicture(verticalPosition))
            {
                yield return(Scheduler.StartCoroutine(aCamera.TakePicture()));
            }
            yield return(null);
        }

        aCamera.Stop();
        yield return(Scheduler.StartCoroutine(aCamera.CalibratePosition()));
    }