0

いくつかのオブジェクトを含むキャンバスがあり、入力された数値に基づいてオブジェクトを回転できます。0 は画面の上向き、90 は右向き、180 は下向き、270 は左向きです。0度の位置を変更する方法はありますか? 今のところ、キャンバスの背景画像は北がまっすぐだと想定していますが (これは地図です)、北が 0 度左にある画像がある場合、オブジェクトを適切に回転させることができません。元は0度です。0 度をユーザーに選択してもらえないかと思ったのですが、ポイントを選択するだけでは必要な情報を取得できないようです。何か案は?

例:私は地図を持っています。0 度は左です (270 になります)。ユーザーはこれを知っていますが、プログラムは知りません。プログラムは、0 度がまだ北であると認識しています。したがって、ユーザーが自分の方向を表示したい場合は、2 つの 0 度のオフセットを自分の方向に追加する必要があります。ただし、そのオフセットを取得する方法がわかりません。

最初のアイデア:キャンバスの中心点を取得し、ユーザーに 0 の点をクリックしてもらい、新しい 0 に面するために中心点が回転する必要がある角度を取得することを考えています。

4

2 に答える 2

2

ビューモデルがある場合は、計算されたプロパティにバインドします。

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; }
}

これで、設定可能な北向きとユーザー定義の向きができました。

mvvm を使用しないカスタム コントロールがある場合は、DependecyProperties と PropertyChanged コールバックを使用して同じことを実現できます。

于 2015-03-09T14:14:04.697 に答える
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メソッドを (相対的な回転角度で) 使用して、「実際の」回転を取得できます。

于 2015-03-09T13:24:10.080 に答える