2012-01-11 13 views
2

私はQtでアフィン変換を使うことができることを知っています。しかし、完全なカスタムグローバル変換メソッドを設定することも可能ですか?Qt4:QGraphicsScene /ビューとカスタム変換メソッド?

使用例:地理座標(QGraphicsScene/Viewのコンテキスト内)で投影された地理的地点(緯度、経度)を描画するか、マウスイベントなどを取得します。私は(少しの擬似コード)のようにそれを使用する瞬間

MyPoint pt = myProjection(geographicPoint); 
QPoint(pt.x, pt.y); 

// or, to make it shorter, but essentially it's the same 
QPoint p = myProjection(geoPoint); 

geoPoint = myBackProjection(mouseEvent.getPoint()); 

そしてQGraphicsView(または誰が責任がある)ように、私がどこかに私の形質転換法を「登録」したいのですがスクリーンに何かを描画する前に、これらのメソッドを内部的に使用します。

それは意味がありません(距離を計算するなど、私が期待していない問題が発生するため)か、それは可能ですか?

答えて

0

QGraphicsViewはQTransform行列を使用します。これは3x3行列です。したがって、線形変換のみが可能です。 Qt5/QtQuickまたはQtQuick3dでは、QMLシェーダプログラムでこれを実現できます。

「純粋な」Qt4では、QGraphicsView、QAbstractScrollAreaまたはQGraphicsSceneから独自のカスタムクラスを派生させ、ペイントメソッドをオーバーライドする必要があります。

+0

ありがとうございました!私はこのトピックについてもう一度考えました。そして、それはデカルト座標に固執するのが最悪ではなく、多くの問題を取り除き、私が慣れていたように距離を計算し、ベクトルを定義することができます。あるいは、JOSMやMerkaartorのようなプロジェクトのソースコードを掘り下げて、内部で何を使用しているかを見てみましょう。 –

0

この変換をQGraphicsItem shape()メソッドでカプセル化するのがよい方法です。緯度と経度のペアとして定義されたポイントがあると仮定すると、それはlat lonのペアを格納しますが、そのシェイプメソッドは投影された値(通常はピクセル相当)を返します。

気に入ったら、QPointをサブクラス化して地理的に認識できるようにして、latlonで作成しますが、投影された値はx、yプロパティで公開されます。

関連する問題