Esempio n. 1
0
        //public bool _IsObjectSelected( object obj )
        //{
        //	return _SelectedObjectsSet.Contains( obj );
        //}

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (!IsHandleCreated || EditorUtility.IsDesignerHosted(this) || EditorAPI.ClosingApplication)
            {
                return;
            }

            UpdateEnabled();

            //check for DisplayHierarchyOfObjectsInSettingsWindow update
            if (settingsDisplayHierarchyOfObjectsInSettingsWindow != ProjectSettings.Get.DisplayHierarchyOfObjectsInSettingsWindow.Value)
            {
                settingsDisplayHierarchyOfObjectsInSettingsWindow = ProjectSettings.Get.DisplayHierarchyOfObjectsInSettingsWindow.Value;

                DocumentWindow documentWindow     = null;
                ESet <object>  selectedObjectsSet = null;
                if (SelectedPanel != null)
                {
                    documentWindow     = SelectedPanel.documentWindow;
                    selectedObjectsSet = SelectedPanel.selectedObjectsSet;
                }

                RemoveCachedPanels();

                if (selectedObjectsSet != null)
                {
                    SelectObjects(documentWindow, selectedObjectsSet);
                }
            }
        }
Esempio n. 2
0
        void ResetColors()
        {
            var undoMultiAction        = new UndoMultiAction();
            var groupsOfObjectToUpdate = new ESet <Component_GroupOfObjects>();

            foreach (var elementSurface in GetObjects <Component_GroupOfObjectsElement>())
            {
                var groupOfObjects = elementSurface.Parent as Component_GroupOfObjects;
                if (groupOfObjects != null)
                {
                    elementSurface.ResetColors(undoMultiAction);
                    groupsOfObjectToUpdate.AddWithCheckAlreadyContained(groupOfObjects);
                }
            }

            foreach (var groupOfObjects in groupsOfObjectToUpdate)
            {
                groupOfObjects.CreateSectors();
            }

            if (undoMultiAction.Actions.Count != 0)
            {
                Provider.DocumentWindow.Document.CommitUndoAction(undoMultiAction);
            }
        }
Esempio n. 3
0
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (!IsHandleCreated || WinFormsUtility.IsDesignerHosted(this) || EditorAPI.ClosingApplication)
            {
                return;
            }
            if (KryptonPage == null || KryptonPage.Parent == null)
            {
                return;
            }

            if (selectedPanel != null)
            {
                selectedPanel.layoutPanel.Enabled = GetEnabledForSelectedPanel();
            }

            //check for DisplayHierarchyOfObjectsInSettingsWindow update
            if (settingsDisplayHierarchyOfObjectsInSettingsWindow != ProjectSettings.Get.DisplayHierarchyOfObjectsInSettingsWindow.Value)
            {
                settingsDisplayHierarchyOfObjectsInSettingsWindow = ProjectSettings.Get.DisplayHierarchyOfObjectsInSettingsWindow.Value;

                DocumentWindow documentWindow     = null;
                ESet <object>  selectedObjectsSet = null;
                if (SelectedPanel != null)
                {
                    documentWindow     = SelectedPanel.documentWindow;
                    selectedObjectsSet = SelectedPanel.selectedObjectsSet;
                }

                RemoveCachedPanels();

                if (selectedObjectsSet != null)
                {
                    SelectObjects(documentWindow, selectedObjectsSet);
                }
            }

            //recreate panels
            if (needRecreatePanels)
            {
                var      documentWindow  = needRecreatePanelsDocumentWindow;
                object[] selectedObjects = needRecreatePanelsSelectObjects;

                needRecreatePanels = false;
                needRecreatePanelsDocumentWindow = null;
                needRecreatePanelsSelectObjects  = null;

                RemoveCachedPanels();

                if (selectedObjects != null)
                {
                    SelectObjects(documentWindow, selectedObjects);
                }
            }
        }
Esempio n. 4
0
			public int GetTextureUsedCount()
			{
				var names = new string[] { BaseColorTexture, MetallicTexture, RoughnessTexture, NormalTexture, DisplacementTexture, AmbientOcclusionTexture, EmissiveTexture, OpacityTexture };

				var added = new ESet<string>();
				foreach( var name in names )
				{
					if( !string.IsNullOrEmpty( name ) )
						added.AddWithCheckAlreadyContained( name );
				}
				return added.Count;
			}
Esempio n. 5
0
        void SelectItemsOfSelectedObjects(DocumentWindow documentWindow)
        {
            var panel = GetPanel(documentWindow);

            if (panel != null)
            {
                var browser = panel.control as ContentBrowser;
                if (browser != null)
                {
                    var items = new List <ContentBrowser.Item>();

                    if (documentWindow.SelectedObjects.Length != 0)
                    {
                        //precreate and expand all parents' items
                        {
                            var allParents = new ESet <Component>();
                            foreach (var obj in documentWindow.SelectedObjects)
                            {
                                var c = obj as Component;
                                if (c != null)
                                {
                                    allParents.AddRangeWithCheckAlreadyContained(c.GetAllParents(false));
                                }
                            }
                            foreach (var c in allParents)
                            {
                                var i = browser.FindItemByContainedObject(c);
                                if (i != null)
                                {
                                    browser.SelectItems(new ContentBrowser.Item[] { i }, true, false);
                                }
                            }
                        }

                        //get items to select
                        foreach (var item in browser.GetAllItems())
                        {
                            var componentItem = item as ContentBrowserItem_Component;
                            if (componentItem != null && documentWindow.SelectedObjectsSet.Contains(componentItem.Component))
                            {
                                items.Add(item);
                            }
                        }
                    }

                    browser.SelectItems(items.ToArray(), items.Count == 1);
                    //browser.SelectItems( items.ToArray() );
                }
            }
        }
Esempio n. 6
0
        void PrepareColorControls()
        {
            List <(string, ColorValue)> colors = new List <(string, ColorValue)>();
            ESet <ColorValue>           used   = new ESet <ColorValue>();

            foreach (var tuple in allColors)
            {
                var name = tuple.Item1;

                var        str   = tuple.Item2;
                int        r     = int.Parse(str.Substring(0, 2), System.Globalization.NumberStyles.HexNumber);
                int        g     = int.Parse(str.Substring(2, 2), System.Globalization.NumberStyles.HexNumber);
                int        b     = int.Parse(str.Substring(4, 2), System.Globalization.NumberStyles.HexNumber);
                ColorValue value = new ColorValue(Color.FromArgb(r, g, b));

                if (!used.Contains(value))
                {
                    used.Add(value);

                    colors.Add((name, value));
                }
            }

            for (int n = 0; n < colors.Count; n++)
            {
                var    tuple = colors[n];
                string name  = tuple.Item1;
                var    value = tuple.Item2;

                var array = Controls.Find($"button{n}", false);
                if (array.Length != 0)
                {
                    Button button = (Button)array[0];

                    button.Enabled   = !readOnly;
                    button.BackColor = value.ToColor();
                    button.Tag       = value;

                    button.Click += Button_Click;

                    //!!!!tooltips. тогда повторяющиеся показывать?
                }
            }

            UpdateButtonCheckImages();
        }
Esempio n. 7
0
        public void SelectObjects(ICollection <object> objects, bool updateForeachDocumentWindowContainers = true, bool updateSettingsWindowSelectObjects = true, bool forceUpdate = false)
        {
            if (objects == null)
            {
                objects = new object[0];
            }

            if (!Equal(objects, SelectedObjects) || forceUpdate)
            {
                var oldSelectedObjects = SelectedObjects;

                selectedObjects = new object[objects.Count];
                objects.CopyTo(selectedObjects, 0);
                selectedObjectsSet = new ESet <object>(selectedObjects);
                //SettingsWindow.Instance._SelectObjects( this, objects );

                //update ForeachDocumentWindowContainers
                if (updateForeachDocumentWindowContainers)
                {
                    var windows = new List <ForeachDocumentWindowContainer>();

                    foreach (var window in EditorForm.Instance.WorkspaceController.GetDockWindows())
                    {
                        var window2 = window as ForeachDocumentWindowContainer;
                        if (window2 != null)
                        {
                            windows.Add(window2);
                        }
                    }

                    foreach (var window in windows)
                    {
                        window.OnDocumentWindowSelectedObjectsChangedByUser(this);
                    }
                }

                //update Settings Window
                if (updateSettingsWindowSelectObjects)
                {
                    SettingsWindowSelectObjects();
                }

                SelectedObjectsChanged?.Invoke(this, oldSelectedObjects);
            }
        }
