現在、マップエディタのワイヤ関連機能の最終的な仕上げを行っています。右クリックでカーソル下のワイヤを拾う処理で、少し困ってしまいましたので、その悩みを打ち明けます💦
まず、ワイヤは線と面積の2種類があります。線の場合は、頂点ポイントと2点間を繋ぐ直線ポイントの取得は、既に頂点追加処理で出来ていましたので、その取得したポイントに含まれていれば、設置済みワイヤを拾ったと判定できます。問題は、ラインが交差した状態の面積ワイヤです。
プログラムでの面積判定は、なげなわ機能で既に実装済みでした。そこでそれを呼び出して、内側のポイントリストを取得して、指定ポイントが含まれるかどうかと処理したところ、上記の空白ポイントが「含まれる」と判定されてしまうのです。
いや、実際には含まれるのが正しいと思っています。では、真ん中の隙間を塗りつぶす方法がないかと検討したのですが、C# の FillPolygon を使っている限りは方法がありませんでした。既に Drawing2D.FillMode は Winding も Alternate も試しています。全ての交点を取得して、なげなわと同じ処理を通す事も考えましたが、内部座標系はキャラ座標なのに、交点は表示座標系でズレているのでそれも叶わず。
今までほぼ妥協せず作り続けてきましたが、これは流石に諦めるしかないですよね…。
※ 一見普通に見えるお洒落なマリオタイはいかが?
まず、ワイヤは線と面積の2種類があります。線の場合は、頂点ポイントと2点間を繋ぐ直線ポイントの取得は、既に頂点追加処理で出来ていましたので、その取得したポイントに含まれていれば、設置済みワイヤを拾ったと判定できます。問題は、ラインが交差した状態の面積ワイヤです。
プログラムでの面積判定は、なげなわ機能で既に実装済みでした。そこでそれを呼び出して、内側のポイントリストを取得して、指定ポイントが含まれるかどうかと処理したところ、上記の空白ポイントが「含まれる」と判定されてしまうのです。
いや、実際には含まれるのが正しいと思っています。では、真ん中の隙間を塗りつぶす方法がないかと検討したのですが、C# の FillPolygon を使っている限りは方法がありませんでした。既に Drawing2D.FillMode は Winding も Alternate も試しています。全ての交点を取得して、なげなわと同じ処理を通す事も考えましたが、内部座標系はキャラ座標なのに、交点は表示座標系でズレているのでそれも叶わず。
今までほぼ妥協せず作り続けてきましたが、これは流石に諦めるしかないですよね…。
※ 一見普通に見えるお洒落なマリオタイはいかが?
コメント
コメント一覧 (3)
http://csharphelper.com/blog/2020/06/create-a-contain-fillmode-for-filling-polygons-in-c/
内藤時浩
がしました