Example #1
0
 private void OnEnable()
 {
     if (!EasyARController.Initialized)
     {
         EasyARController.GlobalInitialization();
     }
     outputPathDir = Application.streamingAssetsPath;
 }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
                }
            }
        }