public static Sprite CreatePreview(Object obj, TakeSnapshot takeSnapshot)
        {
            if (takeSnapshot == null)
            {
                return(null);
            }
            if (obj is GameObject)
            {
                GameObject go      = (GameObject)obj;
                Sprite     preview = TakeSnapshot(go, takeSnapshot);
                return(preview);
            }
            else if (obj is Material)
            {
                GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                sphere.transform.position = Vector3.zero;

                MeshRenderer renderer = sphere.GetComponent <MeshRenderer>();
                renderer.sharedMaterial = (Material)obj;

                Sprite preview = TakeSnapshot(sphere, takeSnapshot);

                DestroyImmediate(sphere);
                return(preview);
            }
            return(null);
        }
        private static Sprite TakeSnapshot(GameObject prefab, TakeSnapshot takeSnapshot)
        {
            GameObject obj = prefab;

            if (prefab.GetComponentsInChildren <ExposeToEditor>().Length > 0)
            {
                bool isActive = prefab.activeSelf;
                prefab.SetActive(false);
                obj = Instantiate(prefab);
                ExposeToEditor[] componentsToDestroy = obj.GetComponentsInChildren <ExposeToEditor>();
                for (int i = 0; i < componentsToDestroy.Length; ++i)
                {
                    DestroyImmediate(componentsToDestroy[i]);
                }
                obj.SetActive(true);
                prefab.SetActive(isActive);
            }

            takeSnapshot.TargetPrefab = obj;
            Sprite result = takeSnapshot.Run();

            if (obj != prefab)
            {
                Destroy(obj);
            }
            return(result);
        }
        private void OnTakeSnapshot(TakeSnapshot msg)
        {
            string          htmlCode;
            HttpWebRequest  request  = (HttpWebRequest)WebRequest.Create(_uriAddress);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader    sr       = new StreamReader(response.GetResponseStream());

            htmlCode = sr.ReadToEnd();

            string fileName = Path.Combine(_snapshotBasePath, msg.Id + "_" + DateTime.UtcNow.ToString("yyyyMMddHHmmss") + ".jpg");

            var documentMsg = new TakeSnapshotCompleted(msg.Id, fileName);

            Sender.Tell(documentMsg);

            if (!Directory.Exists(_snapshotBasePath))
            {
                Directory.CreateDirectory(_snapshotBasePath);
            }

            HtmlToImageConverter htmlToImageConv = new NReco.ImageGenerator.HtmlToImageConverter();

            try
            {
                byte[] jpegBytes = htmlToImageConv.GenerateImage(htmlCode, ImageFormat.Jpeg);
                File.WriteAllBytes(fileName, jpegBytes);
            }
            catch (Exception exc)
            {
                throw new GenerateSnapshotException(fileName);
            }

            Context.Parent.Tell(documentMsg);
        }
Exemple #4
0
        protected override void Awake()
        {
            base.Awake();

            IOC.Register <IRTE>(this);
            IOC.RegisterFallback(this);

            ExposeToEditor[] editorObjects = ExposeToEditor.FindAll(this, ExposeToEditorObjectType.Undefined, false).Select(go => go.GetComponent <ExposeToEditor>()).ToArray();
            for (int i = 0; i < editorObjects.Length; ++i)
            {
                editorObjects[i].ObjectType = ExposeToEditorObjectType.EditorMode;
            }

            Tools.SnappingMode          = SnappingMode.BoundingBox;
            IsOpened                    = !IsInPlayMode;
            PlaymodeStateChanged       += OnPlaymodeStateChanged;
            IsOpenedChanged            += OnIsOpenedChanged;
            Selection.SelectionChanged += OnRuntimeSelectionChanged;
            Tools.ToolChanged          += OnRuntimeToolChanged;
            Tools.PivotRotationChanged += OnPivotRotationChanged;
            Undo.UndoCompleted         += OnUndoCompleted;
            Undo.RedoCompleted         += OnRedoCompleted;
            Undo.StateChanged          += OnUndoRedoStateChanged;

            TransformPanel.SetActive(Selection.activeTransform != null);
            if (Prefabs != null && PrefabsPanel != null && PrefabPresenter != null)
            {
                Prefabs = Prefabs.Where(p => p != null).ToArray();
                for (int i = 0; i < Prefabs.Length; ++i)
                {
                    GameObject presenter = Instantiate(PrefabPresenter);
                    presenter.transform.SetParent(PrefabsPanel.transform);
                    presenter.transform.position   = Vector3.zero;
                    presenter.transform.localScale = Vector3.one;

                    InstantiatePrefab instantiatePrefab = presenter.GetComponentInChildren <InstantiatePrefab>();
                    if (instantiatePrefab != null)
                    {
                        instantiatePrefab.Prefab = Prefabs[i];
                    }
                    TakeSnapshot takeSnapshot = presenter.GetComponentInChildren <TakeSnapshot>();
                    if (takeSnapshot != null)
                    {
                        takeSnapshot.TargetPrefab = Prefabs[i];
                    }
                }
            }
        }
