コード例 #1
0
 public TransformHandleParam(
     PositionHandleParam position,
     RotationHandleParam rotation,
     ScaleHandleParam scale,
     PositionHandleParam cameraAlignedPosition,
     RotationHandleParam cameraAlignedRotation,
     ScaleHandleParam cameraAlignedScale,
     PositionHandleParam localPosition,
     RotationHandleParam localRotation,
     ScaleHandleParam localScale,
     PositionHandleParam vertexSnappingPosition,
     RotationHandleParam vertexSnappingRotation,
     ScaleHandleParam vertexSnappingScale)
 {
     this.position = position;
     this.rotation = rotation;
     this.scale    = scale;
     this.cameraAlignedPosition  = cameraAlignedPosition;
     this.cameraAlignedRotation  = cameraAlignedRotation;
     this.cameraAlignedScale     = cameraAlignedScale;
     this.localPosition          = localPosition;
     this.localRotation          = localRotation;
     this.localScale             = localScale;
     this.vertexSnappingPosition = vertexSnappingPosition;
     this.vertexSnappingRotation = vertexSnappingRotation;
     this.vertexSnappingScale    = vertexSnappingScale;
 }
コード例 #2
0
        internal static Vector3 DoScaleHandle(ScaleHandleIds ids, Vector3 scale, Vector3 position, Quaternion rotation, float handleSize, ScaleHandleParam param)
        {
            // Calculate the camera view vector in Handle draw space
            // this handle the case where the matrix is skewed
            var handlePosition       = matrix.MultiplyPoint3x4(position);
            var drawToWorldMatrix    = matrix * Matrix4x4.TRS(position, rotation, Vector3.one);
            var invDrawToWorldMatrix = drawToWorldMatrix.inverse;
            var viewVectorDrawSpace  = GetCameraViewFrom(handlePosition, invDrawToWorldMatrix);

            var isDisabled = !GUI.enabled;

            var isHot = ids.Has(GUIUtility.hotControl);

            var axisOffset    = param.axisOffset;
            var axisLineScale = param.axisLineScale;

            // When an axis is hot, draw the line from the center to the handle
            // So ignore the offset
            if (isHot)
            {
                axisLineScale += axisOffset;
                axisOffset     = Vector3.zero;
            }

            var isCenterIsHot = ids.xyz == GUIUtility.hotControl;

            switch (Event.current.type)
            {
            case EventType.MouseDown:
                s_InitialScale = scale;
                break;
            }

            for (var i = 0; i < 3; ++i)
            {
                if (!param.ShouldShow(i))
                {
                    continue;
                }

                if (!currentlyDragging)
                {
                    switch (param.orientation)
                    {
                    case ScaleHandleParam.Orientation.Signed:
                        s_DoScaleHandle_AxisHandlesOctant[i] = 1;
                        break;

                    case ScaleHandleParam.Orientation.Camera:
                        s_DoScaleHandle_AxisHandlesOctant[i] = viewVectorDrawSpace[i] > 0.01f ? -1 : 1;
                        break;
                    }
                }


                var id            = ids[i];
                var isThisAxisHot = isHot && id == GUIUtility.hotControl;

                var axisDir    = GetAxisVector(i);
                var axisColor  = GetColorByAxis(i);
                var offset     = axisOffset[i];
                var cameraLerp = id == GUIUtility.hotControl ? 0 : GetCameraViewLerpForWorldAxis(viewVectorDrawSpace, axisDir);
                // If we are here and is hot, then this axis is hot and must be opaque
                cameraLerp = isHot ? 0 : cameraLerp;
                color      = isDisabled ? Color.Lerp(axisColor, staticColor, staticBlend) : axisColor;

                axisDir *= s_DoScaleHandle_AxisHandlesOctant[i];

                if (cameraLerp <= kCameraViewThreshold)
                {
                    color = Color.Lerp(color, Color.clear, cameraLerp);

                    if (isHot && !isThisAxisHot)
                    {
                        color = s_DisabledHandleColor;
                    }
                    if (isCenterIsHot)
                    {
                        color = selectedColor;
                    }

                    color = ToActiveColorSpace(color);

                    scale[i] = UnityEditorInternal.SliderScale.DoAxis(
                        id,
                        scale[i],
                        position,
                        rotation * axisDir,
                        rotation,
                        handleSize * param.axisSize[i],
                        EditorSnapSettings.scale,
                        offset,
                        axisLineScale[i]);
                }
            }

            if (param.ShouldShow(ScaleHandleParam.Handle.XYZ) && (isHot && ids.xyz == GUIUtility.hotControl || !isHot))
            {
                color = ToActiveColorSpace(centerColor);
                EditorGUI.BeginChangeCheck();
                var s = ScaleValueHandle(ids.xyz, scale.x, position, rotation, handleSize * param.xyzSize, CubeHandleCap, EditorSnapSettings.scale);
                if (EditorGUI.EndChangeCheck())
                {
                    scale = s_InitialScale * s;
                }
            }

            return(scale);
        }
コード例 #3
0
            static ScaleHandleParam CopyDefaultSize(ScaleHandleParam s)
            {
                var d = ScaleHandleParam.Default;

                return(new ScaleHandleParam(s.handles, d.axisOffset, d.axisSize, d.axisLineScale, s.xyzSize, s.orientation));
            }
コード例 #4
0
 static ScaleHandleParam RemoveHandles(ScaleHandleParam s, ScaleHandleParam.Handle handles)
 {
     return(new ScaleHandleParam(s.handles & ~handles, s.axisOffset, s.axisSize, s.axisLineScale, s.xyzSize, s.orientation));
 }