//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); } } }
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); } }
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); } } }
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; }
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() ); } } }
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(); }
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); } }
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()); }
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(); } }
//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); }
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); } }
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; } } } }
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); } } }
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; } }
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; } } }
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()); }
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.")); }
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(); } } }
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; }