「Xamarin.Mac/NSViewの座標系を左下原点から左上原点に変更する」の版間の差分
ページの作成:「NSViewでは標準で「左下が原点で右が+Xで上+Y」となっている。 いわゆる小学校の算数で習う座標系だ。 エクセルのグラフな...」 |
編集の要約なし |
||
| (同じ利用者による、間の3版が非表示) | |||
| 3行目: | 3行目: | ||
[[エクセル]]のグラフなども基本はこれである。 | [[エクセル]]のグラフなども基本はこれである。 | ||
しかし[[コンピューター]]の世界ではなぜか古くから「左上が原点で下方向が+Yで右方向が+X」という座標系が一般的となっている。 | しかし[[コンピューター]]および[[コンピューター・グラフィックス]]の世界ではなぜか古くから「左上が原点で下方向が+Yで右方向が+X」という座標系が一般的となっている。 | ||
PC- | [[PC-9801]]の[[GRAM]]も[[Windows]]の[[GDI]]も[[DirectX]]も皆これである。 | ||
このため[[Windows]]などから[[アプリ]]を[[移植]]する際にこの点を考慮しないで[[コピペ]]すると逆さま表示になる。 | |||
しかし根本の[[ソースコード]]が壮大すぎて手を入れるのが難しい場合もある。 | しかし根本の[[ソースコード]]が壮大すぎて手を入れるのが難しい場合もある。 | ||
そういうときはNSViewのIsFlippedプロパティをオーバーライドして常に「true」を返すようにすればよい。 | そういうときはNSViewのIsFlippedプロパティをオーバーライドして常に「true」を返すようにすればよい。 | ||
この設定は、NSGraphcis系のみならず、[[CoreGraphics]]にも反映される。 | |||
<source lang="csharp"> | <source lang="csharp"> | ||
| 15行目: | 15行目: | ||
public partial class FlippedView : AppKit.NSView | public partial class FlippedView : AppKit.NSView | ||
{ | { | ||
// trueで左上原点 | |||
// falseで左下原点 | |||
public override bool IsFlipped { get { return true; } } | public override bool IsFlipped { get { return true; } } | ||
// 描画 | |||
public override void DrawRect(CoreGraphics.CGRect dirtyRect) | |||
{ | |||
var cgContext = NSGraphicsContext.CurrentContext.GraphicsPort; | |||
cgContext.MoveTo(100, 100); | |||
cgContext.AddLineToPoint(200, 200); | |||
cgContext.StrokePath(); | |||
} | |||
} | } | ||
</source> | </source> | ||
| 28行目: | 39行目: | ||
* [[Xamarin.Mac/スクリーンキャプチャを撮る]] | * [[Xamarin.Mac/スクリーンキャプチャを撮る]] | ||
* [[Xamarin.Mac/ディスプレイの物理サイズを取得する]] | * [[Xamarin.Mac/ディスプレイの物理サイズを取得する]] | ||
* [[Xamarin.Mac/NSViewControllerからNSWindowを取得する]] | |||
== 参考文献 == | == 参考文献 == | ||