問題タブ [graphicspath]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
2920 参照

gdi+ - GraphicsPath PathPoints および PathTypes 配列でアークの終点を決定する方法は?

次の PathPoints および PathTypes 配列があります (形式: X、Y、Type):

この GraphicsPath の物理的な外観は次のとおりです。2 つのアークは非常に区別できます。 代替テキスト

この GraphicsPath.PathData 配列が 2 つの AddArc コマンドによって作成されたことはわかっています。デバッガーでコードをステップ実行すると、最初の 4 つの PathData 値が最初の AddArc コマンドによって追加され、残りの 6 つのポイントが 2 番目の AddArc コマンドによって追加されたことがわかりました。

生のパスポイント/パスタイプ配列を調べることで (2 つの AddArc コマンドであることを事前に知らなかったので、開始点と終了点が 2 つあることがわかります)、各アークの開始点と終了点を特定したいと思います。

配列内のポイントを「再作成」するためにいくつかのベジエ計算を試みましたが、個別の開始点と終了点を決定する方法を決定するのに途方に暮れています。GDI+ がアーク間の始点/終点を結合しているように見え (それらは同じ点であり、アークは接続されています)、1 つのアークが終了し、別のアークが開始しているという事実が失われています。

何か案は?

0 投票する
3 に答える
5111 参照

.net - .NET GDI+: 角の丸い線を描く

点の配列が与えられると、たとえば GraphicsPath クラスを使用して、これらに基づいて簡単に線を描くことができます。

たとえば、次の点の配列...

...Z に似た線を表します。

しかし、ここで課題が発生します。たとえば、半径 10 ピクセルの丸い角を描く必要があります。コーナーとは、始点でも終点でもない線の点を意味します。この場合、 と に 2 つのコーナーが(0,100)あり(100,0)ます。

ベジエ、曲線、円弧をいじってみましたが、そのうちのいくつかは解決策を保持している可能性があります-水平だけでなく、すべての角度で描かれた線を処理できる必要があるため、まだ自分で見つけることができませんでしたまたは縦線。

LineJoinこれは幅の広いペンでのみ表示されるため、Penオブジェクトの を に設定するRoundだけでは不十分です。


編集:明確にするために、GraphicsPathクラスのベジェ、曲線、および円弧の機能をよく知っています。任意の数のポイントを取り、それらを丸みを帯びたコーナーでつなぎ合わせることができるアルゴリズムの構築に関して、より具体的なアドバイスを探しています。


解決

角の丸い線を表すパスを返す次の関数をまとめました。この関数は、ここにある LengthenLine 関数を使用します。

0 投票する
1 に答える
460 参照

python - GraphicsPath が常に更新されるわけではありません

このアプリケーションの単純な曲線は、ドラッグして画面の外に出すか、ウィンドウのサイズを変更したときにのみ表示されます。アプリケーションを起動したばかりのときは表示されず、ウィンドウを最大化または最小化すると表示も消えます。ただし、これらの時間は常に「Path Drawn」が出力されるため、すべての描画関数が呼び出されます。グラフィックスコンテキストの作成と描画に関して、私が間違っていることはありますか? そうでない場合、これらの特殊なケースでウィンドウを完全に更新するにはどうすればよいですか?

0 投票する
1 に答える
390 参照

c# - C#のフォーム領域を動的に削除/追加(削除をキャンセル)

リージョンとグラフィックパスクラスを使用してフォーム領域を動的に削除/追加(削除をキャンセル)するにはどうすればよいですか?

0 投票する
1 に答える
1391 参照

arrays - IronPython: ポイントの配列の作成と GraphicsPath への追加

ご挨拶;

System.Drawing.Point インスタンスの配列を正しくインスタンス化し、WinForms アプリケーションで IronPython を使用してポイントの配列を GDI+ GraphicsPath インスタンスに追加するのに少し問題があります。次のコードは、SharpDevelop 3.2 と IronPython 2.6 で正しくコンパイルまたはビルドされます。

上記のコードに基づいて、2 つの垂直な青い線が描画され、各線の最後に小さな楕円が表示されることを期待していました。上記の現在の scipting コードを使用すると、GDI+ ランタイム エラーの赤い X が描画されます。何が欠けているか、間違っていますか? また、System.Drawing.Point 値の配列をインスタンス化する、より簡単で簡潔な方法はありますか?

