問題タブ [nsbezierpath]

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 投票する
1 に答える
1049 参照

objective-c - ココア: 2 点間の「ランダムな」線?

私の Cocoa 趣味プロジェクト (OSX 上) では、いくつかの点が特定されたビューがあります。このようなもの:

この 2 点の間に蛇行する (決して交差しない) 線を作成したいと思います。もちろん、ポイントは異なる場合があります。私はよく知ってNSBezierPathいますが、グラフィックスの達人ではありません。

これには2つのバリエーションがあります。の与えられNSBezierPath *p ...た設定[p moveToPoint:pt1]

  1. [p lineToPoint:ptx]ギザギザの曲がりくねった線を作成する場合に使用します。
  2. [p curveToPoint:ptx controlPoint1:cpt1 controlPoint2:cpt2]なめらかな蛇行ラインでご使用ください。

適切な制御点も計算する必要があるため、2 番目のケースはより困難に思えます。

最後に、線の蛇行量を調整できるようにしたいと思います。変数 like を 1 に設定すると、 と の間にint numOfIntermediatePoints滑らかな曲線ができます。10に設定すると、線の動きが大きくなります。最後の中間点が最終点から遠く離れないようにしたい (線の最後に大きな変化を残す)。pt1pt2numberOfIntermediatePoints

パーリンノイズを使ってみたのですが、線を終点に誘導するのが難しそうです。NSPoint項目の配列 (ケース 2 では、場合によっては制御点の配列)を計算し、それらをループして線を作成するのが理にかなっているように思えます。

これに対する最善のアプローチは何ですか?


アップデート

Tommy のアドバイスに従い、Raymond Hill の Javascript-Voronoiライブラリを Obj-C に移植することになりました。ここで見つけることができます: https://github.com/cheaton/objcvoronoi


別のアップデート

もう 1 つ更新 - ダイクストラのアルゴリズムを試してみたところ、私が達成しようとしていたことに対してやり過ぎであることがわかりました。最終的に、ランダム ラインのガイド ノードを指定できる単純化されたバリエーションを実装しました。この画像では、線の始点が左中央、線の終点が右中央にあり、(xMax * 0.33, 0) と (xMax * 0.66, yMax) にガイド ポイントがあります。

経路探索の例


最終更新

ぎざぎざを少し少なくするために、オプションの緩和アルゴリズムを追加しました。パフォーマンスは今のところ素晴らしいものではありませんが、私が考えている用途には問題ありません。

セル サイトに適用される緩和アルゴリズム

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

objective-c - NSString 描画と NSBezierPath 描画としての文字列

(潜在的に膨大な) 数のコンポーネントに対して効率的なヒット テストを実行する必要があるため、すべてのプリミティブをNSBezierPathインスタンスとして表現しました。これまでのところ、すべてうまくいっています。

現在、オブジェクトの変換NSString、特にビュー内での位置の反映に問題がありNSString (BezierConversions)ます。Apple の SpeedometerView の例のカテゴリを使用して、文字列をベジエ パスに変換しています。

文字列用に作成されたベジエ パスは見栄えがしNSStringますが、ビュー内のインスタンスの場所の位置に一致するように配置することはうまく機能しないため、この質問は実際には

  • NSBezierPathそしてtransformUsingAffineTransform:対。
  • NSAffineTransformビューに適用されたものとの組み合わせNSString drawAtPoint:

私のテストプロジェクトでは、些細なケースでも失敗します:

紫 = NSString drawAtPoint、灰色 = NSBezierPath 塗りつぶし

以下を使用して描画された文字列の灰色のベジエ表現:

と紫の文字列経由

同じ属性、同じ入力位置、ビュー内の異なる場所。
そして、回転したテキストではさらに悪化します。


更新 #1

によって返されるさまざまな境界ボックスに煮詰めているようです

  • NSString sizeWithAttributes:
  • NSBezierPath bounds

NSString現在、 boundingRectWithSizeを試しています

0 投票する
2 に答える
231 参照

objective-c - NSBezierPath(s) が特定の形状またはパターンを作成するかどうかを確認します

さて、ココア トラックパッド イベントを普遍的に受け入れるプログラムを作成し、これらのイベントを NSBezierPaths にマップします。たとえば、1 本の指からの NSBezierPath があり、それは円形 (っぽい) です。または、パスが右向きの矢印の形をしている場合もあります。または、実際には 2 つの垂直 NSBezierPath が並んでいる可能性があります。私がする必要があるのは、これらの NSBezierPaths を見て、それらが最も似ているパターン/形状を判断することです...誰かポインターを持っていますか?

