2009-03-13 20 views
1

私はNSOpenGLViewのタイムスタンプでいくつかのデータをプロットしようとしています。また、ハイライトボックスなど、データの上に非OpenGL Cocoa要素をオーバーレイしたいとします。私の難しさは、座標系を整列させることです。ココア/ OpenGL座標変換

私のデータのタイムスタンプは、エポックから秒単位です。値は-2から2まで実行されます。gluOrtho(startTime, endTime, -2, 2)を実行することによって、OpenGLで生データをあまりにも難なくプロットすることができます。難しいのは、スケーリングとココアの描画とを混ぜようとするときです。

簡潔にするために、私は線の例を使用します。ここでは行数秒で(2/18/09 at 13:00:08, -1.5)から(2/18/09 13:00:13, 1.7)に(OpenGLと)プロット、または(1234980008, -1.5)(1234980013, 1.7)にある:

Scale=1 http://ccg.cc.gt.atl.ga.us/~anjiro/tmp/scale1.png

議論のために、まったく同じ、のは、私が今ラインをオーバーレイするためにココアを使用したいとしましょうOpenGLの行の上に表示されます。私は正確に同じ座標、すなわち(1234980008, -1.5) -> (1234980013, 1.7)でそれを行うことができることを好むでしょう。

これが最初の質問です。今、私は詳細を見たいので、私は拡大したい:

Scale=2 http://ccg.cc.gt.atl.ga.us/~anjiro/tmp/scale2.png

私はまだ私の同じココアラインを描きたいが、私はまた、このウィンドウに表示何、データの座標で、知っておく必要があります私は余分なデータを描画する必要はありません。

私はさまざまな解決策を試しましたが、何もできません。これはできますか?もしそうなら、どうですか?そうでない場合、私は代わりに何をすべきですか?

答えて

1

あなたは既に - [NSView bounds]を使ってビューの矩形を取得していることを知っていますね。 したがって、あなたが得る次correspondances:

  • たstartTime < - > bounds.origin.x
  • endTimeは< - > bounds.origin.x + bounds.size.width
  • (-2)< - > bounds.origin.y
  • (2)< - > bounds.origin.y + bounds.size.height

私は間違っていないよ場合は、この方法は、変換する必要がありますNSOp質問の第二部分について

- (NSPoint) pointWithTime:(long)time value:(float)value 
{ 
    NSPoint point; 

    point.x = [self bounds].origin.x 
     + [self bounds].size.width * ((time - startTime)/(endTime - startTime)); 
    point.y = [self bounds].origin.y 
     + [self bounds].size.height * ((value - minValue)/(maxValue - minValue)); 

    return point; 
} 

(のminValue = -2とmaxValueの= 2を有する)

:視点にENGLポイントに提供RECT使用 - [NSViewののdrawRectを:]メソッドを使用して、ビューのどの部分をリフレッシュするかを知ることができます。この点について非常に綿密なココアドローイングガイドの詳細を設定してください。このメソッドは、ビューのさまざまな部分を描画するために複数回呼び出されることがあります。

+0

回答ありがとうございます。残念ながら、このメーリングリストの記事http://tinyurl.com/bttty7によると、境界矩形はNSOpenGLViewには何の影響も与えません。 – Dan

関連する問題