お時間を割いてご協力いただき、ありがとうございました...

0 投票する
1 に答える
557 参照

winforms - 「アウトライン」を含むパスからクリップ領域を作成するにはどうすればよいですか?

角の丸い長方形のGraphicsPath(下の赤いアウトライン画像を参照)を作成し、これをグラフィックを描画するときのクリップ領域として、およびフォームの領域として使用しています。

残念ながら、パスは見た目は良いですが、リージョンとしてはうまく機能しません(下の黒い実線の画像を参照)

パスのすべての「アウトライン」ピクセルを含むパスからクリッピング領域を生成する方法はありますか?ビットマップを生成し、これを処理してリージョンを作成する必要がありますか?

角丸長方形のパス:

角丸長方形

クリップ領域として使用する場合:

クリップ領域

不一致(赤いピクセルはパスのアウトラインにありますが、領域の外側にあります。青いピクセルは両方にあります):

オーバーラップ

0 投票する
1 に答える
2045 参照

geometry - 多角形の三角形分割の反対は何ですか?

2D 三角形分割を行った後、いくつかの三角形が同じ色になっているため、それらを再結合して、同じ色のグラフィックス パスに描画したいと考えています。三角形を 1 つずつ描画すると、一部のグラフィック レンダラーで三角形の間に継ぎ目が表示されることがわかりました (少なくともアンチエイリアシングや透明度が関係している場合)。

では、(重なり合っていない) 三角形のセットを取得して、穴やバラバラのポリゴンを含む可能性のあるグラフィックス パスを作成するにはどうすればよいでしょうか?

やみくもに三角形をグラフィックス パスに追加すると、塗りつぶしにはかなりうまく機能しますが (もちろんストロークには適していません)、これらの余分な内部ポイントをエクスポートするのは適切ではありません。

0 投票する
3 に答える
1468 参照

c# - GraphicsPath.IsClockWise()拡張メソッド

を時計回りに巻くか反時計回りに巻くGraphicsPathかを決定するオブジェクトの拡張メソッドを作成する必要があります。GraphicsPath

このようなもの:

foreach注:ここでのポイントが必要だと思いますGraphicsPathが、もっと良い方法があれば、遠慮なく提供してください。

この理由は、隣接するGraphicsPathの重複するセクションが「埋められる」()または「穴」( )FillModeであるかどうかを決定するためです。ただし、これは、隣接するGraphicsPathが同じ方向に巻かれている場合にのみ当てはまります。GraphicsPathWindingAlternate

フィルモードワインディングvsオルタネート

2つのパスが反対方向に巻かれている場合は、に設定してもFillModeWinding不要な)穴ができます。

興味深いことに、GraphicsPath.Reverse()にはパスの方向を変更できるメソッドがあります(これで問題が解決します)が、パスの方向を知らずにGraphicsPathをいつ反転する必要があるかを知ることはできません。

この拡張方法を手伝ってもらえますか?

0 投票する
1 に答える
2989 参照

c# - C# で GEO 座標を使用してマップを描画する

彼、

LAT/LNG 座標を使用して C# で Countrymap を描画したいと考えています。緯度/経度をピクセルに変換する必要があります。どの方法が最適ですか? 「マップ」を描画できますが、非常に小さく、ウィンドウの中央にはありません。

誰か助けてくれませんか?私はこのコードを持っています:

0 投票する
5 に答える
2908 参照

c# - C#でのGraphicsPathポリゴンフィッティング

任意の形状のGraphicsPathを定義されたスペース(ほとんどの場合、長方形または円)に「合わせる」必要があります。

現在、Matrixオブジェクトを使用してGraphicsPathをスケーリングしていますが、スケーリングは正常に機能しますが、問題はスケール係数を取得することです。

私が思いつくことができる最良のテクニックは、GraphicsPathをRegionに変換し、RectangleまたはCircleをRegionに変換し、以下を実行することです。

次に、次のことを確認します。

ただし、これは、形状が大きすぎて収まらないかどうかを示しているだけなので、形状を小さくして、再試行する必要があります(場合によっては何度も何度も)。

ポリゴンGraphicsPathが完全に円に収まるように、スケーリング係数を即座に計算する簡単な方法はありますか?結果は、円内に完全に収まる最大のポリゴンになるはずです。