ありがとう

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

cocoa - NSFont を使用して実行時にカスタム フォントを作成する方法

Cocoa を使用して実行時にカスタム フォントを作成、読み込み、使用できるようにする必要がある Mac アプリケーションを作成しています。クラスを徹底的に調査しましたがNSFont、既存のフォントをロードして単純なパラメーター (EG サイズ、ウェイト、間隔など) を変更するための API しか見つかりませんでした。

プログラムの実行中に、できれば を使用してカスタム グリフをゼロから作成しNSBezierPath、それらをオブジェクトなどに結合し、NSFontこのフォントを使用して画面にテキストを描画できるようにする必要があります。

これは可能ですか?フォント作成アプリケーションはこれを使用する必要があると思います。可能であれば、どのように行われますか?

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

macos - NSBezierPath で描画された図で NSTextField を正しく配置できません

私は初心者のココアプログラマーです。Lion 上の OS X 用の XCode 4.3.2 で開発されるプログラムのカスタム ビューに描画された幾何学的図の隣に、Cocoa NSTextField (カスタム ビューのサブビュー) をプログラムで配置したいと考えています。私の問題の例を単純にするために、ダイアグラムがテキストフィールドを囲むボックスであるとしましょう (NSTextField で利用可能なベゼルまたは境界線に加えて、さらに外側に、実際には、私のダイアグラムはより複雑になります)。テキスト フィールドとボックスが期待どおりに配置されていないことがわかりました (以下のコード例を参照)。なんで?

診断の例として、ドキュメント ベースではない単純なプロジェクトを作成しました。このプロジェクトでは、カスタム ビューをアプリケーション ウィンドウにドラッグし、以下のコードを追加して、IBOutlet からビューへの接続を確立しました。

AnAppDelegate.h:

AnAppDelegate.m:

このプログラムを実行すると、ボックスがテキスト フィールドの左下に移動して表示されます。これは、明らかに各次元のテキスト フィールドの高さです。私はそれが NSTextField サブビューの「下」に表示され、それによって隠されることを期待しています。(もちろん、それは本番プログラムでは賢明ではありません。)

さて、私が望むものに近づくために、上記のソースのコメントアウトされた行のコメントを外すと (テキスト フィールドのフレームではなくボックス パスに boxRect を追加する)、私のボックスはテキストから 10 単位だけアウトプットされます。フレーム - しかし、それを行うには、原点に +10 単位ではなく、-10 単位を追加する必要があると予想していました。

何が起こっている?

0 投票する
2 に答える
6552 参照

objective-c - ココアで線引き?

ボタンをクリックした後、特定のウィンドウに線を引くにはどうすればよいですか?

私はこれを使用しています:

しかし、それは私がそれを入れた場合にのみ機能します:

どうすればこれを解決できますか? 私の目標は、受け取った詳細(座標)に従って、線を描画できるアプリケーションを作成することです

ありがとうございました。

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

point - NSBezierPathのNSPoint

NSPointがNSBezierPath内にあるかどうかを確認する方法があるかどうか疑問に思いました。好き:

しかし、BezierPathを使用します。

よろしくお願いします、ベン

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

cocoa - 凹面 NSBezierPath

次の描画コードがあります。

これは次の結果になります。

スクリーンショット

内側の緑色の円が透明になるにはどうすればよいですか? 緑の NSColor を透明な色に置き換えることは機能しません。論理的です ;-)

NSBezierPath のインスタンスを交差させる方法や、これを別のアプローチで解決する方法はありますか?

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

cocoa - CGPathApplierFunctionの例外

私にCGPathRefは5つの要素があり、開始点を削除したいのですが、開始点が削除したい開始点のパスの終了と同じである4つの要素を持つパスがあります。

これは、例外を生成する私の関数です。

0 投票する
2 に答える
1966 参照

objective-c - NSBezierPath オブジェクトのすべてのポイントの x、y 座標を取得する方法はありますか?

オブジェクトがあるNSBezierPath場合、描画されたすべてのポイントの座標 (x、y) を取得する方法はありますか? NSRectパスに沿って移動したい。