This class has handy inspector utilities and functions.
        private void OnGUI()
        {
            MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo();

            RenderChoiceDialog();

            EditorGUILayout.Space();

            showConfigurations = EditorGUILayout.Foldout(showConfigurations, "Modify Configurations", true);
            if (showConfigurations)
            {
                RenderConfigurations();
            }
        }
        private static void DrawHeader()
        {
            MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo();

            // Render Title
            using (new EditorGUILayout.HorizontalScope())
            {
                EditorGUILayout.LabelField("Mixed Reality Toolkit Dependency Window", EditorStyles.boldLabel);
                InspectorUIUtility.RenderDocumentationButton(DependencyWindow_URL);
            }

            EditorGUILayout.LabelField("This tool displays how assets reference and depend on each other. Dependencies are calculated by parsing guids within project YAML files, code dependencies are not considered.", EditorStyles.wordWrappedLabel);

            EditorGUILayout.Space();
        }
        protected virtual void OnSceneGUI()
        {
            if (DrawLineManualUpVectors)
            {
                if (LineData.ManualUpVectors == null || LineData.ManualUpVectors.Length < 2)
                {
                    LineData.ManualUpVectors = new[] { Vector3.up, Vector3.up };
                }

                for (int i = 0; i < LineData.ManualUpVectors.Length; i++)
                {
                    float normalizedLength = (1f / (LineData.ManualUpVectors.Length - 1)) * i;
                    var   position         = LineData.GetPoint(normalizedLength);
                    float handleSize       = HandleUtility.GetHandleSize(position);
                    LineData.ManualUpVectors[i] = MixedRealityInspectorUtility.VectorHandle(LineData, position, LineData.ManualUpVectors[i], false, true, ManualUpVectorLength * handleSize, handleSize * ManualUpVectorHandleSizeModifier);
                }
            }

            if (Application.isPlaying)
            {
                Handles.EndGUI();
                return;
            }

            Vector3 firstPosition = LineData.FirstPoint;
            Vector3 lastPosition  = firstPosition;

            for (int i = 1; i < LinePreviewResolution; i++)
            {
                Vector3    currentPosition;
                Quaternion rotation;

                if (i == LinePreviewResolution - 1)
                {
                    currentPosition = LineData.LastPoint;
                    rotation        = LineData.GetRotation(LineData.PointCount - 1);
                }
                else
                {
                    float normalizedLength = (1f / (LinePreviewResolution - 1)) * i;
                    currentPosition = LineData.GetPoint(normalizedLength);
                    rotation        = LineData.GetRotation(normalizedLength);
                }

                if (RenderLinePreview)
                {
                    Handles.color = Color.magenta;
                    Handles.DrawLine(lastPosition, currentPosition);
                }

                if (DrawLineRotations)
                {
                    float arrowSize = HandleUtility.GetHandleSize(currentPosition) * RotationArrowLength;
                    Handles.color = MixedRealityInspectorUtility.LineVelocityColor;
                    Handles.color = Color.Lerp(MixedRealityInspectorUtility.LineVelocityColor, Handles.zAxisColor, 0.75f);
                    Handles.ArrowHandleCap(0, currentPosition, Quaternion.LookRotation(rotation * Vector3.forward), arrowSize, EventType.Repaint);
                    Handles.color = Color.Lerp(MixedRealityInspectorUtility.LineVelocityColor, Handles.xAxisColor, 0.75f);
                    Handles.ArrowHandleCap(0, currentPosition, Quaternion.LookRotation(rotation * Vector3.right), arrowSize, EventType.Repaint);
                    Handles.color = Color.Lerp(MixedRealityInspectorUtility.LineVelocityColor, Handles.yAxisColor, 0.75f);
                    Handles.ArrowHandleCap(0, currentPosition, Quaternion.LookRotation(rotation * Vector3.up), arrowSize, EventType.Repaint);
                }

                lastPosition = currentPosition;
            }

            if (LineData.Loops && RenderLinePreview)
            {
                Handles.color = Color.magenta;
                Handles.DrawLine(lastPosition, firstPosition);
            }
        }