泥庭

2015年3月9日

Thicknessの125000倍の長さのGeometryをOnRenderで描画

Filed under: .NET, C#, WPF — タグ: , — yone64 @ 11:15 PM
前回の続きっぽいもの。

CustomControl等でOnRenderをOverrideして描画することが多々あると思いますが(ありますよね!?)
その際は、少し回避方法が異なります。(というか、かなり謎です)
protected override void OnRender(DrawingContext drawingContext)
{
    var geometry = new StreamGeometry();
    using (var context = geometry.Open())
    {
        context.BeginFigure(new Point(0, 100), false, false);
        context.LineTo(new Point(125000, 100), true, false);
    }

    drawingContext.DrawGeometry(null, new Pen(Brushes.Black, 1), geometry);

    base.OnRender(drawingContext);
}
まず、描画できるパターン。125000倍なので、描画可能です。
protected override void OnRender(DrawingContext drawingContext)
{
    var geometry = new StreamGeometry();
    using (var context = geometry.Open())
    {
        context.BeginFigure(new Point(0, 100), false, false);
        context.LineTo(new Point(125000.1, 100), true, false);
    }

    drawingContext.DrawGeometry(null, new Pen(Brushes.Black, 1), geometry);

    base.OnRender(drawingContext);
}
125000倍を超えると描画不可能です。(Lineと同じ)
protected override void OnRender(DrawingContext drawingContext)
{
    var geometry = new StreamGeometry();
    using (var context = geometry.Open())
    {
        context.BeginFigure(new Point(0, 100), false, false);
        context.LineTo(new Point(125000.1, 100.1), true, false);
    }

    drawingContext.DrawGeometry(null, new Pen(Brushes.Black, 1), geometry);

    base.OnRender(drawingContext);
}
ところが、傾けても描画できるようになりません。
protected override void OnRender(DrawingContext drawingContext)
{
    var geometry = new StreamGeometry();
    using (var context = geometry.Open())
    {
        context.BeginFigure(new Point(0, 100), false, false);
        context.LineTo(new Point(0.1, 100), true, false);
    }

    var geometry2 = new StreamGeometry();
    using (var context = geometry2.Open())
    {
        context.BeginFigure(new Point(0, 200), false, false);
        context.LineTo(new Point(375000, 200), true, false);
    }

    drawingContext.DrawGeometry(null, new Pen(Brushes.Transparent, 1), geometry);
    drawingContext.DrawGeometry(null, new Pen(Brushes.Red, 1), geometry2);

    base.OnRender(drawingContext);
}
ちなみに、一つGeometryをDummyで描画しておくと、2つ目のGeometryに対する制限はなくなってるように見えます。(謎謎
広告

コメントする »

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

WordPress.com Blog.

%d人のブロガーが「いいね」をつけました。