2011-08-13 8 views
2

ヒットテストの方法はありますか?私はテキストの描画た場合すなわち、例えばある「画面で、バウンディングボックス内、どのように私はこれらの空白の長方形(空白)の大きさと位置を知ることができる「こんにちはグラフを!」:上記Cocoa(Mac)のヒットテストテキスト?

  • 空白の四角形文字「E」
  • 「G」の前に文字「P」
  • 文字以下ブランク矩形「H」空間まで
  • 上記まで「O」の文字を上方から及ぶブランク長方形

など、あなたは考えを得る。

つまり、実際のテキストが占める領域と実際に空白の領域を調べる方法。

プラットフォーム(グラフィックスライブラリ)はMac OS XのCocoaで、キャラクタセットはUnicode(未処理のCoreGraphics APIは除外されている可能性があります)であり、フォントはCocoaが使用できるものであれば何でも構いません。事前

+0

他の視点から見ると、テキストを最小限に囲む領域(矩形)のリストを取得します。 – adib

答えて

1

ありがとうございます。このようなNSTextViewの文字の矩形を取得することができます:あなたが欲しいNSGlyphを取得し、その後

//Get the range of characters, which may be different than the range of glyphs 
NSRange range = [[textView layoutManager]glyphRangeForCharacterRange:NSMakeRange(charIndex, 0) actualCharacterRange:NULL] 

//Get the rect of the character 
NSRect rect = [[textView layoutManager]boundingRectForGlyphRange:range inTextContainer:[textView textContainer]]; 

を:

NSGlyph glyph = [[textView layoutManager]glyphAtIndex:range.location]; 

とドローそれはNSBezierPath

NSBezierPath *path = [NSBezierPath bezierPath]; 
[path appendBezierPathWithGlyph:glyph inFont:myFavoriteFont]; 

次に、その境界のパスを照会:

NSRect actualRect = [path bounds]; 

あなたはそれら2つの四角形を比較することができます。

NSLayoutManager Class ReferenceText System Overview、およびText Layout Programming Guideをご覧ください。

+0

これは、ソリューションをテキストビューのみに制限します。または縮退した場合は、ヒットテストするすべてのテキストの目に見えないテキストビューを作成します(大量のテキストを処理するときにはスケーラビリティがない可能性があります)。 – adib

+0

最初のステップを実行して、 'NSBezierPath'でグリフを描画してみてください。 – spudwaffle

1

完全透明のビットマップにテキストを描画し(CGBitmapContext経由)、特定のポイントが透明であるかどうかを確認してください。

あなたは長方形のリストを(それは2Dグラフィックスで地域と呼ばれる)が必要な場合は、あなた自身やCoreGraphicsとココアは領域を持っていないとして、ライブラリのためのGoogleは(少なくとも、文書化することを実装する必要があります)。

関連する問題