Esempio n. 8
0
        void ProcessKeySetCurrentItem(int itemIndex)
        {
            Item item;

            if (itemIndex >= 0 && itemIndex < Items.Count)
            {
                item = Items[itemIndex];
            }
            else
            {
                item = null;
            }

            var toSelect = new ESet <Item>(SelectedItems.ToArray());

            if ((ModifierKeys & Keys.Control) == 0 && (ModifierKeys & Keys.Shift) == 0)
            {
                toSelect.Clear();
            }

            if ((ModifierKeys & Keys.Shift) != 0)
            {
                if (CurrentItemIndex != -1 && itemIndex != -1)
                {
                    var from = Math.Min(CurrentItemIndex, itemIndex);
                    var to   = Math.Max(CurrentItemIndex, itemIndex);
                    for (int n = from; n <= to; n++)
                    {
                        toSelect.AddWithCheckAlreadyContained(Items[n]);
                    }
                }
            }

            if (item != null)
            {
                toSelect.AddWithCheckAlreadyContained(item);
            }

            SelectedItems    = toSelect.ToArray();
            CurrentItemIndex = itemIndex;
        }
        //!!!!!
        public void SelectObjects(Component[] objs)
        {
            //!!!!!slowly

            ESet <Component> objsSet = new ESet <Component>(objs);

            List <ContentBrowser.Item> items = new List <ContentBrowser.Item>();

            foreach (var item in componentsBrowser.GetAllItems())
            {
                ContentBrowserItem_Component item2 = item as ContentBrowserItem_Component;
                if (item2 != null)
                {
                    if (objsSet.Contains(item2.Component))
                    {
                        items.Add(item);
                    }
                }
            }

            componentsBrowser.SelectItems(items.ToArray());
        }
Esempio n. 10
0
        void CreateObjects()
        {
            ContentBrowserUtility.AllContentBrowsers_SuspendChildrenChangedEvent();
            ESet <ComponentHierarchyController> controllersToProcessDelayedOperations = new ESet <ComponentHierarchyController>();

            try
            {
                foreach (var obj in Objects)
                {
                    //!!!!?
                    if (obj.Disposed)
                    {
                        continue;
                    }

                    dataToRestore.TryGetValue(obj, out RestoreData data);
                    if (data != null)
                    {
                        dataToRestore.Remove(obj);

                        data.parent.AddComponent(obj, data.insertIndex);

                        if (obj.ParentRoot?.HierarchyController != null)
                        {
                            controllersToProcessDelayedOperations.AddWithCheckAlreadyContained(obj.ParentRoot?.HierarchyController);
                        }
                    }
                }
            }
            finally
            {
                foreach (var c in controllersToProcessDelayedOperations)
                {
                    c.ProcessDelayedOperations();
                }
                ContentBrowserUtility.AllContentBrowsers_ResumeChildrenChangedEvent();
            }
        }
Esempio n. 11
0
        //TODO: return Image. but ovl list item cached image, and we have problems with resize imagelist
        internal string GetImageForListView(string key)
        {
            if (string.IsNullOrEmpty(key))
            {
                key = "Default";
            }

            if (imageListIconsLargeAvailable == null)
            {
                imageListIconsLargeAvailable = new ESet <string>();
                foreach (var name in imageListIconsLarge.Images.Keys)
                {
                    imageListIconsLargeAvailable.AddWithCheckAlreadyContained(name);
                }
            }

            //check availability
            if (!imageListIconsLargeAvailable.Contains(key))
            {
                key = "Default";
            }

            return(key);
        }
Esempio n. 12
0
        private unsafe void ButtonUpdateAlignment_Click(ProcedureUI.Button sender)
        {
            var undoMultiAction        = new UndoMultiAction();
            var groupsOfObjectToUpdate = new ESet <Component_GroupOfObjects>();

            foreach (var element in GetObjects <Component_GroupOfObjectsElement>())
            {
                var groupOfObjects = element.Parent as Component_GroupOfObjects;
                if (groupOfObjects != null)
                {
                    var elementMesh = element as Component_GroupOfObjectsElement_Mesh;
                    if (elementMesh != null)
                    {
                        elementMesh.UpdateAlignment(undoMultiAction);
                        groupsOfObjectToUpdate.AddWithCheckAlreadyContained(groupOfObjects);
                    }

                    var elementSurface = element as Component_GroupOfObjectsElement_Surface;
                    if (elementSurface != null)
                    {
                        elementSurface.UpdateAlignment(undoMultiAction);
                        groupsOfObjectToUpdate.AddWithCheckAlreadyContained(groupOfObjects);
                    }
                }
            }

            foreach (var groupOfObjects in groupsOfObjectToUpdate)
            {
                groupOfObjects.CreateSectors();
            }

            if (undoMultiAction.Actions.Count != 0)
            {
                Provider.DocumentWindow.Document.CommitUndoAction(undoMultiAction);
            }
        }
Esempio n. 13
0
        protected override void OnMouseDown(MouseEventArgs e)
        {
            if (!Focused)
            {
                Focus();
            }

            base.OnMouseDown(e);

            if (e.Button == MouseButtons.Left || e.Button == MouseButtons.Right)
            {
                var itemIndex = GetItemIndexAt(e.Location);
                var item      = itemIndex != -1 ? Items[itemIndex] : null;

                var toSelect = new ESet <Item>(SelectedItems.ToArray());
                if ((ModifierKeys & Keys.Control) == 0 && (ModifierKeys & Keys.Shift) == 0)
                {
                    toSelect.Clear();
                }

                if ((ModifierKeys & Keys.Shift) != 0)
                {
                    if (CurrentItemIndex != -1 && itemIndex != -1)
                    {
                        var from = Math.Min(CurrentItemIndex, itemIndex);
                        var to   = Math.Max(CurrentItemIndex, itemIndex);
                        for (int n = from; n <= to; n++)
                        {
                            toSelect.AddWithCheckAlreadyContained(Items[n]);
                        }
                    }
                }

                if (item != null)
                {
                    toSelect.AddWithCheckAlreadyContained(item);
                }

                SelectedItems    = toSelect.ToArray();
                CurrentItemIndex = itemIndex;
                EnsureVisibleCurrentItem();
            }

            //drag
            if (e.Button == MouseButtons.Left && CanDrag)
            {
                var cursor = Cursor.Position;
                var items  = SelectedItems.ToArray();

                if (items.Length != 0)
                {
                    var item = GetItemAt(PointToClient(cursor));
                    if (item != null && items.Contains(item))
                    {
                        canStartDrag         = true;
                        canStartDragPosition = cursor;
                        canStartDragItems    = items;
                    }
                }
            }
        }
