using System; using UnityEngine; using System.Collections.Generic; using UnityEngine.ProBuilder; using UnityEngine.ProBuilder.MeshOperations; using UnityEngine.UIElements; namespace UnityEditor.ProBuilder.Actions { sealed class SubdivideEdges : MenuAction { Pref m_SubdivisionCount = new Pref("SubdivideEdges.subdivisions", 1); Pref m_SubdivisionUIMin = new Pref("SubdivideEdges.subdivisionsUIMin", 1); Pref m_SubdivisionUIMax = new Pref("SubdivideEdges.subdivisionsUIMax", 32); Pref m_SubdivisionRangeExpanded = new Pref("SubdivideEdges.rangeExpanded", false); const int m_SubdivisionMin = 1; const int m_SubdivisionMax = 512; public override ToolbarGroup group { get { return ToolbarGroup.Geometry; } } public override string iconPath => "Toolbar/Edge_Subdivide"; public override Texture2D icon => IconUtility.GetIcon(iconPath); public override TooltipContent tooltip { get { return s_Tooltip; } } protected internal override bool hasFileMenuEntry { get { return false; } } static readonly TooltipContent s_Tooltip = new TooltipContent ( "Subdivide Edges", "Appends evenly spaced new vertices to the selected edges.", keyCommandAlt, 'S' ); public override SelectMode validSelectModes { get { return SelectMode.Edge; } } public override bool enabled { get { return base.enabled && MeshSelection.selectedEdgeCount > 0; } } protected override MenuActionState optionsMenuState { get { return MenuActionState.VisibleAndEnabled; } } Vector2IntField m_RangeField; IntegerField m_SubdivCount; SliderInt m_Slider; public override VisualElement CreateSettingsContent() { var root = new VisualElement(); var line = new VisualElement(); line.style.flexDirection = FlexDirection.Row; var tooltip = "How many vertices to insert on each selected edge. Vertices will be equally spaced between " + "one another and the boundaries of the edge."; var foldout = new Foldout(); foldout.SetValueWithoutNotify(m_SubdivisionRangeExpanded.value); foldout.RegisterCallback>(OnFoldoutChanged); m_Slider = new SliderInt("Subdivisions", m_SubdivisionUIMin, m_SubdivisionUIMax); m_Slider.SetValueWithoutNotify(m_SubdivisionCount.value); m_Slider.tooltip = tooltip; m_Slider.RegisterCallback>(OnSliderChanged); m_Slider.style.flexGrow = 1f; m_SubdivCount = new IntegerField(); m_SubdivCount.isDelayed = PreviewActionManager.delayedPreview; m_SubdivCount.SetValueWithoutNotify(m_SubdivisionCount.value); m_SubdivCount.tooltip = tooltip; m_SubdivCount.RegisterCallback>(OnCountChanged); m_SubdivCount.style.width = 40; Action onDelayedPreviewChanged = () => { m_SubdivCount.isDelayed = PreviewActionManager.delayedPreview; }; PreviewActionManager.delayedPreviewChanged += onDelayedPreviewChanged; root.RegisterCallback(evt => { PreviewActionManager.delayedPreviewChanged -= onDelayedPreviewChanged; }); line.Add(foldout); line.Add(m_Slider); line.Add(m_SubdivCount); root.Add(line); m_RangeField = new Vector2IntField("Range"); m_RangeField.style.paddingLeft = new StyleLength(25); m_RangeField.SetValueWithoutNotify(new Vector2Int(m_SubdivisionUIMin.value, m_SubdivisionUIMax.value)); m_RangeField.Q