UnityEditor.ObjectPreview.GetGridDivision C# (CSharp) Method

GetGridDivision() private static method

private static GetGridDivision ( Rect rect, int minimumNr, int labelHeight ) : int[]
rect UnityEngine.Rect
minimumNr int
labelHeight int
return int[]
        private static int[] GetGridDivision(Rect rect, int minimumNr, int labelHeight)
        {
            float num = Mathf.Sqrt((rect.width * rect.height) / ((float) minimumNr));
            int num2 = Mathf.FloorToInt(rect.width / num);
            int num3 = Mathf.FloorToInt(rect.height / (num + labelHeight));
            while ((num2 * num3) < minimumNr)
            {
                float num4 = AbsRatioDiff(((float) (num2 + 1)) / rect.width, ((float) num3) / (rect.height - (num3 * labelHeight)));
                float num5 = AbsRatioDiff(((float) num2) / rect.width, ((float) (num3 + 1)) / (rect.height - ((num3 + 1) * labelHeight)));
                if (num4 < num5)
                {
                    num2++;
                    if ((num2 * num3) > minimumNr)
                    {
                        num3 = Mathf.CeilToInt(((float) minimumNr) / ((float) num2));
                    }
                }
                else
                {
                    num3++;
                    if ((num2 * num3) > minimumNr)
                    {
                        num2 = Mathf.CeilToInt(((float) minimumNr) / ((float) num3));
                    }
                }
            }
            return new int[] { num2, num3 };
        }

Usage Example

示例#1
0
        internal static void DrawPreview(IPreviewable defaultPreview, Rect previewArea, UnityEngine.Object[] targets)
        {
            if (ObjectPreview.s_Styles == null)
            {
                ObjectPreview.s_Styles = new ObjectPreview.Styles();
            }
            string text    = string.Empty;
            Event  current = Event.current;

            if (targets.Length > 1)
            {
                Rect  rect  = new RectOffset(16, 16, 20, 25).Remove(previewArea);
                int   num   = Mathf.Max(1, Mathf.FloorToInt((rect.height + 10f) / 77f));
                int   num2  = Mathf.Max(1, Mathf.FloorToInt((rect.width + 10f) / 65f));
                int   num3  = num * num2;
                int   num4  = Mathf.Min(targets.Length, 25);
                bool  flag  = true;
                int[] array = new int[]
                {
                    num2,
                    num
                };
                if (num4 < num3)
                {
                    array = ObjectPreview.GetGridDivision(rect, num4, 12);
                    flag  = false;
                }
                int num5 = Mathf.Min(array[0] * array[1], targets.Length);
                rect.width  += 10f;
                rect.height += 10f;
                Vector2 vector = new Vector2((float)Mathf.FloorToInt(rect.width / (float)array[0] - 10f), (float)Mathf.FloorToInt(rect.height / (float)array[1] - 10f));
                float   num6   = Mathf.Min(vector.x, vector.y - 12f);
                if (flag)
                {
                    num6 = Mathf.Min(num6, 55f);
                }
                bool flag2 = current.type == EventType.MouseDown && current.button == 0 && current.clickCount == 2 && previewArea.Contains(current.mousePosition);
                defaultPreview.ResetTarget();
                for (int i = 0; i < num5; i++)
                {
                    Rect position = new Rect(rect.x + (float)(i % array[0]) * rect.width / (float)array[0], rect.y + (float)(i / array[0]) * rect.height / (float)array[1], vector.x, vector.y);
                    if (flag2 && position.Contains(Event.current.mousePosition))
                    {
                        Selection.objects = new UnityEngine.Object[]
                        {
                            defaultPreview.target
                        };
                    }
                    position.height -= 12f;
                    Rect position2 = new Rect(position.x + (position.width - num6) * 0.5f, position.y + (position.height - num6) * 0.5f, num6, num6);
                    GUI.BeginGroup(position2);
                    Editor.m_AllowMultiObjectAccess = false;
                    defaultPreview.OnInteractivePreviewGUI(new Rect(0f, 0f, num6, num6), ObjectPreview.s_Styles.preBackgroundSolid);
                    Editor.m_AllowMultiObjectAccess = true;
                    GUI.EndGroup();
                    position.y      = position2.yMax;
                    position.height = 16f;
                    GUI.Label(position, targets[i].name, ObjectPreview.s_Styles.previewMiniLabel);
                    defaultPreview.MoveNextTarget();
                }
                defaultPreview.ResetTarget();
                if (Event.current.type == EventType.Repaint)
                {
                    text = string.Format("Previewing {0} of {1} Objects", num5, targets.Length);
                }
            }
            else
            {
                defaultPreview.OnInteractivePreviewGUI(previewArea, ObjectPreview.s_Styles.preBackground);
                if (Event.current.type == EventType.Repaint)
                {
                    text = defaultPreview.GetInfoString();
                    if (text != string.Empty)
                    {
                        text = text.Replace("\n", "   ");
                        text = string.Format("{0}\n{1}", defaultPreview.target.name, text);
                    }
                }
            }
            if (Event.current.type == EventType.Repaint && text != string.Empty)
            {
                float num7 = ObjectPreview.s_Styles.dropShadowLabelStyle.CalcHeight(GUIContent.Temp(text), previewArea.width);
                EditorGUI.DropShadowLabel(new Rect(previewArea.x, previewArea.yMax - num7 - 5f, previewArea.width, num7), text);
            }
        }
All Usage Examples Of UnityEditor.ObjectPreview::GetGridDivision