2015-03-09 2 views
0

У меня есть холст с некоторыми объектами на нем, и я могу повернуть их на основании введенного числа, где 0 - вверх на экране, 90 - справа, 180 - вниз и 270 - влево. Есть ли способ изменить, где 0 градусов? Прямо сейчас я предполагаю, что фоновое изображение холста имеет север как прямо вперед (это карта), но если у меня есть изображение, где 0 градусов на север слева, я не могу правильно повернуть мои объекты, если я не могу изменить, где оригинал 0 градусов есть. Я думал, что мог бы выбрать пользователя, где 0 градусов, но мне кажется, что я не могу получить необходимую информацию, просто пользователь, выбрав точку. Есть идеи?Изменить, где 0 градусов вращение?

Пример: У меня есть карта. 0 градусов находится слева (где 270 будет). Пользователь знает это, но программа этого не делает. Программа считает, что 0 градусов по-прежнему на севере. Поэтому, если пользователь хотел отобразить свой заголовок, ему пришлось бы добавить смещение двух градусов в его заголовок. Не уверен, как получить это смещение.

1-я идея: Я думаю, если я получу центральную точку холста и попрошу пользователя щелкнуть точку, где находится 0, и получить угол, в котором центральная точка должна вращаться, чтобы она стояла перед новый 0.

+0

Добавить в RotateTransform на холсте? – Clemens

+0

", но, похоже, я не могу получить необходимую информацию, просто выбрав пользователя." Зачем? если у вас есть «смещение» для вращения, как вы и предполагали, он должен сделать трюк – Loki

+0

Я бы попытался перейти от чего-то типа «Повернуть (градусы)» к «Повернуть (градусы, смещение)» – Alex

ответ

0

Как насчет:

private double neutralPosition; 

public void SetNeutralPosition(double position) 
{ 
    this.neutralPosition = position; 
} 

public double Rotate(double angle) 
{ 
    return this.neutralPosition + angle; 
} 

Так идея: использовать SetNeutralPosition, чтобы установить, где ваш «0» является относительно REAL 0 градусов позиции. Затем вы можете использовать метод Rotate (с вашей относительной степенью вращения), чтобы получить «реальное» вращение.

+0

Но как бы я мог установить, где находится относительный 0? У меня есть формула, чтобы получить смещение, а затем поверните все, основываясь на этом, это просто получение этого относительного 0 в первую очередь. – pfinferno

2

, если у вас есть ViewModel, а затем привязать его к рассчитанному собственности:

XAML:

<RotateTransform Angle="{Binding FinalRotationAngle}" /> 

C#:

private double _northOrientationAngle; 
private double _mapRotationAngle; 


public double MapRotationAngle 
{ 
    get { return _mapRotationAngle; } 
    set 
    { 
     _mapRotationAngle= value; 
     OnPropertyChanged("MapRotationAngle"); 
     OnPropertyChanged("FinalRotationAngle"); 
    } 
} 

public double NorthOrientationAngle 
{ 
    get { return _northOrientationAngle; } 
    set 
    { 
     _northOrientationAngle= value; 
     OnPropertyChanged("NorthOrientationAngle"); 
     OnPropertyChanged("FinalRotationAngle"); 
    } 
} 

public double FinalRotationAngle 
{ 
    get { return NorthOrientationAngle + MapRotationAngle; } 
} 

Теперь у вас есть конфигурируемый север ориентации, а также определенные пользователем ориентации ,

если у вас есть пользовательский элемент управления witout MVVM вы можете достичь того же с помощью DependecyProperties и PropertyChanged обратного вызова

Смежные вопросы