Exemple #5
0
        private void Awake()
        {
            Instance = this;

            ExposeToEditor[] editorObjects = ExposeToEditor.FindAll(ExposeToEditorObjectType.Undefined, false).Select(go => go.GetComponent <ExposeToEditor>()).ToArray();
            for (int i = 0; i < editorObjects.Length; ++i)
            {
                editorObjects[i].ObjectType = ExposeToEditorObjectType.EditorMode;
            }

            RuntimeTools.SnappingMode                      = SnappingMode.BoundingBox;
            RuntimeEditorApplication.IsOpened              = !IsInPlayMode;
            RuntimeEditorApplication.SceneCameras          = new[] { EditorCamera };
            RuntimeEditorApplication.PlaymodeStateChanged += OnPlaymodeStateChanged;
            RuntimeEditorApplication.IsOpenedChanged      += OnIsOpenedChanged;
            RuntimeSelection.SelectionChanged             += OnRuntimeSelectionChanged;
            RuntimeTools.ToolChanged          += OnRuntimeToolChanged;
            RuntimeTools.PivotRotationChanged += OnPivotRotationChanged;
            RuntimeUndo.UndoCompleted         += OnUndoCompleted;
            RuntimeUndo.RedoCompleted         += OnRedoCompleted;
            RuntimeUndo.StateChanged          += OnUndoRedoStateChanged;

            TransformPanel.SetActive(RuntimeSelection.activeTransform != null);
            if (Prefabs != null && PrefabsPanel != null && PrefabPresenter != null)
            {
                Prefabs = Prefabs.Where(p => p != null).ToArray();
                for (int i = 0; i < Prefabs.Length; ++i)
                {
                    GameObject presenter = Instantiate(PrefabPresenter);
                    presenter.transform.SetParent(PrefabsPanel.transform);
                    presenter.transform.position   = Vector3.zero;
                    presenter.transform.localScale = Vector3.one;

                    InstantiatePrefab instantiatePrefab = presenter.GetComponentInChildren <InstantiatePrefab>();
                    if (instantiatePrefab != null)
                    {
                        instantiatePrefab.Prefab = Prefabs[i];
                    }
                    TakeSnapshot takeSnapshot = presenter.GetComponentInChildren <TakeSnapshot>();
                    if (takeSnapshot != null)
                    {
                        takeSnapshot.TargetPrefab = Prefabs[i];
                    }
                }
            }
        }
        private void OnTakeSnapshot(TakeSnapshot msg)
        {
            IActorRef        snapshotActorRef;
            SnapshotActorRef snapshotActorRefItem;

            if (_snapshots.Any(wc => !wc.IsBusy))
            {
                snapshotActorRefItem = _snapshots.First(wc => !wc.IsBusy);
            }
            else
            {
                snapshotActorRefItem = new SnapshotActorRef(msg.Uri);
                _snapshots.Add(snapshotActorRefItem);
            }
            snapshotActorRef = snapshotActorRefItem.ActorReference;

            snapshotActorRefItem.SetAsBusy();

            snapshotActorRef.Forward(new TakeSnapshot(msg.Uri, snapshotActorRefItem.Id));
        }
        private IEnumerator CoSetIcon()
        {
            yield return(new WaitForEndOfFrame());

            if ((m_resrouceType & ProjectItemType.Resource) != 0)
            {
                Image      image = GetComponentInChildren <Image>();
                GameObject go    = m_resource as GameObject;
                if (go != null && m_editor != null && m_editor.ProjectManager.IsResource(go))
                {
                    if (go.GetComponentInChildren <MeshRenderer>() || go.GetComponentInChildren <SkinnedMeshRenderer>())
                    {
                        TakeSnapshot takeSnapshot = GetComponentInChildren <TakeSnapshot>();
                        takeSnapshot.Scale = new Vector3(.9f, .9f, .9f);
                        image.sprite       = CreatePreview(m_resource, takeSnapshot);
                    }
                    else
                    {
                        image.sprite = Default;
                    }
                }
                else if (m_resource is Material)
                {
                    Material material = (Material)m_resource;
                    Shader   shader   = material.shader;
                    if (shader != null && shader.name.StartsWith("Particles/"))
                    {
                        material.shader = Shader.Find("Unlit/Texture");

                        TakeSnapshot takeSnapshot = GetComponentInChildren <TakeSnapshot>();
                        image.sprite = CreatePreview(m_resource, takeSnapshot);

                        material.shader = shader;
                    }
                    else
                    {
                        TakeSnapshot takeSnapshot = GetComponentInChildren <TakeSnapshot>();
                        image.sprite = CreatePreview(m_resource, takeSnapshot);
                    }
                }
                else if (m_resource is Texture2D)
                {
                    Texture2D texture = (Texture2D)m_resource;
                    Sprite    sprite  = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f), 100, 0, SpriteMeshType.FullRect, new Vector4(5, 5, 5, 5));
                    image.sprite = sprite;
                }
                else if (m_resource is Sprite)
                {
                    image.sprite = (Sprite)m_resource;
                }
                else
                {
                    image.sprite = Default;
                }
            }
            else
            {
                Image image = GetComponentInChildren <Image>();
                if (m_resrouceType == ProjectItemType.Folder)
                {
                    image.sprite = Folder;
                }
                else if (m_resrouceType == ProjectItemType.ExposedFolder)
                {
                    image.sprite = ExposedFolder;
                }
                else if (m_resrouceType == ProjectItemType.Scene)
                {
                    image.sprite = Scene;
                }
                else if (m_resrouceType == ProjectItemType.None)
                {
                    image.sprite = None;
                }
            }

            yield break;
        }
 public OutputValues TakeSnapshotID(int proxyClientId, string condition)
 {
     return(TakeSnapshot.TakeSnapshotID(proxyClientId, condition));
 }
Exemple #9
0
 private void OnTakeSnapshot(TakeSnapshot msg)
 {
     _webCamActor.Forward(msg);
 }