Beispiel #1
0
        private void UpdateRotationHandlePosition()
        {
            GraphicalUiElement singleSelectedObject = null;

            if (selectedObjects.Count == 1)
            {
                singleSelectedObject = selectedObjects[0];
            }

            if (singleSelectedObject == null)
            {
                // hide the rotation handles
                rotationHandle.Visible = false;
            }
            else
            {
                rotationHandle.Visible = true;

                // right side
                const float minimumOffset = 24;


                float xOffset = 0;

                if (singleSelectedObject.XOrigin == HorizontalAlignment.Left)
                {
                    xOffset = singleSelectedObject.GetAbsoluteWidth() + minimumOffset;
                }
                else if (singleSelectedObject.XOrigin == HorizontalAlignment.Center)
                {
                    xOffset = singleSelectedObject.GetAbsoluteWidth() / 2.0f + minimumOffset;
                }
                else if (singleSelectedObject.XOrigin == HorizontalAlignment.Right)
                {
                    xOffset = minimumOffset;
                }

                var offset = new Vector2(
                    xOffset,
                    0);

                MathFunctions.RotateVector(
                    ref offset, -MathHelper.ToRadians(singleSelectedObject.GetAbsoluteRotation()));

                rotationHandle.X = singleSelectedObject.AbsoluteX + offset.X;

                // consider the Y
                rotationHandle.Y = singleSelectedObject.AbsoluteY + offset.Y;

                rotationHandle.Radius = 8 / Renderer.Self.Camera.Zoom;
            }
        }
Beispiel #2
0
        private bool SideGrabbingActivityForInstanceSave(float cursorXChange, float cursorYChange, InstanceSave instanceSave, List <ElementWithState> elementStack)
        {
            float changeXMultiplier;
            float changeYMultiplier;
            float widthMultiplier;
            float heightMultiplier;

            CalculateMultipliers(instanceSave, elementStack, out changeXMultiplier, out changeYMultiplier, out widthMultiplier, out heightMultiplier);

            AdjustCursorChangeValuesForShiftDrag(ref cursorXChange, ref cursorYChange, instanceSave, elementStack);

            bool hasChangeOccurred = false;

            Vector2 reposition = new Vector2(cursorXChange * changeXMultiplier, cursorYChange * changeYMultiplier);

            // invert Y so up is positive
            reposition.Y *= -1;

            GraphicalUiElement representation = null;

            if (instanceSave != null)
            {
                representation = WireframeObjectManager.Self.GetRepresentation(instanceSave);
            }
            else
            {
                representation = WireframeObjectManager.Self.GetRepresentation(elementStack.Last().Element);
            }

            float rotation = MathHelper.ToRadians(representation?.GetAbsoluteRotation() ?? 0);

            MathFunctions.RotateVector(ref reposition, rotation);

            // flip Y back
            reposition.Y *= -1;

            if (reposition.X != 0)
            {
                hasChangeOccurred = true;
                if (instanceSave != null)
                {
                    EditingManager.Self.ModifyVariable("X", reposition.X, instanceSave);
                }
                else
                {
                    EditingManager.Self.ModifyVariable("X", reposition.X, elementStack.Last().Element);
                }
            }
            if (reposition.Y != 0)
            {
                hasChangeOccurred = true;
                if (instanceSave != null)
                {
                    EditingManager.Self.ModifyVariable("Y", reposition.Y, instanceSave);
                }
                else
                {
                    EditingManager.Self.ModifyVariable("Y", reposition.Y, elementStack.Last().Element);
                }
            }



            if (heightMultiplier != 0 && cursorYChange != 0)
            {
                hasChangeOccurred = true;
                if (instanceSave != null)
                {
                    EditingManager.Self.ModifyVariable("Height", cursorYChange * heightMultiplier, instanceSave);
                }
                else
                {
                    EditingManager.Self.ModifyVariable("Height", cursorYChange * heightMultiplier, elementStack.Last().Element);
                }
            }
            if (widthMultiplier != 0 && cursorXChange != 0)
            {
                hasChangeOccurred = true;
                if (instanceSave != null)
                {
                    EditingManager.Self.ModifyVariable("Width", cursorXChange * widthMultiplier, instanceSave);
                }
                else
                {
                    EditingManager.Self.ModifyVariable("Width", cursorXChange * widthMultiplier, elementStack.Last().Element);
                }
            }
            return(hasChangeOccurred);
        }