using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using System;
using System.Collections;
using System.Collections.Generic;
using OpenCVForUnity.CoreModule;
using OpenCVForUnity.VideoioModule;
using OpenCVForUnity.ImgprocModule;
using OpenCVForUnity.UnityUtils;
namespace OpenCVForUnitySample
{
///
/// Utils_GetFilePath Example
/// An example of how to get the readable path of a file in the "StreamingAssets" folder using the Utils class.
///
public class Utils_GetFilePathExample : MonoBehaviour
{
///
/// The file path dropdown.
///
public Dropdown filePathDropdown;
///
/// The refresh toggle.
///
public Toggle refreshToggle;
///
/// The timeout dropdown.
///
public Dropdown timeoutDropdown;
///
/// The get file path button.
///
public Button getFilePathButton;
///
/// The get multiple file paths button.
///
public Button getMultipleFilePathsButton;
///
/// The get file path async button.
///
public Button getFilePathAsyncButton;
///
/// The get multiple file paths async button.
///
public Button getMultipleFilePathsAsyncButton;
///
/// The abort button.
///
public Button abortButton;
///
/// The file path input field.
///
// public InputField filePathInputField;
public Text filePathInputField;
string[] filePathPreset = new string[] {
"768x576_mjpeg.mjpeg",
"/lbpcascade_frontalface.xml",
"calibration_images/left01.jpg",
"xxx"
};
IEnumerator getFilePath_Coroutine;
// Use this for initialization
void Start ()
{
abortButton.interactable = false;
}
private void GetFilePath (string filePath, bool refresh, int timeout)
{
string readableFilePath = Utils.getFilePath (filePath, refresh, timeout);
#if UNITY_WEBGL && !UNITY_EDITOR
Debug.Log ("The Utils.getFilePath() method is not supported on WebGL platform.");
filePathInputField.text = filePathInputField.text + "The Utils.getFilePath() method is not supported on WebGL platform." + "\n";
if (!string.IsNullOrEmpty (readableFilePath)) {
Debug.Log ("completed: " + "readableFilePath=" + readableFilePath);
filePathInputField.text = filePathInputField.text + "completed: " + "readableFilePath=" + readableFilePath;
}
#else
if (string.IsNullOrEmpty (readableFilePath)) {
Debug.LogError ("completed: " + "readableFilePath= " + filePath + " is not loaded. Please copy from “OpenCVForUnity/StreamingAssets/” to “Assets/StreamingAssets/” folder. ");
filePathInputField.text = filePathInputField.text + "completed: " + "readableFilePath= " + filePath + " is not loaded. Please copy from “OpenCVForUnity/StreamingAssets/” to “Assets/StreamingAssets/” folder. " + "\n";
} else {
Debug.Log ("completed: " + "readableFilePath= " + readableFilePath);
filePathInputField.text = filePathInputField.text + "completed: " + "readableFilePath= " + readableFilePath + "\n";
}
#endif
}
private void GetMultipleFilePaths (string[] filePaths, bool refresh, int timeout)
{
string[] readableFilePaths = Utils.getMultipleFilePaths (filePaths, refresh, timeout);
#if UNITY_WEBGL && !UNITY_EDITOR
Debug.Log ("The Utils.getFilePath() method is not supported on WebGL platform.");
filePathInputField.text = filePathInputField.text + "The Utils.getFilePath() method is not supported on WebGL platform." + "\n";
for (int i = 0; i < readableFilePaths.Length; i++) {
if (!string.IsNullOrEmpty (readableFilePaths [i])) {
Debug.Log ("readableFilePath[" + i + "]=" + readableFilePaths [i]);
filePathInputField.text = filePathInputField.text + "readableFilePath[" + i + "]=" + readableFilePaths [i];
}
}
#else
Debug.Log ("allCompleted:" + "\n");
filePathInputField.text = filePathInputField.text + "allCompleted:" + "\n";
for (int i = 0; i < readableFilePaths.Length; i++) {
if (string.IsNullOrEmpty (readableFilePaths [i])) {
Debug.LogError ("readableFilePath[" + i + "]= " + filePaths [i] + " is not loaded. Please copy from “OpenCVForUnity/StreamingAssets/” to “Assets/StreamingAssets/” folder. ");
filePathInputField.text = filePathInputField.text + "readableFilePath[" + i + "]= " + filePaths [i] + " is not loaded. Please copy from “OpenCVForUnity/StreamingAssets/” to “Assets/StreamingAssets/” folder. " + "\n";
} else {
Debug.Log ("readableFilePath[" + i + "]= " + readableFilePaths [i]);
filePathInputField.text = filePathInputField.text + "readableFilePath[" + i + "]= " + readableFilePaths [i] + "\n";
}
}
#endif
}
private void GetFilePathAsync (string filePath, bool refresh, int timeout)
{
HideButton ();
getFilePath_Coroutine = Utils.getFilePathAsync (filePath, (result) => { // completed callback
getFilePath_Coroutine = null;
ShowButton ();
string readableFilePath = result;
if (string.IsNullOrEmpty (readableFilePath)) {
Debug.LogError ("completed: " + "readableFilePath= " + filePath + " is not loaded. Please copy from “OpenCVForUnity/StreamingAssets/” to “Assets/StreamingAssets/” folder. ");
filePathInputField.text = filePathInputField.text + "completed: " + "readableFilePath= " + filePath + " is not loaded. Please copy from “OpenCVForUnity/StreamingAssets/” to “Assets/StreamingAssets/” folder. " + "\n";
}
Debug.Log ("completed: " + "readableFilePath= " + readableFilePath);
filePathInputField.text = filePathInputField.text + "completed: " + "readableFilePath= " + readableFilePath + "\n";
}, (path, progress) => { // progressChanged callback
Debug.Log ("progressChanged: " + "path= " + path + " progress= " + progress);
filePathInputField.text = filePathInputField.text + "progressChanged: " + "path= " + path + " progress= " + progress + "\n";
}, (path, error, responseCode) => { // errorOccurred callback
getFilePath_Coroutine = null;
ShowButton ();
Debug.Log ("errorOccurred: " + "path= " + path + " error= " + error + " responseCode= " + responseCode);
filePathInputField.text = filePathInputField.text + "errorOccurred: " + "path= " + path + " error= " + error + " responseCode= " + responseCode + "\n";
}, refresh, timeout);
StartCoroutine (getFilePath_Coroutine);
}
private void GetMultipleFilePathsAsync (string[] filePaths, bool refresh, int timeout)
{
HideButton ();
getFilePath_Coroutine = Utils.getMultipleFilePathsAsync (filePaths, (result) => { // allCompleted callback
getFilePath_Coroutine = null;
ShowButton ();
string[] readableFilePaths = result;
Debug.Log ("allCompleted:" + "\n");
filePathInputField.text = filePathInputField.text + "allCompleted:" + "\n";
for (int i = 0; i < readableFilePaths.Length; i++) {
if (string.IsNullOrEmpty (readableFilePaths [i])) {
Debug.LogError ("readableFilePath[" + i + "]= " + filePaths [i] + " is not loaded. Please copy from “OpenCVForUnity/StreamingAssets/” to “Assets/StreamingAssets/” folder. ");
filePathInputField.text = filePathInputField.text + "readableFilePath[" + i + "]= " + filePaths [i] + " is not loaded. Please copy from “OpenCVForUnity/StreamingAssets/” to “Assets/StreamingAssets/” folder. " + "\n";
} else {
Debug.Log ("readableFilePath[" + i + "]= " + readableFilePaths [i]);
filePathInputField.text = filePathInputField.text + "readableFilePath[" + i + "]= " + readableFilePaths [i] + "\n";
}
}
}, (path, progress) => { // progressChanged callback
Debug.Log ("progressChanged: " + "path= " + path + " progress= " + progress);
filePathInputField.text = filePathInputField.text + "progressChanged: " + "path= " + path + " progress= " + progress + "\n";
}, (path, error, responseCode) => { // errorOccurred callback
Debug.Log ("errorOccurred: " + "path= " + path + " error= " + error + " responseCode= " + responseCode);
filePathInputField.text = filePathInputField.text + "errorOccurred: " + "path= " + path + " error= " + error + " responseCode= " + responseCode + "\n";
}, refresh, timeout);
StartCoroutine (getFilePath_Coroutine);
}
private void ShowButton ()
{
getFilePathButton.interactable = true;
getMultipleFilePathsButton.interactable = true;
getFilePathAsyncButton.interactable = true;
getMultipleFilePathsAsyncButton.interactable = true;
abortButton.interactable = false;
}
private void HideButton ()
{
getFilePathButton.interactable = false;
getMultipleFilePathsButton.interactable = false;
getFilePathAsyncButton.interactable = false;
getMultipleFilePathsAsyncButton.interactable = false;
abortButton.interactable = true;
}
// Update is called once per frame
void Update ()
{
}
///
/// Raises the destroy event.
///
void OnDestroy ()
{
if (getFilePath_Coroutine != null) {
StopCoroutine (getFilePath_Coroutine);
((IDisposable)getFilePath_Coroutine).Dispose ();
}
}
///
/// Raises the back button click event.
///
public void OnBackButtonClick ()
{
SceneManager.LoadScene ("OpenCVForUnityExample");
}
///
/// Raises the get file path button click event.
///
public void OnGetFilePathButtonClick ()
{
bool refresh = refreshToggle.isOn;
string[] enumNames = Enum.GetNames (typeof(TimeoutPreset));
int timeout = (int)System.Enum.Parse (typeof(TimeoutPreset), enumNames [timeoutDropdown.value], true);
filePathInputField.text = "";
GetFilePath (filePathPreset [filePathDropdown.value], refresh, timeout);
}
///
/// Raises the get multiple file paths button click event.
///
public void OnGetMultipleFilePathsButtonClick ()
{
bool refresh = refreshToggle.isOn;
string[] enumNames = Enum.GetNames (typeof(TimeoutPreset));
int timeout = (int)System.Enum.Parse (typeof(TimeoutPreset), enumNames [timeoutDropdown.value], true);
filePathInputField.text = "";
GetMultipleFilePaths (filePathPreset, refresh, timeout);
}
///
/// Raises the get file path async button click event.
///
public void OnGetFilePathAsyncButtonClick ()
{
bool refresh = refreshToggle.isOn;
string[] enumNames = Enum.GetNames (typeof(TimeoutPreset));
int timeout = (int)System.Enum.Parse (typeof(TimeoutPreset), enumNames [timeoutDropdown.value], true);
filePathInputField.text = "";
GetFilePathAsync (filePathPreset [filePathDropdown.value], refresh, timeout);
}
///
/// Raises the get multiple file paths async button click event.
///
public void OnGetMultipleFilePathsAsyncButtonClick ()
{
bool refresh = refreshToggle.isOn;
string[] enumNames = Enum.GetNames (typeof(TimeoutPreset));
int timeout = (int)System.Enum.Parse (typeof(TimeoutPreset), enumNames [timeoutDropdown.value], true);
filePathInputField.text = "";
GetMultipleFilePathsAsync (filePathPreset, refresh, timeout);
}
///
/// Raises the abort button click event.
///
public void OnAbortButtonClick ()
{
if (getFilePath_Coroutine != null) {
StopCoroutine (getFilePath_Coroutine);
((IDisposable)getFilePath_Coroutine).Dispose ();
}
ShowButton ();
}
///
/// Raises the on scroll rect value changed event.
///
public void OnScrollRectValueChanged ()
{
if (filePathInputField.text.Length > 10000) {
filePathInputField.text = filePathInputField.text.Substring (filePathInputField.text.Length - 10000);
}
}
public enum TimeoutPreset : int
{
_0 = 0,
_1 = 1,
_10 = 10,
}
}
}