/// <summary> /// Parses the camera setup from a directory containing an "images" folder with an image dataset from the Stanford Light Field Archive, and saves the parsed setup in this directory. /// </summary> public void ParseCameraSetup() { // Inform of process start. Debug.Log(GeneralToolkit.FormatScriptMessage(this.GetType(), "Started parsing camera setup for an image dataset from the Stanford Light Field Archive located at: " + dataHandler.colorDirectory + ".")); // Get the files in the "images" folder. FileInfo[] fileInfos = GeneralToolkit.GetFilesByExtension(dataHandler.colorDirectory, ".png"); // Determine the pixel resolution of the images. Texture2D tempTex = new Texture2D(1, 1); GeneralToolkit.LoadTexture(fileInfos[0].FullName, ref tempTex); Vector2Int pixelResolution = new Vector2Int(tempTex.width, tempTex.height); DestroyImmediate(tempTex); // Prepare repositioning around center if it is selected. Vector3 meanPos = Vector3.zero; // Reset the camera models to fit the color count. _cameraSetup.ResetCameraModels(); _cameraSetup.cameraModels = new CameraModel[dataHandler.sourceColorCount]; // Iteratively add each camera model to the setup. for (int iter = 0; iter < dataHandler.sourceColorCount; iter++) { CameraModel cameraModel = _cameraSetup.AddCameraModel(iter); // Store the image's pixel resolution in the camera model. cameraModel.pixelResolution = pixelResolution; // Store the image's name in the camera model. FileInfo fileInfo = fileInfos[iter]; cameraModel.SetCameraReferenceIndexAndImageName(cameraModel.cameraReferenceIndex, fileInfo.Name); // Store the image's position in the model. string[] split = fileInfo.Name.Split('_'); float positionY = -GeneralToolkit.ParseFloat(split[split.Length - 3]); float positionX = GeneralToolkit.ParseFloat(split[split.Length - 2]); Vector3 pos = scaleFactor * new Vector3(positionX, positionY, 0); cameraModel.transform.position = pos; meanPos += pos; } // If it is selected, reposition the camera setup around its center position. if (repositionAroundCenter) { meanPos /= dataHandler.sourceColorCount; for (int iter = 0; iter < dataHandler.sourceColorCount; iter++) { CameraModel cameraModel = _cameraSetup.cameraModels[iter]; cameraModel.transform.position = cameraModel.transform.position - meanPos; } } // Temporarily move the color images to a safe location. string tempDirectoryPath = Path.Combine(GeneralToolkit.GetDirectoryBefore(dataHandler.dataDirectory), "temp"); GeneralToolkit.Move(PathType.Directory, dataHandler.colorDirectory, tempDirectoryPath); // Save the camera setup information (this would also have cleared the "images" folder if it was still there). Acquisition.Acquisition.SaveAcquisitionInformation(dataHandler, cameraSetup); // Move the color images back into their original location. GeneralToolkit.Delete(dataHandler.colorDirectory); GeneralToolkit.Move(PathType.Directory, tempDirectoryPath, dataHandler.colorDirectory); // Update the camera models of the setup object. _cameraSetup.FindCameraModels(); // Inform of end of process. Debug.Log(GeneralToolkit.FormatScriptMessage(this.GetType(), "Finished parsing camera setup. Result can be previewed in the Scene view.")); }
/// <summary> /// Returns the package's path. /// </summary> /// <param name="relative"></param> True if the path should be relative to the project folder, false otherwise. /// <returns></returns> The desired path. public static string GetPackagePath(bool relative) { string packagePath = Application.dataPath; #if UNITY_EDITOR PackageReference packageReference = ScriptableObject.CreateInstance <PackageReference>(); MonoScript thisScript = MonoScript.FromScriptableObject(packageReference); packagePath = GeneralToolkit.GetDirectoryBefore(GeneralToolkit.GetDirectoryBefore(GeneralToolkit.GetDirectoryBefore(AssetDatabase.GetAssetPath(thisScript)))); if (relative) { packagePath = GeneralToolkit.ToRelativePath(packagePath); } ScriptableObject.DestroyImmediate(packageReference); #endif //UNITY_EDITOR return(packagePath); }