private void OnEnable() { if (!EasyARController.Initialized) { EasyARController.GlobalInitialization(); } outputPathDir = Application.streamingAssetsPath; }
static void DrawGizmo(ImageTargetController scr, GizmoType gizmoType) { var signature = scr.SourceType.ToString(); switch (scr.SourceType) { case ImageTargetController.DataSource.ImageFile: if (!EasyARController.Settings.GizmoConfig.ImageTarget.EnableImageFile) { return; } signature += scr.ImageFileSource.PathType.ToString() + scr.ImageFileSource.Path; break; case ImageTargetController.DataSource.TargetDataFile: if (!EasyARController.Settings.GizmoConfig.ImageTarget.EnableTargetDataFile) { return; } signature += scr.TargetDataFileSource.PathType.ToString() + scr.TargetDataFileSource.Path; break; case ImageTargetController.DataSource.Target: if (!EasyARController.Settings.GizmoConfig.ImageTarget.EnableTarget) { return; } if (scr.Target != null) { signature += scr.Target.runtimeID().ToString(); } break; default: break; } if (scr.GizmoData.Material == null) { scr.GizmoData.Material = new Material(Shader.Find("EasyAR/ImageTargetGizmo")); } if (scr.GizmoData.Signature != signature) { if (scr.GizmoData.Texture != null) { UnityEngine.Object.DestroyImmediate(scr.GizmoData.Texture); scr.GizmoData.Texture = null; } string path; switch (scr.SourceType) { case ImageTargetController.DataSource.ImageFile: path = scr.ImageFileSource.Path; if (scr.ImageFileSource.PathType == PathType.StreamingAssets) { path = Application.streamingAssetsPath + "/" + scr.ImageFileSource.Path; } if (System.IO.File.Exists(path)) { var sourceData = System.IO.File.ReadAllBytes(path); scr.GizmoData.Texture = new Texture2D(2, 2); scr.GizmoData.Texture.LoadImage(sourceData); scr.GizmoData.Texture.Apply(); UpdateScale(scr, scr.ImageFileSource.Scale); if (SceneView.lastActiveSceneView) { SceneView.lastActiveSceneView.Repaint(); } } break; case ImageTargetController.DataSource.TargetDataFile: path = scr.TargetDataFileSource.Path; if (scr.TargetDataFileSource.PathType == PathType.StreamingAssets) { path = Application.streamingAssetsPath + "/" + scr.TargetDataFileSource.Path; } if (System.IO.File.Exists(path)) { if (!EasyARController.Initialized) { EasyARController.GlobalInitialization(); if (!EasyARController.Initialized) { Debug.LogWarning("EasyAR Sense target data gizmo enabled but license key validation failed, target data gizmo will not show"); } } var sourceData = System.IO.File.ReadAllBytes(path); using (Buffer buffer = Buffer.wrapByteArray(sourceData)) { var targetOptional = ImageTarget.createFromTargetData(buffer); if (targetOptional.OnSome) { using (ImageTarget target = targetOptional.Value) { var imageList = target.images(); if (imageList.Count > 0) { var image = imageList[0]; scr.GizmoData.Texture = new Texture2D(image.width(), image.height(), TextureFormat.R8, false); scr.GizmoData.Texture.LoadRawTextureData(image.buffer().data(), image.buffer().size()); scr.GizmoData.Texture.Apply(); } foreach (var image in imageList) { image.Dispose(); } UpdateScale(scr, target.scale()); if (SceneView.lastActiveSceneView) { SceneView.lastActiveSceneView.Repaint(); } } } } } break; case ImageTargetController.DataSource.Target: if (scr.Target != null) { var imageList = (scr.Target as ImageTarget).images(); if (imageList.Count > 0) { var image = imageList[0]; scr.GizmoData.Texture = new Texture2D(image.width(), image.height(), TextureFormat.R8, false); scr.GizmoData.Texture.LoadRawTextureData(image.buffer().data(), image.buffer().size()); scr.GizmoData.Texture.Apply(); } foreach (var image in imageList) { image.Dispose(); } UpdateScale(scr, (scr.Target as ImageTarget).scale()); if (SceneView.lastActiveSceneView) { SceneView.lastActiveSceneView.Repaint(); } } break; default: break; } if (scr.GizmoData.Texture == null) { scr.GizmoData.Texture = new Texture2D(2, 2); scr.GizmoData.Texture.LoadImage(new byte[0]); scr.GizmoData.Texture.Apply(); } scr.GizmoData.Signature = signature; } if (scr.GizmoData.Material && scr.GizmoData.Texture) { scr.GizmoData.Material.SetMatrix("_Transform", scr.transform.localToWorldMatrix); if (scr.GizmoData.Texture.format == TextureFormat.R8) { scr.GizmoData.Material.SetInt("_isRenderGrayTexture", 1); } else { scr.GizmoData.Material.SetInt("_isRenderGrayTexture", 0); } scr.GizmoData.Material.SetFloat("_Ratio", (float)scr.GizmoData.Texture.height / scr.GizmoData.Texture.width); Gizmos.DrawGUITexture(new Rect(0, 0, 1, 1), scr.GizmoData.Texture, scr.GizmoData.Material); } }
private void OnGUI() { if (!EasyARController.Initialized || !string.IsNullOrEmpty(Engine.errorMessage())) { if (GUI.Button(new Rect(20, 20, position.width - 40, 30), "Apply License Key Change")) { Selection.SetActiveObjectWithContext(EasyARController.Settings, null); EasyARController.GlobalInitialization(); } var textStyle = new GUIStyle(EditorStyles.label); textStyle.normal.textColor = Color.red; EditorGUI.LabelField(new Rect(20, 60, position.width - 40, 20), Engine.errorMessage(), textStyle); return; } if (generateType == GenerateType.Image || generateType == GenerateType.ImageList) { if (Event.current.type == EventType.DragUpdated) { foreach (var path in DragAndDrop.paths) { var ext = Path.GetExtension(path).ToLower(); if (ext == ".jpg" || ext == ".png" || ext == ".bmp") { DragAndDrop.visualMode = DragAndDropVisualMode.Generic; break; } } } } var yPosition = 20; EditorGUI.LabelField(new Rect(20, yPosition, 100, 30), "Generate From"); generateType = (GenerateType)EditorGUI.EnumPopup(new Rect(120, yPosition, 100, 30), generateType); yPosition += 30; switch (generateType) { case GenerateType.Image: if (Event.current.type == EventType.DragExited) { imagePaths = string.Empty; foreach (var path in DragAndDrop.paths) { var ext = Path.GetExtension(path).ToLower(); if (ext == ".jpg" || ext == ".png" || ext == ".bmp") { imagePaths = path; if (File.Exists(path)) { targetName = GetNameFromPath(path); } break; } } Repaint(); } GUI.Label(new Rect(20, yPosition, 120, 20), "Image Path"); yPosition += 20; imagePaths = EditorGUI.TextArea(new Rect(20, yPosition, position.width - 40, 30), imagePaths); yPosition += 30 + 30; if (string.IsNullOrEmpty(targetName)) { foreach (var path in imagePaths.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)) { if (File.Exists(path)) { targetName = GetNameFromPath(path); } break; } } targetName = EditorGUI.TextField(new Rect(20, yPosition, position.width - 40, 20), "Name:", targetName); yPosition += 20; targetScale = EditorGUI.FloatField(new Rect(20, yPosition, position.width - 40, 20), "Scale (m):", targetScale); break; case GenerateType.ImageList: if (Event.current.type == EventType.DragExited) { imagePaths = string.Empty; foreach (var path in DragAndDrop.paths) { var ext = Path.GetExtension(path).ToLower(); if (ext == ".jpg" || ext == ".png" || ext == ".bmp") { imagePaths += path + Environment.NewLine; } } Repaint(); } GUI.Label(new Rect(20, yPosition, 120, 20), "Image Paths"); yPosition += 20; imagePaths = EditorGUI.TextArea(new Rect(20, yPosition, position.width - 40, 100), imagePaths); yPosition += 100 + 30; EditorGUI.LabelField(new Rect(20, yPosition, position.width - 40, 20), "Name: (Filename is Used)"); yPosition += 20; targetScale = EditorGUI.FloatField(new Rect(20, yPosition, position.width - 40, 20), "Scale (m):", targetScale); break; case GenerateType.Texture: GUI.Label(new Rect(20, yPosition, 120, 20), "Texture"); yPosition += 20; texture = EditorGUI.ObjectField(new Rect(20, yPosition, 80, 80), texture, typeof(Texture2D), false) as Texture2D; yPosition += 80 + 30; if (!string.IsNullOrEmpty(AssetDatabase.GetAssetPath(texture))) { targetName = GetNameFromPath(AssetDatabase.GetAssetPath(texture)); } targetName = EditorGUI.TextField(new Rect(20, yPosition, position.width - 40, 20), "Name:", targetName); yPosition += 20; targetScale = EditorGUI.FloatField(new Rect(20, yPosition, position.width - 40, 20), "Scale (m):", targetScale); break; default: break; } EditorGUI.LabelField(new Rect(20, position.height - 50 - 40 - 20, 160, 20), "Generate To"); outputPathDir = EditorGUI.TextArea(new Rect(20, position.height - 50 - 40, position.width - 40, 20), outputPathDir); if (GUI.Button(new Rect(20, position.height - 50, position.width - 40, 30), "Generate")) { try { switch (generateType) { case GenerateType.Image: foreach (var path in imagePaths.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)) { CreateTargetFileByByteArray(File.ReadAllBytes(path), targetName); break; } break; case GenerateType.ImageList: foreach (var path in imagePaths.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)) { if (!File.Exists(path)) { continue; } var ext = Path.GetExtension(path).ToLower(); if (ext == ".jpg" || ext == ".png" || ext == ".bmp") { CreateTargetFileByByteArray(File.ReadAllBytes(path), GetNameFromPath(path)); } } break; case GenerateType.Texture: var filePath = AssetDatabase.GetAssetPath(texture); if (filePath.StartsWith("Assets/")) { filePath = filePath.Substring(6); } else { throw new Exception("invalid image file: " + filePath); } var texturePath = Application.dataPath + filePath; CreateTargetFileByByteArray(File.ReadAllBytes(texturePath), targetName); break; default: break; } } catch (Exception e) { Debug.LogError(e.Message); } } }