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; } }
private static void GetSelectedAbsoluteXAndY(GraphicalUiElement asGue, bool parentFlips, out float selectedObjectX, out float selectedObjectY) { selectedObjectX = asGue.AbsoluteX; selectedObjectY = asGue.AbsoluteY; if (parentFlips) { var rotationMatrix = asGue.GetAbsoluteRotationMatrix(); Vector3 offset = new Vector3(asGue.GetAbsoluteWidth(), 0, 0); offset = Vector3.Transform(offset, rotationMatrix); selectedObjectX += offset.X; selectedObjectY += offset.Y; } }