Se realizaron mejoras en la gestión de objetos visuales en la clase ObjectManipulationManager. Se optimizó la lógica para purgar objetos eliminados y se mejoró la rotación de objetos, permitiendo rotaciones en incrementos de 45 grados al mantener presionada la tecla Shift. Además, se ajustaron espacios en blanco y se mejoró la legibilidad del código en varias secciones.
This commit is contained in:
parent
75c507be4e
commit
ac8773ebc7
|
@ -260,7 +260,8 @@ namespace CtrEditor
|
|||
|
||||
// Calcular el bounding box que contenga todos los objetos seleccionados
|
||||
Rect boundingBox = CalculateTotalBoundingBox(selectedObjects);
|
||||
if (_selectedObjectsAreVisible) {
|
||||
if (_selectedObjectsAreVisible)
|
||||
{
|
||||
|
||||
FuncionesBase.MutableRect rectBox = new FuncionesBase.MutableRect(boundingBox);
|
||||
rectBox.Left -= (float)rectHighlightSize;
|
||||
|
@ -1125,6 +1126,9 @@ namespace CtrEditor
|
|||
|
||||
RemoveAllSelectionHighlights(); // Remover antes de rotar
|
||||
|
||||
// Verificar si la tecla Shift está presionada para rotación en incrementos de 45 grados
|
||||
bool isShiftPressed = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift);
|
||||
|
||||
// Calcular el ángulo respecto al centro del bounding box que contiene todos los objetos seleccionados
|
||||
double deltaX = currentPosition.X - _transformedBoundingBoxCenter.X;
|
||||
double deltaY = currentPosition.Y - _transformedBoundingBoxCenter.Y;
|
||||
|
@ -1137,12 +1141,49 @@ namespace CtrEditor
|
|||
else
|
||||
{
|
||||
double deltaAngle = angle - _lastAngle;
|
||||
|
||||
if (isShiftPressed)
|
||||
{
|
||||
// Rotación en incrementos de 45 grados
|
||||
// Calcular el ángulo total acumulado desde el inicio de la rotación
|
||||
double totalAngleChange = angle - _lastAngle;
|
||||
|
||||
// Determinar a qué incremento de 45 grados corresponde
|
||||
double snapAngle = Math.Round(totalAngleChange / 45.0) * 45.0;
|
||||
|
||||
// Solo aplicar la rotación si hay un cambio significativo (al menos 22.5 grados de movimiento)
|
||||
if (Math.Abs(totalAngleChange) > 22.5)
|
||||
{
|
||||
// Calcular el cambio real que necesitamos aplicar
|
||||
double actualRotationChange = snapAngle;
|
||||
|
||||
foreach (var selectedObject in _selectedObjects)
|
||||
{
|
||||
// Obtener el ángulo actual del objeto
|
||||
double currentObjectAngle = selectedObject.Angulo;
|
||||
|
||||
// Calcular el nuevo ángulo alineado a incrementos de 45 grados
|
||||
double targetAngle = Math.Round((currentObjectAngle + actualRotationChange) / 45.0) * 45.0;
|
||||
|
||||
// Aplicar la rotación necesaria para llegar al ángulo objetivo
|
||||
double rotationNeeded = targetAngle - currentObjectAngle;
|
||||
selectedObject.Rotate(rotationNeeded);
|
||||
}
|
||||
|
||||
// Actualizar el ángulo de referencia para evitar aplicar la misma rotación múltiples veces
|
||||
_lastAngle = (float)angle;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Rotación libre (comportamiento original)
|
||||
foreach (var selectedObject in _selectedObjects)
|
||||
{
|
||||
selectedObject.Rotate(deltaAngle);
|
||||
}
|
||||
_lastAngle = (float)angle;
|
||||
}
|
||||
}
|
||||
|
||||
UpdateAllSelectionHighlights();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue