示例#1
0
        public void DrawPreview(object fieldValue)
        {
            if (!showPreview)
            {
                return;
            }

            var area       = ActionHelpers.GetControlPreviewRect(100f);
            var axisCenter = ActionHelpers.DrawAxisXY(area);

            Handles.color = previewColor;

            // init min/max sizes for drawing

            var max = 40f;
            var min = 0f;

            if (maxLength.Value > 0)
            {
                min = max * (minLength.Value / maxLength.Value);
            }

            // setup x/y scales to fit in area

            var scaleX = 1f;
            var scaleY = yScale.Value;

            if (Mathf.Abs(scaleY) > 1f)
            {
                scaleX = 1f / scaleY;
                scaleY = 1f;
            }

            switch (shape)
            {
            case Option.Circle:

                ActionHelpers.DrawOval(axisCenter, max * scaleX, max * scaleY);
                ActionHelpers.DrawOval(axisCenter, min * scaleX, min * scaleY);

                break;

            case Option.Rectangle:

                ActionHelpers.DrawRect(axisCenter, max * scaleX, max * scaleY);
                ActionHelpers.DrawRect(axisCenter, min * scaleX, min * scaleY);

                break;

            case Option.InArc:

                var fromAngle = floatParam1.Value;
                var toAngle   = floatParam2.Value;

                ActionHelpers.DrawArc(axisCenter, fromAngle, toAngle, max * scaleX, max * scaleY);
                ActionHelpers.DrawArc(axisCenter, fromAngle, toAngle, min * scaleX, min * scaleY);

                ActionHelpers.DrawSpoke(axisCenter, fromAngle, min, max, scaleX, scaleY);
                ActionHelpers.DrawSpoke(axisCenter, toAngle, min, max, scaleX, scaleY);


                break;

            case Option.AtAngles:

                var angleStep = floatParam1.Value;
                if (angleStep < 1)
                {
                    angleStep = 1;
                }

                // make sure we draw at least a dot (should be a better way?!)
                if (max - min < 1.4f)
                {
                    min = max - 1.4f;
                }

                for (float angle = 0; angle < 360; angle += angleStep)
                {
                    ActionHelpers.DrawSpoke(axisCenter, angle, min, max, scaleX, scaleY);
                }

                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            Handles.color = Color.white;
        }