2013-03-14 2 views
0

사용자가 현재 왼쪽, 위쪽, 오른쪽, 아래쪽, TopLeft, TopRight, 아래쪽 영역에 해당하는 여러 앵커를 클릭하면 마우스 움직임을 기반으로 사각형의 크기를 조절하는 코드가 있습니다. 아래쪽 왼쪽, 아래쪽 오른쪽.사각형의 크기를 조정하고 고정 비율로 스냅

그래서 사용자는 상단 앵커를 클릭하여 끌 수 있으며 마우스가있는 위치를 기반으로 사각형의 상단 좌표를 조정합니다. 다른 모든 앵커와 동일합니다.

실제로 작업에 따라 직사각형의 적절한면을 물리면서 고정 비율 (예 : 2 : 3 또는 5 : 7)을 적용하려고합니다. Left, Top, Right 및 Bottom 앵커에 대해 이렇게 했으므로 쉽습니다. 너비를 조정하면 비율에 따라 자동 크기를 조정해야하며 그 반대의 경우도 마찬가지입니다.

내가 느끼는 어려움은 사용자가 맨 아래 오른쪽 또는 상단 왼쪽 앵커와 같은 모서리를 끌 때입니다. 스냅 할 쪽을 선택하는 방법을 알아야합니다. 나는 마우스 좌표와 사각형의 왼쪽 위, 오른쪽, 아래를 갖는다.

case Anchor.BottomRight: 
    float maxRight = CursorPosition.X; 
    float maxBottom = CursorPosition.Y; 

    float newRight = Bounds.Left + (Bounds.Width * widthRatio); 
    float newBottom = Bounds.Top + (Bounds.Height * heightRatio); 

    if (newRight < maxRight) 
    { 
     Width = Height * widthRatio; 
    } 
    else 
    { 
     Height = Width * heightRatio; 
    } 

    break; 

2의 고정 비율의 예에서 : 다음 widthRatio는 0.666 것와 heightRatio 1.5 일 것 3

는 여기에 내가 해봤 코드입니다.

이 코드는 시간의 절반 만 작동하지만 물론 기본적으로 작업 할 확률은 50/50입니다. 나는 너비 또는 높이를 맞추기위한 적절한 조건을 확인해야한다.

답변

1

나는 그것을 알아 냈다.

if (Height * widthRatio <= Width) 
    Width = Height * widthRatio; 
else if (Width * heightRatio <= Height) 
    Height = Width * heightRatio; 

이렇게하면 고정 비율을 사용하여 Photoshop의 기능을 에뮬레이션합니다.

+0

좋아요! 두 경우 모두에 맞지 않으면 어떻게됩니까? 그렇다면 이미 비율이 적절합니까? –

+0

맞습니다. –

0

비율이 더 높은 것에 간단히 스냅하십시오. 어느 것이 더 큰지 직사각형의 모양을 유도해야합니다. 물론

bool calcHeight; 
if (widthRatio >= 1 && heightRatio >=1) 
{ 
    calcHeight= (widthRatio > heightRatio); 
} 
else if (widthRatio < 1 && heightRatio < 1) 
{ 
    calcHeight= (widthRatio < heightRatio); // because the width change is "bigger" 
} 
else if (widthRatio >= 1) 
{ 
    calcHeight= (widthRatio > (1.0/heightRatio)); // get them both > 1 
} 
else 
{ 
    calcHeight= (widthRatio < (1.0/heightRatio)); // get them both < 1 
} 

if (calcHeight) 
{ 
    Height = Width * heightRatio; 
} else { 
    Width = Height * widthRatio; 
} 

, 이것은 당신이 당신의 비율에 대해 무슨 말을하는지 알고 가정, 두 < 1, 하나 또는 다른 두> 1 - 그냥 당신이 모든 경우를 잡을 수 있는지 확인하십시오. 나는 그것이 이전 길이 (또는 너비)와 새로운 길이 (또는 너비)의 비율이라고 가정하고있었습니다.

한 가지 내가 매우 높습니다.은 사용자가 앵커를 드래그하는 동안이 아니라 배치 할 때 종횡비 제약을 강요하는 것이 좋습니다. 그렇게하면 사용자에게 훨씬 더 직관적 인 느낌이 들게됩니다.

+0

이것은 여전히 ​​한 쪽을 기준으로 만 스냅합니다. 마우스의 위치에 따라 너비 또는 높이를 기준으로 스냅하고 싶습니다. 예를 들어 Rectangle Marquee Tool이 고정 비율로 Photoshop에서 작동하는 방법이 있습니다. –

관련 문제