特許第6869249号(P6869249)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社ワコムの特許一覧

特許68692492つのタイプのインクベクトルデータを生成して選択的に出力する方法及びシステム
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6869249
(24)【登録日】2021年4月15日
(45)【発行日】2021年5月12日
(54)【発明の名称】2つのタイプのインクベクトルデータを生成して選択的に出力する方法及びシステム
(51)【国際特許分類】
   G06F 3/041 20060101AFI20210426BHJP
   G06F 3/0488 20130101ALI20210426BHJP
【FI】
   G06F3/041 595
   G06F3/0488 130
【請求項の数】20
【全頁数】35
(21)【出願番号】特願2018-538804(P2018-538804)
(86)(22)【出願日】2017年1月11日
(65)【公表番号】特表2019-512118(P2019-512118A)
(43)【公表日】2019年5月9日
(86)【国際出願番号】JP2017000584
(87)【国際公開番号】WO2017138283
(87)【国際公開日】20170817
【審査請求日】2019年11月22日
(31)【優先権主張番号】15/043,300
(32)【優先日】2016年2月12日
(33)【優先権主張国】US
(31)【優先権主張番号】15/391,483
(32)【優先日】2016年12月27日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】000139403
【氏名又は名称】株式会社ワコム
(74)【代理人】
【識別番号】100130982
【弁理士】
【氏名又は名称】黒瀬 泰之
(72)【発明者】
【氏名】ペクトフ プラメン
(72)【発明者】
【氏名】アンゲロフ ブラニミール
(72)【発明者】
【氏名】パークス ケビン ルイス
【審査官】 梅本 章子
(56)【参考文献】
【文献】 特許第5775240(JP,B1)
【文献】 特開2009−181514(JP,A)
【文献】 米国特許出願公開第2015/0091940(US,A1)
【文献】 国際公開第2015/075930(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/03
G06F 3/041
G06F 3/0488
(57)【特許請求の範囲】
【請求項1】
ユーザによって入力されたストロークを表す2つのタイプのベクトルデータを選択的に出力するコンピュータ実装方法であって、
位置入力センサを備えた装置においてタイプ1のストロークオブジェクトを生成することであって、前記タイプ1のストロークオブジェクトは、前記位置入力センサに対してポインタを操作するユーザによって形成されるストロークであり、各タイプ1のストロークオブジェクトは、前記ポインタが位置入力センサに対して検出可能に配置されるペンダウン時に開始し、前記ポインタが前記位置入力センサから取り除かれるペンアップ時に終了する、タイプ1のストロークオブジェクトを生成することと、
タイプ1のストロークオブジェクトのリアルタイムレンダリングを開始することであって、前記タイプ1のストロークオブジェクトによって表されるストロークの前記ペンダウン時の後に前記ペンアップ時における前記ストロークの完了を待たずにタイプ1のストロークオブジェクトのリアルタイムレンダリングを開始することと、
タイプ1のストロークオブジェクトのペンダウン時からペンアップ時までのストロークを表すタイプ1のストロークオブジェクトの完了の後に、前記タイプ1のストロークオブジェクトをタイプ2のストロークオブジェクトに変換することであって、前記タイプ2のストロークオブジェクトは前記ストロークの境界を定義するセグメントのセットである、前記タイプ1のストロークオブジェクトをタイプ2のストロークオブジェクトに変換することと、
出力要求に応答して前記タイプ2のストロークオブジェクトをエクスポートすることとを含む方法。
【請求項2】
請求項1に記載のコンピュータ実装方法であって、
前記タイプ1のストロークオブジェクトを生成することは、
前記位置入力センサによって検出されるペンイベントデータを順次に受け取ることと、
受け取ったペンイベントデータに含まれる座標値に基づいてポイントオブジェクトを順次に生成することであって、前記ポイントオブジェクトは、タイプ1のストロークオブジェクトを形成するように、定義された曲線補間アルゴリズムに従って曲線セグメントを補間する制御点として作用し、各ポイントオブジェクトは幅情報に関連付けられる、ポイントオブジェクトを順次に生成することと、
タイプ1のストロークオブジェクトを、前記タイプ1のストロークオブジェクトによって表されるストロークを定義する前記ポイントオブジェクトの集合として生成することとを含む方法。
【請求項3】
請求項2に記載のコンピュータ実装方法であって、
前記幅情報は、前記タイプ1のストロークオブジェクトによって表されるストロークの幅を定義するのに用いられるポイントオブジェクトの半径を示す方法。
【請求項4】
請求項2に記載のコンピュータ実装方法であって、
前記タイプ1のストロークオブジェクトのリアルタイムレンダリングを開始するステップは、
前記タイプ1のストロークオブジェクトの各曲線セグメントを複数の分割ポイントiにセグメント化することと、
前記幅情報を前記分割ポイントiのそれぞれに適用して、前記タイプ1のストロークオブジェクトを形成する2つの輪郭曲線を特定することと、
前記タイプ1のストロークオブジェクトを前記2つの輪郭曲線の間でラスター化することによってレンダリングすることとを含む方法。
【請求項5】
請求項4に記載のコンピュータ実装方法であって、
前記分割ポイントiは、前記タイプ1のストロークオブジェクトによって表される前記ストロークが前記ペンダウン時から前記ペンアップ時までユーザによって入力される順序と同じ順序をなす方法。
【請求項6】
請求項2に記載のコンピュータ実装方法であって、
前記タイプ1のストロークオブジェクトを、それぞれ前記幅情報に関連付けられた前記ポイントオブジェクトを含むコンピュータ読み取り可能なファイルとしてエクスポートすることを含む方法。
【請求項7】
請求項1に記載のコンピュータ実装方法であって、
前記タイプ1のストロークオブジェクトを前記タイプ2のストロークオブジェクトに変換することは、
クリッピングアルゴリズムを用いて、自己交差を含まない1以上の単純化された形状に前記タイプ1のストロークオブジェクトの形状を単純化することであって、単純化された各形状は、境界ポイントと境界ポイント間に形成された前記セグメントとによって定義される、前記タイプ1のストロークオブジェクトの形状を単純化することと、
前記1以上の単純化された形状を、前記ストロークの前記境界を定義する前記セグメントのセットからなる前記タイプ2のストロークオブジェクトとして出力することとを含む方法。
【請求項8】
請求項7に記載のコンピュータ実装方法であって、
前記タイプ2のストロークオブジェクトによって表されるストロークが前記ペンダウン時から前記ペンアップ時までユーザによって入力される順序と同じ順序をなさない方法。
【請求項9】
請求項7に記載のコンピュータ実装方法であって、
前記タイプ2のストロークオブジェクトは、前記ストロークの前記境界を定義する前記セグメントのセットを含むコンピュータ読み取り可能なファイルとしてエクスポートされる方法。
【請求項10】
請求項7に記載のコンピュータ実装方法であって、
境界が曲線適合された前記タイプ2のストロークオブジェクトは、前記ストロークの前記境界を定義する前記セグメントのセットとしてのベジェ曲線のセットを含むコンピュータ読み取り可能なファイルとしてエクスポートされる方法。
【請求項11】
請求項10に記載のコンピュータ実装方法であって、
各ベジェ曲線は4つの制御点によって定義される三次曲線であり、ベジェ曲線の1番目の制御点は直前のベジェ曲線の4番目の制御点に一致する方法。
【請求項12】
請求項11に記載のコンピュータ実装方法であって、
前記ベジェ曲線は、それぞれ前記ベジェ曲線の1番目の制御点、2番目の制御点、及び3番目の制御点によって明示的に定義され、前記直前のベジェ曲線の3番目の制御点によって暗黙的に定義される方法。
【請求項13】
請求項10に記載のコンピュータ実装方法であって、
前記コンピュータ読み取り可能なファイルはスケーラブルベクトルグラフィックス(SVG)ファイルである方法。
【請求項14】
請求項1に記載のコンピュータ実装方法であって、
ディスプレイ上に、エクスポートされる前記タイプ2のストロークオブジェクトをレンダリングすることを含む方法。
【請求項15】
請求項14に記載のコンピュータ実装方法であって、
前記タイプ2のストロークオブジェクトをレンダリングすることは、前記タイプ2のストロークオブジェクトによって表される前記ストロークのズーミング、スクローリング、及びレンダリング領域の変更のうちの1つ以上を含む方法。
【請求項16】
請求項1に記載のコンピュータ実装方法であって、
さらに、前記タイプ1のストロークオブジェクトを格納することと、
前記タイプ2のストロークオブジェクトを格納することと、
出力要求に応じて前記タイプ1のストロークオブジェクト及び前記タイプ2のストロークオブジェクトのうちの一方または両方を選択的にエクスポートすることとを含む方法。
【請求項17】
請求項16に記載のコンピュータ実装方法であって、
さらに、リアルタイム描画アプリケーション及びテキスト認識アプリケーションを含むアプリケーションからの出力要求に応答して、前記タイプ1のストロークオブジェクトをエクスポートすることと、
一括描画アプリケーション及びポータブルドキュメントフォーマット(PDF)アプリケーションを含むアプリケーションからの出力要求に応答してタイプ2のストロークオブジェクトをエクスポートすることとを含む方法。
【請求項18】
ユーザによって入力されたストロークを表す2つのタイプのベクトルデータを選択的に出力するシステムであって、
メモリ装置と、
前記メモリ装置に結合されたプロセッサとを備え、前記プロセッサは、
位置入力センサからペンイベントデータを受け取ることであって、前記ペンイベントデータは前記位置入力センサに対してポインタを操作するユーザによって形成されたストロークを表し、各ストロークは、前記ポインタが位置入力センサに対して検出可能に配置されるペンダウン時に開始し、前記ポインタが前記位置入力センサから取り除かれるペンアップ時に終了する、位置入力センサからペンイベントデータを受け取ることと、
受け取った前記ペンイベントデータに基づいて、それぞれ前記ストロークを表すタイプ1のストロークオブジェクトを生成することと、
タイプ1のストロークオブジェクトのリアルタイムレンダリングを開始することであって、前記タイプ1のストロークオブジェクトによって表されるストロークの前記ペンダウン時の後に前記ペンアップ時における前記ストロークの完了を待たずにタイプ1のストロークオブジェクトのリアルタイムレンダリングを開始することと、
タイプ1のストロークオブジェクトのペンダウン時からペンアップ時までのストロークを表すタイプ1のストロークオブジェクトの完了の後に、前記タイプ1のストロークオブジェクトをタイプ2のストロークオブジェクトに変換することであって、前記タイプ2のストロークオブジェクトは前記ストロークの境界を定義するセグメントのセットを含む、タイプ1のストロークオブジェクトをタイプ2のストロークオブジェクトに変換することと、
出力要求に応答してタイプ2のストロークオブジェクトをエクスポートすることとを実行するように構成されているシステム。
【請求項19】
請求項18に記載のシステムであって、
前記プロセッサは、前記タイプ2のストロークオブジェクトを、前記ストロークの前記境界を定義する前記セグメントのセットとしてのベジェ曲線のセットを含むコンピュータ読み取り可能なファイルとしてエクスポートするシステム。
【請求項20】
請求項19に記載のシステムであって、
前記コンピュータ読み取り可能なファイルはスケーラブルベクトルグラフィックス(SVG)ファイルであるシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、位置入力センサ上で手書きされるストロークを再生するのに使用可能な2つのタイプのインクベクトルデータを生成して選択的に出力する方法及びシステムを対象とする。
【背景技術】
【0002】
ユーザがペン形の装置を用いることによって手書き(フリーハンド)データを入力することが可能である様々な手書き入力システムが知られている。例えば、関連付けられた筆圧及びペンの傾きデータを含む手書きデータの入力が可能である電磁共鳴タイプのペンタブレット入力システムが知られている。さらなる例としては、静電タイプのペン入力システムが知られており、これは指とセンサ表面との間に静電容量が生成されるのと同じように、ペン形の入力装置と(タブレット)センサ表面との間に静電容量を生成する。測定された入力素子の位置のコレクションから導出されるジェスチャー情報のような、相対的にシンプルな情報を出力する入力システムもまた知られている。
【0003】
ペン形の道具によって入力される手書きデータまたはストローク(パスまたはトレース)データは、定義されたデータ型またはフォーマットで格納され、インクメッセージング、インク保管・回復、電子メール、写真注釈、及び遠隔ビデオ会議アプリケーションなどの、様々な種類の装置及びアプリケーション上で使用され(例えば、表示され)得る。このような手書きデータをデジタルインクまたはインクデータと称する。インクデータは、ユーザによって入力された位置の座標値からなる未加工のデータと、画像としてディスプレイに直接にレンダリングされ得る画素データからなるラスタデータとの間に存在する中間データである。したがって、大抵のインクデータはベクトルデータである。様々なタイプのインクデータの例が、次の非特許文献である非特許文献1乃至非特許文献5に記載されている。
【0004】
例えば、InkML(非特許文献1)及びISF(非特許文献2)のデータ構造は、様々なアプリケーション間で共有可能なようにペン型の装置によって入力されたストロークデータを表す。SVG(非特許文献3)は、どのタイプのペン装置が入力装置として使用されるかに関わらず、ユーザによって入力された制御点によって定義されるパスを、ベクトルデータとして描画することを可能にするウェブ標準を提供する。
【0005】
非特許文献1乃至非特許文献5に記載されたインクデータはすべて、ペンまたは指の動きにより形成されるストローク(またはトレースもしくはパス)を再生するのに必要な幾何学的な情報を定義する。このような幾何学的な情報を、本明細書では「ストロークオブジェクト」と総称する。ストロークオブジェクトは、そのデータ構造が、ペンまたは指の動きにより形成されるストローク(またはトレースもしくはパス)を再生するために集合的に使用される一組のポイントまたは制御点座標を含むベクトルデータ情報である。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】W3C、レコメンデーション、2011年9月20日、「インクマークアップ言語(Ink Markup Language)(InkML)」(URL−http://www.w3.org/TR/2011/REC-InkML-20110920/)
【非特許文献2】マイクロソフトコーポレーション他、「インクシリアライズドフォーマット仕様書(Ink Serialized Format Specification)」、2007年(URL−http://download.microsoft.com/download/0/B/E/0BE8BDD7-E5E8-422A-ABFD-4342ED7AD886/InkSerializedFormat(ISF)Specification.pdf)
【非特許文献3】W3Cワーキングドラフト、2014年2月11日、「スケーラブルベクトルグラフィックス(Scalable Vector Graphics)(SVG)2」、(URL−http://www.w3.org/TR/SVG2/)W3Cレコメンデーション、2011年8月16日、「スケーラブルベクトルグラフィックス(Scalable Vector Graphics)(SVG)1.1(第2版)」(URL−http://www.w3.org/TR/2011/REC-SVG11-20110816/)
【非特許文献4】W3C、「HTML5 HTML及びXHTMLのための語彙及び関連するAPI W3Cレコメンデーション2014年10月28日(HTML5 A vocabulary and associated APIs for HTML and XHTML W3C Recommendation 28 October 2014)」(URL−http://www.w3.org/TR/html5/)
【非特許文献5】スレートコーポレーション他、「JOT−インクの格納及び交換フォーマットのための仕様書(A Specification for an Ink Storage and Interchange Format)」、バージョン1.0、1996年9月
【発明の概要】
【発明が解決しようとする課題】
【0007】
種々の態様によれば、本発明は、出力要求に応じて、ユーザによって入力されたストロークを表す2つのタイプのベクトルデータを生成して選択的に出力する方法及びシステムを提供する。態様は、上記の非特許文献1乃至非特許文献5に定義される種々のタイプのストロークオブジェクトとともに使用することが可能であり、以前に、非特許文献1乃至非特許文献5では利用可能でなかった技術的解決手法を提供する。例えば、本発明の種々の態様によれば、非特許文献1乃至非特許文献5に定義されるストロークオブジェクトまたはそれらの変形を、2つのタイプのストロークオブジェクトの一方として用いてもよく、それらを2つのタイプのストロークオブジェクトの他方を生成するように変換してもよい。
【課題を解決するための手段】
【0008】
一側面によれば、ユーザによって入力されたストロークを表す2つのタイプのベクトルデータを選択的に出力するコンピュータ実装方法が提供される。位置入力センサを含む装置においてタイプ1のストロークオブジェクトを生成し、タイプ1のストロークオブジェクトは、ユーザが位置入力センサに対してポインタを操作することによって形成されるストロークを表す。それぞれのタイプ1のストロークオブジェクトは、ポインタが位置入力センサに対して検出可能に配置されるペンダウン時に開始してポインタが位置入力センサから取り除かれるペンアップ時に終了するストロークを表す。タイプ1のストロークオブジェクトによって表されるストロークのペンダウン時の後に、ペンアップ時におけるストロークの完了を待たずに、タイプ1のストロークオブジェクトのリアルタイムレンダリングを開始する。タイプ1のストロークオブジェクトのペンダウン時からペンアップ時までのストロークを表すタイプ1のストロークオブジェクトの完了の後に、タイプ1のストロークオブジェクトを、ストロークの境界を定義するセグメント(例えば、曲線セグメント)のセットであるタイプ2のストロークオブジェクトに変換する。タイプ2のストロークオブジェクトによって表されるストロークのズーミング、スクローリング、及びレンダリング領域の変更を含む多数のストロークをレンダリングする一括描画アプリケーションからの出力要求などの出力要求に応じて、タイプ2のストロークオブジェクトをエクスポートする。
【0009】
幅情報に関連付けられるとともにタイプ1のストロークオブジェクトによって表されるストロークがペンダウン時からペンアップ時までユーザによって入力される順序と同じ順序であるポイントオブジェクトを用いて定義されるタイプ1のストロークオブジェクトとは異なり、タイプ2のストロークオブジェクトは、ベジェ曲線のセットなどのセグメントのセットを用いてストロークの境界を定義する。したがって、ユーザによる入力と同じ(時間的)順序を再生することはできない一方、タイプ2のストロークオブジェクトは、ストロークの一括操作(ズーミング、スクローリング、傾斜、レンダリング領域の変更など)を含む迅速なレンダリングに適している。
【0010】
一側面によれば、タイプ2のストロークオブジェクトを、ストロークの境界を定義するセグメントのセットとしてのベジェ曲線のセットを含むコンピュータ読み取り可能なファイルとしてエクスポートする。
【0011】
さらなる一側面によれば、各ベジェ曲線は4つの制御点によって定義される三次曲線であり、ベジェ曲線の1番目の制御点は直前のベジェ曲線の4番目の制御点に一致する。
【0012】
他の一側面によれば、ベジェ曲線は、それぞれベジェ曲線の1番目、2番目、及び3番目の制御点によって明示的に定義され、直前のベジェ曲線の3番目の制御点によって暗黙的に定義される。
【0013】
他の一側面によれば、コンピュータ読み取り可能なファイルは、スケーラブルベクトルグラフィックス(SVG)ファイルである。
【図面の簡単な説明】
【0014】
図1A図1Aは、手書きデータが入力される位置入力センサであって、未加工の位置データ、リアルタイム/高速レンダリングに適するタイプ1のベクトルデータ、または一括操作(ズーム、スクロール、回転、レンダリング領域の変更など)に適するタイプ2のベクトルデータが選択的に出力される位置入力センサを備えたシステム全体を示す図である。
図1B図1Bは、手書きデータが入力される位置入力センサであって、未加工の位置データ、リアルタイム/高速レンダリングに適するタイプ1のベクトルデータ、または一括操作(ズーム、スクロール、回転、レンダリング領域の変更など)に適するタイプ2のベクトルデータが選択的に出力される位置入力センサを備えたシステム全体を示す図である。
図2図2は、ペンイベントデータ(または未加工の位置データ)、タイプ1のベクトルデータ、タイプ2のベクトルデータ、及びラスター化された画像データ間の関係及び変換(変形)方向を示す図である。
図3図3は、出力要求に応じて少なくともタイプ1のベクトルデータ及びタイプ2のベクトルデータを選択的に出力する概略的な方法を示すフローチャートである。
図4図4は、タイプ1のベクトルデータ生成器、タイプ2のベクトルデータ生成器(タイプ1からタイプ2への変換器)、及びタイプ1のベクトルデータまたはタイプ2のベクトルデータを選択的に出力するセレクタを備えたインクデータ処理システムの機能ブロック図である。
図5図5は、図4のタイプ1のベクトルデータ生成器の機能ブロック図である。
図6図6は、図5のタイプ1のベクトルデータ生成器におけるポイント「A」〜ポイント「D」で実行される処理を示す。
図7図7は、図5のタイプ1のベクトルデータ生成器によって実行されるルーチン例を示すフローチャートである。
図8図8は、タイプ1のベクトルデータのリアルタイムレンダリングを共同で実行するリアルタイムレンダラ及びグラフィック処理部の機能ブロック図である。
図9A図9Aは、タイプ1のストロークオブジェクトを生成してレンダリングする処理を示す。
図9B図9Bは、タイプ1のストロークオブジェクトを生成してレンダリングする処理を示す。
図9C図9Cは、タイプ1のストロークオブジェクトを生成してレンダリングする処理を示す。
図9D図9Dは、タイプ1のストロークオブジェクトを生成してレンダリングする処理を示す。
図10A図10Aは、図4のタイプ2のベクトル生成器(タイプ1からタイプ2への変換器)の機能ブロック図である。
図10B図10Bは、曲線適合が適用される前の、図10Aのタイプ2のベクトル生成器によって生成される境界データ例(単純な多角形)を示す。
図10C図10Cは、図10Aのタイプ2のベクトル生成器によって生成されて曲線適合が適用された境界データ例(三次ベジェ)を示す。
図11図11は、自己交差を含まない2つの形状からなるタイプ2のストロークオブジェクトへの自己交差を含むタイプ1のストロークオブジェクトの変換を示す概略的なフロー図である。
図12図12は、図10Aのタイプ2のベクトルデータ生成器によって実行されるルーチン例を示すフローチャートである。
図13図13は、元のタイプ1のベクトルデータの透過度値に基づいて色値を調整することによって、PDFファイルに埋め込まれるタイプ2のベクトルデータを生成する方法を示すフローチャートである。
図14A図14Aは、図13におけるようにタイプ2のベクトルデータを生成する方法を示す概略図である。
図14B図14Bは、図13におけるようにタイプ2のベクトルデータを生成する方法を示す概略図である。
図15図15は、出力要求に応じて、タイプ1のベクトルデータ、タイプ2のベクトルデータ、またはタイプ0のデータ(未加工のペンイベントデータ)を選択的に出力する処理を示す。
図16A図16Aは、それぞれタイプ1のストロークオブジェクトによって表されるストロークを定義する幅情報に関連付けられたポイントオブジェクトセットを含むコンピュータ読み取り可能なファイル例を示す。
図16B図16Bは、図16Aのタイプ1のストロークオブジェクトを定義するポイントオブジェクトセットのレンダリング結果例である。
図17A図17Aは、タイプ2のストロークオブジェクトによって表されるストロークの境界を定義するベジェ曲線のセットを含むコンピュータ読み取り可能なファイル例を示す。
図17B図17Bは、レンダリングされたベジェ曲線の制御点を示す。
図17C図17Cは、制御点に基づいたベジェ曲線のレンダリング結果例である。
【発明を実施するための形態】
【0015】
本明細書で使用される以下の用語は、次の一般的な意味を有する。
【0016】
「ペンイベントデータ」(図4参照)は、ユーザの手書き描画動作に基づいて入力されるデータを意味する。ペンイベントデータは、所与の入力装置10aによって入力される未加工の(位置)データであってもよいし、(例えば、動作イベント/タッチ入力サブシステム21によって)未加工のデータを処理したデータであってもよい。すべてのイベントデータは少なくとも、ユーザによって描かれたストロークの位置情報(例えば、XY座標)を有することが期待される一方、ペンイベントデータは装置に依存しており、入力装置の種類ごとに固有である付加的な属性(例えば、筆圧データ「P」、ペン回転または傾斜角のデータなど)を含み得る。例えば、筆圧を検出可能な入力装置から受け取ったペンイベントデータは、筆圧を検出できない入力装置から受け取ったペンイベントデータとは異なる。
【0017】
「インクデータ」は、ペンイベントデータから導出されるオブジェクトの集合を意味する。インクデータはイベントデータに基づいてストローク(パス、トレース)をキャプチャし、通常、未加工のデータ(またはペンイベントデータ)とディスプレイ上に画像として直接描画され得るラスタデータ(または画素データ)との間に存在する一種の中間データであるベクトルデータの形態をなす。したがって、インクデータは、ストロークの幾何/形状のみならず、色、透過度値、圧力値などのインクデータの特性をも記述する。ペンイベントデータとは異なって、インクデータは装置に依存し、例えば、筆圧及び/またはペンの回転/傾斜角の属性をサポートする装置と、これらの属性をサポートしない装置とを含む、異なる種類の装置によって共有され得る。
【0018】
参照によって本明細書に援用される、同様に譲渡された2014年11月19日出願の米国特許出願第14/838,182号(以後、「'182出願」)に開示されたインクデータの一種は、ストロークオブジェクト、メタデータオブジェクト、描画スタイルオブジェクト、及び操作オブジェクトという、概して4種類のオブジェクトを含む。手短に言うと、「ストロークオブジェクト」は、入力装置のユーザ操作によって得られたストロークの形状を定義する。上述の非特許文献1乃至非特許文献5に記載された「ストローク」、「パス」、「トレース」、及び「カンバスパス」は、すべて、'182出願のインクデータにおいてサポートされ得るストロークオブジェクトである。「メタデータオブジェクト」は、著者、ペンID、ローカルに取得される日時情報、GPSにより取得される位置情報などのストロークオブジェクトを説明する非描画関連情報を含む。「描画スタイルオブジェクト」は、ディスプレイ上に描画され、表現され、またはラスター化される際に、ストロークオブジェクトのレンダリングされる形状(ストローク幅、ストロークスタイル、またはストロークパターン)及びレンダリングされる色を制御または調整するのに必要な描画関連情報を含む。「操作オブジェクト」は、既存のストロークオブジェクトの全体または一部に対して、操作/変更の動作(例えば、スライス操作、拡大操作、回転操作、傾斜操作など)を実行するように構成されている。本明細書に開示された本発明の様々な実施の形態は、'182出願に開示されたインクデータを含む様々な種類のインクデータに使用可能であって十分に適合する。
【0019】
図1A及び図1Bは、個々の出力要求または出力先に応じ、未加工の(ペンイベント)データに加えて、2つのタイプのインクベクトルデータを生成して選択的に出力することが可能な、本発明の代表的な実施の形態にかかるシステム全体を示す図である。本システムは、スタイラス、ポインタなどの入力装置10aの操作に基づいて手書きデータが入力される位置入力センサ50を備える。位置入力センサ50のセンサコントローラ10から、図1Bに示すように特定のアプリケーション300からの出力要求(RT)に応じて、未加工の位置データ、例えばリアルタイム描画に適したタイプ1のベクトルデータ、または、例えば一括操作(ズーム、スクロール、回転、描画領域/範囲の変更など)及び高速一括再描画に適したタイプ2のベクトルデータが選択的に出力される。示された図1Bの非限定的な例において、署名検証アプリケーションからの出力要求に応答して、未加工の位置データが出力される。タイプ1のベクトルデータは、入力装置10aによって手書きデータが入力されると、またはテキスト(文字)認識アプリケーションからの出力要求に応答して、手書きデータのリアルタイム描画(レンダリング)のために出力される。タイプ2のベクトルデータは、ストロークオブジェクトセットに一括して適用される、ズーミング、回転、スクローリング、もしくは傾斜のコマンド、または描画領域を変更するコマンド(例えば、ストロークを含む全領域内のどのサブ領域を描画するかを変更するコマンド)などの、一括描画操作に関連付けられた出力要求に応答して、またはベクトルデータをPDFファイルに埋め込む出力要求に応答して、出力される。
【0020】
位置入力センサ50は、従来周知である電磁タイプ、静電容量タイプ、及び抵抗タイプのセンサを含む、様々な種類の位置入力センサのうちの任意のものからなり得る。位置入力センサ50は、通常、通信モジュール、IOインタフェース制御部、センサIC、CPU20、メモリ(RAM)30などの、位置入力センサ50の動作を処理するのに必要なハードウェア/ソフトウェア100を備えたコンピュータ1の一部をなす。コンピュータ1は、さらに、グラフィック処理ユニット(GPU)40を備える、またはそのアクセス権を有する。コンピュータ1は様々な他の構成要素を備え得るが、その詳細な説明が本開示の目的に必須でないことは明らかである。
【0021】
図2は、ペンイベントデータ(または未加工の位置データ)、タイプ1のベクトルデータ、タイプ2のベクトルデータ、及びラスター化された画像データとの間の関係及び変換(変形)方向を示す図である。
【0022】
示された図2の例において、位置入力センサ50に入力されたペンイベントデータは、入力された各位置のXY座標と、入力された位置において位置入力センサ50の表面に対して入力装置10aにより加えられた圧力値を示す、入力された位置に関連付けられた圧力データ「P」とを含む。
【0023】
流れ線20aは、ペンイベントデータ(X,Y,P)を用いてタイプ1のベクトルデータを生成することを示す。タイプ1のベクトルデータは、それぞれが位置入力センサ50上で入力装置10aによって手書きされたストロークを表すように生成される、1以上のタイプ1のストロークオブジェクト21を含む。位置入力センサ50は、マトリックス状の電極10bを備える。図1Aに示すように、タイプ1のストロークオブジェクトは、入力装置10aが位置入力センサ50に対して検出可能に配置されるペンダウン(「ダウン」)時に開始し、入力装置10aが位置入力センサ50から取り除かれるペンアップ時に終了するストローク(「st」)を表すように構成されている。したがって、タイプ1のストロークオブジェクト21は、通常、ストロークがそのペンダウン時からそのペンアップ時まで手書きされる順序と同じ順序となる一連のポイント(またはポイントオブジェクト)によって定義される。さらに、ポイントのそれぞれは、以下で説明するように、ポイントに関連付けられた幅及び/または透過度のパラメータを有する。図2に示すように、タイプ1のストロークオブジェクト21は、タイプ1のストロークオブジェクト21によって表されるストロークが自身と交差する自己交差21aを含み得る。
【0024】
流れ線20bは、タイプ1のベクトルデータが、通常、ペンイベントデータに可逆に変換されないことを示す。代わりに、代表的な実施の形態では、ペンイベントデータから生成されるタイプ1のベクトルデータは、ディスプレイ上でリアルタイムに継続的に描画され、またはメモリ装置に格納される。格納されたタイプ1のベクトルデータは、タイプ2のベクトルデータを生成するのに用いられ得る、または、タイプ1のベクトルデータを呼び出す出力要求に応答して、ラスター化されたデータを形成するように選択的に出力され得る。
【0025】
流れ線22aは、例えば、一括操作(ズーム、スクロール、回転、レンダリング領域の変更など)に適したタイプ2のベクトルデータを生成するのに用いられ、またはタイプ2のベクトルデータに変換される。タイプ2のベクトルデータは、それぞれタイプ1のストロークオブジェクト21から変換された、1以上のタイプ2のストロークオブジェクト23を含む。タイプ2のストロークオブジェクト23の特性の態様は、自己交差21aを含み得るタイプ1のストロークオブジェクト21とは異なって、タイプ2のストロークオブジェクト23が、自己交差を全く含まない1以上の単純な形状23a、23bからなることである。タイプ2のストロークオブジェクト23は、ストロークの境界を定義する曲線のセットである。図2の例において、タイプ2のストロークオブジェクト23は、2つの単純な形状23a、23bからなり、形状23aは、ストロークの内部境界を定義する境界ポイントV1〜V10間に形成された曲線(例えば、ベジェ曲線)のセットを含み、形状23bは、ストロークの内部境界を定義する境界ポイントV1〜V6間に形成された曲線のセットを含む。単純な形状からなるタイプ2のベクトルデータは、一括した(大きな)ストロークオブジェクトセットのズーミング、回転、傾斜、及びレンダリング領域の変更などの、一括描画及び操作に適している。
【0026】
流れ線22bは、タイプ2のベクトルデータが、通常、タイプ1のベクトルデータに可逆に変換されないことを示す。代わりに、代表的な実施の形態では、タイプ1のベクトルデータから生成された(変換された)タイプ2のベクトルデータはメモリ装置に格納されて、一括描画を求める出力要求、またはストロークオブジェクトをPDFファイルに埋め込む出力要求などの、タイプ2のベクトルデータを呼び出す出力要求に応答して、選択的に出力される。
【0027】
流れ線24aは、画面上に直接レンダリングされ得る画素データからなるラスター化されたデータを形成するために、実行中の特定のアプリケーションからの個々の出力要求に応じて、タイプ1のベクトルデータまたはタイプ2のベクトルデータのいずれかが選択的に出力され得ることを示す。
【0028】
流れ線24bは、ラスター化されたデータが、通常、タイプ1のベクトルデータにもタイプ2のベクトルデータにも可逆に変換されないことを示す。同様に、上述の流れ線20bは、タイプ1のベクトルデータのみならず、タイプ2のベクトルデータも、通常、ペンイベントデータに可逆に変換されないことを示す。
【0029】
図3は、出力要求に応じて少なくともタイプ1のベクトルデータ及びタイプ2のベクトルデータを選択的に出力する概略的な方法を示すフローチャートである。図1Bに示すように、タイプ1及びタイプ2のベクトルデータに加え、出力要求に応じて未加工の(位置)データ(またはペンイベントデータ)が選択的に出力され得る。ステップS31において、位置入力センサ50に入力されたペンイベントデータに基づき、タイプ1のベクトルデータを生成する(図2の流れ線20a参照)。ステップS33において、タイプ1のベクトルデータに基づき、タイプ2のベクトルデータを生成する(図2の流れ線22a参照)。ステップS35において、個々の出力要求に応じて、少なくともタイプ1のベクトルデータまたはタイプ2のベクトルデータを選択的に出力する。
【0030】
図2は、自己交差21aを含む、タイプ1のベクトルデータからなるタイプ1のストロークオブジェクト21の例を示す。以下では、まず、図4乃至図9Dを参照し、タイプ1のベクトルデータを生成してリアルタイムにレンダリングする方法及びシステムを説明し、その後に図4図10A乃至図14Bを参照し、タイプ2のベクトルデータを生成する方法及びシステムの説明を続ける。
【0031】
図4は、コンピュータ1のハードウェア/ソフトウェア100において実施されるインクデータ処理システムの機能ブロック図であり、タイプ1のベクトルデータ生成器410と、タイプ2のベクトルデータ生成器(タイプ1からタイプ2への変換器)430と、出力要求に応じてタイプ1のベクトルデータ、タイプ2のベクトルデータ、または未加工のペンイベントデータを選択的に出力するセレクタ460とを備える。
【0032】
インクデータ処理システム100は、入力装置10aによって入力された未加工のデータを受け取り、動作イベント/タッチ入力システム21によってペンイベントデータ(x,y,p)へと処理し得る。上述したように、ペンイベントデータは装置に依存し、入力装置10aによって入力されたポイントに関連付けられた種々の属性値(例えば、圧力及び透過度のパラメータ)を含んでもよいし、含まなくてもよい。
【0033】
インクデータ処理システム100は、描画アプリケーション、及び、入力されたペンイベントデータに含まれ得る圧力データ(「P」)をタイプ1のストロークオブジェクトによって表されるストロークの可変幅を示す幅データ(「W」)に変換するアプリケーションなどの、インクデータアプリケーション300と通信する。このようなアプリケーションの詳細と、種々の属性値に基づいて幅値(「W」)を得る方法とは、上記の参照によって援用される'182出願に開示されている。手短に言うと、位置入力センサ50に対して入力装置10aにより加えられる圧力が大きいほどユーザによって意図されるストロークが幅広であることを意味し、圧力が低いほどストロークが狭い(より幅が小さい)ことを意味するという原理に基づいて、圧力データを幅データに変換する処理を用い得る。さらに、'182出願には、入力されたペンイベントデータに含まれる速度データを幅データに変換する処理が開示されている。当該処理は、入力装置10の速度が大きいほどユーザによって意図されるストロークが狭い(より幅が小さい)ことを示し、速度が小さいほど幅広のストロークが幅広であることを示すという原理に基づいて、各ポイントにおいて入力装置10aが移動する速度を示す速度データを幅データに変換する。さらにまた、'182出願には、位置入力センサ50に対して入力装置10aにより加えられる圧力が大きいほどユーザによって意図されるストロークが濃い(より透過度が低い)ことを示し、圧力が小さいほどストロークの透過度が高いことを示すという原理に基づき、圧力値を透過度値(「A」)に変換する処理が開示されている。さらに、'182出願には、入力装置10aの速度が大きいほどユーザによって意図されるストロークの透過度が高い(淡い)ことを示し、速度が小さいほどストロークが濃い(より透過度が低い)ことを示すという原理に基づき、速度値を透過度値(「A」)に変換する処理が開示されている。
【0034】
インクデータアプリケーション300は、タイプ1のベクトルデータ及びタイプ2のベクトルデータを生成するインクデータ処理システム100の動作を制御し得る。インクデータアプリケーション300は、さらに、タイプ1のベクトルデータ、タイプ2のベクトルデータ、または未加工のイベントデータを選択的に出力するようにセレクタ460の動作を制御し得る。このために、インクデータアプリケーション300は、出力要求のタイプ(例えば、タイプ1のベクトルデータであるか、それともタイプ2のベクトルデータであるか)を示す制御情報と、出力するように要求されるそれらのストロークのストロークIDとを、セレクタ460に発行し得る。
【0035】
インクデータ処理システム100はグラフィック処理ユニット40に結合されている一方、グラフィック処理ユニット40はセンサ画面50aに結合されている。グラフィック処理ユニット40は、タイプ1のベクトルデータまたはタイプ2のベクトルデータを受け取り、画素の色(例えば、RGB)値を含む定義された解像度レベルの画素値のセットを含むラスター化されたデータを出力し、次いでラスター化されたデータをLCDなどの画面50a上に直接表示し得る(ラスター化されたデータは、通常、位置入力センサ50上に重畳される)。例えば、グラフィック処理ユニット40は、タイプ1またはタイプ2のストロークオブジェクトを形成するポイントオブジェクトを受け取り、キャットマル−ロム曲線アルゴリズム及びベジェ曲線アルゴリズムなどの適した曲線補間アルゴリズムに従って、制御点として用いられるポイントオブジェクト間の曲線を形成し、DirectX(r)及びOpenGL(r)のライブラリなどの関連するGPUライブラリを用いて、ディスプレイ50a上に、結果として得られるストロークオブジェクトのパス(ストローク)を描画する(レンダリングする)。
【0036】
様々な例において、動作イベントタッチ入力サブシステム21、インクデータアプリケーション300、インクデータ処理システム100、及び、VRAMに結合されたグラフィックス処理ユニット40は、すべて、コンピュータ1上で動作するOSによって制御され得る。
【0037】
タイプ1のベクトルデータ生成器410は、インクデータアプリケーション300の制御下で、位置入力センサ50から受け取ったペンイベントデータに基づき、タイプ1のベクトルデータを生成する。タイプ1のベクトルデータを生成する代表的な処理は、概して3つのステップを含む。第1に、位置入力センサ50によって検出されたペンイベントデータを順次受け取る。第2に、受け取ったペンイベントデータに含まれる座標値に基づいて、ポイントオブジェクトを順次生成し、ポイントオブジェクトを幅情報(「W」)に関連付ける。ポイントオブジェクトは、キャットマル−ロム曲線アルゴリズムなどの定義された曲線補間アルゴリズムに従って曲線セグメントを補間する制御点として作用する。第3に、タイプ1のストロークオブジェクトを、タイプ1のストロークオブジェクトによって表されるストロークを定義するポイントオブジェクトの集合として生成する。ペンイベントデータが各ポイントの色及び/または透過度の値を示す色及び/または透過度の情報を含む場合に、このような情報は、さらに、順次取得されて、それぞれが色及び/または透過度の値に関連付けられたポイントオブジェクトを生成し得る。未加工のペンイベントデータが既に幅値を含んでいる場合に、変換は必要なく、幅値をそれぞれポイントオブジェクトに直接関連付け得る。本発明の代表的な実施の形態において、幅値は、ポイントオブジェクトによって形成されるストロークの幅を定義するのに用いられるポイントオブジェクトの半径を示す。したがって、ストロークを形成するポイントオブジェクトセットを変化する幅値に関連付けることにより、自身の長さに沿って可変幅を有するタイプ1のストロークオブジェクトを生成することができる。本明細書で使用される可変幅は、各ポイントオブジェクトが可変幅に関連付けられ得ることと、ストロークの長さに沿ったポイントオブジェクトが互いに異なる幅を有し得ることとの両方を意味する。
【0038】
図4に示すように、タイプ1のベクトルデータ生成器410によって生成されたタイプ1のベクトルデータは、次いで、図2におけるタイプ1のストロークオブジェクト21を形成するP1〜P8などの「曲線データ(P,...Pとして、メモリ装置450に格納され得る。
【0039】
タイプ1のベクトルデータは、それぞれがポイントオブジェクトセットによって形成された1以上のタイプ1のストロークオブジェクトを含み、各ポイントオブジェクトは幅情報に関連付けられている。後述するように、格納されたタイプ1のベクトルデータは、次いで、タイプ2のベクトルデータ生成器によって、タイプ2のベクトルデータを生成するように用いられ得る。あるいは、格納されたタイプ1のベクトルデータは、テキスト認識アプリケーション300、またはストロークをストロークが位置入力センサ50に最初に入力されたのと同じ順にレンダリングする(再生する)ように要求する任意のアプリケーションからの出力要求などのタイプ1のベクトルデータを求める出力要求に応答して、セレクタ460によって選択的に出力され得る。このことが可能であるのは、様々な代表的な実施の形態において、タイプ1のストロークオブジェクト21(図2参照)が、ストロークオブジェクトによって表現されるストロークが入力装置によって手書きされる順序と同じ順序で配置される一連のポイントによって定義されるからである。
【0040】
メモリ装置450にタイプ1のベクトルデータを格納することに加えて、または代えて、タイプ1のベクトルデータ生成器410によって生成されたタイプ1のベクトルデータは、リアルタイムレンダラ420に出力されることによって、各タイプ1のストロークオブジェクトのリアルタイムレンダリングを、そのペンダウン時以後であって、そのペンアップ時におけるストロークオブジェクトの完了の前に、または完了を待たずに、開始し得る。言い換えれば、ユーザが位置入力センサ50a上にストロークを描画する際に、ストロークの初期ポイントから全長までのストロークの「成長」をユーザが見ることができるように、リアルタイムに、ストロークを表すタイプ1のストロークオブジェクトを生成して画面50a上にレンダリングする。
【0041】
図5は、図4のタイプ1のベクトルデータ生成器410の機能ブロック図である。
【0042】
タイプ1のベクトルデータ生成器410は、「A」においてペンイベントデータ(X,Y,P(圧力))を受け取ってタイプ1のストロークオブジェクトを生成し、各ポイントオブジェクトを「D」において幅情報(W)に関連付ける。代表的な実施の形態において、タイプ1のベクトルデータ生成器410は、ペンイベントデータが入力されるに従って数が増加するようにポイントオブジェクトを継続的に生成する。タイプ1のベクトルデータ生成器410は、生成されたポイントオブジェクトを、リアルタイムの画像レンダリングのためにリアルタイムレンダラ420に、及び/または格納のためにメモリ装置450に、継続的に出力する。
【0043】
図5に示すように、タイプ1のベクトルデータ生成器410は、メモリ装置450を備え、またはメモリ装置450に結合されている。図示した実施の形態におけるタイプ1のベクトルデータ生成器410は、さらに、装置タイプに基づいて適切なパスビルダを選択するパス(ストローク)ビルダ部122Bと、ストロークオブジェクトが生成されると、ストロークオブジェクトが完了する前にストロークオブジェクトに平滑処理を適用し始める平滑器122Cと、部分的に形成されたストロークにいくつのポイントオブジェクトを付加するべきかを制御する対ストローク追加部122Dと、タイプ1のストロークオブジェクトの末尾にあるギャップ(図6における「遅延」)を埋めるサフィックス付加部122Eとを備える。
【0044】
継続的に生成されてメモリ450に格納されたポイントオブジェクトは、(図5における「D」を経て)リアルタイムレンダラ420によりストロークオブジェクトの断片としてリアルタイムレンダリングに用いられる。したがって、メモリ装置450は、タイプ1のベクトルデータ生成器410の一部である一方、リアルタイムレンダラ420の一部となり得る。
【0045】
パス(ストローク)ビルダ部122Bは、入力された特定のタイプのペンイベントデータに適した1つのパスビルダを選択するように構成されている。例えば、ペンイベントデータが筆圧値を含む場合に、筆圧値に基づいてストローク幅(W)及び透過度(A)を導出することが可能な第1の(圧力)機能f1を有する圧力パスビルダ122B1を選択する。これに対して、ペンイベントデータが筆圧値を含まない場合に、速度パスビルダ122B2を選択する。速度パスビルダ122B2は、ペン移動速度に基づいてストローク幅(W)及び透過度(A)を導出することが可能な第2の(速度)機能f2を有し、これを、大抵のペンイベントデータに含まれる点座標またはタイムスタンプの変化量から特定する。言い換えれば、速度パスビルダ122B2は、圧力パスビルダ122B1において用いられる圧力値に代えて速度値を用いる。パスビルダ部122Bからの出力は図5において「A(x)」で示され、XY座標及び幅(W)、さらには任意選択により透過度(A)値を有する各ポイントオブジェクトを定義する。
【0046】
平滑器122Cは、パスビルダ部122Bから出力されたポイントオブジェクトを受け取り、それに対して平滑化処理を適用する。様々な代表的な実施の形態において、平滑器122Cは、ポイントオブジェクトを含むストロークオブジェクトに対し、当該ストロークオブジェクトが生成されるとそれが完了する前に、平滑化処理を適用し始める。加速度平均、加重平均、指数平滑化、二重指数平滑化などの、任意の適切な平滑化処理または平滑化アルゴリズムを用い得る。
【0047】
図6は、図5のタイプ1のベクトルデータ生成器410におけるポイント「A/A(x)」〜「D」において実行される処理を示す。図6は、列Aと列Bとの間において平滑器122Cにより適用される平滑化処理を示す。列Aは図5におけるポイント「A/A(x)」に対応し(平滑化前)、列Bは図5におけるポイント「B」に対応する(平滑化後)。列Aにおいて、x1〜x10は、ペンイベントデータから取得された10点の座標を表す。図6において、x1〜x10は(10,20,30,45,60,80,90,100,110,115)である。
【0048】
列Bにおいて、x1'〜x10'は、平滑化処理が適用された後の上記10点のX座標を表す。図示した例では、次の指数平滑化関数が適用されている。
【0049】
【数1】
ここで、フィルター強度α=0.5である。
【0050】
図6において、x1'〜x10'は(10,15,23,34,47,63,77,88,99,108)である。
【0051】
平滑器122Cによる平滑化処理が、これらの点の修正された(平滑化された)位置を継続的に出力するべく、それらの点座標が導出される都度、回転ベースで各点に適用される。こうして、ペンダウンイベントが検出されるペンダウン時から、ペンアップイベントが検出されるペンアップ時の前に(を待たずに)、タイプ1のベクトルデータ生成器410は、部分的に形成された、平滑化されたストロークオブジェクトを生成して出力することを開始し得る。
【0052】
図示した例では、列Bにおいてポイントx0'が追加されており、ここではキャットマル−ロム曲線を用いて各対の制御点間の補間曲線を定義している。従来周知のように、キャットマル−ロム曲線は、スタートポイント(Pi)、エンドポイント(Pi+1)、スタートポイントの「前」のポイント(Pi−1)、及びエンドポイントの「後ろ」のポイント(Pi+2)を含んだ4つの制御点を有する各曲線セグメントを定義する。したがって、ポイントx1'とポイントx2'との間の開始曲線セグメントを定義するために、スタートポイントx1'を複製して、x1'とx2'との間の曲線セグメントを定義する制御点としてのポイントx1'、ポイントx2'、及びポイントx3'とともに用いられ得る新たなポイントx0'を(x1'と同じ位置に)生成する。新たなポイントx0'の位置は、入力されたストロークにx1'とx2'との間のキャットマル−ロム曲線が最もよく適合する位置に調整され(曲線適合され)得る。x1'(p1)の値を単に複製してx0'(p0)の値を生成することにより、本処理は直ちに、x0'の位置を定義し、x0'(p0)からx1'(p1)に至るベクトル成分をゼロに設定することが可能である。本処理は、リアルタイム実行に適しており(p2がp0を生成するのを待つ必要がない)、x1'(p1)とx2'(p2)との間の曲線セグメントの曲率に、曲率を一方側または他方側へ過度に突出させるといったように過度に影響を与えるものではない。
【0053】
図5及び図6をさらに参照すると、サフィックス付加部122Eは、ストロークオブジェクトの末端にある入力位置(x10,列A)と、ストロークオブジェクトの末端にある平滑化位置(x10',列B)との間のギャップ(または「遅延」)を埋める。図6において、列Cは、「遅延」を埋める(サフィックス付加)動作を示す。図示した例では、平滑化処理の後に、最初に入力された位置x10(115)と列Bにおけるストロークオブジェクトの末端にある平滑化位置x10'(108)との間に「遅延」が生じている。代表的な実施の形態において、タイプ1のベクトルデータ生成器410は、例えばインクデータアプリケーション300から受け取った制御情報に応じて、サフィックス付加オペレーションを実行すべきであるか、それとも実行すべきでないかを判定するように構成されている。他の実施の形態において、ストロークオブジェクトに新たなポイントオブジェクトが追加されるたびにサフィックス付加オペレーションを発動することが可能であり、それは、例えば、リアルタイムレンダリングの目的に適切であり得る。
【0054】
図6の列Cにおいてサフィックス付加オペレーションを実行すべきであれば、サフィックス付加部122Eはx11'、x12'、及びx13'において新たなポイントオブジェクトを追加する。ポイントx12'は、列Aの最初に入力された最後の位置x10(115)と同じ位置に追加される。ポイントx11'は、ポイントx10'とポイントx12'との間の平滑化されたポイントに追加される。最終的に、本例においてはキャットマル−ロム曲線を用いて各対の制御点間の補間曲線を定義していることから、エンドポイントx12'を複製して、x11'とx12'との間の終了曲線セグメントをキャットマル−ロム曲線として定義するのに必要である新たなポイントx13'を(x12'と同じ位置に)生成する。新たなポイントx13'の位置は、入力されたストロークにx11'とx12'との間のキャットマル−ロム曲線が最もよく適合する位置に調整され(曲線適合され)得る。また、サフィックス付加オペレーションが実行されない場合でも、キャットマル−ロム曲線を用いるならば、列Bにおける最後の平滑化ポイントx10'を複製して、この場合にx9'とx10'との間の最後の曲線セグメントを定義する制御点としてのポイントx8'、ポイントx9'、及びポイントx10'とともに用いられ得る新たなポイントx10'(新)を生成し得る。x10'の値を単に複製してx10'(新)の値を生成することにより、本処理は直ちに、x10'の位置を定義し、x9'(p9)とx10'(p10)との間の曲線セグメントの曲率に過度に影響を与えずに、中立位置にx10'の位置を定義することが可能である。
【0055】
図5を再度参照すると、対ストローク追加部122Dは、平滑化されて場合によってはサフィックス付加されたポイントオブジェクトのうちのいくつが、メモリ装置450に格納されているか、したがって出力されるタイプ1のストロークオブジェクトの部分的なデータに付加され得るかを判定する(または追跡し続ける)。図示した実施の形態において、ポイントオブジェクトP1〜Pn−1は、メモリ装置450に格納されており、(タイプ1のストロークオブジェクト全体の完了を待たずに)リアルタイムレンダラ420またはメモリ装置450に出力されるタイプ1のストロークオブジェクトの部分的なデータに追加されるべきであると判定される。リアルタイムレンダラ420は、(図8に示すこととなるように)部分的に形成されたタイプ1のストロークオブジェクトを表示することが可能である。メモリ装置450は、タイプ1のストロークオブジェクト全体が格納されるまで、部分的に形成されたタイプ1のストロークオブジェクトを継続的に格納する。
【0056】
図6において、列Dはタイプ1のストロークオブジェクトを示し、これは(列Aから列Bへと)平滑化されており、場合によっては(列Bから列Cへと)末端においてサフィックス付加され、対ストローク追加部122Dによって継続的に出力される。図示した実施の形態におけるタイプ1のストロークオブジェクトは、キャットマル−ロム曲線アルゴリズムに従って補間曲線を生成するように定義されており、この場合に各曲線セグメント(Pi〜Pi+1)は4つの制御点(Pi−1、Pi、Pi+1、Pi+2)によって定義され、キャットマル−ロム曲線の特性であるが、結果として得られる曲線は制御点のすべてを通過する。
このように、タイプ1のストロークオブジェクトは、4つの制御点x0'、x1'、x2'、x3'により定義される開始曲線セグメント(x1'〜x2')を含み、4つの制御点x10'、x11'、x12'、x13'により定義される終了曲線セグメント(x11'〜x12')を含む。
【0057】
図7は、タイプ1のベクトルデータ生成器410によって実行される処理例を示すフローチャートである。ステップS701において、タイプ1のベクトルデータ生成器410は、位置座標(x,y)と次の3種類のタイミングのうちの1つを示すタイミング情報とを含んだペンイベントデータを受け取る。
1)指またはポインティング装置(例えば、ペン型装置)などのポインタが他の(検知)物体に接触するペンダウン時
2)ペンダウン時とペンアップ時との間のペンムーブ時
3)ポインタが他の(検知)物体から離れる(取り除かれる)ペンアップ時
【0058】
1.ペンダウン時の処理フロー
【0059】
ステップS712において、タイプ1のベクトルデータ生成器410は、例えばインクデータアプリケーション300(図4参照)から受け取った制御情報(図5における入力ダイナミクス設定401)に基づいて、タイプ1のストロークオブジェクトを作成するのに用いる複数のパスビルダから1つのパスビルダ(例えば、図5における122B1または122B2)を選択する。
【0060】
ステップS714において、タイプ1のベクトルデータ生成器410は、例えばアプリケーション300から受け取った制御情報(チャネル数403)に基づいて、上記のステップS712において選択されたパスビルダから出力すべきパラメータセットを決定する。出力すべきパラメータセットは、例えば(x,y,W,A)及び(x,y,W)からなり得るものであって、(x,y)はポイントオブジェクトのx座標、y座標、Wはストローク幅値、Aは透過度(または不透明度)を示すアルファ(α)である。各ポイントに対し、2D座標(x,y)の他に「z」値を追加して3D座標を生成してもよい。
【0061】
ステップS716において、タイプ1のベクトルデータ生成器410は、例えばアプリケーション300から受け取った制御情報に基づいて(平滑化使用,フィルター強度405)、選択されたパスビルダから出力されるパラメータセットに平滑化処理を適用すべきか否かを判定する。制御情報は、さらに、パラメータのうちのいずれのものに平滑化処理を適用するかを示し得る。
【0062】
平滑化の適用が示された場合(ステップS716においてYES)に、ステップS718において、示された平滑化処理を適用する。アプリケーション300からの制御情報は、さらに、タイプ1のベクトルデータ生成器410が所望の強度レベルの平滑化処理を選択するのに用い得る、位置入力センサ50のサンプリングレート情報を含み得る。例えば、位置入力センサ50のサンプリングレートが低めである(例えば、通常の60〜240サンプル毎秒から、何百サンプル毎秒とは反対側の何十サンプル毎秒へ外れる)場合に、大きめの平滑化値(効果)を有する強めの平滑化処理を選択し得る。
【0063】
ステップS720において、図6を参照して上述したように、列Bの初期ポイント(制御点)x1'を複製して、x1'とx2'との間の開始曲線セグメントをキャットマル−ロム曲線として定義する新たな制御点x0'を生成する。
【0064】
ステップS772において、タイプ1のベクトルデータ生成器410は、アプリケーション300からのユーザコマンドまたは制御情報に応じて、タイプ1のストロークオブジェクトの平滑化された初期(開始)曲線セグメントを、リアルタイムレンダラ420またはメモリ装置450に送る。平滑化されたポイントオブジェクトを制御点として用いて補間曲線を作成するには、キャットマル−ロム曲線アルゴリズムなどの適切な曲線補間アルゴリズムを適用する。
【0065】
2.ペンムーブ時の処理フロー
【0066】
フローチャートの初期ステップS701に戻り、タイプ1のベクトルデータ生成器410が、ペンムーブ時、すなわちペンがスタートポイントとエンドポイントとの間で移動していることを検出すると、タイプ1のベクトルデータ生成器410は、ペンイベントデータに含まれるポイントの、x、y座標値、及び、タイムスタンプ及び/または筆圧情報を受け取り、上記のステップS712において選択されたパスビルダを用いて、上記のステップS714においてポイントに対して決定されたパラメータセット(例えば、x,y,W,A)を用意及び出力する。
【0067】
ステップS730において、タイプ1のベクトルデータ生成器410は、例えばアプリケーション300から受け取った制御情報に基づいて、ポイントに対してパラメータセット(x,y,W,A)に平滑化処理を適用すべきか否かを判定する。制御情報は、さらに、パラメータのうちのいずれのものに平滑化処理を適用するかを示し得る。ステップS730の動作は、上述したステップS716の動作と同じである。
【0068】
平滑化の適用が示された場合(ステップS730に対してYES)に、ステップS732において、示された平滑化処理を適用する。また、例えばアプリケーション300から受け取った制御情報に応じて、ステップS733において、タイプ1のベクトルデータ生成器410は、さらに、図6の列Cに示すように、サフィックス付加オペレーションを実行する。サフィックス付加オペレーションは必須ではなく、各動作において必ずしも実行されない。例えば、平滑化処理を実行しない場合に、サフィックス付加オペレーションは必要でなく、実行されない。
ステップS734において、タイプ1のベクトルデータ生成器410は、対ストローク追加部122Dを用いて、ポイントオブジェクトのうちのいくつを確立してメモリ装置450に格納し、出力すべきタイプ1のストロークオブジェクトの部分的なデータに追加するかを決定する。
【0069】
ステップS776において、タイプ1のベクトルデータ生成器410は、ユーザコマンドまたはアプリケーション300からの制御情報に応答して、タイプ1のストロークオブジェクトの平滑化された中間の曲線セグメントを、リアルタイムレンダラ420またはメモリ装置450に送る。平滑化されたポイントオブジェクトを制御点として用いて補間曲線を作成するには、キャットマル−ロム曲線アルゴリズムなどの適切な曲線補間アルゴリズムを適用する。中間の曲線セグメントは、例えば、リアルタイムレンダラ420が、タイプ1のストロークオブジェクトの中間部分を、上記のステップS772において出力されたタイプ1のストロークオブジェクトの初期部分に連続して表示し得るように、継続的に出力される。
【0070】
3.ペンアップ時の処理フロー
【0071】
フローチャートの初期ステップS701に戻り、タイプ1のベクトルデータ生成器410が、イベントタイプはペンアップイベントである(すなわち、タイプ1のストロークオブジェクトの描画が完了して、入力装置10が位置入力センサ50から取り除かれる)と判定すると、タイプ1のベクトルデータ生成器410は、ペンイベントデータに含まれるポイントの、x、y座標値、及び、タイムスタンプ及び/または筆圧情報を受け取り、上記のステップS712において選択されたパスビルダを用いて、上記のステップS714においてポイントに対して決定されたパラメータセット(例えば、x,y,W,A)を用意及び出力する。
【0072】
ステップS750において、タイプ1のベクトルデータ生成器410は、ポイントに対して受け取ったパラメータセット(x,y,W,A)に平滑化処理を適用すべきか否か、及びパラメータのうちのいずれのものに平滑化処理を適用するかを判定する。ステップS750の動作は、上述のステップS716及びS730の動作と同じである。
【0073】
平滑化の適用が示された場合(ステップS750に対してYES)に、ステップS752において、示された平滑化処理を実行する。また、例えばアプリケーション300から受け取った制御情報に応じて、タイプ1のベクトルデータ生成器410は、さらに、図6の列Cに示すように、サフィックス付加オペレーションを実行する。サフィックス付加オペレーションは必須ではなく、各動作において必ずしも実行されない。例えば、平滑化処理を実行しない場合に、サフィックス付加オペレーションは必要でなく、実行されない。
【0074】
ステップS753において、さらに図6の列Cに示すように、エンドポイント(制御点)x12'を複製して、x11'とx12'との間の終了曲線セグメントをキャットマル−ロム曲線として定義する新たな制御点x13'を生成する。
【0075】
ステップS780において、タイプ1のベクトルデータ生成器410は、タイプ1のストロークオブジェクトの平滑化された(及びサフィックスが付加された)終了曲線セグメントを、リアルタイムレンダラ420またはメモリ装置に送る。平滑化されてサフィックスが付加されたポイントオブジェクトを制御点として用いて補間曲線を作成するには、キャットマル−ロム曲線アルゴリズムなどの適切な曲線補間アルゴリズムを適用する。終了曲線セグメントを、上記で出力されたタイプ1のストロークオブジェクトの中間部分に連続して出力することによって、タイプ1のストロークオブジェクトを全体として完成させる。
【0076】
図7に示すタイプ1のベクトルデータ生成器410及び関連する処理は、こうして、ペンイベントデータを継続して入力し、部分的に形成されたタイプ1のストロークオブジェクトを作成されたまま出力することが可能である。出力された部分的なタイプ1のストロークオブジェクトを、メモリ装置450に継続的に格納してもよいし、タイプ1のストロークオブジェクトにより表される手書きのリアルタイム表示(レンダリング)のためにリアルタイムレンダラ420に継続的に送ってもよい。
【0077】
図8は、タイプ1のベクトルデータのリアルタイムレンダリングを共同で実行する、リアルタイムレンダラ420及びグラフィック処理ユニット40の機能ブロック図である。リアルタイムレンダラ420とグラフィック処理ユニット40との区分は図8に示すものに限定されず、機能の中に、例えば各プログラムアプリケーションのレンダリング設定に応じて、組み合わされ、さらに分割され、またはリアルタイムレンダラ420とグラフィック処理ユニット40とに個々に共有されるものがあってもよい。一方、代表的な実施の形態において、図示したように、ハードウェアアクセラレートされ得るそれらの機能及び計算は、タイプ1のベクトルデータのリアルタイムレンダリングをサポートするグラフィック処理ユニット40において有利に実行される。
【0078】
タイプ1のベクトルデータ生成器410によって生成されたタイプ1のベクトルデータは、リアルタイムレンダラ420に入力される。図示した例において、タイプ1のベクトルデータはタイプ1のストロークオブジェクトを含み、それぞれのタイプ1のストロークオブジェクトは、幅情報「W」にそれぞれ関連付けられたポイントオブジェクトPnのセットからなる。キャットマル−ロム曲線を用いてタイプ1のストロークオブジェクトを定義する場合に、タイプ1のストロークオブジェクトの各曲線セグメントは、上述したように4つの制御点によって定義され、後続の4つの制御点により定義される後続の各曲線に対してスライドする態様をなす。図9Aに示すように、1番目の曲線セグメントが4つの制御点P0〜P3(901)によって定義され、2番目の曲線セグメントが4つの制御点P1〜P4(902)によって定義され、(n−2)番目の曲線セグメントが4つの制御点Pn−3〜Pn(900n)によって定義される。図9Bは、所与の時点における、図8に示すタイプ1のベクトルデータ生成器410からリアルタイムレンダラ420への入力データ((タイプ1)曲線データ)を示す。図9Bは、リアルタイムレンダラ420が、曲線セグメントSn−1を定義する4つの制御点を受け取った後に、曲線セグメントSnを定義する後続の4つの制御点900nを受け取ることを示す。
【0079】
リアルタイムレンダラ420は、入力される曲線セグメントのそれぞれを、図9Cに示すように分割ポイントi(=0〜n)のセットにセグメント化する。分割ポイントiの数及び位置は、例えば、ディスプレイ50aの画素解像度、タイプ1のストロークオブジェクトの輪郭/形状などを考慮して、曲線セグメントごとに計算され得る。例えば、ディスプレイ画素解像度を考慮して、タイプ1のストロークオブジェクトの各曲線セグメントに沿って配置すべき1番目のセグメント化ポイントの最適な数及び位置を、ディスプレイ50a上においてストロークのリアルなレンディションを達成するように決定し得る。
【0080】
具体的には、タイプ1のストロークオブジェクトを形成する曲線セグメントのそれぞれ(例えば、キャットマル−ロム曲線セグメント)は、曲線セグメントを定義する(4つのうちの)2つの制御点間における分割ポイントiによってセグメント化される。したがって、各曲線セグメントに対して結果として得られる分割ポイントは、曲線セグメントと2つの隣り合う制御点間に挿入される追加の分割ポイントとを定義する元の制御点(例えは、キャットマル−ロム曲線セグメントに対する4つの制御点)を含む。言い換えれば、分割ポイントは、タイプ1のベクトルデータ生成器410から入力される曲線セグメントに対して定義される元の制御点を再使用し、さらに、タイプ1のストロークオブジェクトを描画する場合に所望レベルの画素解像度を達成するように追加された「フィラーポイント」を含む。タイプ1のストロークオブジェクトを形成する1以上の曲線セグメントに対して分割ポイントiを決定した後に、図7を参照して上述した適切な平滑化アルゴリズムを適用して分割ポイントを平滑化し得る。結果として得られる分割ポイントは、元の制御点及び追加されたフィラーポイントを含んでおり、次いで埋め合わせる三角形を形成するように直線で接続される頂点として用いられる(図9D参照)。
【0081】
図9Aに示すように、制御点P0...Pnにキャットマル−ロム曲線アルゴリズムを適用すると、曲線904が生成される。曲線904は、キャットマル−ロム曲線の特性であるが、制御点(P0...Pn)のすべてを通過するように形成される。
【0082】
図9Cの実施の形態に示されるように各分割ポイントが幅値に関連付けられている場合に、幅値を用いて、各分割ポイント(すなわち、曲線セグメントを定義する制御点)の付近に中心を有する円905の半径を定義する(図9A参照)ことにより、図示したように、タイプ1のストロークオブジェクトによって表されるストロークに可変幅を付与する。分割ポイントに対する幅値として、2つの元の制御点の幅値を用い得る、または元の幅値に基づいて計算される新たな幅値を用い得る。例えば、フィラーポイントを分割ポイントとして追加する場合に、タイプ1のベクトルデータ生成器410から入力された元の制御点(ポイントオブジェクト)に関連付けられた既知の幅値を用いる適切な補間方法に基づいて、フィラーポイントに対する幅値を計算し得る。同様に、分割ポイントに対する色及び透過度の値などの他の属性値を、元の制御点の色及び透過度の値から導出し得る。
【0083】
可変幅を有する曲線904は、その制御点(分割ポイント)において個別の幅(または半径)を有する。曲線904の境界を計算する一方法は、曲線904の長さに沿った、制御点(分割ポイント)を中心とする円のセットの包絡線908(図9Cにおける908a/908b)を計算することであり、ここで各円の半径(または直径)は各分割ポイントiに関連付けられた幅値に相当する。この場合に、包絡線908に属するポイントは、次の条件を満たす。
【0084】
【数2】
【0085】
さらに、キャットマル−ロム曲線を用いてタイプ1のストロークオブジェクトを補間する場合に、次の多項式関数u(t)、v(t)、及びr(t)を定義することが可能であり、ここでPi−3〜Pは、スタートポイント(Pi−2)、エンドポイント(Pi−1)、スタートポイントの「前」のポイント(Pi−3)、及びエンドポイントの「後ろ」のポイント(p)という各曲線セグメントを定義するのに必要な4つの制御ポイントを定義する。
【0086】
【数3】
【0087】
分割ポイントiのそれぞれに対して、図8におけるボックス421に示すように、リアルタイムレンダラ420は多項式(式2)及び(式3)の定義と、「左」(+1)及び「右」(−1)のインデックスとを、グラフィック処理ユニット40に渡す。具体的には、図9Cに示すように、各分割ポイントi(t=i,ここでi=0,...n)は分割ポイントの「左」座標()及び分割ポイントの「右」座標()に関連付けられ、これによって分割ポイントiのセットにより定義される各曲線セグメントは、一方が「左」座標のセットによって定義されるとともに他方が「右」座標のセットによって定義される2つの輪郭曲線(すなわち包絡線)を有するようになっている。
【0088】
グラフィック処理ユニット40内の動作ボックス422は、上記の(式2)及び(式3)を解いて、分割ポイントtのそれぞれに対して「左」及び「右」の2つのポイント()及び()を生成する。結果として得られるポイントセット(x,y)及び(x,y)は、図9Cに示すように、タイプ1のストロークオブジェクトによって表されるストロークを共同で包絡する輪郭曲線908a及び908bを形成する。
【0089】
グラフィック処理ユニット40内のボックス423は、図9Dに示すような包絡線三角形910a、910bなどを示しており、これらは動作ボックス422によって用意される。2つの輪郭曲線908a及び908b沿いの2つのポイントセット(x,y)及び(x,y)を接続することによって、ストロークが複数の三角形910a、910bなどにセグメント化され、それらの頂点は2つのポイントセット(x,y)及び(x,y)によって定義される。
【0090】
次いで、グラフィック処理ユニット40内の動作ボックス424が、三角形910(910a、910bなど)、したがってディスプレイ50a上の画素を着色するように、典型的にはそれぞれ制御点(分割ポイント)に関連付けられた色値を適用する。当業者に明らかなように、三角形910を着色する任意の適切なカラーリングアルゴリズムを適用し得る。次いで、ディスプレイ50a上におけるタイプ1のベクトルデータのリアルタイムレンダリングのために、画素色情報をVRAMへ出力する。
【0091】
一般に、タイプ1のベクトルデータのリアルタイムレンダリングは、上述したように、ストロークがユーザにより手書きされたのと同じ順序でストロークの順次のレンダリングを達成するように、ストロークパスに沿って三角形910を埋めることを目的とする。例えば、図2のタイプ1のストロークオブジェクト21を再度参照すると、ユーザが「ペンダウン」ポイントから「ペンアップ」ポイントまでタイプ1のストロークオブジェクト21を手書きする際に、ユーザは、ディスプレイ50a上で「ペンダウン」ポイントから開始して「ペンアップ」ポイントで停止するまで継続的に成長するストロークのリアルタイムレンダリングを見ることができる。したがって、リアルタイムレンダリングアプローチは、図2における自己交差21aなどの任意のストロークの任意の自己交差部における強調描画(強調着色)を伴う。リアルタイムレンダリングアプローチは、上述したように、十分なハードウェアアクセラレーションがグラフィック処理ユニット40によって許容されることを図って、三角形910の強調描画を許容する。いくつかの実施の形態では、当業者に明らかなように、適切な混合機能を適用して、三角形910の強調描画によって引き起こされ得る任意の視覚的なアーチファクトを防止し得る。
【0092】
一方、自己交差部における強調描画に起因する非効率さのおそれを考慮して、本発明の実施の形態は、タイプ1のベクトルデータに基づき、自己交差を全く含まない、したがって三角形910の強調描画に起因する非効率さに煩わされないタイプ2のベクトルデータを用意することを提案する。図4に示すように、タイプ2のベクトルデータ生成器430を用いて、タイプ1のベクトル生成器410により生成されたタイプ1のベクトルデータに基づき、このようなタイプ2のベクトルデータを生成し得る。したがって、タイプ1のベクトルデータの利益とタイプ2のベクトルデータの利益との両方を最大限に利用するために、個々の出力要求に応じて、タイプ1のベクトルデータまたはタイプ2のベクトルデータのいずれかを選択的に出力し得る。
【0093】
図2を再度参照すると、自己交差21aを含むタイプ1のストロークオブジェクト21に基づいて生成されたタイプ2のストロークオブジェクト23は、それぞれ自己交差を含まない2つの形状23a及び23bからなる。タイプ1のストロークオブジェクトをタイプ2のストロークオブジェクトに変換する処理を、図4図10A乃至図14Bを参照して以下で説明する。
【0094】
図4を再度参照すると、タイプ2のベクトルデータ生成器430はメモリ装置450からタイプ1のベクトルデータを受け取り、ここでタイプ1のベクトルデータ(または「曲線データ」)は、それぞれがポイントオブジェクトセット(P1〜Pn)からなるタイプ1のストロークオブジェクトを含む。タイプ2のベクトルデータ生成器430は、受け取ったタイプ1のベクトルデータに基づいてタイプ2のベクトルデータを生成し、生成したタイプ2のベクトルデータ(または「境界」データ(V1〜Vm))をメモリ装置450へ出力する。次いで、セレクタ460を用いて、個々の出力要求に応じて、すべてメモリ装置450に格納された、タイプ1のベクトルデータ、タイプ2のベクトルデータ、または未加工のペンイベントデータを選択的に出力し得る。
【0095】
図10Aは、タイプ2のベクトルデータ生成器430(タイプ1からタイプ2への変換器)の機能ブロック図である。タイプ2のベクトルデータ生成器430は、メモリ装置450からタイプ1のベクトルデータ(または「曲線データ」(P1〜Pn))を受け取る。以下で詳述するように、本発明の様々な実施の形態は、キャットマル−ロム補間が使用可能なタイプ1のベクトルデータを、コンピュータグラフィックスにおいて用いられる最も一般的な補間法のうちの1つである三次ベジェ補間が使用可能なタイプ2のベクトルデータに変換する。
【0096】
図10Aの動作ブロック432において、タイプ2のベクトルデータ生成器430は、曲線セグメントを定義する2つの制御点間の「境界ポイント」によってタイプ1のストロークオブジェクトを形成する曲線セグメント(例えば、キャットマル−ロム曲線セグメント)のそれぞれをセグメント化する。これに関連して、図10Aのブロック432における動作は、図8を参照して上述したような分割ポイントを求める動作と同様である。
【0097】
具体的には、図10Aのブロック432において、境界ポイントは、例えばディスプレイ50aの画素解像度、タイプ1のストロークオブジェクトの輪郭/形状などを考慮して、曲線ごとに計算され得る。例えば、ディスプレイ画素解像度を考慮して、タイプ1のストロークオブジェクトの各曲線セグメントに沿って配置すべき境界ポイントの最適な数及び位置を、ディスプレイ50a上でストロークのリアルなレンディションを達成するように決定し得る。結果として得られる境界ポイントは、入力されたタイプ1のストロークオブジェクトに対して定義される元の制御点(P1〜Pn)を含むとともに再使用し、さらに、結果として得られるタイプ2のストロークオブジェクトをレンダリングする場合に所望レベルの画素解像度を達成するように追加されたフィラーポイントを含む。例えば、フィラーポイントは、追加されたフィラーポイントによって定義される曲線セグメントと実際の輪郭との間の距離を、例えば一定の画素サイズに基づく閾値より小さくなるように最小化する境界ポイントして追加され得るが、上述した「分割ポイント」の場合とは異なり、リアルタイムレンダリングに関連して通常は必要とされる高解像度表示が必要とされないブロック432では、閾値が緩和され得る。さらに、ブロック432において、境界ポイントが決定された後に、適切な平滑化アルゴリズムを適用して境界ポイントを平滑化し得る。結果として得られる境界ポイントは、元の制御点及び追加されたフィラーポイントを含み、次いで、三次ベジェ曲線などの曲線を定義する新たな制御点として用いられる。図10Aのブロック432は、図8のボックス421及び422と同様に、共同でストロークを包絡する輪郭曲線908a及び908bを集合的に形成する2つの(左右の)包絡線ポイントセット(x、y)及び(x,y)を生成する。前記のように、2つのポイント(x、y)及び(x,y)は境界ポイントのそれぞれに対して生成される。
【0098】
結果として得られる境界ポイントデータは、境界ポイントのそれぞれに対して計算される左右の包絡線ポイントを含み、ブロック433に示すように、未加工タイプの「境界データ」として任意選択により格納され得る。上述した分割ポイントの場合におけるように、境界ポイントのそれぞれ及びその関連付けられた「左」及び「右」のポイントは、境界ポイントを求める基となった元の制御点(P1〜Pn)の色及び透過度の値から導出され得る色及び透過度の値などの属性情報に関連付けられ得る。
【0099】
本発明の代表的な実施の形態に従い、動作ブロック434において、タイプ2のベクトルデータ生成器430は、2つの輪郭曲線908a及び908b沿いの2つのポイントセット(x、y)及び(x,y)によって包絡されるストロークを、ブロック435におけるようにタイプ2のストロークオブジェクトを形成する1以上の単純な多角形(または単純な形状)へと単純化する。例えば、ブロック434は、図2に示すように自己交差21aを含むタイプ1のストロークオブジェクト21を、それぞれが同様に図2に示すように自己交差を含まない2つの単純化された形状23a及び23bからなるタイプ2のストロークオブジェクト23へと単純化する。
【0100】
所与の形状を自己交差を含まない1以上の単純な多角形へとクリッピングするのに適切である様々な多角形クリッピングアルゴリズムが知られている。このようなアルゴリズムは、非限定的な例として、バーラ・アール・バッティ(Bala R Vatti)、「多角形クリッピングに対する包括的な解法(A generic solution to polygon clipping)」、コミュニケーションズ・オブ・ザ・エー・シー・エム(Communications of the ACM),第35巻、第7号(1992年7月)第56−63頁に開示されたバッティ多角形クリッピングアルゴリズムと、従来周知であるグライナー・ホアマン(Greiner−Hormann)クリッピングアルゴリズムとを含む。特に、バッティクリッピングアルゴリズムは、任意の凹形状、凸形状、及び自己交差形状をクリッピングして非自己交差多角形を生成することが可能な極めて一般的な解を与え、したがって、本発明の様々な実施の形態における使用に極めて適している。
【0101】
結果として得られるタイプ2のストロークオブジェクトは、図10Bに示すように境界ポイントVk−1、V、Vk+1により順次定義されるセグメントセットによって定義される単純な多角形である。図10Bは、曲線適合436が適用される前に図10Aにおける動作ブロック434によって生成される境界データ例(単純な多角形)を示す。タイプ2のストロークオブジェクトは、図10Bに示すように、境界ポイントにより定義されるセグメントの集合として出力され得る。
【0102】
任意選択により、図10Aの動作ブロック436において、図10Bの単純な多角形435に、従来周知であるフィリップ・ジェイ・シュナイダー(Philip J. Schneider)アルゴリズムなどの適切な曲線適合アルゴリズムを適用し得る。いくつかの実施の形態では、曲線適合を、例えばブロック432において事前に適用してもよく、このような場合には、ブロック436における追加の曲線適合は必須でなくてもよい。様々な実施の形態において、図2に示すようにストロークの形状の角21bにおいて追加される境界ポイントなどの、レンダリング時に手書きストロークの元の形状の正確な再生を容易にするように特別に設計された境界ポイントを追加してもよい。
【0103】
図10Cは、図10Aの動作ボックス436において曲線適合が適用された境界データ例(三次ベジェ)を示す。図10Cは、ベジェ曲線に対する制御点として機能する境界ポイントV3k+1、V3(k+1)+1、V3(k+2)+1により順次定義されるベジェ曲線のセットによって、ストロークの境界が定義されることを示す。二次ベジェ曲線と三次ベジェ曲線などの高次のベジェ曲線とを含む任意のタイプのベジェ曲線を用い得る。図10Cの例では、それぞれの三次ベジェ曲線が4つの制御点によって定義される2つの三次ベジェ曲線を用いて、ストロークの境界を定義する。1番目のベジェ曲線は、制御点V3(k−1)+1、V3k−1(「CurveTo1」ポイント)、V3k(「CurveTo2」ポイント)、V3k+1によって定義される。2番目のベジェ曲線は、制御点V3k+1、V3(k+1)−1(「CurveTo1」ポイント)、V3(k+1)(「CurveTo2」ポイント)、V3(k+1)+1によって定義される。上記の図10Bとの比較から明らかなように、セグメントごとに、「CurveTo1」ポイント及び「CurveTo2」ポイントと称する2つの追加の制御点が、ストロークの境界の輪郭をより精密に追跡及び定義するように追加される。手短に言うと、三次ベジェ曲線は次数3のベジェ曲線であり、4つの制御点(P、P、P、及びP)によって定義される。曲線はPにおいて開始し、Pにおいて停止する。直線PはポイントPにおける曲線の接線であり、直線PはポイントPにおける曲線の接線である。Pは「MoveTo」ポイントと称し、ベジェ曲線の開始ポイントを示す。一般に、ベジェ曲線はPもPも通過せず、これらのポイントの機能は方向の情報を与えることである。P(「MoveTo」ポイント)とPとの間の距離は、曲線が、Pのほうへ向きを変えるまでに「どのくらい長く」方向Pへ移動するかを特定し、したがってP及びPは「CurveTo」ポイントと称する。様々な実施の形態において、タイプ2のストロークオブジェクトは、図10Cに示すように、(図示した実施の形態において境界ポイントにより与えられる)制御点によって定義されるベジェ曲線の集合として出力される(エクスポートされる)。
【0104】
図2の例において、タイプ2のストロークオブジェクト23は2つの単純な形状23a及び23bからなり、単純な形状のそれぞれは、それぞれ境界ポイントV1〜V10、境界ポイントV1〜V6によって定義される。2つの境界ポイントセットは、ベジェ曲線を形成する制御点として作用し、それぞれストロークの外部境界、内部境界を形成する。
【0105】
こうして、タイプ2のベクトルデータ生成器430は、それぞれが図2における単純化された形状23aのポイントV1〜V10と単純化された形状23bのポイントV1〜V6などの境界ポイントセットによって定義されるタイプ2のストロークオブジェクトを含むタイプ2のベクトルデータの生成を完了する。境界ポイントは、単純化された形状23a及び23bの輪郭を追跡する補間曲線を例えば三次ベジェ補間アルゴリズムを用いて生成する制御点として作用する。次いで、生成されたタイプ2のベクトルデータは、図17A乃至図17Cを参照して以下でより詳細に説明するように、それぞれが制御点によって定義されるベジェ曲線のセットを含むスケーラブルベクトルグラフィックス(SVG)ファイルなどのコンピュータ読み取り可能なファイルとしてエクスポートされ得る。これに代えて、またはこれに加えて、生成されたタイプ2のベクトルデータを、レンダリングのために、グラフィック処理ユニット40(図4)に結合された2Dグラフィックライブラリに入力してもよい。さらに、これに代えて、またはこれに加えて、生成されたタイプ2のベクトルデータを、後に出力要求に応答してセレクタ460により選択的に出力またはエクスポートするために、メモリ装置450に格納してもよい。
【0106】
図2に示すように、共同でタイプ2のストロークオブジェクトを形成する単純化された形状23a及び23bは、それぞれ、元のストロークが手書きされた順序に一致しない境界ポイントV1〜V10、境界ポイントV1〜V6によって定義される。このことは、同様に図2に示すタイプ1のストロークオブジェクト21と対照的であり、タイプ1のストロークオブジェクト21は、元のストロークが手書きされたのと同じ順序である分割ポイントP1〜P8によって定義される。したがって、図示した実施の形態におけるタイプ2のストロークオブジェクト23は、通常、元のストロークが手書きされたのと同じ順序で再生することができない。しかし、タイプ2のストロークオブジェクトは自己交差を全く含まない単純な形状からなるため、タイプ1のストロークオブジェクト21に関連付けられる三角形910(図9D参照)の強調描画に起因する非効率さがない。これにより、タイプ2のベクトルデータは、特に、(非常に)多数のタイプ2のストロークオブジェクトを一括してレンダリング及び操作する(ズーミングする、回転する、スクロールする、傾斜させる、レンダリング領域を変更するなど)必要がある一括レンダリングのためには高効率となる(図4における既存のストロークの一括レンダリング440参照)。
【0107】
図11は、自己交差を含むタイプ1のストロークオブジェクトを自己交差を含まない2つの単純化された形状からなるタイプ2のストロークオブジェクトに変換することを示す概略的なフロー図である。
【0108】
図12は、図10Aのタイプ2のベクトルデータ生成器430によって実行されるルーチン例を示すフローチャートである。ステップS1201において、境界ポイントごとの2つのポイントセット(x,y)及び(x,y)がストロークを包絡する2つの輪郭曲線908a及び908bを形成するように計算されることに基づいて、受け取ったタイプ1のストロークオブジェクトを境界ポイントによってセグメント化する。結果として得られる境界ポイントは、元の境界ポイント、及び、元の境界ポイントに基づいて計算される左右の包絡線ポイントを含み得る。ステップS1203において、任意選択により、各境界ポイントV1,...Vnが色値及び透過度(アルファ)値の両方に関連付けられる未加工タイプの境界データ(図10Aにおけるブロック433参照)に関して、各境界ポイント(及び各境界ポイントの左右のポイント)の色値を、同じ境界ポイントの透過度値を用いて調整し、図13乃至図14Bを参照して以下でより詳細に説明するように、生成されたタイプ2のベクトルデータをPDFファイルに埋め込む場合に役立つようにする。
【0109】
ステップS1205において、多角形単純化を実行して、タイプ1のストロークオブジェクトを、それぞれが自己交差を含まない1以上の多角形からなるタイプ2のストロークオブジェクトに変換する。単純な多角形のそれぞれは、図10Bに示すように、セグメントを生成する制御ポイントとして用い得る境界ポイントセットによって定義される。ステップS1207において、任意選択により、曲線適合を適用し得るとともに、境界ポイントを調整し得る(例えば、平滑化する、または単純化された形状の任意の角にさらなる境界ポイントを追加する)。結果として、例えば、ストロークオブジェクトに対するタイプにより表されるストロークの境界を定義するように、三次ベジェ補間などの適切な補間アルゴリズムを用いた補間曲線が生成される。
【0110】
図13は、未加工タイプの境界データを処理して(図10Aにおけるブロック433参照)、PDFファイルに埋め込むのに適したタイプ2のベクトルデータを生成するルーチンを示すフローチャートである。ステップS1301において、本ルーチンは、境界ポイントの左右のポイントである、それぞれが色及び透過度の値に関連付けられたポイント対(x,y)及び(x,y)を受け取る。上述したように、境界ポイントに基づくポイント(x,y)及び(x,y)の色及び透過度の値は、タイプ2のベクトルデータを生成する入力として用いられるタイプ1のベクトルデータ(例えば、P1〜Pn)の色及び透過度の値から導出され得る。
【0111】
PDFアプリケーションなどのいくつかのアプリケーションは、処理される各ポイントに対する透過度値をサポートしない。したがって、ステップS1303において、本ルーチンは、同じポイントのアルファ値により(左右の)各ポイントの色値を調整することによって、透過度情報を色値単独になるように組み込み、または埋め込む。ステップS1305において、本ルーチンは、各境界ポイント、ひいてはその左右のポイントが、元の色値及び元の透過度値の組合せである、したがって元の色値及び元の透過度値を表す、調整された色値に関連付けられたタイプ2のベクトルデータを出力する。
【0112】
図14A及び図14Bは、図13のフローチャートを参照して上述したように、調整された色値を有するタイプ2のベクトルデータを生成する処理を概略的に示す。図示した例において、1番目のポイント対p1a及びp1bと2番目のポイント対p2a及びp2bとは、(図10Aにおける)未加工タイプの境界データ433に対応し、ポイントp1a、p1b、p2a、及びp2bはそのXY座標によって定義されて色値及び透過度値(アルファ)に関連付けられる。通常、各ポイント対は同じ色及び透過度の値を有する。例えば、1番目の境界ポイント(黒丸)に基づくポイントp1a及びp1bの色及び透過度の値は(1番目の境界ポイントの色及び透過度の値と)同じであり、2番目の境界ポイントに基づくポイントp2a及びp2bの色及び透過度の値は(2番目の境界ポイントの色及び透過度の値と)同じである。
【0113】
図13のステップS1303において、ポイントのそれぞれの色値は次のように調整され得る。
調整されたcolor=color+(1−アルファ)*(1−color)(式4)
【0114】
このような調整により、典型的には、背景色が白(「FFFFFF」)であると仮定すると、元の色より白い調整された色が生じて、ディスプレイ上にレンダリングされるときに色の混合が向上する結果となる。
【0115】
図14Bにおいて、参照符号1401は、ポイントp1a、p1b、及びp2aを定義するデータの最初の3つの直線は、頂点としてのこれら3つのポイントによって形成される1つの三角形を形成することを示す。上述したようにポイントp1a、p1b、及びp2aの色値が調整されると、三角形560a(図14A参照)の色(または三角形560a内の色)が、例えばPDF「シェーディングタイプ4(自由形式のグローシェーディングによる三角形メッシュ」によって自動的に計算され得る。
【0116】
図15は、出力要求に応じてタイプ1のベクトルデータ、タイプ2のベクトルデータ、またはタイプ0のデータ(未加工のペンイベントデータ)を選択的に出力する詳細なルーチンを示すフローチャートである。
【0117】
ステップS1501において、位置入力センサ50上のペンダウンイベントを検出する。ペンダウンイベントが検出されると、ステップS1503において、例えばペンイベントデータ(X,Y,P)を取得する。ステップS1505において、タイプ1のベクトルデータ生成器410が、受け取ったペンイベントデータに基づいてタイプ1のベクトルデータを生成し、リアルタイムレンダラ420が、タイプ1のストロークオブジェクトのペンアップポイントにおけるタイプ1のストロークオブジェクトの完了を待たずに、生成されたタイプ1のストロークオブジェクトのリアルタイム出力を(タイプ1のストロークオブジェクトのペンダウンポイントから作成されるように)開始する。ステップS1507において、ペンアップイベントを検出する。NOである場合は、ユーザのペン入力操作が継続すること、及びペンがダウンであって位置入力センサ50上においてムーブすることを意味し、したがって本ルーチンはステップS1501へ戻ってステップS1503〜S1507を通したサイクルを継続する。
【0118】
ステップS1507において、ペンアップイベントが検出される場合は、ユーザのストローク入力が(そのペンアップポイントにおいて)完了したことを意味する。次いで、ステップS1509において、本ルーチンは、ストロークをそのペンダウンポイントからペンアップポイントまで表すタイプ1のストロークオブジェクトを完成させて、完成したタイプ1のストロークオブジェクトをメモリ装置450(図4参照)に格納し得る。
【0119】
ステップS1511において、タイプ2のベクトルデータ生成器430は、上記のステップS1509において完成したタイプ1のベクトルデータに基づいてタイプ2のベクトルデータを生成し、生成したタイプ2のベクトルデータをメモリ装置450に格納する。
【0120】
ステップS1541において、実行中のアプリケーション300(図1B参照)から受け取った出力要求(「RT」)のタイプを判別する。
【0121】
出力要求(RT)がタイプ1のベクトルデータを求める場合に、ステップS1547において、メモリ装置450に格納されたタイプ1のベクトルデータを出力する。図16Aは、出力またはエクスポートされ得るタイプ1のベクトルデータを含んだコンピュータ読み取り可能なファイル例を示す。当該ファイルはポイントオブジェクトPのセットを含み、ポイントオブジェクトPのセットは、タイプ1のストロークオブジェクトによって表されるストロークを集合的に定義する幅情報(W)にそれぞれ関連付けられたポイントオブジェクトPのセットの座標(X,Y)により定義される。図16Aのファイル例において、合計50個のポイントオブジェクト(P〜P49)が、ストロークに沿って変化する幅(1.1〜2)を有して定義される。図16Bは、ディスプレイ上に図16AのポイントオブジェクトセットP〜P49をレンダリングした結果例である。タイプ1のデータが出力またはエクスポートされる形式はファイルとすることに限定されず、ストリーミングバイナリデータとしてもよい。
【0122】
タイプ1のベクトルデータを求める出力要求は、例えば、テキスト(文字)認識アプリケーション、署名検証アプリケーション、マシン制御アプリケーションからの出力要求、さらに一般的には、ストロークが最初に入力されたのと同じ順序でレンダリングされ(再生され)得るインクデータを求める任意の出力要求を含み得る。
【0123】
出力要求(RT)がタイプ2のベクトルデータを求める場合に、ステップS1543において、メモリ450に格納され得るタイプ2のベクトルデータを出力またはエクスポートする。タイプ2のベクトルデータを求める出力要求は、例えば、一括したストロークセットのズーミング、回転、傾斜、またはレンダリング領域の変更を含む一括レンダリングを求める出力要求と、インクベクトルデータをPDFファイルに埋め込む出力要求とを含み得る。図17Aは、出力またはエクスポートされ得るタイプ2のベクトルデータを含んだコンピュータ読み取り可能なファイル例を示す。本ファイルは、それぞれが4つの制御点によって定義されるベジェ曲線のセット(m=0〜32)を含む。上記の図10Cに示すように、三次ベジェ曲線(V3k+1〜V3(k+1)+1)の1番目の制御点(例えば、図10CにおけるV3k+1)は直前のベジェ曲線(V3(k−1)+1〜V3k+1)の4番目の制御点に一致する。言い換えれば、隣接する2つの三次ベジェ曲線は1つの制御点を共有する。したがって、図17Aのファイル例において、ベジェ曲線はそれぞれ1番目(V3m−1)、2番目(V3m)、及び3番目(V3m+1)の制御点という3つの制御点によって明示的に定義され、冗長性を解消するように、またファイルサイズを低減するように、直前のベジェ曲線の3番目(V3m+1)の制御点によって暗黙的に定義される。例えば、1番目のベジェ曲線(m=1)は、その3つの制御点(V3m−1)、(V3m)、(V3m+1)と直前のベジェ曲線(m=0)の3番目(V3m+1)の制御点とによって定義され、2番目のベジェ曲線(m=2)は、その3つの制御点(V3m−1)、(V3m)、(V3m+1)と直前のベジェ曲線(m=1)の3番目(V3m+1)の制御点とによって定義される、などである。様々な実施の形態において、タイプ2のベクトルデータを含むコンピュータ読み取り可能なファイルはスケーラブルベクトルグラフィックス(SVG)ファイルであり得る。図17Bは、レンダリングされたベジェ曲線の制御点を示す。1番目(V3m+1)の「MoveTo」制御点、2番目(V3(m+1)−1)の「CurveTo1」制御点、及び3番目(V3(m+1))の(「CurveTwo2」)制御点を、互いに見分けることができるように示す。制御点は、タイプ1のストロークオブジェクトによって最初に表されたストロークの境界を集合的に追跡する(図16B参照)。図17Cは、図17A及び図17Bのタイプ2のストロークオブジェクトをディスプレイ上にレンダリングした結果例(例えば、境界の内部が埋められている)であり、タイプ1のストロークオブジェクトによって最初に表されたストロークの形状に極めて近い。
【0124】
タイプ2のデータが出力またはエクスポートされる形式はファイルとすることに限定されず、ストリーミングバイナリデータとしてもよい。
【0125】
タイプ2のベクトルデータをファイル中の状態で、またはストリーミングバイナリデータとして出力またはエクスポートすることに代えて、または加えて、タイプ2のベクトルデータを図17Cにおけるようにディスプレイ上にレンダリングしてもよい。
【0126】
出力要求(RT)がタイプ0のデータ(未加工のペンイベントデータ)を求める場合に、ステップS1549において、メモリ装置450に格納された未加工のペンイベントデータ(例えば、「X,Y,P」)を出力する。タイプ0のデータを求める出力要求は、例えば、署名検証アプリケーションからの出力要求を含み得る。
【0127】
上述した要素、装置、ステップ、及び処理のそれぞれが 各実装及びアプリケーションに応じて、他の要素、装置、ステップ、及び処理と組み合わせられ得ること、または、さらに、部分的な要素、部分的な装置、部分的なステップ、及び部分的な処理に分割され得ることは、当業者に明らかなはずである。またさらに、本ステップ及び本処理を、各実装及びアプリケーションに応じて、単一のプロセッサで実行してもよいし、複数のプロセッサで分散的に実行してもよい。
図1A
図1B
図2
図3
図4
図5
図6
図7
図8
図9A
図9B
図9C
図9D
図10A
図10B
図10C
図11
図12
図13
図14A
図14B
図15
図16A
図16B
図17A
図17B
図17C