Esempio n. 14
0
        void DeleteObjects()
        {
            ContentBrowserUtility.AllContentBrowsers_SuspendChildrenChangedEvent();
            ESet <ComponentHierarchyController> controllersToProcessDelayedOperations = new ESet <ComponentHierarchyController>();

            List <Component> deleted = new List <Component>();

            try
            {
                foreach (var obj in Objects)
                {
                    var parent = obj.Parent;
                    if (parent != null)
                    {
                        RestoreData data = new RestoreData();
                        data.parent      = parent;
                        data.insertIndex = parent.Components.IndexOf(obj);

                        dataToRestore[obj] = data;

                        obj.RemoveFromParent(true);

                        deleted.Add(obj);

                        if (obj.ParentRoot?.HierarchyController != null)
                        {
                            controllersToProcessDelayedOperations.AddWithCheckAlreadyContained(obj.ParentRoot?.HierarchyController);
                        }
                    }
                }
            }
            finally
            {
                foreach (var c in controllersToProcessDelayedOperations)
                {
                    c.ProcessDelayedOperations();
                }
                ContentBrowserUtility.AllContentBrowsers_ResumeChildrenChangedEvent();
            }

            //update selected objects for document windows
            if (document != null)
            {
                foreach (var window in EditorAPI.GetAllDocumentWindowsOfDocument(document))
                {
                    var  selectedObjects = new ESet <object>(window.SelectedObjectsSet);
                    bool updated         = false;

                    foreach (var obj in deleted)
                    {
                        if (selectedObjects.Remove(obj))
                        {
                            updated = true;
                        }
                    }

                    if (updated)
                    {
                        window.SelectObjects(selectedObjects);
                    }
                }
            }
            //!!!!так?
            //!!!!!!как-то слишком низкоуровнего из-за documentWindow?
            //if( SettingsWindow.Instance != null )
            //{
            //	SettingsWindow.PanelData panel = SettingsWindow.Instance.SelectedPanel;
            //	if( panel != null )
            //	{
            //		var selectedObjects = new ESet<object>( SettingsWindow.Instance.SelectedObjectsSet );

            //		foreach( var obj in deleted )
            //			selectedObjects.Remove( obj );

            //		if( !ESet<object>.IsEqual( selectedObjects, SettingsWindow.Instance.SelectedObjectsSet ) )
            //			SettingsWindow.Instance.SelectObjects( panel.documentWindow, selectedObjects );
            //	}
            //}
        }
        protected override void Viewport_UpdateBeforeOutput(Viewport viewport)
        {
            base.Viewport_UpdateBeforeOutput(viewport);

            //highlight selected mesh geometries, materials
            {
                var geometriesToHighlight = new ESet <Component_MeshGeometry>();
                foreach (var geometry in Import.GetComponents <Component_MeshGeometry>(checkChildren: true))
                {
                    //skip when selected is LOD
                    if (geometry.ParentMesh != null && geometry.ParentMesh.FindParent <Component_Mesh>() == null)
                    {
                        //mesh selected. skip when available only one mesh
                        if (SelectedObjectsSet.Contains(geometry.ParentMesh) && Import.GetComponent("Mesh") == null)
                        {
                            geometriesToHighlight.AddWithCheckAlreadyContained(geometry);
                        }

                        if (SelectedObjectsSet.Contains(geometry))
                        {
                            geometriesToHighlight.AddWithCheckAlreadyContained(geometry);
                        }

                        var material = geometry.Material.Value;
                        if (material != null && SelectedObjectsSet.Contains(material))
                        {
                            geometriesToHighlight.AddWithCheckAlreadyContained(geometry);
                        }
                    }
                }

                foreach (var geometry in geometriesToHighlight)
                {
                    var mesh      = geometry.ParentMesh;
                    var structure = geometry.VertexStructure.Value;
                    var vertices  = geometry.Vertices.Value;
                    var indices   = geometry.Indices.Value;

                    if (structure != null)
                    {
                        structure.GetInfo(out var vertexSize, out var holes);
                        var vertexCount = vertices.Length / vertexSize;

                        try
                        {
                            if (structure.GetElementBySemantic(VertexElementSemantic.Position, out var element) && element.Type == VertexElementType.Float3)
                            {
                                if (vertices != null && indices != null)
                                {
                                    //!!!!кешировать?

                                    var positions = ExtractChannel <Vector3F>(vertices, vertexSize, vertexCount, element.Offset);

                                    Transform transform;
                                    if (!displayObjectTransformBySourceMesh.TryGetValue(mesh, out transform))
                                    {
                                        transform = Transform.Identity;
                                    }
                                    var transformMatrix = transform.ToMatrix4();

                                    viewport.Simple3DRenderer.SetColor(ProjectSettings.Get.SelectedColor);
                                    viewport.Simple3DRenderer.AddTriangles(positions, indices, ref transformMatrix, true, true);
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            Log.Warning(e.Message);
                        }
                    }
                }
            }

            ////total bounds
            //var totalBounds = GetTotalBoundsOfObjectInSpace();
            //if( !totalBounds.IsCleared() )
            //{
            //	viewport.DebugGeometry.SetColor( new ColorValue( 1, 1, 0, 0.5 ) );
            //	viewport.DebugGeometry.AddBounds( totalBounds );
            //}

            //highlight selected objects in space
            {
                var selected = new ESet <Component_ObjectInSpace>();
                foreach (var obj in SelectedObjects)
                {
                    var objectInSpace = obj as Component_ObjectInSpace;
                    if (objectInSpace != null)
                    {
                        selected.Add(objectInSpace);
                    }
                }

                foreach (var obj in selected)
                {
                    var bounds = obj.SpaceBounds.CalculatedBoundingBox;

                    viewport.Simple3DRenderer.SetColor(new ColorValue(0, 1, 0, 0.5));
                    viewport.Simple3DRenderer.AddBounds(bounds);

                    //if( b.BoundingBox.HasValue )
                    //	viewport.DebugGeometry.AddBounds( b.BoundingBox.Value );
                    //if( b.BoundingSphere.HasValue )
                    //	viewport.DebugGeometry.AddSphere( b.BoundingSphere.Value );
                }
            }
        }
        protected override void Viewport_UpdateBeforeOutput(Viewport viewport)
        {
            base.Viewport_UpdateBeforeOutput(viewport);

            if (Mesh != null && needResultCompile)
            {
                Mesh.ResultCompile();
                needResultCompile = false;
            }

            if (Mesh != null && Mesh.Result != null)
            {
                var meshBounds  = Mesh.Result.SpaceBounds;
                var selectedLOD = GetSelectedLOD();

                //center axes
                if (Mesh.EditorDisplayPivot)
                {
                    var sizeInPixels = 35 * DpiHelper.Default.DpiScaleFactor;
                    var size         = viewport.Simple3DRenderer.GetThicknessByPixelSize(Vector3.Zero, sizeInPixels);
                    //var size3 = meshBounds.CalculatedBoundingBox.GetSize();
                    //var size = Math.Max( size3.X, Math.Max( size3.Y, size3.Z ) ) / 20;

                    var thickness  = size / 20;
                    var headHeight = size / 3;
                    var headRadius = headHeight / 3;
                    var alpha      = 1.0;               // 0.5;

                    //viewport.Simple3DRenderer.SetColor( new ColorValue( 1, 0, 0, alpha ), false, true );
                    //viewport.Simple3DRenderer.AddLine( Vector3.Zero, Vector3.XAxis * size );
                    //viewport.Simple3DRenderer.SetColor( new ColorValue( 0, 1, 0, alpha ), false, true );
                    //viewport.Simple3DRenderer.AddLine( Vector3.Zero, Vector3.YAxis * size );
                    //viewport.Simple3DRenderer.SetColor( new ColorValue( 0, 0, 1, alpha ), false, true );
                    //viewport.Simple3DRenderer.AddLine( Vector3.Zero, Vector3.ZAxis * size );

                    viewport.Simple3DRenderer.SetColor(new ColorValue(1, 0, 0, alpha), false);                        //, true );
                    viewport.Simple3DRenderer.AddArrow(Vector3.Zero, Vector3.XAxis * size, headHeight, headRadius, true, thickness);
                    viewport.Simple3DRenderer.SetColor(new ColorValue(0, 1, 0, alpha), false);                        //, true );
                    viewport.Simple3DRenderer.AddArrow(Vector3.Zero, Vector3.YAxis * size, headHeight, headRadius, true, thickness);
                    viewport.Simple3DRenderer.SetColor(new ColorValue(0, 0, 1, alpha), false);                        //, true );
                    viewport.Simple3DRenderer.AddArrow(Vector3.Zero, Vector3.ZAxis * size, headHeight, headRadius, true, thickness);
                }

                //vertex color
                if (Mesh.EditorDisplayVertexColor)
                {
                    var vertices = new Simple3DRenderer.Vertex[selectedLOD.ExtractedVertices.Length];
                    for (int n = 0; n < vertices.Length; n++)
                    {
                        var sourceVertex = selectedLOD.ExtractedVertices[n];

                        var vertex = new Simple3DRenderer.Vertex();
                        vertex.position = sourceVertex.Position;

                        vertex.color = RenderingSystem.ConvertColorValue(ref sourceVertex.Color);
                        //vertex.color = sourceVertex.Color;

                        //vertex.colorInvisibleBehindObjects = sourceVertex.color;
                        vertices[n] = vertex;
                    }

                    viewport.Simple3DRenderer.AddTriangles(vertices, selectedLOD.ExtractedIndices, false, true);
                }

                //triangles
                if (Mesh.EditorDisplayTriangles)
                {
                    //!!!!цвета настраивать в опциях
                    viewport.Simple3DRenderer.SetColor(new ColorValue(0, 0, 1, 0.7));
                    //viewport.DebugGeometry.SetColor( new ColorValue( 0, 0, 1, 0.3 ) );
                    viewport.Simple3DRenderer.AddTriangles(selectedLOD.ExtractedVerticesPositions, selectedLOD.ExtractedIndices, true, false);
                }

                //vertices
                if (Mesh.EditorDisplayVertices)
                {
                    var size3 = meshBounds.CalculatedBoundingBox.GetSize();
                    var scale = (float)Math.Max(size3.X, Math.Max(size3.Y, size3.Z)) / 200;
                    viewport.Simple3DRenderer.SetColor(new ColorValue(1, 0, 0, 0.7));
                    //viewport.DebugGeometry.SetColor( new ColorValue( 0, 1, 0, 0.7 ) );
                    foreach (var vertex in selectedLOD.ExtractedVerticesPositions)
                    {
                        viewport.Simple3DRenderer.AddLineThin(vertex - new Vector3F(scale, 0, 0), vertex + new Vector3F(scale, 0, 0));
                        viewport.Simple3DRenderer.AddLineThin(vertex - new Vector3F(0, scale, 0), vertex + new Vector3F(0, scale, 0));
                        viewport.Simple3DRenderer.AddLineThin(vertex - new Vector3F(0, 0, scale), vertex + new Vector3F(0, 0, scale));
                    }
                }

                //normals
                if (Mesh.EditorDisplayNormals)
                {
                    var size3 = meshBounds.CalculatedBoundingBox.GetSize();
                    var scale = (float)Math.Max(size3.X, Math.Max(size3.Y, size3.Z)) / 30;
                    viewport.Simple3DRenderer.SetColor(new ColorValue(0, 1, 0, 0.7));
                    foreach (var vertex in selectedLOD.ExtractedVertices)
                    {
                        if (vertex.Normal != Vector3F.Zero)
                        {
                            viewport.Simple3DRenderer.AddLineThin(vertex.Position, vertex.Position + vertex.Normal * scale);
                        }
                    }
                }

                //tangents
                if (Mesh.EditorDisplayTangents)
                {
                    var size3 = meshBounds.CalculatedBoundingBox.GetSize();
                    var scale = (float)Math.Max(size3.X, Math.Max(size3.Y, size3.Z)) / 30;
                    viewport.Simple3DRenderer.SetColor(new ColorValue(1, 0, 0, 0.7));
                    foreach (var vertex in selectedLOD.ExtractedVertices)
                    {
                        if (vertex.Tangent != Vector4F.Zero)
                        {
                            viewport.Simple3DRenderer.AddLineThin(vertex.Position, vertex.Position + vertex.Tangent.ToVector3F() * scale);
                        }
                    }
                }

                //binormals
                if (Mesh.EditorDisplayBinormals)
                {
                    var size3 = meshBounds.CalculatedBoundingBox.GetSize();
                    var scale = (float)Math.Max(size3.X, Math.Max(size3.Y, size3.Z)) / 30;
                    viewport.Simple3DRenderer.SetColor(new ColorValue(0, 0, 1, 0.7));
                    foreach (var vertex in selectedLOD.ExtractedVertices)
                    {
                        if (vertex.Normal != Vector3F.Zero && vertex.Tangent != Vector4F.Zero)
                        {
                            var v = Vector3.Cross(vertex.Tangent.ToVector3F(), vertex.Normal) * vertex.Tangent.W;
                            viewport.Simple3DRenderer.AddLineThin(vertex.Position, vertex.Position + v * scale);
                        }
                    }
                }

                //collision
                if (Mesh.EditorDisplayCollision)
                {
                    var collision = Mesh.GetComponent("Collision Definition") as Component_RigidBody;
                    if (collision != null)
                    {
                        ColorValue color = new ColorValue(0, 0, 1, 0.7);
                        //if( MotionType.Value == MotionTypeEnum.Static )
                        //	color = ProjectSettings.Get.SceneShowPhysicsStaticColor;
                        //else if( rigidBody.IsActive )
                        //	color = ProjectSettings.Get.SceneShowPhysicsDynamicActiveColor;
                        //else
                        //	color = ProjectSettings.Get.SceneShowPhysicsDynamicInactiveColor;
                        viewport.Simple3DRenderer.SetColor(color, color * ProjectSettings.Get.HiddenByOtherObjectsColorMultiplier);

                        int verticesRendered = 0;
                        foreach (var shape in collision.GetComponents <Component_CollisionShape>(false, true, true))
                        {
                            shape.Render(viewport, Transform.Identity, false, ref verticesRendered);
                        }
                    }
                }

                //update PlayAnimation
                if (!string.IsNullOrEmpty(Mesh.EditorPlayAnimation))
                {
                    var animation = Mesh.ParentRoot.GetComponentByPath(Mesh.EditorPlayAnimation) as Component_Animation;
                    skeletonAnimationController.PlayAnimation = animation;
                    //viewport.CanvasRenderer.AddText( animation != null ? animation.ToString() : "null", new Vec2( .5, .5 ) );
                }
                else
                {
                    skeletonAnimationController.PlayAnimation = null;
                }

                //skeleton
                if (Mesh.EditorDisplaySkeleton)
                {
                    var skeleton = Mesh.Skeleton.Value;
                    if (skeleton != null)
                    {
                        var color = new ColorValue(0, 0.5, 1, 0.7);
                        viewport.Simple3DRenderer.SetColor(color, color * ProjectSettings.Get.HiddenByOtherObjectsColorMultiplier);

                        var skeletonArrows = skeletonAnimationController.GetCurrentAnimatedSkeletonArrows();
                        if (skeletonArrows != null)
                        {
                            foreach (var arrow in skeletonArrows)
                            {
                                viewport.Simple3DRenderer.AddArrow(arrow.Start, arrow.End);
                            }
                        }
                        else
                        {
                            foreach (var bone in skeleton.GetBones())
                            {
                                var pos    = bone.Transform.Value.Position;
                                var parent = bone.Parent as Component_SkeletonBone;
                                if (parent != null)
                                {
                                    var from = parent.Transform.Value.Position;

                                    viewport.Simple3DRenderer.AddArrow(from, pos);
                                }
                            }
                        }
                    }
                }

                //bounds
                if (Mesh.EditorDisplayBounds)
                {
                    viewport.Simple3DRenderer.SetColor(new ColorValue(1, 1, 0, 0.7));
                    //viewport.DebugGeometry.SetColor( new ColorValue( 1, 1, 0, 0.5 ) );
                    if (meshBounds.BoundingBox.HasValue)
                    {
                        viewport.Simple3DRenderer.AddBounds(meshBounds.BoundingBox.Value);
                    }
                    if (meshBounds.BoundingSphere.HasValue)
                    {
                        viewport.Simple3DRenderer.AddSphere(meshBounds.BoundingSphere.Value);
                    }
                }

                //select triangle
                int triangleIndex = -1;
                if (!viewport.MouseRelativeMode)
                {
                    var ray = viewport.CameraSettings.GetRayByScreenCoordinates(viewport.MousePosition);
                    if (selectedLOD.RayCast(ray, Component_Mesh.CompiledData.RayCastMode.BruteforceNoCache, false, out double scale2, out int triangleIndex2))
                    {
                        triangleIndex = triangleIndex2;
                    }
                }

                //selected triangle data
                if (triangleIndex != -1)
                {
                    var vertices = selectedLOD.ExtractedVertices;
                    var indices  = selectedLOD.ExtractedIndices;

                    int      index0       = indices[triangleIndex * 3 + 0];
                    int      index1       = indices[triangleIndex * 3 + 1];
                    int      index2       = indices[triangleIndex * 3 + 2];
                    var      showVertices = new int[] { index0, index1, index2 };
                    Vector3F p0           = vertices[index0].Position;
                    Vector3F p1           = vertices[index1].Position;
                    Vector3F p2           = vertices[index2].Position;

                    ////draw connected triangles
                    //{
                    //	ESet<Vector3I> triangles = new ESet<Vector3I>();

                    //	//find triangles with indexes
                    //	for( int nTriangle = 0; nTriangle < indices.Length / 3; nTriangle++ )
                    //	{
                    //		var i0 = indices[ nTriangle * 3 + 0 ];
                    //		var i1 = indices[ nTriangle * 3 + 1 ];
                    //		var i2 = indices[ nTriangle * 3 + 2 ];

                    //		int c = 0;
                    //		if( index0 == i0 || index1 == i0 || index2 == i0 )
                    //			c++;
                    //		if( index0 == i1 || index1 == i1 || index2 == i1 )
                    //			c++;
                    //		if( index0 == i2 || index1 == i2 || index2 == i2 )
                    //			c++;

                    //		//if( index0 == i0 || index0 == i1 || index0 == i2 ||
                    //		//	index1 == i0 || index1 == i1 || index1 == i2 ||
                    //		//	index2 == i0 || index2 == i1 || index2 == i2 )
                    //		if( c == 2 )
                    //		{
                    //			Vector3I triangle = new Vector3I( i0, i1, i2 );
                    //			if( triangle[ 1 ] < triangle[ 0 ] ) { var v = triangle[ 0 ]; triangle[ 0 ] = triangle[ 1 ]; triangle[ 1 ] = v; }
                    //			if( triangle[ 2 ] < triangle[ 0 ] ) { var v = triangle[ 0 ]; triangle[ 0 ] = triangle[ 2 ]; triangle[ 2 ] = v; }
                    //			if( triangle[ 2 ] < triangle[ 1 ] ) { var v = triangle[ 1 ]; triangle[ 1 ] = triangle[ 2 ]; triangle[ 2 ] = v; }

                    //			triangles.AddWithCheckAlreadyContained( triangle );
                    //		}
                    //	}

                    //	foreach( var triangle in triangles )
                    //	{
                    //		var v0 = vertices[ triangle[ 0 ] ].Position;
                    //		var v1 = vertices[ triangle[ 1 ] ].Position;
                    //		var v2 = vertices[ triangle[ 2 ] ].Position;

                    //		//viewport.Simple3DRenderer.SetColor( new ColorValue( 0, 0, 1, 0.3 ) );
                    //		//viewport.Simple3DRenderer.AddTriangles( new Vector3F[] { v0, v1, v2 }, Matrix4.Identity, false, false );
                    //		viewport.Simple3DRenderer.SetColor( new ColorValue( 0, 0, 1 ) );
                    //		viewport.Simple3DRenderer.AddLine( v0, v1 );
                    //		viewport.Simple3DRenderer.AddLine( v1, v2 );
                    //		viewport.Simple3DRenderer.AddLine( v2, v0 );
                    //	}
                    //}

                    //draw triangle
                    {
                        viewport.Simple3DRenderer.SetColor(new ColorValue(1, 1, 0, 0.3));
                        viewport.Simple3DRenderer.AddTriangles(new Vector3F[] { p0, p1, p2 }, false, false);
                        viewport.Simple3DRenderer.SetColor(new ColorValue(1, 1, 0));
                        viewport.Simple3DRenderer.AddLine(p0, p1);
                        viewport.Simple3DRenderer.AddLine(p1, p2);
                        viewport.Simple3DRenderer.AddLine(p2, p0);
                    }

                    float maxLength    = Math.Max((p0 - p1).Length(), Math.Max((p1 - p2).Length(), (p2 - p0).Length()));
                    float arrowLength  = maxLength / 5;
                    float vertexRadius = maxLength / 40;

                    //!!!!можно еще буквами подписать как в transform tool
                    //normals, tangents
                    foreach (int nVertex in showVertices)
                    {
                        var      v = vertices[nVertex];
                        Vector3F p = v.Position;

                        if (v.Normal != Vector3F.Zero)
                        {
                            viewport.Simple3DRenderer.SetColor(new ColorValue(0, 0, 1));
                            viewport.Simple3DRenderer.AddArrow(p, p + v.Normal * arrowLength, 0, 0, true);

                            if (v.Tangent != Vector4F.Zero)
                            {
                                viewport.Simple3DRenderer.SetColor(new ColorValue(1, 0, 0));
                                viewport.Simple3DRenderer.AddArrow(p, p + v.Tangent.ToVector3F() * arrowLength, 0, 0, true);

                                var bitangent = Vector3F.Cross(v.Tangent.ToVector3F(), v.Normal) * v.Tangent.W;
                                viewport.Simple3DRenderer.SetColor(new ColorValue(0, 1, 0));
                                viewport.Simple3DRenderer.AddArrow(p, p + bitangent * arrowLength, 0, 0, true);
                            }
                        }
                    }

                    //positions
                    {
                        viewport.Simple3DRenderer.SetColor(new ColorValue(1, 0, 0));
                        //SimpleMeshGenerator.GenerateSphere( vertexRadius, 10, 10, false, out Vec3F[] spherePositions, out int[] sphereIndices );

                        foreach (int nVertex in showVertices)
                        {
                            var      v = vertices[nVertex];
                            Vector3F p = v.Position;
                            viewport.Simple3DRenderer.AddSphere(new Sphere(p, vertexRadius), 10, true);
                            //viewport.DebugGeometry.AddTriangles( spherePositions, sphereIndices, Mat4.FromTranslate( p ), false, false );
                        }
                    }
                }

                //highlight selected mesh geometries, materials
                if (GetSelectedLODIndex() == 0)
                {
                    var geometriesToHighlight = new ESet <Component_MeshGeometry>();
                    foreach (var geometry in Mesh.GetComponents <Component_MeshGeometry>())                    // checkChildren: true ) )
                    {
                        if (SelectedObjectsSet.Contains(geometry))
                        {
                            geometriesToHighlight.AddWithCheckAlreadyContained(geometry);
                        }

                        var material = geometry.Material.Value;
                        if (material != null && SelectedObjectsSet.Contains(material))
                        {
                            geometriesToHighlight.AddWithCheckAlreadyContained(geometry);
                        }
                    }

                    foreach (var geometry in geometriesToHighlight)
                    {
                        var structure = geometry.VertexStructure.Value;
                        var vertices  = geometry.Vertices.Value;
                        var indices   = geometry.Indices.Value;

                        if (vertices != null & indices != null)
                        {
                            structure.GetInfo(out var vertexSize, out var holes);
                            var vertexCount = vertices.Length / vertexSize;

                            try
                            {
                                if (structure.GetElementBySemantic(VertexElementSemantic.Position, out var element) && element.Type == VertexElementType.Float3)
                                {
                                    if (vertices != null && indices != null)
                                    {
                                        //!!!!кешировать?

                                        var positions = ExtractChannel <Vector3F>(vertices, vertexSize, vertexCount, element.Offset);

                                        viewport.Simple3DRenderer.SetColor(ProjectSettings.Get.SelectedColor);
                                        viewport.Simple3DRenderer.AddTriangles(positions, indices, true, true);
                                    }
                                }
                            }
                            catch (Exception e)
                            {
                                Log.Warning(e.Message);
                            }
                        }
                    }
                }

                //update selected LOD
                if (Scene.RenderingPipeline.Value != null)
                {
                    Scene.RenderingPipeline.Value.LODRange = new RangeI(Mesh.EditorDisplayLOD, Mesh.EditorDisplayLOD);
                }
            }
        }
Esempio n. 17
0
        void RibbonButtonsCheckForRecreate()
        {
            var config = ProjectSettings.Get.RibbonAndToolbarActions;

            if (ribbonUpdatedForConfiguration == null || !config.Equals(ribbonUpdatedForConfiguration) || needRecreatedRibbonButtons)
            {
                ribbonUpdatedForConfiguration = config.Clone();
                needRecreatedRibbonButtons    = false;

                ribbonLastSelectedTabTypeByUser_DisableUpdate = true;

                kryptonRibbon.RibbonTabs.Clear();

                foreach (var tabSettings in ProjectSettings.Get.RibbonAndToolbarActions.RibbonTabs)
                {
                    if (!tabSettings.Enabled)
                    {
                        continue;
                    }

                    //can be null
                    EditorRibbonDefaultConfiguration.Tab tab = null;
                    if (tabSettings.Type == Component_ProjectSettings.RibbonAndToolbarActionsClass.TabItem.TypeEnum.Basic)
                    {
                        tab = EditorRibbonDefaultConfiguration.GetTab(tabSettings.Name);
                    }

                    var ribbonTab = new KryptonRibbonTab();
                    ribbonTab.Tag = tab;

                    if (tabSettings.Type == Component_ProjectSettings.RibbonAndToolbarActionsClass.TabItem.TypeEnum.Basic)
                    {
                        ribbonTab.Text = EditorLocalization.Translate("Ribbon.Tab", tabSettings.Name);
                    }
                    else
                    {
                        ribbonTab.Text = tabSettings.Name;
                    }

                    ribbonTab.KeyTip = GetTabKeyTip(tabSettings.Name);

                    kryptonRibbon.RibbonTabs.Add(ribbonTab);

                    var usedKeyTips = new ESet <string>();

                    string GetKeyTip(string name)
                    {
                        foreach (var c in name + alphabetNumbers)
                        {
                            var s = c.ToString().ToUpper();
                            if (s != " " && !usedKeyTips.Contains(s))
                            {
                                usedKeyTips.AddWithCheckAlreadyContained(s);
                                return(s);
                            }
                        }
                        return("");
                    }

                    foreach (var groupSettings in tabSettings.Groups)
                    {
                        if (!groupSettings.Enabled)
                        {
                            continue;
                        }

                        var ribbonGroup = new KryptonRibbonGroup();

                        if (groupSettings.Type == Component_ProjectSettings.RibbonAndToolbarActionsClass.GroupItem.TypeEnum.Basic)
                        {
                            ribbonGroup.TextLine1 = EditorLocalization.Translate("Ribbon.Group", groupSettings.Name);
                        }
                        else
                        {
                            ribbonGroup.TextLine1 = groupSettings.Name;
                        }

                        ribbonGroup.DialogBoxLauncher = false;                        //!!!!для группы Transform можно было бы в настройки снеппинга переходить
                        //ribbonTab.Groups.Add( ribbonGroup );

                        foreach (var groupSettingsChild in groupSettings.Actions)
                        {
                            if (!groupSettingsChild.Enabled)
                            {
                                continue;
                            }

                            //sub group
                            if (groupSettingsChild.Type == Component_ProjectSettings.RibbonAndToolbarActionsClass.ActionItem.TypeEnum.SubGroupOfActions)
                            {
                                EditorRibbonDefaultConfiguration.Group subGroup = null;
                                if (tab != null)
                                {
                                    var group = tab.Groups.Find(g => g.Name == groupSettings.Name);
                                    if (group != null)
                                    {
                                        foreach (var child in group.Children)
                                        {
                                            var g = child as EditorRibbonDefaultConfiguration.Group;
                                            if (g != null && g.Name == groupSettingsChild.Name)
                                            {
                                                subGroup = g;
                                                break;
                                            }
                                        }
                                    }
                                }

                                if (subGroup != null)
                                {
                                    var tripple = new KryptonRibbonGroupTriple();
                                    ribbonGroup.Items.Add(tripple);

                                    var button = new KryptonRibbonGroupButton();
                                    button.Tag = "SubGroup";
                                    //button.Tag = action;

                                    var str = subGroup.DropDownGroupText.Item1;
                                    if (subGroup.DropDownGroupText.Item2 != "")
                                    {
                                        str += "\n" + subGroup.DropDownGroupText.Item2;
                                    }

                                    var str2 = EditorLocalization.Translate("Ribbon.Action", str);
                                    var strs = str2.Split(new char[] { '\n' });

                                    button.TextLine1 = strs[0];
                                    if (strs.Length > 1)
                                    {
                                        button.TextLine2 = strs[1];
                                    }

                                    //button.TextLine1 = subGroup.DropDownGroupText.Item1;
                                    //button.TextLine2 = subGroup.DropDownGroupText.Item2;

                                    if (subGroup.DropDownGroupImageSmall != null)
                                    {
                                        button.ImageSmall = subGroup.DropDownGroupImageSmall;
                                    }
                                    else if (subGroup.DropDownGroupImageLarge != null)
                                    {
                                        button.ImageSmall = EditorAction.ResizeImage(subGroup.DropDownGroupImageLarge, 16, 16);
                                    }
                                    button.ImageLarge = subGroup.DropDownGroupImageLarge;

                                    //EditorLocalization.Translate( "EditorAction.Description",

                                    if (!string.IsNullOrEmpty(subGroup.DropDownGroupDescription))
                                    {
                                        button.ToolTipBody = EditorLocalization.Translate("EditorAction.Description", subGroup.DropDownGroupDescription);
                                    }
                                    else
                                    {
                                        button.ToolTipBody = subGroup.Name;
                                    }

                                    button.ButtonType = GroupButtonType.DropDown;
                                    button.ShowArrow  = subGroup.ShowArrow;

                                    button.KryptonContextMenu = new KryptonContextMenu();
                                    RibbonSubGroupAddItemsRecursive(subGroup, button.KryptonContextMenu.Items);

                                    tripple.Items.Add(button);
                                }
                            }

                            //action
                            if (groupSettingsChild.Type == Component_ProjectSettings.RibbonAndToolbarActionsClass.ActionItem.TypeEnum.Action)
                            {
                                var action = EditorActions.GetByName(groupSettingsChild.Name);

                                if (action != null && !action.CompletelyDisabled)
                                {
                                    if (action.ActionType == EditorAction.ActionTypeEnum.Button || action.ActionType == EditorAction.ActionTypeEnum.DropDown)
                                    {
                                        //Button, DropDown

                                        var tripple = new KryptonRibbonGroupTriple();
                                        ribbonGroup.Items.Add(tripple);

                                        var control = new KryptonRibbonGroupButton();

                                        //!!!!
                                        //control.ImageSmall = NeoAxis.Properties.Resources.Android_16;

                                        control.Tag = action;

                                        var str = action.RibbonText.Item1;
                                        if (action.RibbonText.Item2 != "")
                                        {
                                            str += "\n" + action.RibbonText.Item2;
                                        }

                                        var str2 = EditorLocalization.Translate("Ribbon.Action", str);
                                        var strs = str2.Split(new char[] { '\n' });

                                        control.TextLine1 = strs[0];
                                        if (strs.Length > 1)
                                        {
                                            control.TextLine2 = strs[1];
                                        }

                                        //control.TextLine1 = action.RibbonText.Item1;
                                        //control.TextLine2 = action.RibbonText.Item2;

                                        control.ImageSmall  = action.GetImageSmall();
                                        control.ImageLarge  = action.GetImageBig();
                                        control.ToolTipBody = action.ToolTip;
                                        control.KeyTip      = GetKeyTip(action.Name);

                                        //_buttonType = GroupButtonType.Push;
                                        //_toolTipImageTransparentColor = Color.Empty;
                                        //_toolTipTitle = string.Empty;
                                        //_toolTipBody = string.Empty;
                                        //_toolTipStyle = LabelStyle.SuperTip;

                                        if (action.ActionType == EditorAction.ActionTypeEnum.DropDown)
                                        {
                                            control.ButtonType         = GroupButtonType.DropDown;
                                            control.KryptonContextMenu = action.DropDownContextMenu;
                                        }

                                        control.Click += Button_Click;

                                        tripple.Items.Add(control);
                                    }
                                    else if (action.ActionType == EditorAction.ActionTypeEnum.Slider)
                                    {
                                        //Slider

                                        var tripple = new KryptonRibbonGroupTriple();
                                        ribbonGroup.Items.Add(tripple);

                                        var control = new KryptonRibbonGroupSlider();
                                        control.Tag         = action;
                                        control.ToolTipBody = action.ToolTip;

                                        control.Control.Size = new System.Drawing.Size((int)((float)control.Control.Size.Width * EditorAPI.DPIScale), control.Control.Size.Height);
                                        control.Control.kryptonSplitContainer2.Size             = new System.Drawing.Size((int)((float)control.Control.kryptonSplitContainer2.Size.Width * EditorAPI.DPIScale), control.Control.Size.Height);
                                        control.Control.kryptonSplitContainer2.Panel1MinSize    = (int)((float)control.Control.kryptonSplitContainer2.Panel1MinSize * EditorAPI.DPIScale);
                                        control.Control.kryptonSplitContainer1.Panel2MinSize    = (int)((float)control.Control.kryptonSplitContainer1.Panel2MinSize * EditorAPI.DPIScale);
                                        control.Control.kryptonSplitContainer1.SplitterDistance = 10000;

                                        control.Control.kryptonLabel1.Text = EditorLocalization.Translate("Ribbon.Action", action.RibbonText.Item1);
                                        control.Control.Init(action.Slider.Minimum, action.Slider.Maximum, action.Slider.ExponentialPower);
                                        control.Control.SetValue(action.Slider.Value);

                                        control.Control.Tag           = action;
                                        control.Control.ValueChanged += Slider_ValueChanged;

                                        tripple.Items.Add(control);
                                    }
                                    //else if( action.ActionType == EditorAction.ActionTypeEnum.ComboBox )
                                    //{
                                    //	//ComboBox

                                    //	var tripple = new KryptonRibbonGroupTriple();
                                    //	ribbonGroup.Items.Add( tripple );

                                    //	var control = new KryptonRibbonGroupComboBox();
                                    //	control.Tag = action;

                                    //	control.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
                                    //	foreach( var item in action.ComboBox.Items )
                                    //		control.Items.Add( item );

                                    //	if( control.Items.Count != 0 )
                                    //		control.SelectedIndex = 0;

                                    //	//control.MinimumLength = action.Slider.Length;
                                    //	//control.MaximumLength = action.Slider.Length;

                                    //	control.SelectedIndexChanged += ComboBox_SelectedIndexChanged;

                                    //	tripple.Items.Add( control );
                                    //}
                                    else if (action.ActionType == EditorAction.ActionTypeEnum.ListBox)
                                    {
                                        //ListBox

                                        var tripple = new KryptonRibbonGroupTriple();
                                        ribbonGroup.Items.Add(tripple);

                                        var control = new KryptonRibbonGroupListBox();
                                        control.Tag         = action;
                                        control.ToolTipBody = action.ToolTip;

                                        control.Control.Size = new System.Drawing.Size((int)((float)action.ListBox.Length * EditorAPI.DPIScale), control.Control.Size.Height);
                                        control.Control.kryptonSplitContainer1.Size             = new System.Drawing.Size((int)((float)action.ListBox.Length * EditorAPI.DPIScale), control.Control.Size.Height);
                                        control.Control.kryptonSplitContainer1.Panel2MinSize    = (int)((float)control.Control.kryptonSplitContainer1.Panel2MinSize * EditorAPI.DPIScale);
                                        control.Control.kryptonSplitContainer1.SplitterDistance = 10000;
                                        //if( action.ListBox.Length != 172 )
                                        //	control.Control.Size = new System.Drawing.Size( action.ListBox.Length, control.Control.Size.Height );

                                        control.Control.kryptonLabel1.Text = EditorLocalization.Translate("Ribbon.Action", action.RibbonText.Item1);

                                        var browser = control.Control.contentBrowser1;

                                        if (action.ListBox.Mode == EditorAction.ListBoxSettings.ModeEnum.Tiles)
                                        {
                                            browser.ListViewModeOverride             = new ContentBrowserListModeTilesRibbon(browser);
                                            browser.Options.PanelMode                = ContentBrowser.PanelModeEnum.List;
                                            browser.Options.ListMode                 = ContentBrowser.ListModeEnum.Tiles;
                                            browser.UseSelectedTreeNodeAsRootForList = false;
                                            browser.Options.Breadcrumb               = false;
                                            browser.ListViewBorderDraw               = BorderSides.Left | BorderSides.Right | BorderSides.Bottom;
                                            browser.Options.TileImageSize            = 22;
                                        }
                                        else
                                        {
                                            browser.RemoveTreeViewIconsColumn();
                                            browser.TreeView.RowHeight -= 2;
                                        }

                                        browser.Tag = action;

                                        //update items
                                        control.SetItems(action.ListBox.Items);

                                        browser.ItemAfterSelect += ListBrowser_ItemAfterSelect;

                                        if (browser.Items.Count != 0)
                                        {
                                            browser.SelectItems(new ContentBrowser.Item[] { browser.Items.ToArray()[0] });
                                        }

                                        //browser.ItemAfterSelect += ListBrowser_ItemAfterSelect;

                                        tripple.Items.Add(control);
                                    }
                                }
                            }
                        }

                        if (ribbonGroup.Items.Count != 0)
                        {
                            ribbonTab.Groups.Add(ribbonGroup);
                        }
                    }

                    //select
                    var tabType = "";
                    if (tab != null)
                    {
                        tabType = tab.Type;
                    }
                    if (ribbonLastSelectedTabTypeByUser != "" && tabType == ribbonLastSelectedTabTypeByUser)
                    {
                        kryptonRibbon.SelectedTab = ribbonTab;
                    }
                }

                ribbonLastSelectedTabTypeByUser_DisableUpdate = false;
            }
        }
Esempio n. 18
0
        void PackagingInit()
        {
            packagingNeedInit = false;

            //files
            string[] files;
            try
            {
                files = VirtualDirectory.GetFiles("", "*.product", SearchOption.AllDirectories);
            }
            catch
            {
                files = new string[0];
            }

            var items = new List <ContentBrowser.Item>();

            foreach (var virtualPath in files)
            {
                string fileName = Path.GetFileName(virtualPath);

                var alreadyAddedImages = new ESet <string>();

                var packageComponent = ResourceManager.LoadResource <Component_Product>(virtualPath);
                if (packageComponent != null)
                {
                    string imageKey = packageComponent.Platform.ToString();

                    bool imageExists = false;
                    if (!alreadyAddedImages.Contains(imageKey))
                    {
                        var image16 = Properties.Resources.ResourceManager.GetObject(imageKey + "_16", Properties.Resources.Culture) as Image;
                        var image32 = Properties.Resources.ResourceManager.GetObject(imageKey + "_32", Properties.Resources.Culture) as Image;
                        if (image16 != null)
                        {
                            contentBrowserPackage.ImageHelper.AddImage(imageKey, image16, image32);

                            alreadyAddedImages.Add(imageKey);
                            imageExists = true;
                        }
                    }

                    string packageName = packageComponent.ProductName.Value;
                    if (string.IsNullOrEmpty(packageName))
                    {
                        packageName = "\'No name\'";
                    }

                    var text = string.Format("{0} - {1} - {2}", packageName, packageComponent.Platform, virtualPath);
                    var item = new ContentBrowserItem_Virtual(contentBrowserPackage, null, text);
                    item.Tag = packageComponent;
                    if (imageExists)
                    {
                        item.imageKey = imageKey;
                    }
                    items.Add(item);
                }
            }

            CollectionUtility.MergeSort(items, delegate(ContentBrowser.Item item1, ContentBrowser.Item item2)
            {
                var c1 = (Component_Product)item1.Tag;
                var c2 = (Component_Product)item2.Tag;

                var order1 = c1.SortOrderInEditor.Value;
                var order2 = c2.SortOrderInEditor.Value;

                if (order1 < order2)
                {
                    return(-1);
                }
                if (order1 > order2)
                {
                    return(1);
                }

                return(string.Compare(c1.Name, c2.Name));
            });

            contentBrowserPackage.SetData(items, false);
            if (items.Count != 0)
            {
                contentBrowserPackage.SelectItems(new ContentBrowser.Item[] { items[0] });
            }
        }
        //!!!!temp. не обновляется в Shortcuts
        internal void UpdateItems()
        //void UpdateItems()
        {
            ////!!!!new
            //UpdateControls();

            ESet <Item> newRootItems = new ESet <Item>();

            if (SelectedObjects != null && SelectedObjects.Length != 0)
            {
                foreach (var item in GetNewItems(SelectedObjects))
                {
                    newRootItems.Add(item);
                }
            }

            //prepare list of items for deletion
            List <Item> itemsToDelete = new List <Item>();

            foreach (var item in rootItems)
            {
                if (!newRootItems.Contains(item))
                {
                    itemsToDelete.Add(item);
                }
            }

            //replace rootItems list
            rootItems.Clear();
            rootItems.AddRange(newRootItems);

            if (itemsToDelete.Count != 0)
            {
                SuspendLayout();

                //delete old items
                foreach (var item in itemsToDelete)
                {
                    item.Dispose();
                }

                ResumeLayout(false);
            }

            foreach (var item in rootItems)
            {
                item.Update();
            }

            //update items layout
            if (rootItems.Count != 0)
            {
                // create item controls at first.
                try
                {
                    foreach (var item in rootItems)
                    {
                        item.CreateControl();
                    }
                }
                catch { }

                var needVerticalScroll = IsVerticalScrollNeeded(out var itemsHeight);

                if (engineScrollBar1.Visible != needVerticalScroll)
                {
                    engineScrollBar1.Visible = needVerticalScroll;
                }

                engineScrollBar1.Maximum     = Math.Max(itemsHeight - Height, 0);
                engineScrollBar1.SmallChange = 30;
                engineScrollBar1.LargeChange = Height;

                //engineScrollBar1.Maximum = Math.Max( itemsHeight - engineScrollBar1.TrackLength, 0 );
                //engineScrollBar1.Maximum = itemsHeight;

                //engineScrollBarTreeVertical.SmallChange = treeView.VScrollBar.SmallChange;
                //engineScrollBarTreeVertical.LargeChange = treeView.VScrollBar.LargeChange;
                //engineScrollBarTreeVertical.Value = treeView.VScrollBar.Value;

                // then update layout.
                UpdateItemsLayout(needVerticalScroll);

                //!!!!
                UpdateControls(needVerticalScroll);
            }
            else
            {
                if (engineScrollBar1.Visible)
                {
                    engineScrollBar1.Visible = false;
                }
            }
        }
Esempio n. 20
0
        private void kryptonButtonSearch_Click(object sender, EventArgs e)
        {
            var rootComponent = Browser.RootObject as Component;

            if (rootComponent == null)
            {
                return;
            }

            string namePattern = kryptonTextBoxFilterByName.Text.Trim();

            if (namePattern.Length > 0 && namePattern[namePattern.Length - 1] != '*')
            {
                namePattern += '*';
            }

            var toSelect = new ESet <Component>();

            if (ModifierKeys.HasFlag(Keys.Shift))
            {
                foreach (var item in Browser.SelectedItems.OfType <ContentBrowserItem_Component>())
                {
                    toSelect.Add(item.Component);
                }
            }

            //EntityType selectedType = TypeSelected;

            var components = new List <Component>(256);

            components.Add(rootComponent);
            components.AddRange(rootComponent.GetComponents(checkChildren: true));

            var equalNamePattern = namePattern;

            if (equalNamePattern.Length > 0)
            {
                equalNamePattern = equalNamePattern.Substring(0, equalNamePattern.Length - 1);
            }

            foreach (var component in components)
            {
                //filter by name
                if (IsSearchPatternMatch(component.Name, namePattern) || component.Name == equalNamePattern)
                {
                    ////filter by type
                    //if( selectedType != null && entity.Type != selectedType )
                    //	continue;

                    ////filter by class
                    //if( comboBoxClass.SelectedItem != null && selectedType == null )
                    //{
                    //	ClassTypeItem classTypeItem = (ClassTypeItem)comboBoxClass.SelectedItem;
                    //	if( !classTypeItem.classType.IsAssignableFrom( entity.GetType() ) )
                    //		continue;
                    //}

                    toSelect.AddWithCheckAlreadyContained(component);
                }
            }

            ContentBrowserUtility.SelectComponentItems(Browser, toSelect.ToArray());
        }
Esempio n. 21
0
        private void kryptonButtonUninstall_Click(object sender, EventArgs e)
        {
            var  filesToDelete = new List <string>();
            bool mustRestart   = false;

            //get list of files to delete
            if (File.Exists(selectedPackage.FullFilePath))
            {
                //get list of files from the package archive

                var info = PackageManager.ReadPackageArchiveInfo(selectedPackage.FullFilePath, out var error);
                if (info == null)
                {
                    ScreenNotifications.Show("Could not read the package info.", true);
                    Log.Warning(error);
                    return;
                }

                foreach (var file in info.Files)
                {
                    var fullName = Path.Combine(VirtualFileSystem.Directories.Project, file);
                    if (File.Exists(fullName))
                    {
                        filesToDelete.Add(file);
                    }
                }

                mustRestart = info.MustRestart;
            }
            else
            {
                //get list of files from selectedPackage.Files in case when the archive file is not exists

                var str = selectedPackage.Files.Trim(new char[] { ' ', '\r', '\n' });

                var files = str.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
                foreach (var file in files)
                {
                    var fullName = Path.Combine(VirtualFileSystem.Directories.Project, file);
                    if (File.Exists(fullName))
                    {
                        filesToDelete.Add(file);
                    }
                }

                //!!!!mustRestart
                mustRestart = true;
            }

            if (filesToDelete.Count == 0)
            {
                return;
            }

            var text = string.Format(Translate("Uninstall {0}?\n\n{1} files will deleted."), selectedPackage.GetDisplayName(), filesToDelete.Count);

            if (EditorMessageBox.ShowQuestion(text, EMessageBoxButtons.YesNo) != EDialogResult.Yes)
            {
                return;
            }

            var filesToDeletionAtStartup = new List <string>();

            try
            {
                //remove cs files from Project.csproj
                try
                {
                    var toRemove = new List <string>();

                    foreach (var file in filesToDelete)
                    {
                        var fullName = Path.Combine(VirtualFileSystem.Directories.Project, file);
                        if (Path.GetExtension(fullName).ToLower() == ".cs")
                        {
                            toRemove.Add(VirtualPathUtility.NormalizePath(fullName));
                        }
                    }

                    if (toRemove.Count != 0)
                    {
                        CSharpProjectFileUtility.UpdateProjectFile(null, toRemove, out _);
                    }
                }
                catch { }

                //delete files
                foreach (var file in filesToDelete)
                {
                    var fullName = Path.Combine(VirtualFileSystem.Directories.Project, file);

                    try
                    {
                        File.Delete(fullName);
                    }
                    catch (UnauthorizedAccessException)
                    {
                        filesToDeletionAtStartup.Add(file);
                    }
                    catch (IOException)
                    {
                        filesToDeletionAtStartup.Add(file);
                    }
                }

                //delete empty folders
                {
                    var allFolders = new ESet <string>();
                    foreach (var file in filesToDelete)
                    {
                        var f = Path.GetDirectoryName(file);
                        while (!string.IsNullOrEmpty(f))
                        {
                            allFolders.AddWithCheckAlreadyContained(f);
                            f = Path.GetDirectoryName(f);
                        }
                    }

                    var list = allFolders.ToArray();
                    CollectionUtility.MergeSort(list, delegate(string f1, string f2)
                    {
                        var levels1 = f1.Split(new char[] { '\\' }).Length;
                        var levels2 = f2.Split(new char[] { '\\' }).Length;
                        return(levels2 - levels1);
                    });

                    foreach (var folder in list)
                    {
                        var fullName = Path.Combine(VirtualFileSystem.Directories.Project, folder);

                        if (Directory.Exists(fullName) && IsDirectoryEmpty(fullName))
                        {
                            Directory.Delete(fullName);
                        }
                    }
                }

                PackageManager.ChangeInstalledState(selectedPackage.Name, false);
            }
            catch (Exception e2)
            {
                EditorMessageBox.ShowWarning(e2.Message);
                return;
            }

            if (filesToDeletionAtStartup.Count != 0)
            {
                PackageManager.AddFilesToDeletionAtStartup(filesToDeletionAtStartup);
            }

            needUpdateList = true;

            if (mustRestart)
            {
                ShowRestartLabel();
            }

            ScreenNotifications.Show(EditorLocalization.Translate("General", "The package has been successfully uninstalled."));
        }
Esempio n. 22
0
        private void kryptonButtonInstall_Click(object sender, EventArgs e)
        {
            var info = PackageManager.ReadPackageArchiveInfo(selectedPackage.FullFilePath, out var error);

            if (info == null)
            {
                return;
            }

            var filesToCopy = new List <string>();

            foreach (var file in info.Files)
            {
                var fullName = Path.Combine(VirtualFileSystem.Directories.Project, file);
                filesToCopy.Add(fullName);
            }

            var text = string.Format(Translate("Install {0}?\n\n{1} files will created."), selectedPackage.GetDisplayName(), filesToCopy.Count);

            //var text = string.Format( Translate( "Install {0}?\r\n\r\n{1} files will created." ), selectedPackage.Name, filesToCopy.Count );
            //var text = $"Install {selectedPackage.Name}?\r\n\r\n{filesToCopy.Count} files will created.";

            if (EditorMessageBox.ShowQuestion(text, EMessageBoxButtons.YesNo) != EDialogResult.Yes)
            {
                return;
            }

            var notification = ScreenNotifications.ShowSticky("Installing the package...");

            try
            {
                using (var archive = ZipFile.OpenRead(selectedPackage.FullFilePath))
                {
                    foreach (var entry in archive.Entries)
                    {
                        var  fileName  = entry.FullName;
                        bool directory = fileName[fileName.Length - 1] == '/';
                        if (fileName != "Package.info" && !directory)
                        {
                            var fullPath = Path.Combine(VirtualFileSystem.Directories.Project, fileName);

                            var directoryName = Path.GetDirectoryName(fullPath);
                            if (!Directory.Exists(directoryName))
                            {
                                Directory.CreateDirectory(directoryName);
                            }

                            entry.ExtractToFile(fullPath, true);
                        }
                    }
                }

                PackageManager.ChangeInstalledState(selectedPackage.Name, true);
            }
            catch (Exception e2)
            {
                EditorMessageBox.ShowWarning(e2.Message);
                return;
            }
            finally
            {
                notification.Close();
            }

            if (!string.IsNullOrEmpty(info.AddCSharpFilesToProject))
            {
                var toAdd = new ESet <string>();

                var path = Path.Combine(VirtualFileSystem.Directories.Assets, info.AddCSharpFilesToProject);
                if (Directory.Exists(path))
                {
                    var fullPaths = CSharpProjectFileUtility.GetProjectFileCSFiles(false, true);
                    var files     = Directory.GetFiles(path, "*.cs", SearchOption.AllDirectories);
                    foreach (var file in files)
                    {
                        if (!fullPaths.Contains(file))
                        {
                            toAdd.AddWithCheckAlreadyContained(file);
                        }
                    }
                }

                //	if( !fileItem.IsDirectory && Path.GetExtension( fileItem.FullPath ).ToLower() == ".cs" )
                //	{
                //		bool added = CSharpProjectFileUtility.GetProjectFileCSFiles( false, true ).Contains( fileItem.FullPath );
                //		if( !added )
                //			toAdd.Add( fileItem.FullPath );
                //	}

                if (toAdd.Count != 0)
                {
                    if (CSharpProjectFileUtility.UpdateProjectFile(toAdd, null, out var error2))
                    {
                        if (toAdd.Count > 1)
                        {
                            Log.Info(EditorLocalization.Translate("General", "Items have been added to the Project.csproj."));
                        }
                        else
                        {
                            Log.Info(EditorLocalization.Translate("General", "The item has been added to the Project.csproj."));
                        }
                    }
                    else
                    {
                        Log.Warning(error2);
                    }
                }
            }

            needUpdateList = true;

            if (info.MustRestart)
            {
                ShowRestartLabel();
            }

            if (!string.IsNullOrEmpty(info.OpenAfterInstall))
            {
                var realFileName = VirtualPathUtility.GetRealPathByVirtual(info.OpenAfterInstall);

                if (info.MustRestart)
                {
                    EditorSettingsSerialization.OpenFileAtStartup = realFileName;
                }
                else
                {
                    EditorAPI.SelectFilesOrDirectoriesInMainResourcesWindow(new string[] { realFileName }, Directory.Exists(realFileName));
                    EditorAPI.OpenFileAsDocument(realFileName, true, true);
                }
            }

            ScreenNotifications.Show(EditorLocalization.Translate("General", "The package has been successfully installed."));

            //restart application
            if (info.MustRestart)
            {
                var text2 = EditorLocalization.Translate("General", "To apply changes need restart the editor. Restart?");
                if (EditorMessageBox.ShowQuestion(text2, EMessageBoxButtons.YesNo) == EDialogResult.Yes)
                {
                    EditorAPI.BeginRestartApplication();
                }
            }
        }
Esempio n. 23
0
        void UpdateList()
        {
            string lastSelected = "";

            if (contentBrowser1.SelectedItems.Length != 0)
            {
                lastSelected = contentBrowser1.SelectedItems[0].Text;
            }

            var items        = new List <ContentBrowser.Item>();
            var alreadyAdded = new ESet <string>();

            foreach (var info in PackageManager.GetPackagesInfo())
            {
                if (!alreadyAdded.Contains(info.Name))
                {
                    var item = new ContentBrowserItem_Virtual(contentBrowser1, null, info.ToString());
                    item.Tag          = info;
                    item.ShowDisabled = !PackageManager.IsInstalled(info.Name);
                    //item.imageKey = PackageManager.IsInstalled( info.Name ) ? null : "DefaultDisabled";
                    items.Add(item);

                    alreadyAdded.AddWithCheckAlreadyContained(info.Name);
                }
            }

            if (downloadedListOfPackages != null)
            {
                foreach (var info in downloadedListOfPackages)
                {
                    if (!alreadyAdded.Contains(info.Name))
                    {
                        var item = new ContentBrowserItem_Virtual(contentBrowser1, null, info.ToString());
                        item.Tag          = info;
                        item.ShowDisabled = !PackageManager.IsInstalled(info.Name);
                        //item.imageKey = PackageManager.IsInstalled( info.Name ) ? null : "DefaultDisabled";
                        items.Add(item);

                        alreadyAdded.AddWithCheckAlreadyContained(info.Name);
                    }
                }
            }

            contentBrowser1.SetData(items.ToArray(), false);

            if (items.Count != 0)
            {
                if (!string.IsNullOrEmpty(lastSelected))
                {
                    foreach (var item in items)
                    {
                        if (item.Text == lastSelected)
                        {
                            contentBrowser1.SelectItems(new ContentBrowser.Item[] { item });
                            break;
                        }
                    }
                }

                if (contentBrowser1.SelectedItems.Length == 0)
                {
                    contentBrowser1.SelectItems(new ContentBrowser.Item[] { items[0] });
                }
            }

            needUpdatePackageControls = true;
        }