DOBON.NETプログラミング道掲示板
(現在 過去ログ1 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33306 / inTopicNo.1)  IsVisible の具体的な補正方法を教えてください
  
□投稿者/ 田舎のPG 一般人(1回)-(2016/03/22(Tue) 15:48:18)
  • アイコン環境/言語:[環境:Windows 7/8.1 言語:VB.NET ] 
    分類:[.NET] 

    Region と IsVisible を使って、特定の Point が、Region 内に含まれるかと言うプログラムを
    作成していますが、「際」の判定が少々怪しいので、上手く回避する方法が無いか相談したく
    投稿させて頂きました。(OS:Windows 7/8.1 環境:Visual Studio 2013 Express 言語:VB.NET)

    ●プログラム
    Dim lstPoint As New List(Of Point)
    Dim lstPType As New List(Of Byte)

    ' 座標の登録
    lstPoint.Add(New Point(100, 100))
    lstPoint.Add(New Point(200, 100))
    lstPoint.Add(New Point(200, 200))
    lstPoint.Add(New Point(100, 200))

    ' パスのタイプ
    lstPType.Add(PathPoint.Line)
    lstPType.Add(PathPoint.Line)
    lstPType.Add(PathPoint.Line)
    lstPType.Add(PathPoint.Line)

    ' GraphicPath の作成
    Dim gptGPath As New GraphicsPath(lstPoint.ToArray, lstPType.ToArray, FillMode.Alternate)
    Dim myRegion As New Region(gptGPath)

    ' ◆怪しいのは、ココから◆
    If (myRegion.IsVisible(New Point(100, 100)) Then
    MsgBox("座標 100, 100 は Region に含まれ【る】")
    Else
    MsgBox("座標 100, 100 は Region に含まれ【ない】")
    End If

    If (myRegion.IsVisible(New Point(199, 199)) Then
    MsgBox("座標 199, 199 は Region に含まれ【る】")
    Else
    MsgBox("座標 199, 199 は Region に含まれ【ない】")
    End If

    If (myRegion.IsVisible(New Point(200, 200)) Then
    MsgBox("座標 200, 200 は Region に含まれ【る】")
    Else
    MsgBox("座標 200, 200 は Region に含まれ【ない】")
    End If

    -----------------------------------------------------------
    上記ソースを実行すると
    100, 100 は、"〜含まれ【る】"のメッセージが出ます。
    199, 199 は、"〜含まれ【る】"のメッセージが出ます。
    200, 200 は、"〜含まれ【ない】"のメッセージが出ます。

    座標を FillRectangle や FillPolygon で、ペイントすると
    200, 200 の位置はペイントされますが、IsVisible では
    Region 外として扱います。

    この例の様に、簡単な矩形では無く、もっと複雑な図形の場合
    単純な補正では Region 内と言う判定を出すのは困難です

    どの様に補正を掛ければ良いのでしょうか?

引用返信 削除キー/
■33307 / inTopicNo.2)  Re[1]: IsVisible の具体的な補正方法を教えてください
□投稿者/ Hongliang 大御所(512回)-(2016/03/22(Tue) 17:12:57)
  • アイコン> 座標を FillRectangle や FillPolygon で、ペイントすると
    > 200, 200 の位置はペイントされますが、IsVisible では
    > Region 外として扱います。

    はて、FillRegionにせよFillRectangle(, new Rectangle(100, 100, 100, 100))にせよ、
    FillRectangle(, new Rectangle(200, 200, 1, 1))は含まれませんが。
    縦横ともに100〜199までの100ピクセルが塗りつぶされますね。
    (少なくとも、FormのPaintイベントでe.Graphics相手に、Graphicsのプロパティをいじらずに描画したときは)
引用返信 削除キー/
■33308 / inTopicNo.3)  Re[2]: IsVisible の具体的な補正方法を教えてください
□投稿者/ 田舎のPG 一般人(2回)-(2016/03/22(Tue) 18:07:26)
  • アイコンNo33307に返信(Hongliangさんの記事)
    >>座標を FillRectangle や FillPolygon で、ペイントすると
    >>200, 200 の位置はペイントされますが、IsVisible では
    >>Region 外として扱います。
    >
    > はて、FillRegionにせよFillRectangle(, new Rectangle(100, 100, 100, 100))にせよ、
    > FillRectangle(, new Rectangle(200, 200, 1, 1))は含まれませんが。
    > 縦横ともに100〜199までの100ピクセルが塗りつぶされますね。
    > (少なくとも、FormのPaintイベントでe.Graphics相手に、Graphicsのプロパティをいじらずに描画したときは)


    > Hongliang さん

    早速の回答、ありがとうございます。
    塗りつぶした時は、確かに 100,100〜199,199 を塗りつぶしていました。
    DrawRectangleだと、100,100〜200,200 に線を引いていました。
    勘違いをしていました。

    ありがとうございました m(_ _)m

解決み!
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/


- Child Tree -