diff --git a/ObjectManipulationManager.cs b/ObjectManipulationManager.cs index ef61fe9..d828e4c 100644 --- a/ObjectManipulationManager.cs +++ b/ObjectManipulationManager.cs @@ -74,6 +74,8 @@ namespace CtrEditor private Image _backgroundImage; // Add this line internal bool IsDraggingCanvas { get; set; } private bool _isRectangleSelectionActive; + private bool _selectedObjectsAreVisible; + public bool IsRectangleSelectionActive { get => _isRectangleSelectionActive; @@ -181,35 +183,37 @@ namespace CtrEditor public void AddResizeRectangles(IEnumerable selectedObjects) { double rectHighlightSize = 1; - RemoveResizeRectangles(); + RemoveResizeRectangles(); // Calcular el bounding box que contenga todos los objetos seleccionados Rect boundingBox = CalculateTotalBoundingBox(selectedObjects); + if (_selectedObjectsAreVisible) { - FuncionesBase.MutableRect rectBox = new FuncionesBase.MutableRect(boundingBox); - rectBox.Left -= (float)rectHighlightSize; - rectBox.Right += (float)rectHighlightSize; - rectBox.Top -= (float)rectHighlightSize; - rectBox.Bottom += (float)rectHighlightSize; + FuncionesBase.MutableRect rectBox = new FuncionesBase.MutableRect(boundingBox); + rectBox.Left -= (float)rectHighlightSize; + rectBox.Right += (float)rectHighlightSize; + rectBox.Top -= (float)rectHighlightSize; + rectBox.Bottom += (float)rectHighlightSize; - _transformedBoundingBoxCenter = new Point( - boundingBox.Left + boundingBox.Width / 2, - boundingBox.Top + boundingBox.Height / 2 - ); + _transformedBoundingBoxCenter = new Point( + boundingBox.Left + boundingBox.Width / 2, + boundingBox.Top + boundingBox.Height / 2 + ); - // Selection rectangle - Rectangle selectionRect = CreateSelectionRectangle(rectBox, rectHighlightSize); - _resizeRectangles.Add(selectionRect); - _canvas.Children.Add(selectionRect); + // Selection rectangle + Rectangle selectionRect = CreateSelectionRectangle(rectBox, rectHighlightSize); + _resizeRectangles.Add(selectionRect); + _canvas.Children.Add(selectionRect); - // Load rotation cursors - Cursor rotationCursorRx = new Cursor(Application.GetResourceStream( - new Uri("pack://application:,,,/CtrEditor;component/Icons/rotationRx.cur")).Stream); - Cursor rotationCursorSx = new Cursor(Application.GetResourceStream( - new Uri("pack://application:,,,/CtrEditor;component/Icons/rotationSx.cur")).Stream); + // Load rotation cursors + Cursor rotationCursorRx = new Cursor(Application.GetResourceStream( + new Uri("pack://application:,,,/CtrEditor;component/Icons/rotationRx.cur")).Stream); + Cursor rotationCursorSx = new Cursor(Application.GetResourceStream( + new Uri("pack://application:,,,/CtrEditor;component/Icons/rotationSx.cur")).Stream); - // Add resize/rotation handles - AddResizeHandles(rectBox, 10, rotationCursorRx, rotationCursorSx); + // Add resize/rotation handles + AddResizeHandles(rectBox, 10, rotationCursorRx, rotationCursorSx); + } } private Rect CalculateTotalBoundingBox(IEnumerable selectedObjects) @@ -218,10 +222,11 @@ namespace CtrEditor double top = double.MaxValue; double right = double.MinValue; double bottom = double.MinValue; + _selectedObjectsAreVisible = false; foreach (var obj in selectedObjects) { - if (obj.VisualRepresentation != null) + if (obj.VisualRepresentation != null && obj.VisualRepresentation.Visibility!=Visibility.Collapsed) { // Obtener el bounding box del objeto actual Rect objectBounds = VisualTreeHelper.GetDescendantBounds(obj.VisualRepresentation); @@ -233,6 +238,7 @@ namespace CtrEditor top = Math.Min(top, transformedBounds.Top); right = Math.Max(right, transformedBounds.Right); bottom = Math.Max(bottom, transformedBounds.Bottom); + _selectedObjectsAreVisible = true; } } diff --git a/ObjetosSim/osBase.cs b/ObjetosSim/osBase.cs index 1a0df2e..098775a 100644 --- a/ObjetosSim/osBase.cs +++ b/ObjetosSim/osBase.cs @@ -382,7 +382,10 @@ namespace CtrEditor.ObjetosSim if (Angulo != 0) { - RotateTransform rotateTransform = new RotateTransform(-Angulo); + // TransformedBitmap only accepts rotations in 90-degree increments + // Round to nearest 90 degrees: 0, 90, 180, or 270 + double normalizedAngle = Math.Round(Angulo / 90.0) * 90.0; + RotateTransform rotateTransform = new RotateTransform(-normalizedAngle); transformedBitmap.Transform = rotateTransform; } @@ -463,7 +466,10 @@ namespace CtrEditor.ObjetosSim if (Angulo != 0) { - RotateTransform rotateTransform = new RotateTransform(-Angulo); + // TransformedBitmap only accepts rotations in 90-degree increments + // Round to nearest 90 degrees: 0, 90, 180, or 270 + double normalizedAngle = Math.Round(Angulo / 90.0) * 90.0; + RotateTransform rotateTransform = new RotateTransform(-normalizedAngle); transformedBitmap.Transform = rotateTransform; }