(57)【要約】【課題】ポイント位置の平滑化によってストロークデータの終端に発生する遅延を埋める。【解決手段】インクデータを出力する方法であって、センサ表面におけるユーザの手書き動作を表すペンイベントデータを受信する入力ステップ、ペンイベントデータに基づいて、一連のポイント位置を含むストロークオブジェクトを生成するインクデータ生成ステップ、ペンイベントデータをサポートするアプリケーションから受信されるコンテキスト情報に基づいて、一連のポイント位置に平滑化を適用するか否かを決定する決定ステップ、遅延を埋めるために、ストロークオブジェクトの終端部に追加の制御点として機能する１つ以上のポイント位置を付加する付加ステップ、及び、決定ステップが平滑化を適用すると決定したことに応じて、新たな座標値を含む平滑化された一連のポイント位置と追加の制御点とを含む前記ストロークオブジェクトを出力する出力ステップ、を含む。【選択図】図８
2020057442.tif 000002
【特許請求の範囲】
【請求項１】
位置入力センサを含む装置でリアルタイムに実行される、ポインタを操作することによって形成されるパスを再生するよう構成されたベクトルデータであるストロークオブジェクトを含むインクデータを出力する方法であって、
センサ表面におけるユーザの手書き動作を表すペンイベントデータを受信する入力ステップ、
前記ペンイベントデータに基づいて、一連のポイント位置を含むストロークオブジェクトを生成するインクデータ生成ステップ、
前記ペンイベントデータをサポートするアプリケーションから受信されるコンテキスト情報に基づいて、前記一連のポイント位置に平滑化を適用するか否かを決定する決定ステップ、
遅延を埋めるために、前記ストロークオブジェクトの終端部に追加の制御点として機能する１つ以上のポイント位置を付加する付加ステップ、及び、
前記決定ステップが平滑化を適用すると決定したことに応じて、新たな座標値を含む平滑化された前記一連のポイント位置と前記追加の制御点とを含む前記ストロークオブジェクトを出力する出力ステップ
を含むインクデータ生成方法。
【請求項２】
前記コンテキスト情報内に指示される前記ペンイベントデータのサンプリングレートに基づき、前記平滑化のための平滑化アルゴリズムを選択すること
をさらに含む請求項１に記載のインクデータ生成方法。
【請求項３】
平滑化アルゴリズムを選択することは、前記サンプリングレートが低いほど大きな平滑強度を有する平滑化アルゴリズムを選択し、前記サンプリングレートが高いほど小さな平滑強度を有する平滑化アルゴリズムを選択する
請求項２に記載のインクデータ生成方法。
【請求項４】
前記付加ステップは、平滑化が適用される前の前記一連のポイント位置を参照して、前記追加の制御点として付加すべき前記１つ以上のポイントの位置を決定することを含む
請求項１に記載のインクデータ生成方法。
【請求項５】
前記決定ステップが平滑化を適用すると決定したことに応じて、平滑化が適用されるか否かを示す識別子を前記インクデータ内に出力すること
をさらに含む請求項１に記載のインクデータ生成方法。
【請求項６】
前記決定ステップが平滑化を適用すると決定したことに応じて、平滑化フィルターのタイプを示すフィルターパラメータを前記インクデータ内に出力すること
をさらに含む請求項１に記載のインクデータ生成方法。
【請求項７】
前記ストロークオブジェクトの属性を浮動データ型から整数データ型に変換すること
をさらに含む請求項１に記載のインクデータ生成方法。
【請求項８】
前記出力されるインクデータの始まりにおいて、非整数を整数に変換するために使用される十進数精度値を出力すること
をさらに含む請求項１に記載のインクデータ生成方法。
【請求項９】
電子表示装置に結合したセンサ表面上のペンによって描かれたパスを、前記電子表示装置上にリアルタイムで描画するコンピュータに実装される方法であって、
センサ表面上のペンによって示される位置を示す座標データを順に受信する入力ステップ、
前記入力ステップにおいて受信された座標データに平滑化を適用した結果として得られる平滑化された座標データを順に出力する出力ステップ、
前記センサ表面上の前記ペンによって示される最新の位置に対応する追加の位置を示す追加の座標データを付加する付加ステップ、及び、
前記平滑化された座標データ及び前記追加の座標データを用いて、前記センサ表面上の前記ペンによって示される最新の位置を含む位置を、前記電子表示装置上に一時的な視覚的プレビューとして描画する描画ステップ、
を含む方法。
【請求項１０】
前記付加ステップにおいて付加された前記追加の座標データは、前記センサ表面上に前記ペンによって指示された最新の位置の座標データと、最新の位置を示す座標データに対して平滑化を適用した結果として得られる最新の位置を示す平滑化された座標データとの間に生ずる空間的な遅延を埋めるものである、
請求項９に記載の方法。
【請求項１１】
前記センサ表面上の前記ペンによって示される最新の位置が更新される都度、追加の位置を示す追加の座標データを付加する前記付加ステップを繰り返す、
請求項１０に記載の方法。
【請求項１２】
前記センサ表面上の前記ペンによって示される位置の代表として保存されるインクデータのファイナライズにおいて、前記追加の位置を示す前記追加の座標データを無視することを含む、
請求項１１に記載の方法。
【請求項１３】
前記付加ステップは、前記追加の位置に隣接する他の追加の位置を示す追加の座標データを付加することを含む、
請求項１０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、手書き（フリーハンド）のストロークデータのパスを再生し、該パスをスタイルとともに描写するインクデータを生成し、レンダリングし、操作し、伝達するための方法及びシステムに関する。
【背景技術】
【０００２】
各種の手書き入力システムが知られている。手書き入力システムは、ユーザがペン形の装置を利用することによって手書き（フリーハンド）のデータを入力することを可能にするものである。例えば、電磁共鳴タイプのペンタブレット入力システムが知られており、これは、筆圧及びペンの傾きデータに関連するデータを含む手書きデータの入力を可能にする。さらなる例としては、静電タイプのペン入力システムが知られており、これは、指とセンサ表面との間に静電容量が生成されるのと同じように、道具と（タブレット）センサ表面との間に静電容量を生成する。さらに、測定された位置のコレクションから導出されるジェスチャー情報のような相対的にシンプルな情報を出力する入力システムもまた知られている。
【０００３】
典型的には、ペン型の道具によって入力された手書きデータまたはストローク（パス又はトレース）データは、ピクセルデータや画像データのようなラスターデータを生成するために、単一の描画アプリケーション内で使用可能である。インクメッセージング、インク保管・回復アプリケーション、電子メール、写真注釈、遠隔ビデオ会議アプリケーションなどのような様々なタイプの装置及びアプリケーションを操作することによって生成された手書きデータまたはストロークが各種装置間で共有されることを可能にする方法及びシステムのニーズが存在する。デジタルインク又はインクデータ（以下、「インクデータ」と称する）は、そのようなニーズに向けたものとして提案される。典型的には、使用されるアプリケーションの設定に従って生成される直接的なピクセルデータや画像データのようなラスターデータは、入力装置におけるユーザのストローク入力操作をサポートするために使用される。一方で、インクデータは中間データであり、ストロークデータのラスター化に先駆けて存在し、様々なアプリケーションによって使用可能なベクトルデータの形態を有している。インクデータの種類のサンプルが以下の非特許文献Ｄ１〜Ｄ４に記述されている。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Ｗ３Ｃ、レコメンデーション２０、２０１１年９月、「インクマークアップ言語(Ink Markup Language)（ＩｎｋＭＬ）」、URL: http://www.w3.org/TR/2011/REC-InkML-20110920/
【非特許文献２】マイクロソフトコーポレーション他、「インク・シリアライズド・フォーマット仕様書(Ink Serialized Format Specification)」、２００７年、URL: http//download.microsoft.com/download/0/B/E/0BE8BDD7-E5E8-422A-ABFD-4342ED7AD886/InkSerializedFormat(ISF)Specification.pdf
【非特許文献３】Ｗ３Ｃワーキングドラフト１１(W3C Working Draft 11)、２０１４年２月、「スケーラブルベクトルグラフィックス(Scalable Vector Graphics)（ＳＶＧ）２」、URL: http://www.w3.org/TR/SVG2/、Ｗ３Ｃレコメンデーション、2011年8月16日、「スケーラブルベクトルグラフィックス(Scalable Vector Graphics)（ＳＶＧ）１．１（第２版）」、URL: http://www.w3.org/TR/2011/REC-SVG11-201110816/
【非特許文献４】Ｗ３Ｃ、「ＨＴＭＬ５・ＨＴＭＬ及びＸＨＴＭＬのための語彙及び関連するＡＰＩ(A vocabulary and associated APIs for HTML and XHTML)・Ｗ３Ｃレコメンデーション２０１４年１０月２８日(W3C Recommendation 28 October 2014)」、URL: http://www.w3.org/TR/html5/
【非特許文献５】スレート・コーポレーション他、「ＪＯＴ−インクの格納及び交換フォーマットのための仕様書(A Specification for an Ink Storage and Interchange Format)」、バージョン１．０、１９９６年９月
【発明の概要】
【発明が解決しようとする課題】
【０００５】
手短に言うと、ＩｎｋＭＬ（非特許文献１）とＩＳＦ（非特許文献２）のデータ構造は、色々なアプリケーション間で共有できる態様で、ペン型の装置によって入力されるストロークデータを表す。ＳＶＧ（非特許文献３）は、入力装置としてどのタイプのペン装置が利用されたかということに関わらず、ユーザによって入力された制御点によって定義されるパスをベクトルデータとして描画することを可能にするウエブ標準を提供する。
【０００６】
非特許文献１〜４に記載されたインクデータはいずれも、ペン又は指の動きによって形成されるトレース（又はパス）を再生するために必要な幾何学的情報を定義するものである。そのような情報を、ここでは「ストロークデータ」と総称する。
【０００７】
非特許文献１は、現在最も広く知られたインクデータを記述している。非特許文献１は、「トレース」と呼ばれるオブジェクトを次のように定義する。すなわち、「トレース」はユーザがデジタルインクを書いたときのペンの軌跡を記録するために使用される基本要素である。
【０００８】
例えば、
<ink><trace>x1 y1, x2 y2, .....xn yn </trace></ink>
は、点ｘ１，ｙ１から点ｘ２，ｙ２まで延在するストロークオブジェクトのパスを記述する。
【０００９】
非特許文献２は、マイクロソフト（登録商標）ウインドウズ（登録商標）のアプリケーション上で使用可能なインク機能によって生成されるインクデータを記述している。非特許文献２は、「ストローク」と呼ばれるオブジェクトを次のように定義する。すなわち、「単純な例で先に述べたように、ストロークは、ＩＳＦにおいて最も根本的でありかつ重要なプロパティである。ストロークは、ストローク内の個々の点を構成するパケットデータを含み、潜在的には、他のストロークごとのプロパティも同様に含む。」と定義する。
【００１０】
非特許文献３は、ペン入力を仮定するものではないが、各種のブラウザ及び描画ソフトによってサポートされるベクトルデータの標準を記述している。非特許文献３は、「パス」と呼ばれる情報を次のように定義する。すなわち、「パスは、埋められることができ、ストロークされることができ、クリッピングパスとして使用されることができ、或いは、これら３つの任意の結合であり得る形状の輪郭を表す。」と定義する。ＳＶＧ（非特許文献３）では、パスオブジェクトは、当該分野ではよく知られたポリベジエ（キュービックベジエ、二次ベジエ）曲線のような補間曲線に基づいて補間される。
【００１１】
例えば、
<path stroke="green" stroke-width="5" d="M100,200 C100,100 300,100 300,200"/>
は、開始制御点（１００，２００）から始まり、終了制御点（３００，２００）までのパスを記述する。このパスは、２つの制御点（１００，１００）及び（３００，１００）を利用するものであり、パス幅「５」及びカラー「グリーン」を有している。
【００１２】
非特許文献４は、補間曲線を生成するために例えば二次曲線コマンド及びベジエ曲線コマンドを使用することができる「カンバスパス」と呼ばれるクラスを定義する。
【００１３】
本記述においては、用語「ストロークオブジェクト」は、上記非特許文献１〜４の「トレース」、「ストローク」、「パス」、及び「カンバスパス」を包含する一般用語として使用される。
【００１４】
ストロークオブジェクトは、そのデータ構造がペン又は指の動きによって形成されるトレース（又はパス）を再生するために集合的に使用される一組のポイント又は制御点座標を含むベクトルデータ情報である。様々な実施の形態によれば、本発明は、様々なプリケーション上で、又は、様々なアプリケーション間で手書き（フリーハンド）のストロークデータを表すインクデータを生成し、操作し（例えば、スライスし）、レンダリングし、伝達するための方法及びシステムを提案する。各実施の形態は、上記非特許文献１〜４の従来技術では利用可能でなかった技術的解決法を提供する。以下の記述は全体として発明の４つの実施の形態を開示するように組み立てられる一方、当業者にとっては明らかなことであるように、各実施の形態の様々な側面が、各実施の形態の間で結合され、補足され、交換され、切り替えられ、変更され得、それによってさらなる実施の形態が生み出され得ることに注意すべきである。例えば、各実施の形態の様々な方法及びシステムは、インクデータの定義はもちろん、インクデータを生成し、再生し、描画し（レンダリングし）、操作し、及び伝達する方法、並びに、インクデータの構造（データオブジェクト及びデータフォーマット）について、本明細書に開示される一以上の他の実施の形態に関して説明されるものを採用することができる。
【００１５】
以下の第１乃至第４の実施の形態のそれぞれは、様々な例において、以下に記述される一以上の側面を扱う。
【課題を解決するための手段】
【００１６】
［側面１］いくつかのコンピュータにおいて既存のストロークオブジェクトを部分的又は全体的に変形する操作オブジェクトの導入。
【００１７】
一側面によれば、本発明は、操作オブジェクトを提供することに向けられる。上述した以前から知られているインクデータモデルは、１つのストロークオブジェクトを１つの集合として処理するために、静的なストロークデータを処理するためにのみ使用される意味(semantics)又は文法(syntax)を含む。したがって、以前から知られているインクデータモデルは、ストロークオブジェクトの部分を選択し又はスライスするという能力を有しない。また、以前から知られているインクデータモデルは、１つのプロセッサ上でのストロークオブジェクトの操作を可能とするものの、ストロークオブジェクト上で実行される操作（例えば、編集）オペレーションを複数のプロセッサが共有することを可能にする能力を有しない。
【００１８】
図９１は、本発明の一実施の形態による操作オブジェクト２７０の一例である「スライス」オブジェクトを図示している。ストロークオブジェクトの一部を操作する（スライスする）能力を有するスライスオブジェクト２７４が生成され、転送される。図示した例においては、１つのコンピュータ上で１つのストロークオブジェクト９１０１の一部がスライスされ、そのスライスされた部分を示す操作データ９１０３が他のコンピュータによって、その他のコンピュータ上においてもストロークオブジェクト９１０１が同じように操作され得るように、共有される。ストロークオブジェクトの一部を変形又は操作（例えばスライスすること）は、本発明の第１及び第４の実施の形態において後に詳細に記述されるであろう。インクデータが編集され、更新された状態を複数のコンピュータの間で共有するためにそれらの間で１つの操作オブジェクト２７０を共有することは、本発明の実施の第１、第２、及び第４の実施の形態において後に詳細に記述されるであろう。
【００１９】
［側面２］装置の違いを吸収するためにペンイベント入力情報の定義を抽象化すること（及び、ＳＶＧのペン入力表現能力を改善するためにＳＶＧをよりペン入力由来志向とすること）。
【００２０】
さらなる側面によれば、本発明は、異なる入力装置の間に存在する任意の違いを吸収するために、手書き入力データを抽象化することに向けられる。これは、筆圧やペン角度の情報のようなストロークの既存の入力属性を、新規のモデル内に定義されるより高いレベルの概念による属性に抽象化することによって達成される。一般的に、手書きの入力データに基づいて再生される必要のある情報は、ペン（スタイラス）がどの角度で保持されていたか、どの座標の時点でどの点が取得されたか、どれだけの筆圧が適用されたか、というような手書きデータが「どのように」入力されたかという情報ではない。代わりに、キャプチャされる必要のある情報は、ある筆圧、ペン速度などで実施されたそのようなペンオペレーション又は描画オペレーションの「結果」を再生することのできるベクトルデータである。
【００２１】
現在、筆圧、ペン角度、ペン回転角データなどを取得可能な高性能入力装置（例えば、図９２の９２０２Ｃ）から、指による入力を受け付ける能力を有する一方で筆圧やペンの傾き角を取得する能力を有しない、広く使用されている静電タブレット又は他のよりシンプルな装置など（例えば、図９２の９２０２Ａ）まで、様々な手書き入力装置が存在している。したがって、手書き入力データの装置依存型の任意の属性を、ペンイベントの「結果」を再生するために使用され得る非装置依存型の抽象化されたベクトルデータ（図９２の９２０４）に変換することが望まれる。そのような抽象化された形式で定義されるインクデータは、最終的に図９２の９２０８に示されるようなラスターデータ（画像データ）を生成するために、ベクトルデータ内にまとめられる。上で議論したＳＶＧ１１（非特許文献３）はベクトルデータを定義するもので、図９２の９２０６に示されている。ＳＶＧ１１（非特許文献３）は、ストロークの幅、色、及び透明度（不透明度）を変えたり調節したりすることを許容しておらず、結果として、ペンイベントの「結果」を再生することに特には適していない。また、ＳＶＧは、ベジエ曲線を生成するために使用される制御点のようなストロークオブジェクトのパス座標データ以外のデータを含んでおり、したがって、特殊化された描画アプリケーション以外の様々なアプリケーション９２２０での使用には適していない。
【００２２】
ラスター画像データ（図９２の９２０８）を生成することに加えて、ベクトル内のより抽象化された形式にインクデータをまとめることは、サイン認証アプリケーションや注釈アプリケーション内での使用という点から、また望ましいことである。その際、抽象化は画像由来であり過ぎないことが好ましいが、ラスター形式およびベクトル形式の両方においてインクデータを定義するために使用され得る抽象化属性とはなるべきである。タイプ１（筆圧を含む）及びタイプ２（筆圧を含まない）の装置依存型ペンイベントデータ９２０２を一般化されたインクデータ、すなわち図９２の中間データ９２０４に抽象化することは、本発明の第１及び第３の実施の形態において以下に詳しく記述されるであろう。
【００２３】
［側面３］フォーマットから言語（情報モデル）を分離することによって、インクデータのライフサイクルを延ばすこと。
【００２４】
例えば、デジタル写真のようなラスターデータの内容は、しばしば、単一の装置や単一のアプリケーションだけでなく、複数の装置及びアプリケーションによって使用され、特定の「エコシステム」において、連鎖的にすべての間で共有され又は転送される（もっとも、それらはＪＰＥＧ、ＧＩＦ、ＴＩＦＦなどのような様々なフォーマットで処理され得る）。これらの様々なフォーマットが使われ得るのは、ラスターデータがピクセル値の集合を概念的に記述する一般的な情報モデルを含んでいるからである。
【００２５】
さらなる側面によれば、本発明は、共通言語（ストローク言語（ＳＬ））の採用に基づき、異なるフォーマット間でのインクデータの交換及び転送を促進することに向けられる。ストローク言語（ＳＬ）は、本発明のインクデータの意味を定義する情報モデルであり、インクデータのフォーマットと対立するものである。すなわち、例えば抽象化された属性によって定義されるインクデータは、色々なラスター画像フォーマット（ＰＮＧ，ＪＰＥＧなど）に処理され、色々なベクトルグラフィックフォーマット（ＳＶＧ、ＩｎｋＭＬ、ＨＴＭＬ５など）に置換され、ストローク構造を定義する色々なストリームフォーマット（ＩＳＦ、ＩｎｋＭＬなど）で生産される。図９３は、概念的に本発明のこの側面を描写するものである。入力フォーマットタイプとともに出力フォーマットタイプに柔軟性を加え、多様な出力及び入力のフォーマットタイプに適応させるために、共通言語（又は共通言語を定義する情報モデル）は、言語を生成するデバイスドライバーのレベルと、生成された言語がファイルやパケットに出力される際の出力レベルとの中間に位置することが好ましい。特に、本発明の様々な実施の形態によるインクデータ処理部１００は、２つの分離された構成要素として、抽象化された言語（ストローク言語）に基づいてインクデータを生成するインクデータ生成部１２０と、インクデータの入出力を扱うインクデータ整形部１４０とを含む。インクデータ生成の機能と、入力／出力のためのインクデータ整形の機能とが分離されていることから、インクデータ処理部１００は、様々な装置の間にインクデータの使用を広げるためのインクデータエコシステムの基礎的要素として使用されることに適している。本発明のこの側面は、第４の実施の形態にて以下に詳細に記述されるであろう。
【００２６】
図９１〜図９３に描写されたこれら本発明の３つの側面は、本発明の第１〜第４の実施の形態を以下で記述した後、再度、議論されるであろう。
【図面の簡単な説明】
【００２７】
【図１】本発明の様々な実施の形態による、インクデータが生成され、利用されるシステムの全体を説明する図である。
【図２】本発明の実施の形態における使用に適したインクデータ構造の実体関連図である。
【図３Ａ】複数のポイントオブジェクトによって定義されるストロークオブジェクトを説明する図である。
【図３Ｂ】２つの異なる描画スタイルオブジェクトによる、図３Ａに示したストロークオブジェクトの２つのレンダリング（描画）結果のうちの１つを説明する図である。
【図３Ｃ】２つの異なる描画スタイルオブジェクトによる、図３Ａに示したストロークオブジェクトの２つのレンダリング（描画）結果のうちの他の１つを説明する図である。
【図４Ａ】ストロークオブジェクトを選択し変形する（例えば回転する）ために使用される「選択」操作オブジェクトの動作を説明する図である。
【図４Ｂ】ストロークオブジェクトをスライスするために使用される「スライス」操作オブジェクトの動作を説明する図である。
【図５】本発明の第１の実施の形態によるインクデータ処理装置の機能ブロック図である。
【図６】本発明の第１の実施の形態による図５のインクデータ処理装置のインクデータ処理部（１００）の機能ブロック図である。
【図７】本発明の第１の実施の形態による図６のインクデータ処理部のストロークオブジェクト操作部（１２２）の機能ブロック図である。
【図８】図７のストロークオブジェクト操作部内のポイント「Ａ」から「Ｄ」で実行される処理を説明する図である。
【図９】図６のインクデータ処理部によって実行されるサンプルルーチンを説明するフローチャートである。
【図１０】図５のインクデータ処理装置のポイント「Ｅ」に出力され得る、インターフェイス定義言語（ＩＤＬ）で書かれたストロークファイルフォーマット（ＳＦＦ）ファイルのサンプルを説明する図である。
【図１１】ストロークファイルフォーマット（ＳＦＦ）で書かれ、図５のインクデータ処理装置のポイント「Ｅ」に出力され得るストロークオブジェクトファイルのサンプルを説明する図である。
【図１２】図５のインクデータ処理装置のポイント「Ｆ」に出力され得る、ストロークメッセージフォーマット（ＳＭＦ）による３つのメッセージと、図５のインクデータ処理装置のポイント「Ｇ」に出力され得る１つのパケットとを説明する図である。
【図１３Ａ】図５のインクデータ処理装置のポイント「Ｄ」に出力され、グラフィック処理部（３００）又はインクデータ整形部（１４０）に入力され得る、キャットマル−ロム曲線補間動作を受けたストロークオブジェクトを説明する図である。
【図１３Ｂ】図５のインクデータ処理装置のポイント「Ｈ」にグラフィック処理部（３００）から出力され得る、図１３のストロークオブジェクトのレンダリング（表示）結果を説明する図である。
【図１４】本発明の第１の実施の形態によるストロークオブジェクトに適用されるスライス操作のフローチャートである。
【図１５Ａ】図１４のステップＳ１４０９で実行される、２つのストロークの間の単一の（中間の）交点（Ｐ＿ｉｎｔｅｒｓｅｃｔ＿Ｍｉｄ）を決定する処理を説明する図である。
【図１５Ｂ】図１４のステップＳ１４１３で実行される、スライスしようとしている有幅のストロークオブジェクトと既存のストロークオブジェクトとの間の２つの（端）交点（Ｐ＿ｉｎｔｅｒｓｅｃｔ＿Ｌ及びＰ＿ｉｎｔｅｒｓｅｃｔ＿Ｒ）を得る処理を説明する図である。
【図１６Ａ】図１４のステップＳ１４１５で導出される、ストロークオブジェクトをスライスしてなる２つのスライスのうちの第１のものを説明する図である。
【図１６Ｂ】図１６Ａに示した第１のスライスを定義するパラメータのデータ構造を説明する図である。
【図１６Ｃ】新たに生成された第１のストロークオブジェクトの、表現されたパスを説明する図である。
【図１７Ａ】図１４のステップＳ１４１５で導出される、ストロークオブジェクトをスライスしてなる２つのスライスのうちの第２のものを説明する図である。
【図１７Ｂ】図１７Ａに示した第２のスライスを定義するパラメータのデータ構造を説明する図である。
【図１７Ｃ】新たに生成された第２のストロークオブジェクトの、表現されたパスを説明する図である。
【図１８Ａ】図１６Ａに示した第１のスライスのために新たな終了点を得る処理と、図１７Ａに示した第２のスライスのために新たな開始点を得る処理とを説明する図である。
【図１８Ｂ】本発明の第１の実施の形態による、ホールセグメントオブジェクトを定義するパラメータのデータ構造を説明する図である。
【図１９】ストロークファイルフォーマット（ＳＦＦ）で書かれ、１つのストロークオブジェクトをスライスしてなる２つのスライスを表す２つの新規生成ストロークオブジェクトを含むファイルのサンプルを説明する図である。
【図２０】図１４のステップＳ１４２２で実行されるインクデータ伝送処理の詳細なフローチャートである。
【図２１Ａ】スライス操作に関連してインクデータの伝送のために使用され得る色々な伝送メッセージタイプのうちのタイプＡを説明する図である。
【図２１Ｂ】スライス操作に関連してインクデータの伝送のために使用され得る色々な伝送メッセージタイプのうちのタイプＢを説明する図である。
【図２１Ｃ】スライス操作に関連してインクデータの伝送のために使用され得る色々な伝送メッセージタイプのうちのタイプＣを説明する図である。
【図２１Ｄ】スライス操作に関連してインクデータの伝送のために使用され得る色々な伝送メッセージタイプのうちのタイプＤを説明する図である。
【図２２】本発明の第１の実施の形態による、ネットワークを介してインクデータをリモート受信するように構成されたインクデータ受信装置の機能ブロック図である。
【図２３】本発明の第１の実施の形態による受信側での、操作（スライス）オブジェクトの受信処理を説明するフローチャートである。
【図２４Ａ】従来技術に関連する技術的問題を説明する図である。
【図２４Ｂ】従来技術に関連する技術的問題を説明する図である。
【図２５】本発明の第２の実施の形態における使用に適したインクデータ構造の実体関連図である。
【図２６】第２の実施の形態における使用に適した通信システム図の全体である。
【図２７】図２６に示した通信システムの伝送装置（１０−１）を説明する図である。
【図２８】本発明の第２の実施の形態における、共通描画領域（カンバス）の更新状態を保管するのに適した記録フォーマットのサンプルを説明する図である。
【図２９】図２６に示した通信システムの中継サーバ（１０−２）を説明する図である。
【図３０Ａ】伝送装置の通信及びグラフィック環境を連帯して描写又は定義する通信パラメータ、描画パラメータ、及びユーザポリシーパラメータのうち通信パラメータを説明する図である。
【図３０Ｂ】伝送装置の通信及びグラフィック環境を連帯して描写又は定義する通信パラメータ、描画パラメータ、及びユーザポリシーパラメータのうち描画パラメータを説明する図である。
【図３０Ｃ】伝送装置の通信及びグラフィック環境を連帯して描写又は定義する通信パラメータ、描画パラメータ、及びユーザポリシーパラメータのうちユーザポリシーパラメータを説明する図である。
【図３１】図２６に示した通信システムの受信装置（１０−３）を説明する図である。
【図３２】本発明の第２の実施の形態による、伝送装置（１０−１）、中継サーバ（１０−２）、及び受信装置（１０−３）の間で行われるインクデータ通信を説明するシーケンス図である。
【図３３】インクデータを伝送するために規定の単位Ｔを発見する処理のサンプルを示すフローチャートである。
【図３４】本発明の第２の実施の形態による、複数の装置の間でインクデータを伝送する（通信する）のに適した通信パケット及びメッセージの伝送フォーマットのサンプルを説明する図である。
【図３５Ａ】データ再送スキームを含む通信プロトコルにおいて使用される通信パケットを説明する図である。
【図３５Ｂ】データ再送メカニズムを含まない通信プロトコルにおいて使用される通信パケットを説明する図である。
【図３６Ａ】データ再送メカニズムを含まない通信プロトコルでの使用に適した、通しＩＤを用いるデータ再送処理のサンプルを示すシーケンス図である。
【図３６Ｂ】データ再送メカニズムを含まない通信プロトコルでの使用に適し、かつ、データ再送が実行されないデータ伝送処理を示すシーケンス図である。
【図３６Ｃ】メッセージの制御位置を計算する方法を説明する図である。
【図３６Ｄ】メッセージの制御位置を計算する方法を説明する図である。
【図３６Ｅ】メッセージの制御位置を計算する方法を説明する図である。
【図３６Ｆ】図３６Ｂのシーケンスでの使用のための、図３６Ｃ〜図３６Ｅで計算された制御位置を使用する補間（エラー隠蔽）処理を説明する図である。
【図３６Ｇ】図３６Ｂのシーケンスでの使用のための、図３６Ｃ〜図３６Ｅで計算された制御位置を使用する補間（エラー隠蔽）処理を説明する図である。
【図３７】伝送装置によって発行された共通描画領域の更新要求が中継サーバによって拒否される場合のインクデータ通信を説明するためのシーケンス図である。
【図３８】中継サーバが伝送装置からストロークオブジェクトの断片化データを受け取り、これを受信装置に対して中継するために、ストロークオブジェクトごとにすべての断片化データを結合するようにした、図３２に示したシーケンス図の第１の変形例である。
【図３９Ａ】図３８に示した第１の変形例での使用のためのフォーマットであって、その中に１つのストロークオブジェクトのためのすべてのインクデータが結合された状態で含まれるデータ伝送フォーマットである。
【図３９Ｂ】ストロークＩＤが知られているときにストローク全体にかかるストロークオブジェクトデータを要求するメッセージであるＤＡＴＡ＿ＩＮＫ＿ＡＬＬＯＳ＿ＲＥＱのデータ伝送フォーマットのサンプルを説明する図である。
【図４０】ストロークオブジェクトが「そのまま」（すなわち、断片化されずに）伝送装置から中継サーバを介して受信装置に伝送されるようにした、図３２に示したシーケンス図の第２の変形例である。
【図４１】中継サーバが、伝送装置からストロークオブジェクトを受け取り、受け取ったストロークオブジェクトを、受信装置に対して中継するために複数の断片化データに断片化するようにした、図３２に示したシーケンス図の第３の変形例である。
【図４２】共通描画領域の原点に関連してユーザ特有のストローク開始ポイントの概念を説明する図である。
【図４３】ストローク単位より大きい意味単位でのインクデータの伝送にかかる第２の実施の形態を説明する図である。
【図４４】ストローク単位より大きい意味単位でのインクデータの伝送にかかる第２の実施の形態を説明する図である。
【図４５】本発明の第３の実施の形態による、一方では、インクデータ処理部のデータ入出力であって生成する方法によるものを説明し、他方では、インクデータ処理部のデータ入出力であって再生する方法によるものを説明する図である。
【図４６Ａ】本発明の第３の実施の形態によるインクデータ生成方法の３つの構成例のうちの１番目を説明する図である。
【図４６Ｂ】本発明の第３の実施の形態によるインクデータ生成方法の３つの構成例のうちの２番目を説明する図である。
【図４６Ｃ】本発明の第３の実施の形態によるインクデータ生成方法の３つの構成例のうちの３番目を説明する図である。
【図４７Ａ】本発明の第３の実施の形態によるインクデータ再生方法の２つの構成例のうちの１番目を説明する図である。
【図４７Ｂ】本発明の第３の実施の形態によるインクデータ再生方法の２つの構成例のうちの２番目を説明する図である。
【図４８Ａ】本発明の第３の実施の形態によるインクデータモデル（ストローク言語（ＳＬ））に従う、インクデータ構造の実体関連図である。
【図４８Ｂ】図４８Ａに示したインクデータ構造の詳細な実体関連図である。
【図４８Ｃ】ストロークオブジェクトのグラフィック表現である。
【図４８Ｄ】カンバスオブジェクトを説明する図である。
【図４８Ｅ】メタデータオブジェクトを説明する図である。
【図４８Ｆ】画面上で見られる、３つの異なる描画スタイルオブジェクトの描画結果を説明する図である。
【図４８Ｇ】操作（スライス）オブジェクトの動作を説明する図である。
【図４８Ｈ】操作（消去）オブジェクトの動作を説明する図である。
【図４８Ｉ】既存のストロークオブジェクトに適用される操作（選択及び変形）オブジェクトの動作を説明する図である。
【図４８Ｊ】本発明の第３の実施の形態によるストロークファイルフォーマット （ＳＦＦ）内に並べられたインクデータ構造の構文を説明する図である。
【図４８Ｋ】本発明の第３の実施の形態によるストロークファイルフォーマット （ＳＦＦ）内に並べられたインクデータ構造の構文を説明する図である。
【図４８Ｌ】本発明の第３の実施の形態によるストロークファイルフォーマット （ＳＦＦ）内に並べられたインクデータ構造の構文を説明する図である。
【図４９】本発明の第３の実施の形態によるインクデータ処理部の機能ブロック図である。
【図５０Ａ】本発明の第３の実施の形態による、図４９の「インクデータ生成部」内で実行され、ポイントオブジェクトの属性として半径及びアルファの情報を出力する処理を説明するフロー図である。
【図５０Ｂ】ペンイベントデータに関してコンテキスト情報を定義するために使用され得るアプリケーション又はオペレーティングシステムのＧＵＩのサンプルを説明する図である。
【図５１】本発明の第３の実施の形態による、図５０のステップＳ１２０５で速度を導出する処理を説明する図である。
【図５２】本発明の第３の実施の形態による、図５０のステップＳ１２０７で半径を導出する処理を説明するフロー図である。
【図５３】本発明の第３の実施の形態による、図５２のステップＳ１２０７＿０１で使われるものとしてのストロークの「フェーズ」の定義を説明するフロー図である。
【図５４】本発明の第３の実施の形態による、図５２のステップＳ１２０７＿０５及びステップＳ１２０７＿０７で使われるものとしての、パラメータ（速度）から半径を導出するための３つの関数を説明するグラフである。
【図５５】本発明の第３の実施の形態による、図５０のステップＳ１２０９において透明度（又は不透明度）を示すアルファを導出する処理を説明するグラフである。
【図５６】本発明の第３の実施の形態による、図５５のステップＳ１２０９＿０５及びステップＳ１２０９＿０７で使われるものとしての、パラメータ（速度）からアルファ（透明度／不透明度）を導出するための２つの関数を説明するグラフである。
【図５７】本発明の第３の実施の形態による、Ｘ及びＹ座標とともに半径及びアルファの値をインクデータフォーマット（データ構造）に整形する処理を説明するフロー図である。
【図５８】本発明の第３の実施の形態による、図５７のステップＳ１４１１及びステップＳ１４１３の実施例を説明する図である。
【図５９】本発明の第３の実施の形態による、図５７のステップＳ１４１１及びステップＳ１４１３で使われる整数データ型への浮動データ型の変換を説明する図である。
【図６０】本発明の第３の実施の形態による、図５９のデータ型変換の結果としての圧縮の効率化を説明する図である。
【図６１】本発明の第３の実施の形態による、生成されたインクデータを圧縮するために図４９に示した「インクデータ整形部」で実行され得る処理を説明するフロー図である。
【図６２】本発明の第３の実施の形態による、半径情報をインクデータ属性として出力するため、図４９に示した「インクデータ生成部」において（図５２に代えて）実行される処理を説明するフロー図である。
【図６３】本発明の第３の実施の形態による、インクデータ属性としてアルファ情報を出力するため、図４９に示した「インクデータ生成部」において（図５５に代えて）実行される処理を説明するフロー図である。
【図６４】本発明の第３の実施の形態による、インクデータ処理部と様々なアプリケーションとの間の関係を説明する図である。
【図６５】本発明の第３の実施の形態による、インクデータ内の半径及びアルファの情報をＸ及びＹ座標とともに取り出す（再生する）ためのインクデータ再生処理と、取り出した情報及びデータを描画アプリケーションからの要求に応じて出力することとを説明するフロー図である。
【図６６】本発明の第３の実施の形態による、図６５のステップＳ２０１１及びステップＳ２０１３の実施例を説明する図である。
【図６７】本発明の第３の実施の形態による、選択された描画スタイルオブジェクトを描画対象のストロークオブジェクトに適用する描画処理を説明するフロー図である。
【図６８】本発明の第３の実施の形態による、図５４に示した減衰（ダンピング）関数に基づいて生成されたインクデータの入力の結果としての描画レンダリング例を説明する図である。
【図６９】本発明の第３の実施の形態による、図５６に示した冪関数に基づいて生成されたインクデータの入力の結果としての描画レンダリング例を説明する図である。
【図７０】本発明の第３の実施の形態による、図５４に示した減衰関数及び図５６に示した冪関数の両方に基づいて生成されたインクデータの入力の結果としての描画レンダリング例を説明する図である。
【図７１】本発明の第３の実施の形態による、図５４の他の関数（Ｓ字及び周期関数）の効果を示す描画レンダリング例を説明する図である。
【図７２】本発明の第３の実施の形態による、描画対象のストロークの開始点及び終了点の半径として特別な値を用いることの効果を示す描画レンダリング例を説明する図である。
【図７３】本発明の第４の実施の形態による、インクデータが使用されるシステムの全体を説明する図である。
【図７４】本発明の第４の実施の形態によるインクデータ処理部の機能ブロック図である。
【図７５】図７４に示した本発明の第４の実施の形態によるインクデータ処理部のより詳細な機能ブロック図である。
【図７６】図７５に示したストロークオブジェクト操作部（１２２）の機能ブロック図である。
【図７７Ａ】ストロークオブジェクトを生成する方法を説明するフローチャートである。
【図７７Ｂ】ストロークオブジェクトを生成する方法を説明するフローチャートである。
【図７８】図７５に示したメタデータオブジェクト操作部（１２４）の機能ブロック図である。
【図７９】メタデータオブジェクトを生成する方法を説明するフローチャートである。
【図８０】図７５に示したレンダリング（描画スタイル）オブジェクト操作部（１２６）の機能ブロック図である。
【図８１】（描画）スタイルオブジェクトを導出する方法及びそのカスケーディングプロパティを説明するフローチャートである。
【図８２】図７５に示した操作オブジェクト操作部（１２８）の機能ブロック図である。
【図８３Ａ】スライスオブジェクトのような操作オブジェクトを導出する方法を説明するフローチャートである。
【図８３Ｂ】スライスオブジェクトのような操作オブジェクトを導出する方法を説明するフローチャートである。
【図８４】図７５に示したインクデータインクデータ整形部（１４０）の機能ブロック図である。
【図８５】図８４に示したインクデータ整形部において実行される処理を説明するフローチャートである。
【図８６】ストロークファイルフォーマット（ＳＦＦ）のデータを出力する方法を説明するフローチャートである。
【図８７】ＪＰＥＧフォーマットのデータを出力する方法を説明するフローチャートである。
【図８８】ストロークメッセージングフォーマット（ＳＭＦ）のデータを出力する方法を説明するフローチャートである。
【図８９】様々なファイルフォーマット及びメッセージングフォーマットで出力されたデータ（ＳＦＦ／ＪＰＥＧ及びＳＭＦ）の入力処理を説明する機能ブロック図である。
【図９０Ａ】ＳＦＦファイル内に配置されたオブジェクトを解釈して再生するための処理のフローチャートである。
【図９０Ｂ】ＩｎｋＭＬでの入力に基づくオブジェクトを解釈して再生するための処理のフローチャートである。
【図９０Ｃ】ＳＭＦによる操作（スライス）オブジェクトを受信して実行する処理のフローチャートである。
【図９１】側面１に関して、図７５のインクデータ処理装置（１０１）を使用することの効果を説明する図である。
【図９２】側面２に関して、図７５のインクデータ処理装置（１０１）を使用することの効果を説明する図である。
【図９３】側面３に関して、図７５のインクデータ処理装置（１０１）を使用することの効果を説明する図である。
【発明を実施するための形態】
【００２８】
詳細な説明
本明細書で使用される以下の用語は、特定の実施の形態にのみ適用され得ると特定の文脈で特に定義されない限り、本明細書に記述された各種の実施の形態を通じて、次の意味を有する。
【００２９】
「ペンイベントデータ」（入力１）は、ユーザの手書き描画動作に基づいて入力されるデータを意味する。ペンイベントデータは、所与の入力装置によって入力される生データであってもよいし、該生データの処理によって得られるデータであってもよい。すべてのペンイベントデータは、ユーザによって描かれた各ストロークの位置情報（例えばＸＹ座標）を少なくとも有することが期待される一方、装置に依存しており、入力装置の各タイプを特定する属性（例えば、筆圧データ、ペン回転又は傾斜角のデータ）を含む。例えば、筆圧を検出可能な入力装置から受信されるペンイベントデータは、筆圧を検出できない入力装置から受信されるペンイベントデータとは異なるものとなる。
【００３０】
「インクデータ」（２００）は、ペンイベントデータから導出されるオブジェクトの集合を意味する。インクデータ２００は、ペンイベントデータに基づいて形成されるパス（ストローク）をキャプチャするものであって、各パスの性質（色、ペンタイプなど）を記述する中間データの一種であるベクトルデータの形式をとる。インクデータ２００は装置に依存するものではなく、筆圧及び／又はペン回転／傾斜角といった属性に対応する装置、並びに、これらの属性に対応しない装置のいずれによっても利用され得る。本発明の実施の形態によるインクデータ２００は、ストロークオブジェクト２１０、メタデータオブジェクト２５０、描画スタイルオブジェクト２３０、及び操作オブジェクト２７０を含む。インクデータ２００については、図２、図３Ａ〜図４Ｂ、図２５、図４８Ａ〜４８Ｉ等を参照しつつ、以下で詳細に説明されるであろう。
【００３１】
「ストロークオブジェクト」（２１０）は、インクデータ２００内に含まれるオブジェクト又はデータの一種である。上掲した非特許文献１〜４に記述される「ストローク」「パス」「トレース」「カンバスパス」はすべて、ストロークオブジェクト２１０である。ストロークオブジェクト２１０は、入力装置におけるユーザ操作によって取得されるパス（ストローク）の形を表している。
【００３２】
「メタデータオブジェクト」（２５０）は、インクデータ２００内に含まれるオブジェクトの一種であり、著者、ペンＩＤ、ローカルに取得される日時情報、ＧＰＳによって取得される位置情報などのような、ストロークオブジェクト２１０を説明する非描画関連情報を含む。
【００３３】
「描画スタイルオブジェクト」（２３０）は、インクデータ２００に含まれるオブジェクトの一種であり、ストロークオブジェクト２１０が画面上にレンダリングされる（描かれる、表現される、ラスター化される）際に、その形（ストローク幅、ストロークのスタイル／パターン）や色を制御するために必要となる情報を含む。一口で言えば、描画スタイルオブジェクトは、ストロークオブジェクト２１０のレンダリング（描画）を制御する。
【００３４】
「操作オブジェクト」（２７０）は、インクデータ２００に含まれるオブジェクトの一種であり、既存の１以上のストロークオブジェクト２１０それぞれの全部又は一部に対し、操作／変更の動作（例えば、スライス操作）を実行する。ストロークオブジェクトの一部に対する操作オブジェクト２７０のアプリケーションについては、第１の実施の形態にて後に詳細に記述されるであろう。
【００３５】
「ストローク言語（ＳＬ）」は、インクデータ２００を構成する様々なオブジェクトの属性及び意味を定義する情報モデルである。
【００３６】
「ストロークファイルフォーマット（ＳＦＦ）」は記録フォーマットの一種であり、その中で出力対象のインクデータ２００がシリアライズされる。ＳＦＦの詳細は、図１０、図１１、図１９、図２８、図４８Ｊ、図４８Ｋ、図４８Ｌ、図５７、図６５、及び図８６を参照して、後に記述されるであろう。
【００３７】
「記録フォーマット」は、ＳＦＦフォーマットやＳＶＧフォーマットのような、インクデータ２００を永続的なものとするために適したフォーマットを意味する。記録フォーマットによるインクデータ２００は、ファイル又はデータベースとして記憶装置（ＨＤＤ、ネットワークストレージなど）内に記録される。そしてそこから、それのシリアライズされたデータストリームが引き出され、かつ、デシリアライズされ得る。
【００３８】
「ストロークメッセージフォーマット（ＳＭＦ）」は、伝送パケット又はフレームに含まれるメッセージ伝送フォーマットの一種であり、定義された伝送プロトコルを用いてインクデータ２００を伝送する際に使用するためのものである。ＳＭＦの詳細は、図１２、図２１、図３４、図３５Ａ、図３５Ｂ、図３９Ａ、図３９Ｂ、及び図８８を参照して、後に記述されるであろう。
【００３９】
「伝送フォーマット」は、ＳＭＦフォーマットのような、ネットワークを介してインクデータ２００を伝送する（メッセージを送る）のに適したメッセージフォーマットを意味する。
【００４０】
「インクデータ」は、ＧＩＦやＪＰＥＧ画像のようなラスター化された画像を意味し、ピクセルデータを含み、インクデータ２００に基づいて生成（描画）され得る。中間物でない画像フォーマットデータをインクデータ２００に戻すことは、不可能である。
【００４１】
以下の用語は、例えば図５に示すように、インクデータ２００を処理するために使用される主な構造及び構成要素のそれぞれを記述するために使用される。
【００４２】
「インクデータ処理部」（１００）は、インクデータ２００を生成し、格納し、処理するプロセッサを意味する。本明細書では、ペンイベントデータに基づいてインクデータ２００を生成するため、かつ、定義されたフォーマットにインクデータ２００を配列するために使用されるインクデータ処理部を、参照符号１００Ｔによって表す。一方、定義されたフォーマットで生成され配列されたインクデータ２００を再生産するためにコンピュータ内で使用されるインクデータ処理部を、参照符号１００Ｒによって表す。インクデータ処理部１００の詳細は、図５及び図７５を参照し、さらに図６、図２２、図２７、図３１、図４９、及び図７４も参照して、後に記述されるであろう。インクデータ処理部１００は一般に、次の３つの情報を受け付け／含み／受信する。１つ目はペンイベント（入力型）情報（入力１）であり、２つ目はコンテキスト情報（入力２）であり、３つ目は操作情報（入力３）である。
【００４３】
「インクデータ生成部」（１２０）は、インクデータ２００を生成し、インクデータ２００を展開する。本明細書では、入力センサから受信される入力信号に基づいてインクデータ２００を生成するインクデータ生成部を参照符号１２０Ｔによって表し、既に生成されたインクデータ２００を展開し、メモリ内にリストアするインクデータ生成部を参照符号１２０Ｒによって表す。
【００４４】
「インクデータ整形部」（１４０）は、入力及び出力の目的で記録フォーマット又は輸送フォーマット内に配列されたインクデータ２００を処理する。本明細書では、定義されたフォーマットでインクデータ２００を出力するインクデータ整形部を参照符号１４０Ｔによって表し、定義されたフォーマットのインクデータ２００の入力を受け付けるインクデータ整形部を参照符号１４０Ｒによって表す。
【００４５】
第１の実施の形態
本発明の第１の実施の形態は、インクデータ２００を構成するストロークオブジェクト２１０を生成し、レンダリングし、操作し（例えば、スライスし）、及び通信することに向けられたものである。特に、ストロークオブジェクト２１０の一部分の操作が、図１を参照して上述したように、複数のプロセッサの間での操作オペレーションの共有（伝送）とともに記述されるであろう。
【００４６】
第１の実施の形態の背景
非特許文献１〜４に記述されるストロークオブジェクトは、所定の補間曲線アルゴリズムを用いて補間曲線又はパスを生成するために必要な複数の点又は複数の制御点を含む。
【００４７】
非特許文献１，２は、特別な補間曲線アルゴリズムを何も明示していない。言い換えれば、任意の適当な補間曲線アルゴリズムが使用され得る。
【００４８】
非特許文献３，４は、ポリベジエ（キュービックベジエ）曲線を用いている。ポリベジエ曲線では、１つの曲線セグメント（パスセグメント）の開始点Ｐｉと終了点Ｐｉ＋１が制御点として利用される。加えて、点Ｐｉと点Ｐｉ＋１の間の曲線セグメントの曲率を定めるために、少なくとももう１つの制御点が必要とされる。その制御点は、Ｐｉ及びＰｉ＋１のいずれとも異なり、かつ、曲線セグメントを含む曲線上にない（すなわち、曲線の外にある）ものとなる。例えば、キュービックベジエ曲線は、曲線セグメントを定めるために、曲線の外に位置する２つの制御点を必要とする。
【００４９】
例えば、キュービックベジエ曲線のために使用されるＸＭＬ表記<stroke-width="5" d="M 100, 200 C100, 100 300,100 300,200"/>は、開始点（１００，２００）が制御点として使用され、終了点（３００，２００）が他の制御点として使用され、さらに、（開始点と終了点の間であって曲線セグメントの外にある）２つの制御点（１００，１００）及び（３００，１００）が曲線セグメントを定めるために使用される、ということを意味する。
【００５０】
近年、Ｗ３ＣでＳＶＧ（非特許文献３）を担当しているＳＶＧワーキンググループでは、補間曲線についてキャットマル−ロム曲線を利用することの可能性が議論されている。ポリベジエ曲線とは異なり、キャットマル−ロム曲線は、曲線の外にある（すなわち、曲線上にない）制御点を有しない。キャットマル−ロム曲線は、開始点（Ｐｉ）、終了点（Ｐｉ＋１）、開始点の「前」の点（Ｐｉ−１）、終了点の「後ろ」の点（Ｐｉ＋２）という４つの制御点により各曲線セグメントを定義する。すべての制御点は、曲線上にある。別の言葉で言えば、キャットマル−ロム曲線は、そのすべての制御点を通過する（もっとも、各曲線セグメントが曲線セグメントの「前」と「後ろ」にある２つの制御点を必要とすることから、ストロークオブジェクトの一番端にある２つの点では曲線セグメントが定義されない）。
【００５１】
第１の実施の形態の概要
図２４Ａ及び図２４Ｂは、非特許文献１〜５に記載された従来技術におけるインクデータの定義が遭遇する技術的問題を説明している。図２４Ａは、ストロークオブジェクトによって表現され、スライス操作２４０３が適用される曲線２４０１Ｓを示している。曲線２４０１Ｓを表すストロークオブジェクトは、入力センサを介して入力される一組の点座標（ｐ１〜ｐ１０）を含む。
【００５２】
図２４Ａでは、ストロークオブジェクトの曲線セグメントをスライスするために、交点２４０５を通過する分割線に沿って、点座標ｐ５とｐ６の間にスライス操作２４０３が適用されている。図２４Ｂは、スライス操作２４０３の結果として得られる２つの分割曲線２４１１Ｓ１，２４１５Ｓ２を示している。曲線２４１１Ｓ１は点座標ｐ１〜ｐ５を含み、曲線２４１５Ｓ２は点座標ｐ６〜ｐ１０を含む。示されるように、実線で示される分割曲線２４１１Ｓ１は点座標ｐ５で終わっており、したがって、交点２４０５まで延在する実際上の分割曲線よりも短いものとなっている。同様に、実線で示される分割曲線２４１５Ｓ２は点座標ｐ６で始まっており、交点２４０５で始まる実際上の分割曲線よりも短いものとなっている。図２４Ｂでは、破線で示される不完全な曲線セグメント２４１３が、スライス操作２４０３によって失われた曲線の部分を示している。
【００５３】
交点２４０５に位置する新たな制御点を加え、さらに、ｐ５と交点２４０５の間、及び、交点２４０５とｐ６の間のそれぞれに、新たに生成される部分的な曲線セグメント２４１３を定義するための制御点を加えることは可能ではある。しかし、部分的な曲線セグメント２４１３の終了点２４０５までの正確な形状を表すための新たな制御点の位置を計算することは計算集約的であり、簡単なタスクではない。例えば、キュービックベジエ曲線のような補間曲線を用いるとすると、新たなセグメントを定義するためには、曲線（又はパス）の外にある２つの制御点を計算する必要がある。キャットマル−ロム曲線を用いる場合には、新たなセグメントを定義するために曲線を通る２つの制御点を計算する必要があり、その結果、実際の曲率を維持するために、それまでのすべての制御点を芋蔓式に再計算しなければならなくなる。いずれのタイプの計算も高度に複雑であり、時間を要するため、グラフィック又は描画アプリケーションにおいてリアルタイムなスライス操作をサポートすることが不可能になる。
【００５４】
ユーザが、スライス操作の結果として得られる２つのセグメントのそれぞれが元のストロークオブジェクトから切り出される実際の分割曲線を表すように、インクデータを形成するストロークオブジェクトをスライスすることを可能にする方法及びシステムに対するニーズが存在する。そして、そのような方法及びシステムは、補間曲線のために使用される新たな制御点の位置の計算を必要としないものであることが好ましい。そのような計算は複雑であり、しばしば計算集約的であるため、リアルタイムなアプリケーションをサポートすることができなくなるからである。
【００５５】
一側面によれば、本発明は、ストロークオブジェクト２１０を含むインクデータを生成し、描画し、操作し（例えばスライスし）、伝達する方法及びシステムを提供する。この方法及びシステムにおいて、ストロークオブジェクト２１０は、レンダリング対象となるストロークオブジェクト２１０の特定の部分を定義する範囲情報を含み、又は、該範囲情報と関連付けられる。範囲情報が全部表示を示す場合にはストロークオブジェクト２１０の全体が表示され、範囲情報が部分表示を示す場合には、ストロークオブジェクト２１０の一方又は両方の端部が表示されないものとして部分的に指定される。スライス操作が元のストロークオブジェクト２１０に適用され、２つの新しいストロークオブジェクト２１０が生成されるとき、１つ目の新たなストロークオブジェクト２１０は、該１つ目の新たなストロークの終わりをラスター化する（若しくは、レンダリングする、又は、結果として表示する）点となる新たな「終了」点を指定する範囲情報と関連付けられる。同様に、２つ目の新たなストロークオブジェクト２１０は、該２つ目の新たなストロークの表示が始まる点となる新たな「開始」点を指定する範囲情報と関連付けられる。１つ目及び２つ目の新たなストロークオブジェクト２１０はいずれも元のストロークオブジェクトと同じ構造及び制御点（たとえ部分的であっても）を維持し、それ故、１つ目及び２つ目の新たなストロークオブジェクト２１０の表示は、正確に元のストロークオブジェクト２１０の形を辿ることとなる。また、新たな制御点の計算は不要となる。
【００５６】
他の側面によれば、インクデータ２００を形成するためにストロークオブジェクト２１０を出力する方法及びシステムが提供される。ストロークオブジェクトは、複数の座標位置を表す複数のポイントオブジェクトを含む。この複数のポイントオブジェクトのうちの少なくともいくつかは、補間曲線セグメントを生成するために使用される制御点として機能し、全体としてストロークオブジェクト２１０のパスを形成する。ストロークオブジェクト２１０は、ストロークオブジェクト２１０の表示が始まる開始曲線セグメント内の開始点と、ストロークオブジェクト２１０の表示が終わる終了曲線セグメント内の終了点とを定義する範囲情報をさらに含む。元のストロークオブジェクト２１０が２つの新しいストロークオブジェクト２１０を生むためにスライスされるとき、２つの新たなストロークオブジェクト２１０はそれぞれ、自身の範囲情報、すなわち自身の開始点と自身の終了点とを示すパラメータの他に、元のストロークオブジェクト２１０のものと全く同じポイントオブジェクトの部分的なセットを含む。
【００５７】
他の側面によれば、上記のようにして組み立てられたインクデータを描画する（レンダリングする、又は、表示する）方法及びシステムが提供される。この方法及びシステムにおいて、各ストロークオブジェクト２１０は、複数のポイントオブジェクトと、範囲情報とを含む。複数のポイントオブジェクトのうちの少なくともいくつかは、補間曲線セグメントを生成するために使用される制御点である。この方法及びシステムは、制御点に基づいて曲線セグメントを補間することでストロークオブジェクト２１０のパスを生成し、そして、範囲情報によって指定されたストロークオブジェクト２１０の一部を表示することによって、画面上に各ストロークオブジェクト２１０を描く。他の言葉で言えば、この方法及びシステムは、範囲情報内に指定される開始点でストロークオブジェクト２１０の表示を開始し、範囲情報内に指定される終了点でストロークオブジェクト２１０の表示を停止する。
【００５８】
さらなる側面によれば、上記のようにして組み立てられたインクデータのストロークオブジェクト２１０をユーザがスライスすることを可能にする方法及びシステムが提供される。ユーザがストロークオブジェクト２１０上でスライス操作を実行するとき、この方法及びシステムは、スライシングパスとストロークオブジェクト２１０の交点の位置を算出する。（図２４Ａの２４０５を参照）。この方法及びシステムは、スライス操作の結果として、第１のストロークオブジェクト２１０及び第２のストロークオブジェクト２１０という２つの新しいストロークオブジェクト２１０を生成する。第１のストロークオブジェクト２１０は、ポイントオブジェクトの第１のセットと、表示開始点と表示終了点とを示す第１の範囲情報とを含む。この場合において、表示終了点は、算出された交点から導出される。第２のストロークオブジェクト２１０は、ポイントオブジェクトの第２のセットと、表示開始点と表示終了点とを示す第２の範囲情報とを含む。この場合において、表示開始点は、算出された交点から導出される。典型的には、第１のストロークオブジェクト２１０の第１の範囲情報は、元のストロークオブジェクト２１０のものと同じ表示開始点を維持し、第２のストロークオブジェクト２１０の第２の範囲情報は、元のストロークオブジェクト２１０のものと同じ表示終了点を維持する。
【００５９】
上記のようにして組み立てられたインクデータは、共通の描画領域（共通の「カンバス」）上でストロークを描画し、操作する（スライスする）という経験を複数のユーザがリアルタイムで共有できるよう、インクデータを処理する能力を有する色々な装置又はアプリケーションの間で容易に伝達され得る。
【００６０】
本発明の様々な方法及びシステムによれば、上記のようにして組み立てられたインクデータは、生成され、出力され、画面上に表示され、ユーザがストロークオブジェクト２１０をスライスすることを可能にするために使用され、異なるユーザ間で共有される。ストロークオブジェクト２１０に含まれる実際の曲線セグメントの一部のみを表示するために範囲情報を使用することは、元のストロークオブジェクト１２０の形状をその末端まで正確に辿るスライスされた（新たに生成された）ストロークオブジェクト２１０を表示することを可能にする。また、スライスされたストロークオブジェクト２１０が元のストロークオブジェクト２１０と同じ構造及び制御点（たとえ部分的であっても）を維持することから、スライス操作に関連して新たな制御点を計算ないし再計算する必要がなくなる。
【００６１】
本発明の方法及びシステムは、インクデータであって、その内部で曲線セグメントが例えば公知のポリベジエ曲線(キュービックベジエ、二次ベジエ)アルゴリズムやキャットマル−ロム曲線アルゴリズムのような様々なタイプの曲線補間アルゴリズムによって補間されるインクデータに適用され得る。
【００６２】
第１の実施の形態の記述
図１は、本発明の実施の形態による、インクデータ２００が利用されるシステムの全体を説明する図である。図１では、破線で輪郭が描かれたクラウド部１がインターネットのようなインフラを表しており、本発明のインクデータ２００を利用するシステムは、このクラウド部１上で動作することができる。例示のインフラとしてのインターネットは、インターネットプロトコルスイート（例えば、ＩＰ、ＴＣＰ、ＨＴＴＰ）と、ライブラリと、様々なウェブ及びメールデータフォーマット（ＨＴＭＬ、ＭＩＭＥ）を実行するソフトウェアと、それらの通信方法（ＨＴＴＰ、ＳＭＴＰ）との標準化されたセットを基にするもので、各ベンダーが独自に構成するハードウェア構成及びオペレーティングシステムの間の違いを吸収する。図１では、インフラ部１を通過する破線の矢印が、これらのインフラ技術に基づいて発生するデータ交換を説明している。図１では、実線で輪郭が描かれたクラウド部１０がインクデータ２００を交換するためのインフラを表しており、クラウド部１０は、インクデータ２００に関する共通の情報モデル（言語）を確立することによって実現される。インクデータ２００は、様々なアプリケーションサービス（又はエコシステム）及び様々な装置によって共通に使用可能となるように一般化される。例えば、図１に示したアプリケーションサービス＃１及びアプリケーションサービス＃２はともに、インクデータ交換インフラ１０を介して、インクデータ２００を利用し、交換することができる。これは、いくつかの種類のコンピュータ、例えばモバイル端末及びサーバ、によって分散的にサポートされるインクデータ処理部１００のために必要なライブラリとして、実現され得る。データ交換インフラ１０を通過する実線の矢印は、インクデータ２００を利用するための一群のライブラリを利用するいくつかのアプリケーションのために提供される様々なアプリケーションの間におけるインクデータ２００の交換を説明する。インクデータ２００の領域（ドメイン）において共通の情報モデルを確立することにより、様々なタイプのアプリケーション及び装置がインクデータ２００を共有ないし交換できるようになる。
【００６３】
図１では、装置１０−１は、入力センサとして、筆圧データを出力できるペンタブレット型の入力装置を含み、第１のプロバイダ／ソフトウェアベンダーによって提供されるアプリケーションサービス＃１のために提供されるアプリケーション＃１を用いてインクデータを生成する。生成されたインクデータ２００はその後、宛先であるメディア（例えば、ネットワーク）に対応する適切な出力フォーム（例えば、パケット内のＳＭＦ）で出力され得る。
【００６４】
装置１０−１−２は、ユーザの指によってなされる手書き入力を受け取る能力を有するタブレット型の入力装置である。装置１０−１−２のセンサは、筆圧データを出力する能力を有さず、アプリケーションサービス＃２のために提供されるアプリケーション＃２を用いて筆圧情報を利用せず、又は、宛先であるメディアに対応する適切な出力フォームでインクデータ２００を生成する。
【００６５】
装置１０−３は、アプリケーションサービス＃２を使用する、さらに他のタイプのコンピュータ（例えば、デスクトップ型のＰＣ）である。装置１０−３は、装置１０−１−１及び装置１０−１−２のそれぞれから提供されるインクデータ２００を結合する（統合する）ことができる。装置１０−３は、装置１０−１−１及び装置１０−１−２から出力されたインクデータ２００を、互いに重ねた状態で、その画面上にレンダリングする（描画する）ことができる。
【００６６】
図２は、インクデータモデルの実態関連図である。本発明の実施の形態によるインクデータ２００は、ストロークオブジェクトセット２０２と、スクリーン又はディスプレイ上にレンダリングする（描画する、表現する、ラスター化する）際にストロークオブジェクト２１０の形及び色を制御するために必要となる情報を含む描画スタイルオブジェクト（セット）２３０と、ストロークオブジェクト２１０を説明する非描画関連情報を含むメタデータオブジェクト２５０（例えば、著者）と、既存のストロークオブジェクト２１０を操作する（例えば、スライスする、回転する）ために必要となる情報を含む操作オブジェクト（セット）２７０とを含む。
【００６７】
ストロークオブジェクトセット２０２内のストロークオブジェクト２１０は、ポインタ（指、ペンなど）の動きによって形成されるストローク２１０（又はトレース、パス）を再生するために必要な情報を含む。ストロークは、複数の（「Ｎ」個の）ポイントオブジェクト２１２（ポイント１〜ポイントＮ）を含む（２１７）。他の言葉で言えば、ストロークは、ポインタの動きによって生成されるペンイベントデータ（ポインタ操作）をサンプリングすることから得られる複数のポイントオブジェクトの座標によってサポートされる。ポイントオブジェクトは、それが２次元、３次元、・・・Ｎ次元空間におけるポイントオブジェクトの位置を示す限り、絶対的又は相対的な座標値の形式、又は、ベクトル形式などの任意の形式をとり得る。様々な実施の形態において、複数のポイントオブジェクトは、それらの間に曲線セグメント２１０を挿入し、それによってストロークオブジェクト２１０のパスを形成するために使用され得る制御点として機能する。
【００６８】
本発明の実施の形態によれば、ストロークオブジェクト２１０はさらに、表示の対象となるストロークオブジェクト２１０の部分を定義する範囲情報を含む。図示した実施の形態では、範囲情報は、ストロークオブジェクト２１０の開始曲線セグメント内の開始点を定義する第１のパラメータである「開始パラメータ」３０１と、ストロークオブジェクト２１０の終了曲線セグメント内の終了点を定義する第２のパラメータである「終了パラメータ」３０３とを含む。範囲情報は、ポイントオブジェクトが生成された後、ストロークオブジェクト２１０のために生成される。例えば、ストロークオブジェクト２１０上でスライス操作のような操作オペレーションが実行され、２つの新たなストロークオブジェクト２１０が生成されるとき、２つの新たなストロークオブジェクト２１０のそれぞれを構成する二組のポイントオブジェクトが得られ、２つの新たなストロークオブジェクト２１０のそれぞれに範囲情報が付加される。
【００６９】
ここで、開始曲線セグメント及び終了曲線セグメントは、描画（表示）動作が開始する又は終了するセグメントを意味する。したがって、全く表示されないと指定されたストロークオブジェクト２１０の真に１つ目の曲線セグメントは、ここで使用される「開始」曲線セグメントではない。同様に、全く表示されないと指定された真に最後の曲線セグメントは、「終了」曲線セグメントではない。
【００７０】
一般的に、複数のポイントオブジェクトの（ｘ，ｙ）座標を生成するためには２つの方法がある。第１に、ペンイベントデータが入力されている間、ペンイベントデータ（ペン操作）から導出される座標点が「生値型」のポイントとして出力され得る。第２に、完全なストロークを形成するためのすべてのポイントが入力された後、ストロークの近似曲線を示すベジエ曲線のような三次スプライン関数又はより高次の関数（例えば、ラグランジェ多項式）が生成され、その近似曲線を表現するために必要な最小数のポイントオブジェクトが「最適化ポイント型」として取得され得る。以下の説明では、ポイントオブジェクトは、第１の方法による「生値型」のものとして生成される。ただし、本発明はまた、第２の方法による「最適化ポイント型」のポイントオブジェクトを使用することも可能である。
【００７１】
描画スタイルオブジェクト（セット）２３０は、ストロークオブジェクト２１０の形（ストローク幅、ストロークのスタイル／パターン）及び色を制御するために必要な情報を含む。要するに、描画スタイルオブジェクト２３０は、ストロークオブジェクト２１０のレンダリングを制御する。図示した例の描画スタイルオブジェクト２３０は、シェイプフィル（塗りつぶし）オブジェクト２３２及び粒子散布オブジェクト２３４を含む。
【００７２】
図３Ｂ及び図３Ｃはそれぞれ、図３Ａと同じストロークオブジェクト２１０を２つの異なる描画スタイルオブジェクトによってレンダリングしてなる（描画してなる）２つの結果を示す。
【００７３】
図３Ｂは、シェイプフィルオブジェクト２３２のレンダリング（描画）結果を示すもので、様々な半径及び幅を有する円３２１の集合としてストロークオブジェクト２１０を表現している。各円の中心は、ストロークオブジェクト２１０によって表されるトレースに沿って一列に整列しており、円の集合の外周は、包絡線３２３，３２５を生成する（算出する）ために使用される。包絡線３２３，３２５はその後、スクリーン又はディスプレイ上に図３Ａのストロークオブジェクト２１０を描画するために使用される。
【００７４】
図３Ｃは、粒子散布オブジェクト２３４のレンダリング（描画）結果を示すもので、ポイントスプライトの集合として図３Ａのストロークオブジェクト２１０を描画している。ポイントスプライトは形作られた粒子３４１（薄片）であり、中心を持ち、サイズ、及び、薄片の規定の軸に対する回転角３４５θが様々に変化する。様々なサイズの薄片がそれぞれの規定の軸に対してθだけ回転し、その中心は、トレースからトレース方向に対して垂直な方向にオフセット３４３の分だけ移動する。オフセット３４３は、所定の種から導出される乱数値である。
【００７５】
メタデータオブジェクト２５０（図２参照）は、著者、ペンＩＤ、ローカルに取得される日時情報、ＧＰＳによって取得される位置情報などのような、ストロークオブジェクト２１０を説明する非描画関連情報を含む。
【００７６】
操作オブジェクト（セット）２７０は、既存のストロークオブジェクト２１０を全体的又は部分的に操作する（例えば、選択する、変形する／回転する、スライスする、など）ために必要な情報を含む。そのような情報は、それぞれがストロークオブジェクト２１０に対して所望の操作をもたらすためにストロークオブジェクト２１０の全体又は一部に対して実行可能である複数の操作オブジェクトの形式で整理される。各操作オブジェクト２７０は、特定の操作オペレーションを定義し制御するパラメータを含む。例えば、選択オブジェクト２７２は、図４Ａに示すようにストロークオブジェクト２１０を選択し、変形する（例えば、変換行列によって回転する）ために使用されるパラメータを含む。スライスオブジェクト２７４は、図４Ｂに示すようにストロークオブジェクト２１０をスライスするために使用されるパラメータを含む。
【００７７】
図４Ａは、選択オブジェクト２７２の動作を説明する。選択及び変形のターゲットは既存のストロークオブジェクト２１０「ストロークｉ」であり、図４Ａでは、これが他のストロークｊ（ｊ＞ｉ）によって選択される。ストロークｊは、新規かつ連続的に入力されるペンイベントデータに基づいて新規に入力されたもので、ポイントオブジェクトＰ１〜Ｐｎを含む。ストロークｊは、既存のストロークｉを囲む領域を定義し、それによって既存のストロークｉを選択するように入力される。選択オブジェクト２７２は、図４Ａの矢印４０５に図示するように、選択されたストロークｉを変形する（回転する）ため、規定の変換行列を用いることができる。ストロークｉがストロークｊによって選択されるか否か、また、どのように選択されるか、を決定する方法には様々なものがある。例えば、もしストロークｊがｐ１とｐ２の間の単一の位置（Ｐ＿ｉｎｔｅｒｓｅｃｔ＿Ｍｉｄ）でストロークｉと交差するのであれば、ストロークｉの右側部分のみを選択し、４０５によって変形することができる。ストロークｉの残りの左側部分は選択されず、変形４０５によって変形されることなく維持される。これは、ストロークｊを用いてストロークｉに対し同時にスライス操作を適用することによって実現され得る（すなわち、ストロークｊが選択オブジェクト２７２とストロークｉ４０１のためのスライスオブジェクト２７４との両方の生成を起動するために使用される）。このケースでは、ストロークｉは２つの新たに生成されたストロークに分割される。これら新たに生成されたストロークのうちの一方は、ストロークｊによって完全に取り囲まれており、したがって選択される。
【００７８】
図４Ｂは、スライスオブジェクト２７４の動作を説明する。スライスオブジェクト２７４は、ストロークｉ４０１の部分的な操作であり、ポイントオブジェクトＰ１〜Ｐ４を含む新たなストロークオブジェクト４０３（ストロークｊ）によって生成される。ストロークオブジェクト４０３は、通常のストロークオブジェクト２１０ではないが、定義された操作オペレーションを既存のストロークオブジェクト２１０上で行うように構成された操作オブジェクトであることを示す型情報に関連付けられる。例えば、ストロークオブジェクト４０３（ストロークｊ）は、図５を参照して以下でより完全に記述されるように、「入力３」（操作オブジェクト）型であるとして分類されることができる。図４Ｂに図示するように、（「入力３」型のストロークｊ内に表現される）スライスオブジェクト２７４は、既存のストロークオブジェクト４０１（ストロークｉ）をスライスするように入力される。これを実現するため、スライスオブジェクト２７４は、既存のストロークオブジェクト４０１（ストロークｉ）を２つのスライス、すなわちスライスｉ１４０７及びスライスｉ２４０９、にスライスするために必要なパラメータを含む。スライスオブジェクト２７４は、様々なアプリケーションにおいて、スライサー、イレーザー、部分抽出器などとして機能するものであり得る。スライス操作が実行され、２つの新しいスライス４０７，４０９が生成された後、これらのスライスは、２つの完全に定義されたストロークオブジェクト２１０となるべく「コミット」（又はファイナライズ）され得る。この点において、元のストロークオブジェクト４０１（ストロークｉ）だけでなく、（コミットされていない）スライス４０７，４０９及びスライスを生成するために使用されたスライスオブジェクト２７４（ストロークｊ）自身についても、維持される必要はない。
【００７９】
図５は、本発明の実施の形態による、インクデータを出力し、操作し、描画し、及び伝達する（送信する／受信する）ことのできるインクデータ処理装置の機能ブロック図である。この装置は一般的に、図１の装置１０−１−１（センサタイプ１）又は装置１０−１−２（センサタイプ２）に対応する。
【００８０】
この例の装置は、入力センサ１１０と、入力処理部１１１と、インクデータ処理部１００と、アプリケーション部３００−１と、グラフィック処理部３００と、ディスプレイ１１３と、通信部１１２（「Ｔｘ，Ｒｘ」）とを含み、これらはすべて、記憶装置と結合してＣＰＵにより実行されるオペレーティングシステム４００−１によって制御される。この装置は、ペンタブレットセンサの形態をとる入力センサ１１０を含むか又はこれと結合するパーソナルコンピュータ（ＰＣ）又はモバイル端末装置であってよい。
【００８１】
入力センサ１１０は、ユーザの手書き動作を（ペンや指などのポインタを介して）検出し、検出した手書き動作を表現する入力データ信号を生成する。例えば、静電センサ、感圧センサ、電磁共鳴（ＥＭＲ）ベースのセンサが使われ得る。
【００８２】
入力処理部１１１は、各入力センサに依存するタイプの入力データを入力センサ１１０から受け取り、この入力データを、インクデータ２００を生成するためのさらなる処理を受けることのできる「ペンイベントデータ」に変換する。生成された「ペンイベントデータ」は、インクデータ処理部１００に「入力１」（図５のポイント「Ａ」を参照）として入力される。ペンイベントデータ（「入力１」）は、感知した座標位置を少なくとも含み、入力センサ１１０が圧力／傾きの検出能力を有するか否かに応じて追加で、筆圧データやペンの傾きデータなどを含み得る。したがって、入力処理部１１１から出力されるペンイベントデータもまた、装置／センサに依存する。入力処理部１１１は、典型的には、アンドロイド（登録商標）オペレーションシステム上で動作する入力サブシステムのような入力センサ１１０のドライバであるソフトウェアプログラムとして実現される。入力センサ１１０と入力処理部１１１の構成は、図示したものに限定されない。例えば、入力センサ１１０及び入力処理部１１１のいくつか又は全部は、ペン形装置のようなデジタル文具装置として提供され得る。
【００８３】
インクデータ処理部１００は、インクデータ生成部１２０及びインクデータ整形部１４０を含む。インクデータ処理部１００（より具体的にはインクデータ生成部１２０）は、入力処理部１１１から受信されるペンイベントデータと、アプリケーション部３００−１から受信されるコンテキスト情報（「入力２」）及び操作情報（「入力３」）とに基づいてインクデータ２００を生成する責任を負う。インクデータ処理部１００は、典型的には、アプリケーション部３００−１に動的及び／又は静的にリンクされた一組のライブラリとして実現される。
【００８４】
コンテキスト情報（「入力２」）は、ペンイベントデータ（「入力１」）のコンテキスト又は環境を記述する情報であり、例えば、使用されるペン先タイプ（例えば、ブラシ、クレヨン、鉛筆）や、使用されるペン色（赤、緑、青）などを示すことができる。コンテキスト情報は、典型的には、入力センサ１１０への入力データの入力に先立ち、アプリケーション部３００−１によって選択される。
【００８５】
操作情報（「入力３」）は、入力センサ１１０からの次の入力が典型的なペンイベントデータ（通常のストロークオブジェクト２１０）として取り扱われるべきでなく、既存のストロークオブジェクト２１０に対していくつかの操作オペレーション（例えば、スライスする、消去する、展開する、削除する、コピーする、拡大する、など）を適用するためのコマンドであることを明示する。入力３が受信されると、インクデータ生成部１２０は、新しいストロークオブジェクト＃ｊと、新しいストロークオブジェクト＃１が原因となって既存のストロークオブジェクト＃０〜＃ｉに適用される操作オブジェクトとを生成する。操作情報（「入力３」）は、アプリケーション部３００−１をサポートするアプリケーション内で定義されたスイッチ、ボタンなどをユーザが選択することによって生成され、インクデータ生成部１２０に入力される。
【００８６】
インクデータ生成部１２０は、ペンイベントデータ（「入力１」）、コンテキスト情報（「入力２」）、及び操作情報（「入力３」）を受信し、（図５のポイント「Ｄ」に）ストロークオブジェクト２１０、描画スタイルオブジェクト２３０、操作オブジェクト２７０、及びメタデータオブジェクト２５０を含む「インクデータ」（インクデータ２００）を生成する。インクデータ生成部１２０のさらなる詳細は、図６を参照して後に記述されるであろう。
【００８７】
さらに図５を参照すると、インクデータ処理部１００のインクデータ整形部１４０は、インクデータ生成部１２０からポイント「Ｄ」を介してインクデータを受信し、アプリケーション部３００−１から受信されるフォーマット選択情報（Ｆｍｔ−Ｓｅｌ）に従って選択されるフォーマットにて、該インクデータを出力する。
【００８８】
具体的には、インクデータ整形部１４０は、インクデータ通信部１４４及び記録フォーマットデータ処理部１４２を含む。インクデータ通信部１４４は、ストロークメッセージフォーマット（ＳＭＦ）のインクデータ２００を（図５の「Ｆ」を介して）送信し、（図５の「Ｆ＿ｉｎ」を介して）受信するよう構成される。ストロークメッセージフォーマット（ＳＭＦ）は、ネットワーク上の他の（遠隔地にある）装置に対して、インクデータ２００を（例えばリアルタイムで）伝達することに適したフォーマットである。記録フォーマットデータ処理部１４２は、インクデータをストロークファイルフォーマット（ＳＦＦ）に整形するように構成される（図５の「Ｅ」を参照）。ストロークファイルフォーマット（ＳＦＦ）は、インクデータ２００をより永久的な記憶媒体に記憶するのに適したフォーマットである。
【００８９】
グラフィック処理部３００は、ストロークオブジェクト２１０、描画スタイルオブジェクト２３０、操作オブジェクト２７０、及びメタデータオブジェクト２５０を含むインクデータ２００を「Ｄ」を介して受信し、「Ｈ」を介して、定義された解像度レベルであって、ピクセルごとの色（例えば、ＲＧＢ）の値を含む一組のピクセル値を出力する。例えば、グラフィック処理部３００は、ストロークオブジェクト２１０を構成するポイントオブジェクト（ｐ１〜ｐｎ）を受信し、曲線補間アルゴリズムに従う制御点として使用されるポイントオブジェクトの間に曲線を挿入し、結果として得られるストロークオブジェクト２１０のパスをディスプレイ１１３上に、ＤｉｒｅｃｔＸ（登録商標）やＯｐｅｎＧＬ（登録商標）ライブラリのような関連するＧＰＵライブラリを用いて描画（レンダリング）する。
【００９０】
様々な実施の形態によれば、グラフィック処理部３００は、当業者に知られたキャットマル−ロム曲線アルゴリズムやポリベジエ曲線アルゴリズムのような適切な曲線補間アルゴリズムに従う曲線を挿入するために、受信されたストロークオブジェクト２１０内に含まれるポイントオブジェクトを使用する。
【００９１】
さらに、本発明の代表的な実施の形態によれば、グラフィック処理部３００は、ストロークオブジェクト２１０内に含まれる「開始パラメータ」の値３０１及び「終力パラメータ」の値３０３を参照して、ストロークオブジェクト２１０の表示を行う。別の言葉で言えば、グラフィック処理部３００は、ストロークオブジェクト２１０のうち、「開始パラメータ」の値３０１及び「終力パラメータ」の値３０３によって描写された（バインドされた）部分のみをレンダリング（表示）する。ここで使用される表示（される）とは、最終的に表示されることを意味する。定義された部分が表示対象であるか否かを設定するために、様々な技術が使用され得る。例えば、ＧＰＵライブラリに供給する頂点情報に表示対象でない所定の部分のための頂点情報を含まないようにすることで、該所定部分のためのピクセルデータを生成しないようにする方法が使われ得る。他の例としては、１００％完全にストロークオブジェクト２１０を再生しつつも、表示対象でない所定の部分を透明に設定する方法が使われ得る。
【００９２】
アプリケーション部３００−１は、図１のアプリケーション＃１のような、インクデータ処理部１００と動的又は静的にリンクする１以上のユーザアプリケーションを含む。例えば、アプリケーション部３００−１は、いずれも本発明の実施の形態によるインクデータ２００を使用するリアルタイム会議アプリケーション、書類生成アプリケーション、描画アプリケーションなどを含むことができる。アプリケーション部３００−１内の各アプリケーションは、例えば、ユーザがインクデータ処理部１００に対して操作情報（「入力３」）を入力することを可能にするユーザインターフェイス（ＵＩ）を提供する。
【００９３】
図６は、インクデータ生成部１２０及びインクデータ整形部１４０を含むインクデータ処理部１００の機能ブロック図である。
【００９４】
インクデータ生成部１２０は、ストロークオブジェクト操作部１２２、メタデータオブジェクト操作部１２４、描画スタイルオブジェクト操作部１２６、及び操作オブジェクト操作部１２８を含む。これらはそれぞれ、集合的に本発明の実施の形態によるインクデータ２００を構成するストロークオブジェクト２１０、メタデータオブジェクト２５０、描画スタイルオブジェクト２３０、及び操作オブジェクト２７０を操作し、生成する。
【００９５】
ストロークオブジェクト操作部１２２は、ペンイベントデータ（「入力１」）を受信し、ストロークオブジェクト２１０（図６の「Ｄ」を参照）を生成する。ストロークオブジェクト操作部１２２は、上記したように生値型のポイントオブジェクトを生成し、ストロークオブジェクト２１０を形成する。代表的な実施の形態では、ストロークオブジェクト操作部１２２は、ポイントオブジェクトの生成を開始する前にペンイベントデータの全体が受信されるのを待つ代わりに、ペンイベントデータが入力されるに従って連続的にポイントオブジェクトを生成する。ストロークオブジェクト操作部１２２は、図７を参照して以下により完全に詳細に記述されるように、グラフィック処理部３００（図５を参照）又はインクデータ整形部１４０に対し、「Ｄ」を介して、生成したポイントオブジェクトを連続的に出力する。アプリケーション３００−１は、生値型のインクデータ２００を出力することと、例えばアプリケーション３００−１がリアルタイム通信を実施するか、或いは、高圧縮のベクトルデータを必要とするかに応じて最適化された値型のインクデータ２００を出力することとを切り替えるよう、ストロークオブジェクト操作部１２２を制御することができる。
【００９６】
メタデータオブジェクト操作部１２４は、ペンストロークの開始（すなわち、「ペンダウン」）を示すペンイベントデータ（「入力１」）の受信、又は、（例えばスライスすることに応じた）新しいストロークオブジェクト２１０の生成に応じてコンテキスト情報（「入力２」）を処理し、著者情報、日時情報などのような非描画関連情報を抽出する。メタデータオブジェクト操作部１２４は、抽出したメタデータを含むメタデータオブジェクト２５０を、対応するストロークオブジェクト２１０と関連付けて生成する。
【００９７】
描画スタイルオブジェクト操作部１２６は、ペンダウンを示すペンイベントデータ（「入力１」）の受信、又は、新しいストロークオブジェクト２１０の生成に応じてコンテキスト情報（「入力２」）を処理し、ストロークオブジェクト２１０をディスプレイ上に表現するために必要となる描画関連情報を抽出する。描画スタイルオブジェクト操作部１２６は、描画スタイルオブジェクト２３０（例えば、シェイプフィルオブジェクト２３２及び粒子散布オブジェクト２３４）を、対応するストロークオブジェクト２１０と関連付けて生成する。
【００９８】
操作オブジェクト操作部１２８は、操作情報（「入力３」）の受信に応じて、既存のストロークオブジェクト２１０の全体又は一部に対して適用されるべき操作又は変形のオペレーション（例えば、図２に示した「選択（変形）」オブジェクト２７２及びスライスオブジェクト２７４）を定義する操作オブジェクト２７０を生成する。
【００９９】
図６では、２つの破線矢印「Ｍ１（ローカル）」及び「Ｍ２（リモート）」が、操作オペレーションの方向、すなわち、ターゲットであるストロークオブジェクト２１０が操作されるべきなのか、或いは、変形されるべきなのか、を示している。示されるように、操作オブジェクト２７０によって定義される操作オペレーションは、ストロークオブジェクト操作部１２２内に存在するストロークオブジェクト２１０に対してローカル（Ｍ１）に適用されてもよいし、ネットワークに結合された遠隔地の受信装置内のような外部ネットワーク上に存在するストロークオブジェクト２１０に対して、インクデータ整形部１４０を介してリモート（Ｍ２）に適用されてもよい。
【０１００】
図６では、ストロークオブジェクト２１０、メタデータオブジェクト２５０、及び描画スタイルオブジェクト２３０は、インクデータ整形部１４０の記録フォーマットデータ処理部１４２及びインクデータ通信部１４４に対して入力され、一方で、操作オブジェクト２７０はインクデータ通信部１４４のみに入力され、１４２には入力されないように説明されている。初めの３つは、永久的又は半永久的に記憶されることが好ましく、それ故、ストロークファイルフォーマット（ＳＦＦ）、ＳＶＧフォーマット、ＩｎｋＭＬフォーマットなど、記憶装置に適した形に整形される。また、新たなストロークオブジェクト２１０が生成されるとき、ストロークオブジェクト２１０と、関連するメタデータ及び描画スタイルオブジェクトは、ネットワークを介して受信側に伝達され、したがって、インクデータ通信部１４４及び記録フォーマットデータ処理部１４２の両方で処理される。これに対し、操作オブジェクト２７０は、既存のストロークオブジェクト２１０に適用されるためのいくつかの操作的オペレーションを定義するものであることから、本来的に一時的なものである。一旦、操作的オペレーションが既存のストロークオブジェクト２１０に適用される（コミットされる）と、その操作オブジェクト２７０はメモリから追い出される。したがって、操作オブジェクト２７０は、典型的には、ネットワークを介する送信に適したストロークメッセージフォーマット（ＳＭＦ）に整形され、ストロークファイルフォーマット（ＳＦＦ）には含まれない。
【０１０１】
インクデータ整形部１４０の記録フォーマットデータ処理部１４２は、それぞれインクデータ２００を異なる記録フォーマット（ＳＦＦ、非特許文献１のＩｎｋＭＬ、非特許文献３のＳＶＧ、非特許文献４のＨＴＭＬ５など）で出力するための複数の処理部１４２−１，１４２−２を含む。例えば、処理部１４２−１は、ＳＦＦのインクデータ２００を出力するように構成され、ＳＦＦ形式でファイルフォーマットされたデータをシリアライズするために、グーグルのプロトコルバッファ(https://developers.google.com/protocol-buffers/)及びメッセージを採用することとしてもよい。処理部１４２−２は、例えば、非特許文献１の「トレース」の定義と、非特許文献３の「パス」又は非特許文献４の「カンバスパス」の定義との間の違いのような、ＳＦＦファイル、非特許文献１のＩｎｋＭＬ、及び非特許文献３のＳＶＧの間の違いを吸収するためのフォーマット変換処理を行うこととしてもよい。
【０１０２】
図７は、インクデータ処理部１００内のストロークオブジェクト操作部１２２の機能ブロック図である。ストロークオブジェクト操作部１２２は、ますます多くのペンイベントデータが入力されるに従い、グラフィック処理部３００又はインクデータ整形部１４０に対し、生値型のストロークオブジェクト２１０を構成するポイントオブジェクトを連続的に出力する能力を有する。ストロークオブジェクト操作部１２２は、記憶装置７７０を含むか、又は記憶装置７７０と結合される。
【０１０３】
ストロークオブジェクト操作部１２２は、開始点と終了点を設定する開始／終了パラメータ設定部１２２Ａと、装置のタイプに基づいて適切なパスビルダを選択するパスビルダ設定部１２２Ｂと、いくつのポイントオブジェクトが部分的に形成されたストロークオブジェクト２１０に付加されるべきかを制御する対ストローク追加部１２２Ｄと、ストロークオブジェクト２１０の末尾にあるギャップ（図８の「遅延」）を埋めるサフィックス付加部１２２Ｅとを含む。
【０１０４】
生成され、メモリ７７０に記憶される断片化データは、ストロークオブジェクト２１０の断片として、リアルタイム伝送のために使用される。断片化データは、第２の実施の形態において以下により完全に記述されるように、バイト又は時間の単位ごとに送信される。
【０１０５】
開始／終了パラメータ設定部１２２Ａは、ペンダウンイベント（ペンストロークの開始）又はペンアップイベント（ペンストロークの終了）の検出に応じて、開始パラメータ３０１及び終了パラメータ３０３をそれぞれの初期デフォルト値に設定する。例えば開始パラメータ３０１は、ペンダウンイベントに応じてそのデフォルト値「０」に設定され、終了パラメータ３０３は、ペンアップイベントに応じてそのデフォルト値「１」に設定される。これらのパラメータの初期値が記憶装置７７０に記憶される必要はなく、例えば、これらのパラメータがデフォルト値に設定されていることを暗示するフラグの形態で設定されればよい。
【０１０６】
パスビルダ部１２２Ｂは、コンテキスト情報（「入力２」）に含まれる入力ダイナミクス設定の値７０１に基づいて、入力処理部１１１から出力されるペンイベントデータのタイプに適したパスビルダを選択するように構成される。例えば、もしペンイベントデータが筆圧値を含むのであれば、筆圧に基づいてストローク幅（Ｗ）及び透明度（Ａ）を導出する能力を有する第１の（圧力）関数ｆ１を含む圧力パスビルダ１２２Ｂ１が選択される。一方、もしペンイベントデータが筆圧値を含まないのであれば、速度パスビルダ１２２Ｂ２が選択される。速度パスビルダ１２２Ｂ２は、ペンの移動スピードに基づいてストローク幅（Ｗ）及び透明度（Ａ）を導出する能力を有する第２の（速度）関数ｆ２を含む。ペンの移動スピードは、ペンイベントデータに含まれる点座標又はタイムスタンプの変化量から決定される。言い換えれば、速度パスビルダ１２２Ｂ２は、圧力パスビルダ１２２Ｂ１で用いられる圧力値の代わりに、速度値を用いている。すべてのペンイベントデータは、圧力情報を含むタイプ（タイプ１）と、圧力情報を含まないタイプ（タイプ２）のいずれかに分類され得るので、すべてのタイプのペンイベントデータが圧力パスビルダ１２２Ｂ１又は速度パスビルダ１２２Ｂ２のいずれかによって処理されるであろう。この理由、並びに、圧力パスビルダ１２２Ｂ１及び速度パスビルダ１２２Ｂ２がどのように動作するのか、については、以下で第３の実施の形態を参照しながら記述されるであろう。
【０１０７】
ストロークオブジェクト操作部１２２はまた、ストロークオブジェクト２１０が生成され、完全なものとなる前に、コンテキスト情報（「入力２」）に含まれる平滑化使用情報に基づき、該ストロークオブジェクト２１０に対して平滑化オペレーションの適用を開始する平滑器１２２Ｃを有する。加速度平均、加重平均、指数平滑法、二重指数平滑法などのような任意の適切な平滑化オペレーションが使用され得る。
【０１０８】
図８は、列Ａ及び列Ｂにおいて、平滑器１２２Ｃにより行われる平滑化オペレーションを説明する。列Ａは図７のポイント「Ａ」（平滑化前）に対応し、列Ｂは図７のポイント「Ｂ」（平滑化後）に対応する。列Ａにおいて、ｘ１〜ｘ１０は、ペンイベントデータから得られる１０点のＸ座標を表している。図８では、ｘ１〜ｘ１０は（１０，２０，３０，４５，６０，８０，９０，１００，１１０，１１５）である。
【０１０９】
列Ｂにおいて、ｘ１'〜ｘ１０'は、平滑化オペレーションが適用された後の上記１０点のＸ座標を表している。図示した例では、次の指数平滑関数が適用される。ただし、フィルター強度α＝０．５である。
【数１】
2020057442.tif 000003
【０１１０】
図８では、ｘ１'〜ｘ１０'は（１０，１５，２３，３４，４７，６３，７７，８８，９９，１０８）である。
【０１１１】
平滑器１２２Ｃによって実行される平滑化オペレーションは、各点の修正された（平滑化された）位置を継続的に出力するべく、各点の座標が導出される都度、回転ベースで各点に適用される。したがって、ストロークオブジェクト操作部122は、全体としてのペンアップイベントが検出されるのを待つ代わりに、ペンダウンイベントが検出されたときから、「生値型」のストロークオブジェクト２１０の生成と出力を開始する。
【０１１２】
列Ｂのポイントｘ０'は、一対の制御点の間に補間曲線を定義するためにキャットマル−ロム曲線が使用される場合に加えられるものである。上で議論したように、キャットマル−ロム曲線は、スタートポイント（Ｐｉ）、エンドポイント（Ｐｉ＋１）、スタートポイント（Ｐｉ）の「前」の点、エンドポイント（Ｐｉ＋１）の「後ろ」の点を含む４つの制御点を使用して各曲線セグメントを定義する。それゆえ、ポイントｘ１'とｘ２'の間に開始曲線セグメントを定義するためにスタートポイントｘ１'が複製され、それによって、ｘ１'とｘ２'の間に曲線セグメントを定義するための点ｘ１'，ｘ２'，ｘ３'とともに使用され得る新しいポイントｘ０'が（ｘ１'と同じ位置に）生成される。新たなポイントｘ０'の一は、ｘ１'とｘ２'の間のキャットマル−ロム曲線が入力されたストロークに最もフィットする位置となるよう調整され得る。シンプルにｘ１'（ｐ１）の値を複製することによりｘ０'（ｐ０）の値を生成することにより、プロセスは直ちにｘ０'の位置を定義し、ｘ０'（ｐ０）からｘ１'（ｐ１）へのベクトルの構成要素をゼロにセットすることができる。そのようなプロセスは、リアルタイム実行のために適しており（ｐ０を生成するためにｐ２を待つ必要がない）、かつ、ｘ１'（ｐ１）とｘ２'（ｐ２）の間の曲線セグメントの曲率に過度に影響する（例えば、一方側又は他方側に押し出す）こともない。
【０１１３】
再び図７を参照すると、対ストローク追加部１２２Ｄは、いくつのポイントオブジェクトが確立されて記憶装置７７０に格納され、そしてそれ故、出力されるストロークオブジェクト２１０の部分的なデータに加えられ得るのかを決定する。図示した実施の形態では、ポイントオブジェクトＰ１〜Ｐｎ−１が記憶装置７７０内に確立され、グラフィック処理部３００又はインクデータ整形部１４０（ストロークオブジェクトの全体が完成するのを待つ代わりに）に出力されるストロークオブジェクト２１０の部分的なデータに加えられることが決定されている。グラフィック処理部３００は、部分的に形成されたストロークオブジェクトを表示することができる。別の言葉で言えば、グラフィック処理部３００は、初期の点から始まるストロークオブジェクトを、その成長とともに表示する。インクデータ整形部１４０（又はインクデータ通信部１４４）は、確立された部分的なデータを、ストロークオブジェクトの断片化データとして伝送フォーマットにフォーマットし、そして送信することができる。断片化データの送信方法は、第２の実施の形態でより詳しく説明されるであろう。
【０１１４】
図７及び図８を参照すると、サフィックス付加部１２２Ｅは、入力されたストロークオブジェクト２１０の終端位置（列Ａのｘ１０）と、平滑化されたストロークオブジェクト２１０の終端位置（列Ｂのｘ１０'）との間のギャップ（又は「遅延」）を埋める。図８では、列Ｃが「遅延」を埋める（サフィックスを付加する）オペレーションを図示している。図示した例では、平滑化オペレーションの後、ストロークオブジェクト２１０の終端において、もともと入力された位置ｘ１０（１１５）と、平滑化された位置ｘ１０'（１０８）との間に「遅延」が生成されている。ストロークオブジェクト操作部１２２は、コンテキスト情報（「入力２」）に含まれる平滑化使用情報７０５の内容に基づいて、サフィックスを付加する動作を行うか行わないかを決定する。サフィックス付加オペレーションはまた、新たなポイントオブジェクトがストロークオブジェクト２１０に加えられる都度、発動され得る。この場合、サフィックス付加オペレーションは、グラフィック処理部３００に対し、一時的な視覚上のプレビューとして使用され得るポイントオブジェクトを用意する。サフィックス付加オペレーションによって新たに生成されたポイントは、まだ最終的なストロークオブジェクト２１０の一部にはなっておらず、そしてそれ故、明確に加えられるまでの間、インクデータ整形部１４０（又はインクデータ通信部１４４）によって無視される。
【０１１５】
図示した実施の形態においては、サフィックス付加オペレーションが実行されると、ストロークオブジェクト操作部１２２はｘ１１'、ｘ１２'、及びｘ１３'に新たなポイントオブジェクトを加えている。ポイントｘ１２'は、列Ａのオリジナル入力の最新位置ｘ１０（１１５）と同じ位置に加えられる。ポイントｘ１１'は、ポイントｘ１０'とｘ１２'の間の平滑化されたポイントに加えられる。最終的に、この例では制御点の各対の間に補間曲線を定義するためにキャットマル−ロム曲線が使用されることから、ｘ１１'とｘ１２'の間にキャットマル−ロム曲線である終了曲線セグメントを定義するために必要となる新たなポイントｘ１３'を生成するために、終端のポイントｘ１２'が（ｘ１２'と同じ位置に）複製される。新たなポイントｘ１３'の位置は、ｘ１１'とｘ１２'の間のキャットマル−ロム曲線が入力されたストロークに最もフィットする位置となるよう調整され得る。また、サフィックス付加オペレーションが実行されないときでさえも、もしキャットマル−ロム曲線が使用されるならば、列Ｂの最新の平滑化ポイントｘ１０'は、新たなポイントｘ１０'（新）を生成するために複製されることができ、そしてそれは、この場合、ｘ９'とｘ１０'の間の最新の曲線セグメントを定義するための制御点としてｘ８'、ｘ９'、ｘ１０'とともに使用され得る。ｘ１０'の値を生成するために単純にｘ９'の値を複製することにより、ｘ８'（ｐ８）とｘ９'（ｐ９）との間の曲線セグメントの曲率に過度に影響を与える（例えば、一方側又は他方側に押し出す）ことなく、プロセスは迅速に中立の位置にｘ１０'の位置を定義することができる。
【０１１６】
図８では、列Ｄは、平滑化され（列Ａから列Ｂ）、終端にサフィックスが付加され（列Ｂから列Ｃ）、そして対ストローク追加部１２２Ｄの制御の下で継続的に出力されるストロークオブジェクト２１０を図示している。この例のストロークオブジェクト２１０は、各曲線セグメント（Ｐｉ〜Ｐｉ＋１）が４つの制御点（Ｐｉ−１、Ｐｉ、Ｐｉ＋１、Ｐｉ＋２）で定義され、結果としての曲線がすべての制御点を通過するキャットマル−ロム曲線アルゴリズムによる補間曲線を生成するために定義される。したがって、ストロークオブジェクト２１０は、４つの制御点ｘ０'、ｘ１'、ｘ２'、ｘ３'によって定義される開始曲線セグメント（ｘ１'〜ｘ２'）を含み、４つの制御点ｘ１０'、ｘ１１'、ｘ１２'、ｘ１３'によって定義される終了曲線セグメント（ｘ１１'〜ｘ２'）を含む。ストロークオブジェクト２１０はまた、開始曲線セグメント（ｘ１'〜ｘ２'）のための開始パラメータ３０１を含み、この開始パラメータ３０１は、開始／終了パラメータ設定部１２２Ａによって「０．０」のデフォルト値に設定される。「０．０」のデフォルト値は、開始曲線セグメント（ｘ１'〜ｘ２'）が最初のポイントｘ１'から完全に表示される（レンダリングされる、表現される）ことを意味する。ストロークオブジェクト２１０はまた、終了曲線セグメント（ｘ１１'〜ｘ１２'）のための終了パラメータ３０３を含み、この終了パラメータ３０３は、開始／終了パラメータ設定部１２２Ａによって「１．０」のデフォルト値に設定される。「１．０」のデフォルト値は、終了曲線セグメント（ｘ１１'〜ｘ１２'）が最後のポイントｘ１２'まで完全に表示されることを意味する。
【０１１７】
図９は、インクデータ２００を生成するために図６のインクデータ生成部１２０によって実行されるサンプル処理を説明するフローチャートである。処理は、インクデータ生成部１２０がペンイベントデータ（「入力１」）を受信するところから始まる。ステップＳ９０１において、ストロークオブジェクト操作部１２２は、入力１として、位置座標（ｘ，ｙ）と、以下に示す３種類のタイミングのうちの１つを示すタイミング情報とを含むペンイベントデータを受信し、決定されたタイミングに従って処理を実行する。
１）指又はポインティングデバイス（例えば、ペン型装置）のようなポインタが他の（センシングする）物体とコンタクト状態に入ったときであるペンダウンタイム。
２）ペンダウンタイムとペンアップタイムの間であるペン移動タイム。
３）ポインタが他の（センシングする）物体から離れた（引き離された）ときであるペンアップタイム。
【０１１８】
＜１．ペンダウンタイムにおける処理フロー＞
イベントタイプがペンダウンイベントを示す「ダウン動作」である場合、ステップＳ９１０においてストロークオブジェクト操作部１２２が、新たに生成されるストロークオブジェクト２１０の開始曲線セグメントの開始パラメータ３０１をデフォルト値（「０，０」）にセットする。上述したように、デフォルト値（「０，０」）は、開始曲線セグメントがその最初の値から完全に表示されるべきことを定義する。同時に、ストロークオブジェクト操作部１２２はまた、ストロークオブジェクト２１０の終了曲線セグメントの終了パラメータ３０３を、終了曲線セグメントもまたその最後の値まで完全に表示されるべきことを定義するデフォルト値（「１，０」）にセットしてもよい。
【０１１９】
ステップＳ９１２では、ストロークオブジェクト操作部１２２は、コンテキスト情報（図７の「入力２」）に含まれる入力ダイナミクス設定パラメータ７０１に基づき、ストロークオブジェクト２１０をビルドするために使用される複数のパスビルダの中から一のパスビルダ（例えば、図７の１２２Ｂ１又は１２２Ｂ２）を選択する。
【０１２０】
ステップＳ９１４では、ストロークオブジェクト操作部１２２は、コンテキスト情報（「入力２」）に含まれるチャネル数パラメータ７０３に基づき、上記ステップＳ９１２で選択されたパスビルダから出力されるべき一組のパラメータを決定する。出力されるべき一組のパラメータは、例えば、（ｘ，ｙ，Ｗ，Ａ）、（ｘ，ｙ，Ｗ）、（ｘ，ｙ，Ａ）、又は（ｘ，ｙ）であってよい。ただし、（ｘ，ｙ）はポイントオブジェクトのｘ，ｙ座標であり、Ｗはストローク幅の値であり、Ａは透明度（又は不透明度）を示すアルファ（α）である。２次元座標（ｘ，ｙ）に「ｚ」値を加え、３次元座標を生成してもよい。
【０１２１】
ステップＳ９１６では、ストロークオブジェクト操作部１２２が、コンテキスト情報（「入力２」）に含まれる平滑化使用パラメータ７０５に基づき、選択されたパスビルダから出力される一組のパラメータに平滑化オペレーションが適用されるべきか否かを決定する。平滑化使用パラメータ７０５はまた、複数のパラメータのうちのどれに平滑化オペレーションが適用されるかを示すこととしてもよい。
【０１２２】
ステップＳ９１８で平滑化の適用が示されたとき（ステップＳ９１６のＹＥＳ）、指示された平滑化処理が実行される。図７は、平滑化処理が（ｘ，ｙ，Ｗ）パラメータに適用される一方、「Ａ」（アルファ）パラメータに適用されない場合を図示している。コンテキスト情報（「入力２」）は、ストロークオブジェクト操作部１２２が所望の強度レベルの平滑化処理を選択するために使用し得る入力センサ１１０のサンプリングレートの情報を追加で含むことができる。例えば、入力センサ１１０のサンプリングレートを低下させる（例えば、１秒当たり１００サンプルに対する１秒当たり１０サンプル）とき、より大きな平滑度の値（効果）を有するより強い平滑化処理が選択され得る。
【０１２３】
ステップＳ９１９では、ここまでで使用されたセッティングパラメータが、インクデータ２００の属性として出力される。パラメータは、例えば、ストロークオブジェクト２１０内に含まれるポイントオブジェクトが平滑化されるか否か（Ｓ９１６がＹＥＳであったかＮＯであったか）、又は、使用され得る平滑化フィルターのタイプ若しくは強さを示す。このパラメータに基づき、ストロークオブジェクト２１０内に含まれるポイントオブジェクトが平滑化されるか否か、（さらに）平滑化されるべきか否か、また、例えば署名検証アプリケーションなどにおいて使用され得る正確な入力データとして扱われ得るかが決定されることができる。
【０１２４】
ステップＳ９２０では、図８の列Ｂを参照して上で説明したように、最初のポイント（制御点）ｘ１'が、キャットマル−ロム曲線としてのｘ１'とｘ２'の間の開始曲線セグメントを定義するための新たな制御点ｘ０'を生成するために複製される。
【０１２５】
ステップＳ９７０では、インクデータ処理部１００が、ローカルコンピュータのインクデータ処理部１００によって生成されたインクデータ２００を共有している（例えば、受信している、操作している）可能性のある他の（リモートの）ユーザ又はコンピュータが存在するか否かを決定する。
【０１２６】
もしそのような他のユーザが存在しているなら、インクデータ処理部１００はステップＳ９７２において、アプリケーション部３００−１（図５参照）から受信されるフォーマット選択(Fmt-Sel)パラメータに基づき、インクデータ２００がストロークメッセージフォーマット（ＳＭＦ）内に出力されるようにインクデータ通信部１４４を制御する。インクデータ通信部１４４は、最初に、リモートユーザの受信装置が（部分的な）ストロークオブジェクト２１０を描くために必要な初期の点座標と描画スタイルオブジェクト２３０を含む部分的な（断片化された）メッセージであるメッセージＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ１２０１（図１２参照）を出力する。メッセージＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ１２０１を受信した受信装置は、ストロークオブジェクト２１０の残りの部分を受信する前の段階で直ちに、受信した描画スタイルオブジェクト２３０を用いて特定される形状、色などで、ストロークオブジェクト２１０の最初の部分のレンダリング（ディスプレイ）を開始することができる。
【０１２７】
＜２．ペン移動タイムにおける処理フロー＞
フローチャートのステップＳ９０１に戻り、インクデータ生成部１２０は、他の新たなイベントデータ（「入力１」）を受信し、そのタイプがペンダウンイベント、ペン移動イベント、ペンアップイベントのいずれであるかを決定する。イベントタイプが、ストロークオブジェクト２１０内でペンが移動していることを示す「ムーブ動作」であるとき、インクデータ生成部１２０は、使用される特定の入力装置依存型のペンイベントデータ内に含まれるものとしてのタイムスタンプ及び／又は筆圧情報とともにｘ，ｙ座標を受信し、そしてステップＳ９３０に進む。
【０１２８】
ステップＳ９３０では、ストロークオブジェクト操作部１２２が、コンテキスト情報（「入力２」）に含まれる平滑化使用パラメータ７０５に基づき、例えば受信された一組のパラメータ（ｘ，ｙ，Ｗ，Ａ）に平滑化オペレーションが適用されるべきか否かを決定する。平滑化パラメータ７０５は、追加で、複数のパラメータのうちのどれに平滑化オペレーションが適用されるかを示すこととしてもよい。ステップＳ９３０の動作は、上述したステップＳ９１６のものと同じである。
【０１２９】
平滑化の適用が示される場合（ステップＳ９３０のＹＥＳ）、ステップＳ９３２において、示された平滑化処理が実行される。
【０１３０】
ステップＳ９３４では、ストロークオブジェクト操作部１２２が、ポイントオブジェクトのうちのいくつが確立され、出力対象のストロークオブジェクト２１０の部分的なデータに加えられるために記憶装置７７０に格納されるかを決定するために対ストローク追加部１２２Ｄを使用する。このステップにおいて対ストローク追加部１２２Ｄはまた、部分的なデータにポイントオブジェクトの値を追加する前に、その値を変更することができる。例えば、対ストローク追加部１２２Ｄは、インクが足りなくなっているボールペンをシミュレートするため、ランダムな基準でアルファパラメータの値を変更することができる。
【０１３１】
ステップＳ９７４では、上述したステップＳ９７０と同様、インクデータ処理部１００が、インクデータ処理部１００によって生成されるインクデータ２００をリアルタイムで共有している他の（リモートの）ユーザが存在しているか決定する。
【０１３２】
もしそのような他のユーザが存在しているなら、インクデータ処理部１００はステップＳ９７６において、上記ステップＳ９７２で生成されたメッセージＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ１２０１に含まれる最初のポイントオブジェクトに続くポイントオブジェクトを含む部分的な（断片化された）メッセージであるメッセージＤＡＴＡ＿ＩＮＫ＿ＭＶＤＯＳ１２０３（図１２参照）を生成して出力するためにインクデータ通信部１４４を使用する。メッセージＤＡＴＡ＿ＩＮＫ＿ＭＶＤＯＳ１２０３に追加されるべきポイントオブジェクトの数は、上記ステップＳ９３４において対ストローク追加部１２２Ｄにより決定される。ストロークオブジェクト２１０のサイズに依存して、複数のＤＡＴＡ＿ＩＮＫ＿ＭＶＤＯＳメッセージが生成され出力され得る。ＤＡＴＡ＿ＩＮＫ＿ＭＶＤＯＳメッセージを受信するリモートユーザの受信装置は、ストロークオブジェクト２１０の最初の部分に続けて、ストロークオブジェクト２１０の中間部のレンダリング（ディスプレイ）を継続する。
【０１３３】
＜３．ペンアップタイムにおける処理フロー＞
フローチャートのステップＳ９０１に戻り、インクデータ生成部１２０は、他の新たなイベントデータ（「入力１」）を受信し、そのタイプを決定する。イベントタイプがペンアップイベントを示す「アップ動作」である（すなわち、ストロークオブジェクト２１０の描画が完了し、ポインタが除去される）とき、ストロークオブジェクト操作部１２２はステップＳ９５０において、受信した一組のパラメータ、例えば（ｘ，ｙ，Ｗ，Ａ）に対して平滑化オペレーションが適用されるか否かを、どのパラメータに平滑化オペレーションが適用されるかということとともに決定する。ステップＳ９５０の動作は、上述したステップＳ９１６及びＳ９３０のそれと同じである。
【０１３４】
平滑化の適用が示される場合（ステップＳ９５０のＹＥＳ）、ステップＳ９５２において、示された平滑化処理が実行される。また、平滑化使用パラメータ７０５がそう示すとき、ストロークオブジェクト操作部１２２は追加で、図８の列Ｃに示したサフィックス付加オペレーションを実行する。平滑化使用パラメータ７０５の内容によっては、サフィックス付加オペレーションは必ずしも実行されない。また、平滑化オペレーションが実行されないとき、サフィックス付加オペレーションは必要なく、実行されない。
【０１３５】
ステップＳ９５３では、図８の列Ｃに図示したように、キャットマル−ロム曲線であるｘ１１'とｘ１２'の間の終了曲線セグメントを定義するための新たな制御点ｘ１３'を生成するために終了ポイント（制御点）ｘ１２'が複製される。
【０１３６】
ステップＳ９５４では、ストロークオブジェクト操作部１２２が終了曲線セグメント（ｘ１１'〜ｘ１２'）の終了パラメータ３０３を、終了曲線セグメントがその終了ポイントｘ１２'まで完全に表示されるべきであることを示すデフォルト値（「１．０」）にセットする。このステップは、上述したステップＳ９１０において既に終了パラメータ３０３がデフォルト値にセットされているときにはスキップされ得る。
【０１３７】
ステップＳ９７８では、上述したステップＳ９７０及びＳ９７０と同様に、インクデータ処理部１００が、インクデータ処理部１００によって生成されたインクデータ２００をリアルタイムで共有している他の（リモートの）ユーザが存在するか否かを決定する。
【０１３８】
もしそのような他のユーザが存在しているならば、インクデータ処理部１００はステップＳ９８０において、サフィックスが付加されたストロークオブジェクト２１０のポイントオブジェクトの最後の組を含む部分的な（断片化された）メッセージであるメッセージＤＡＴＡ＿ＩＮＫ＿ＥＮＤＯＳ１２０５（図１２を参照）を生成及び出力するために、インクデータ通信部１４４を使用する。ＤＡＴＡ＿ＩＮＫ＿ＥＮＤＯＳ１２０５を受信するリモートユーザの装置は、それがストロークオブジェクト２１０のための最後のメッセージであることを理解し、ストロークオブジェクト２１０の描画動作を完了する。
【０１３９】
上述した本発明の実施の形態によるインクデータ２００を生成し通信するための方法及びシステムは、継続的にペンイベントデータを入力し、部分的なストロークオブジェクト２１０が確立されると同時にこれを出力する。インクデータ処理部１００からインクデータ２００を受信するリモートユーザの受信装置は、ストロークオブジェクト２１０の全体が受信されるのを待つことなく、各ストロークオブジェクト２１０のディスプレイを開始し、それが成長するとともにストロークオブジェクト２１０のディスプレイを続ける。
【０１４０】
本発明の様々な実施の形態によれば、平滑化オペレーションは、入力されたペンイベントデータパラメータに選択的に適用される。キャットマル−ロム曲線アルゴリズムのような適切な曲線補間アルゴリズムが、平滑化されたポイントオブジェクトを制御点として用いて補間曲線をビルドするために適用される。
【０１４１】
図１０は、図５のインクデータ処理装置の記録フォーマットデータ処理部１４２からポイント「Ｅ」に出力され得る、インターフェイス定義言語（ＩＤＬ）で書かれたストロークファイルフォーマット（ＳＦＦ）のプロト（模式）ファイルのサンプルを説明する図である。このプロト（模式）ファイルは、インクデータ２００がストロークファイルフォーマット内において、バイトのシーケンスとしてどのように並べられているかを記述している。図示したプロトファイルの行０２〜０７は、描画領域（又は描画「カンバス」）に含まれる情報を記述するデータを含む。例えば、破線の矩形で囲んだ行０６は、ストロークオブジェクト２１０が描画領域内で複数回繰り返されることを定義する。行０４の「ｄｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ（十進数精度）」は、ストロークオブジェクト２１０のポイントオブジェクトの計算の正確さ／分解能を定義する。
【０１４２】
行０４の「ｄｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ」は、好ましくは、望ましい正確さ及び又は分解能を示す対数値である。
【０１４３】
図示したプロトファイルの行１１〜１７は、ストロークオブジェクト２１０を表している。例えば行１２は、ストロークオブジェクト２１０が、繰り返される複数の「ｓｉｎｔ３２」型（可変バイトサイズのパケット）のポイントオブジェクトを含むことを示している。
【０１４４】
いくつかの実施の形態では、２つ目以降のポイントオブジェクトのパラメータは、最初のポイントオブジェクト又は直前のポイントオブジェクトの対応するパラメータ値に対するオフセット（デルタ）値によって定義される。オフセット（関連）値の使用は、絶対値と比べて、ストロークオブジェクト２１０を形成する２つ目以降のポイントオブジェクトを定義するために必要となるデータの量の削減に資することができる。
【０１４５】
例えば、行１２のポイントの座標（ｘ，ｙ）は、ｄｅｃｉｍａｌＰｒｅｃｉｓｉｏｎを利用する以下の処理に基づいて決定される。
【数２】
2020057442.tif 000004
【０１４６】
処理１。ｘｆｌｏａｔは、コンピュータ装置に記憶されるｆｌｏａｔである。ポイントオブジェクト２１２の座標は、ｆｌｏａｔ型やｄｏｕｂｌｅ型のような相対的に多くのビットを有する浮動小数点型の値としてメモリ７７０に記憶される。ｘｆｌｏａｔは、１０のｄｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ乗が掛けられる。その結果として得られる値のデータ型としては、ｘｆｌｏａｔはｉｎｔ型に変換され（キャストされ）、それによってｘｉｎｔが生成される。
【０１４７】
処理２。ｘｉｎｔのオフセットが導出される。導出されたオフセットは、「ｓｉｎｔ３２」型のデータとして符号化される。
【０１４８】
破線の矩形で囲んだ行１３〜１４は、ストロークオブジェクト２１０の開始パラメータ３０１及び終了パラメータ３０３を定義する。図示するように、これらパラメータ３０１及び３０３は、行１２で定義されるストロークオブジェクト２１０を形成するポイントオブジェクトとは別に定義される。図示した例では、開始及び終了パラメータ３０１及び３０３は、ｆｌｏａｔ型の値として表現され、それぞれ「０」及び「１」のデフォルト値にセットされる。後述するように、操作（スライシング）オペレーションがストロークオブジェクト２１０に適用されるとき、開始及び／又は終了パラメータは新しい値に変更され得る。
【０１４９】
行１５の「ｖａｒｉａｂｌｅＳｔｒｏｋｅＷｉｄｔｈ（可変ストローク幅）」は、ストロークオブジェクト２１０に含まれる複数のポイントオブジェクトの幅の値を記憶する。行１２におけるポイントと同様に「ｓｉｎｔ３２」型を使用し、２つ目以降のポイントオブジェクトの幅はオフセット（デルタ）によって定義される。このパラメータの存在は、ストロークオブジェクト２１０に含まれる複数のポイントオブジェクトのそれぞれが個々にそれ自身の幅の値と関連付けられることを暗示する。別の言葉で言えば、もしこのパラメータが存在していなければ、ストロークオブジェクト２１０は行１６の「ｓｔｒｏｋｅＷｉｄｔｈ（ストローク幅）」プロパティに記憶される固定幅を有する。
【０１５０】
図１１は、ストロークファイルフォーマット（ＳＦＦ）で書かれ、図５のインクデータ処理装置の記録フォーマットデータ処理部１４２からポイント「Ｅ」に出力され得るストロークオブジェクト２１０のサンプルを説明する図である。図示したストロークファイルフォーマットによるストロークオブジェクト２１０は、描画スタイルオブジェクト２３０、フィルターパラメータ（平滑化使用、フィルター強度）、及び、図８の列Ｄに図示した座標ｘ０'〜ｘ１３'におけるポイントオブジェクトｐ０〜ｐ１３を含む。開始パラメータフィールド１１０１は開始パラメータ３０１を含み、終了パラメータフィールド１１０３は終了パラメータ３０３を含む。フィールド「ｘ０」（１１０５）は、ストロークオブジェクト２１０の最初のポイントオブジェクトの絶対ｘ座標の値を含む。フィールド「ｒｅｌ＿ｘ１」（１１０７）は、最初のポイントオブジェクトの絶対ｘ座標の値に対するストロークオブジェクト２１０の２つ目のポイントオブジェクトのｘ座標のオフセット（デルタ）値を含む。
【０１５１】
図１２は、図５のインクデータ処理装置のインクデータ通信部１４４からポイント「Ｆ」に出力され得る、ストロークメッセージフォーマット（ＳＭＦ）内に格納される３つのメッセージと、図５のインクデータ処理装置のるっとワーク通信部１１２からポイント「Ｇ」に出力される１つのパケットとを説明する図である。
【０１５２】
ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ１２０１メッセージは、図９のステップＳ９７２で出力されるもので、そのメッセージがストロークオブジェクト２１０の最初のメッセージであることを示す情報（例えばＢＧＮＯＳ型。Ｆ１０１）と、インクデータ処理装置及びリモートユーザの受信装置の間で共有される共通描画領域を示す描画領域ＩＤ（Ｆ１０２）と、描画領域内の複数のストロークオブジェクト２１０の中からストロークオブジェクト２１０を識別するために使用されるストロークＩＤとを含む。Ｆ１０１、Ｆ１０２、Ｆ１０３は、メッセージヘッダを構成する。
【０１５３】
ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ１２０１メッセージはさらに、描画スタイルオブジェクト２３０（Ｆ１０４）と、適用される平滑化フィルターに関連するフィルターパラメータ（図示せず）と、開始パラメータ及び終了パラメータ（Ｆ１０５＿ＳＰ＿ＥＰ）と、オプションで（もしスペースが許せば）ストロークオブジェクト２１０の部分を形成するポイントオブジェクトの最初の断片化データのいくつか（Ｆ１０５＿ｂｅｇｉｎ）とを含み、最後にＣＲＣエラー訂正値が付加される。例えば、「Ｆ１０５＿ｂｅｇｉｎ」フィールドは、図８のポイントオブジェクトｐ０〜ｐ３を含むことができる。Ｆ１０４、Ｆ１０５＿ＳＰ＿ＥＰ、Ｆ１０５＿ｂｅｇｉｎ、及びＣＲＣフィールドは、メッセージペイロードを構成する。
【０１５４】
Ｆ１０４がＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ１２０１に含まれる理由は、第２の実施の形態と関連して後述される。平滑化フィルターに関連するパラメータは、１つ目のメッセージであるＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ１２０１に含まれており、それにより、ストロークオブジェクト２１０を受信するデバイスは、ストロークオブジェクト２１０の受信を開始した時点で直ちに、ストロークオブジェクト２１０に含まれるポイントオブジェクトに対して平滑化フィルタリング処理を適用すべきか否かを決定することができる。
【０１５５】
ＤＡＴＡ＿ＩＮＫ＿ＭＶＤＯＳ１２０３メッセージは、図９のステップＳ９７６で出力されるもので、メッセージ型フィールド（「ＭＶＤＯＳ」）Ｆ１０１、描画領域ＩＤフィールドＦ１０２、及びストロークＩＤフィールドＦ１０３を含むメッセージヘッダを含む。ＤＡＴＡ＿ＩＮＫ＿ＭＶＤＯＳ１２０３メッセージはまた、ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ１２０１内に含まれていたポイントオブジェクトに続くポイントオブジェクトを含む２つ目の断片化データ（Ｆ１０５＿ｍｏｖｅｄ）を含む。例えば、「Ｆ１０５＿ｍｏｖｅｄ」フィールドは、図８のポイントオブジェクトｐ４〜ｐ８を含むことができる。１つ目のデータメッセージとは違い、ＤＡＴＡ＿ＩＮＫ＿ＭＶＤＯＳ１２０３メッセージは描画スタイルオブジェクト２３０（Ｆ１０４）を含まず、Ｆ１０１において、続く（１つ目でない）タイプのデータメッセージであると識別される。ＤＡＴＡ＿ＩＮＫ＿ＭＶＤＯＳ１２０３メッセージは、１つ目のデータメッセージと同じ描画領域ＩＤ（Ｆ１０２）及び同じストロークＩＤ（Ｆ１０３）を含む。
【０１５６】
ＤＡＴＡ＿ＩＮＫ＿ＥＮＤＯＳ１２０５メッセージは、図９のステップＳ９８０で出力されるもので、ストロークオブジェクト２１０のための最後のデータメッセージであり、かつ、例えば図８のポイントオブジェクトｐ９〜ｐ１３であり得るストロークオブジェクト２１０の最後の断片化データ（Ｆ１０５＿ｅｎｄ）を含む。ＤＡＴＡ＿ＩＮＫ＿ＥＮＤＯＳ１２０５メッセージは、Ｆ１０１において、最後のデータメッセージ（ＥＮＤＯＳ）であると識別され、１つ目のデータメッセージと同じ描画領域ＩＤ（Ｆ１０２）及び同じストロークＩＤ（Ｆ１０３）を含む。最後のデータメッセージは、Ｆ１０９に、著者情報のような非描画関連情報を含むメタデータオブジェクト２５０を含む。
【０１５７】
上記した３タイプのデータメッセージは、図５のインクデータ処理装置のインクデータ通信部１４４からポイント「Ｆ」に出力される。図１２の最後の列のパケット「Ｇ」は、これら３タイプのデータメッセージのすべてをパケットペイロードとして含むパケットであり、図５のインクデータ処理装置のネットワーク通信部１１２（Ｔｘ，Ｒｘ）からポイント「Ｇ」に出力される。
【０１５８】
図１３Ａは、図５のインクデータ処理装置のグラフィック処理部３００に対してポイント「Ｄ」を介して入力される、キャットマル−ロム曲線補間動作を受けたストロークオブジェクトを説明する図である（図１３のストロークオブジェクト２１０はまた、上述したインクデータ整形部１４０に対してもポイント「Ｄ」を介して入力され得る）。図１３Ｂは、図１３Ａのストロークオブジェクト２１０が、図５のインクデータ処理装置のディスプレイ１１３上に描画される（レンダリングされる）ために、どのようにグラフィック処理部３００からポイント「Ｈ」に出力されるかを説明する図である。
【０１５９】
図１３Ａでは、ストロークオブジェクト２１０は、上記図８に図示したｘ０'〜ｘ１３'に対応するポイントオブジェクトｐ０〜ｐ１３を含む。ストロークオブジェクト２１０は、キャットマル−ロム曲線補間動作を課され、したがってポイントオブジェクトｐ０〜ｐ１３のすべてが、共同で図１３に示した曲線を形成する補間曲線セグメントを生成するための制御点として使用される。例えば、ポイントｐ０〜ｐ３は、ｐ１とｐ２の間の曲線セグメントを生成するための制御点として使用され、ポイントｐ１〜ｐ４は、ｐ２とｐ３の間の曲線セグメントを生成するための制御点として使用される、などである。図示するように、結果として得られる曲線は、制御点ｐ０〜ｐ１３のすべてを通過する。
【０１６０】
キャットマル−ロム曲線の１つの特徴は、各曲線セグメントが４つの制御点によって完全に定義されるが故に、制御点を動かすことの効果が局地的であるということである。例えば、図１３Ａは、ｐ６とｐ７の間の曲線セグメント１３０１が４つの制御点ｐ５，ｐ６，ｐ７，ｐ８で定義されることを図示している。一の制御点を動かすことは、最大で４つの曲線セグメントに強い影響を与え得るが、曲線を形成している残りの曲線セグメントには影響しない。例えば、ｐ８を動かすことは、最大で、ｐ６〜ｐ７、ｐ７〜ｐ８，ｐ８〜ｐ９，ｐ９〜ｐ１０という４つの曲線セグメントに強い影響を与える可能性がある。キャットマル−ロム曲線の「局地的制御」という特徴は、結果として得られる２つの新たなストロークオブジェクト２１０が元のストロークオブジェクト２１０の（形の）情報を最小限のデータ量で必要に応じてできるだけ多く維持することが望まれるストロークオブジェクトのスライス操作をサポートするうえで適している。別の言葉で言えば、「局地的制御」という特徴は、（一端から他端まで曲線の形状を完全に維持するために）結果として得られる各スライスが最小数の制御点で元の形を維持することを可能にする。例えば、図１３Ａのストロークオブジェクト２１０がｐ６とｐ７の間の曲線セグメントでスライスされるとき、１つ目のスライスは制御点ｐ０〜ｐ８のみを維持する必要があり、２つ目のスライスは制御点ｐ５〜ｐ１３のみを維持する必要がある。ポリベジエ曲線もまた「局地的制御」という特徴を有し、したがってスライス操作をサポートするうえで適している。しかしながら、ポリベジエ曲線は、キャットマル−ロム曲線と違い、曲線に沿っていない制御点を必要とする（すなわち、曲線が制御点のすべてを通過しない）。それら曲線の外にある制御点を計算し、記憶しなければならないことは、記憶装置のスペースを要求する余分な計算であり、ストロークオブジェクト２１０のポイントオブジェクトによってすべての制御点が用意されるキャットマル−ロム曲線では要求されないものである。この違いは、計算上の要求が少ないキャットマル−ロム曲線を、インクデータの生成、操作、描画、及び通信のリアルタイムアプリケーションをサポートするうえでより適したものにしている。
【０１６１】
図１３Ｂは、図５のポイント「Ｈ」においてグラフィック処理部３００から出力されるときの図１３Ａのストロークオブジェクト２１０の実際のレンダリング（描画）例を図示している。図１３Ｂは、開始曲線セグメント１３０５の開始パラメータＳＰ（「０．０」）によって示される開始位置から終了曲線セグメント１３０７の終了パラメータＥＰ（「１．０」）によって示される終了位置までに及ぶ実際の描画の範囲１３０９を図示している。ここで、描画対象となる１つ目の曲線セグメント１３０５はｐ１とｐ２の間であり、ｐ０とｐ１の間ではないことに注意が必要である。ｐ０はｐ１とｐ２の間の曲線セグメントを定義するための制御点としてのみ使用されるからである。同様に、描画対象となる最後の曲線セグメント１３０７はｐ１１とｐ１２の間であり、ｐ１２とｐ１３の間ではない。ｐ１３はｐ１１とｐ１２の間の曲線セグメントを定義するために使用される制御点に過ぎないからである。
【０１６２】
＜インクデータ操作（スライシング）＞
以下、本発明のシステム及び方法によって可能とされる様々な実施の形態によるスライス操作について、図１４〜図１９を参照して記述する。
【０１６３】
図１４は、既存のストロークオブジェクト２１０に適用されるスライス操作のフローチャートである。スライス操作は、ストロークオブジェクト操作部１２２と操作オブジェクト操作部１２８によって共同で実行される。図示した例は、新たに描画されたストロークｊ４０３が既存のストロークｉ４０１をスライスするという、図４Ｂに示したスライス操作を前提としている。
【０１６４】
まず、インクデータ生成部１２０（ストロークオブジェクト操作部１２２）が新たなペンイベントデータ（「入力１」）を受信する。ステップＳ１４０１では、それぞれステップＳ１４０３及びステップＳ１４０５から始まる２つの処理スレッドが並行して実行される。
【０１６５】
１つ目の処理スレッドでは、ステップＳ１４０３においてインクデータ生成部１２０が、上記図９に記述した処理によりストロークオブジェクト（ストロークｊ）を生成する。２つ目の処理スレッドでは並行して、ステップＳ１４０５においてインクデータ生成部１２０（操作オブジェクト操作部１２８）が操作情報（「入力３」）が、新たなストロークオブジェクト２１０を生成するために１つ目の処理スレッドによって使用されるペンイベントデータ（「入力１」）に関連付けられているかを判定する。例えば、操作情報（「入力３」）は、関連するストロークオブジェクト２１０がスライス操作を実行する予定であることを示し得る。
【０１６６】
もしそのような「入力３」がないのであれば（ステップＳ１４０５のＮｏ）、処理は終了に進み、新たに生成されたストロークオブジェクト（ストロークｊ）は通常のストロークオブジェクト２１０として取り扱われる。もしストロークオブジェクト２１０に関連する「入力３」があるのであれば（ステップＳ１４０５のＹｅｓ）、ストロークｊは、１以上の既存のストロークオブジェクト２１０に対してスライス操作を実行するための操作オブジェクト２７０として取り扱われる。
【０１６７】
＜スライス操作＞
ステップＳ１４０７から始まりステップＳ１４２３に至るループは、既存のストロークオブジェクトのそれぞれ（ｓｔｒｏｋｅ＿１〜ストロークｊ−１）に対して繰り返される。この例では、新たに生成されたストロークｊによって表現されるスライス操作は、既存のストロークオブジェクトのそれぞれに対して適用される。操作オブジェクト２７０に対し、位置という見地から隔離されたストロークをスキップするために適用され得る様々な技術がある。例えば、ストロークオブジェクト操作部１２２は、領域内のストロークセグメントを含むインデックスを維持することができる。そのようなインデックスは、操作オブジェクト操作部１２８により、不必要な交差計算をスキップするために使用され得る。
【０１６８】
ステップＳ１４０７は、ループをセットアップする。
【０１６９】
ステップＳ１４０９において操作オブジェクト操作部１２８は、図１５Ａに示すように、新しいストロークｊ４０３が既存のストロークｉ４０１（ｉ＜ｊ）と交差しているかを判定する。図１５は、既存のストロークｉの２つの制御点ｐ６とｐ７の間にある交点Ｐ＿ｉｎｔｅｒｓｅｃｔ＿Ｍｉｄで既存のストロークｉと交差する新たなストロークｊを図示している。図示した例では、新しいストロークｊが幅を有していることから、交点は、新しいストロークｊの中心線（Ｐ２，Ｐ３，Ｐ４を通過する実線で示す）と既存のストロークｉとの交差点として計算される。
【０１７０】
図１４に戻り、新しいストロークｊが既存のストロークｉと交差していないとステップＳ１４０９で判定されるということは、スライス操作が既存のストロークｉに適用されないということを意味する。プロセスはｉを１インクリメントし、新しいストロークｊが次の既存のストロークｉ＋１と交差しているかを判定する。
【０１７１】
ステップＳ１４０９において新しいストロークｊが既存のストロークｉと交差していると判定された場合、ステップＳ１４１１のスライス操作が既存のストロークｉに適用される。
【０１７２】
ステップＳ１４１３では、図１５Ｂに示すように、操作オブジェクト操作部１２８が、計算された交点Ｐ＿ｉｎｔｅｒｓｅｃｔ＿Ｍｉｄ（５５，１００）と新しいストロークｊの「幅」（３．５８）とに基づき、新しいストロークｊのエッジ（破線）と既存のストロークｉとの間の２つの交差点Ｐ＿ｉｎｔｅｒｓｅｃｔ＿Ｌ及びＰ＿ｉｎｔｅｒｓｅｃｔ＿Ｒをそれぞれ導出する。図１５Ｂでは、既存のストロークｉのｐ６は（４７，１００）、ｐ７は（６３，１００）にあり、一方、新しいストロークｊのＰ２は（６０，１１０）、Ｐ３は（５０，９０）にある。上述したように、交点Ｐ＿ｉｎｔｅｒｓｅｃｔ＿Ｍｉｄは線ｐ６＿ｐ７と線Ｐ２＿Ｐ３の間の交差点として計算される。ｐ６＿ｐ７方向に沿う新しいストロークｊの幅は「幅」／ｓｉｎθ≒４．０（「導出幅」）として導出される。ここで、ｓｉｎθ＝（１１０−９０）÷ｓｑｒｔ（（６０−５０）＾２＋（１１０−９０）＾２）である。
【０１７３】
導出された４．０という幅はその後、導出された幅の半分を交点Ｐ＿ｉｎｔｅｒｓｅｃｔ＿Ｍｉｄ（５５，１００）に足し、或いは、得られた幅の半分を交点Ｐ＿ｉｎｔｅｒｓｅｃｔ＿Ｍｉｄ（５５，１００）から引くことによって２つの交差点Ｐ＿ｉｎｔｅｒｓｅｃｔ＿Ｌ及びＰ＿ｉｎｔｅｒｓｅｃｔ＿Ｒを計算するために使用される。図示した例では、Ｐ＿ｉｎｔｅｒｓｅｃｔ＿Ｌは（５３，１００）と算出され、Ｐ＿ｉｎｔｅｒｓｅｃｔ＿Ｒは（５７，１００）と算出される。Ｓ１４１３で追加の計算を行うこともあり得る。例えば、もしストロークｉとストロークｊが交差領域で平坦でないのであれば、追加の計算は、Ｐ＿ｉｎｔｅｒｓｅｃｔ＿Ｌ及びＰ＿ｉｎｔｅｒｓｅｃｔ＿Ｒの計算において実際の曲率を考慮に入れるべきである。
【０１７４】
図１４では、ステップＳ１４１５において操作オブジェクト操作部１２８が、図１６Ａ及び図１７Ａに示すように、スライス操作の結果として得られるストロークオブジェクトｉの２つのインスタンスをそれぞれ生成する。これら２つのインスタンスは、「スライス」型である。図１６Ａに示す１つ目のスライスは、ｐ２〜ｐ７の間に曲線セグメントを定義する制御点ｐ０〜ｐ８を含み、図１７Ａに示す２つ目のスライスは、ｐ６〜ｐ１２の間に曲線セグメントを定義する制御点ｐ５〜ｐ１３を含む。図１６Ａの１つ目のスライスは、ストロークｉがスライスされたｐ６とｐ７の間に、終了曲線セグメントとしてのホールセグメント１８０１を含む。一方、図１７Ａの２つ目のスライスは、開始曲線セグメントとしてのホールセグメント１８０１を含む。１つ目のスライスは、開始曲線セグメントｐ１＿ｐ２のためのデフォルト開始パラメータ「０．０」を維持するが、今や、新たに生成された終了曲線セグメントｐ６＿ｐ７のために新たな終了パラメータを必要としている。同様に、２つ目のスライスは、終了曲線セグメントｐ１１＿ｐ１２のためのデフォルト終了パラメータ「１．０」を維持するが、今や、新たに生成された開始曲線セグメントｐ６＿ｐ７のために新たな開始パラメータを必要としている。
【０１７５】
ステップＳ１４１７において操作オブジェクト操作部１２８は、図１８Ａに示すように、図１６Ａの１つ目のスライスのための新たな終了パラメータ（ｎｅｗ＿ＥＰ１）値３０３を導出する。図１８Ａにおいて、１つ目のスライスの新たな終了パラメータ１８０３（「ｎｅｗ＿ＥＰ１」）は、１つ目のスライスの終了曲線セグメントｐ６＿ｐ７内に位置するＰ＿ｉｎｔｅｒｓｅｃｔ＿Ｌ（５３，１００）の位置を示す値である。新たな終了パラメータ１８０３は、絶対値（例えば（５３，１００））であってもよいし、相対値（例えば、ｐ６からＸ方向に＋６）であってもよいし、ｐ６とｐ７の間の距離に対するｐ６とＰ＿ｉｎｔｅｒｓｅｃｔ＿Ｌの間の距離の割合（例えば、６／１６＝０．３７５）であってもよい。割合は、例えば図５のグラフィック処理部３００のような様々なセクションにより実行される補間計算において、さらなる処理なしで使用され得ることから、有用である。
【０１７６】
図１６Ｂは、１つ目のスライスを定義するパラメータのデータ構造を説明する。このデータ構造は、「０．０」（デフォルト値）である開始パラメータ（ｆｌｏａｔ型）と、上記ステップＳ１４１７で導出された「０．３７５」（割合）である終了パラメータ（ｆｌｏａｔ型）とを含む。図１６Ｂでは、行１１が、そのデータ構造が、ひとたびファイナライズされる（コミットされる）とストロークオブジェクト２１０となる「スライス」オブジェクトを定義することを示す。行１２の「ｓｌｉｃｅ＿ｆｒｏｍ  Ｉｎｄｅｘ」は、スライスの開始ポイントオブジェクトの番号を示すインデックス値（例えば整数）である。図１６の例では、１つ目のスライスオブジェクトがポイントｐ０から始まることから、「ｓｌｉｃｅ＿ｆｒｏｍ  Ｉｎｄｅｘ」は「０」である。行１３の「ｓｌｉｃｅ＿ｔｏ  Ｉｎｄｅｘ」は、スライスの終了ポイントオブジェクトの番号を示すインデックス値（例えば整数）であり、１つ目のスライスオブジェクトがポイントｐ８で終わることから、図１６では「８」である（最後のポイントｐ８は、終了曲線セグメントｐ６＿ｐ７のための制御点である）。
【０１７７】
図１４に戻り、ステップＳ１４１９では、操作オブジェクト操作部１２８が図１８Ａに示すように、図１７Ａの２つ目のスライスのための新たな開始パラメータ（ｎｅｗ＿ＳＰ２）を導出する。図１８Ａでは、２つ目のスライスの新たな開始パラメータ１８０５（「ｎｅｗ＿ＳＰ２」）は、２つ目のスライスの開始曲線セグメントｐ６＿ｐ７内に位置するＰ＿ｉｎｔｅｒｓｅｃｔ＿Ｒ（５７，１００）の位置を示す値である。新たな開始パラメータは、絶対値（例えば（５７，１００））であってもよいし、相対値（例えば、ｐ６からＸ方向に＋１０）であってもよいし、ｐ６とｐ７の間の距離に対するｐ６とＰ＿ｉｎｔｅｒｓｅｃｔ＿Ｒの間の距離の割合（例えば、１０／１６＝０．６２５）であってもよい。
【０１７８】
図１７Ｂは、２つ目のスライスを定義するパラメータのデータ構造を説明する。このデータ構造は、「１．０」（デフォルト値）である終了パラメータ（ｆｌｏａｔ型）と、上記ステップＳ１４１９で導出された「０．６２５」（割合）である開始パラメータ（ｆｌｏａｔ型）とを含む。図１７Ｂでは、行２１が、そのデータ構造が、ひとたびファイナライズされるとストロークオブジェクト２１０となる「スライス」オブジェクトを定義することを示す。行２２の「ｓｌｉｃｅ＿ｆｒｏｍ  Ｉｎｄｅｘ」は、２つ目のスライスオブジェクトがポイントｐ５から始まることから「５」である（最初のポイントｐ５は、開始曲線セグメントｐ６＿ｐ７のための制御点である）。行２３の「ｓｌｉｃｅ＿ｔｏ  Ｉｎｄｅｘ」は、２つ目のスライスオブジェクトがポイントｐ１３で終わることから「１３」である。
【０１７９】
図１４に戻り、ステップＳ１４２１では、操作オブジェクト操作部１２８が、図１６Ｂの１つ目のスライス（第１のスライスオブジェクト２７４）と、図１７Ｂの２つ目のスライス（第２のスライスオブジェクト２７４）とを、それぞれ第１の新たに生成されたストロークオブジェクト２１０及び第２の新たに生成されたストロークオブジェクト２１０にレンダリングするためにファイナライズ（又はコミット）し、それらを記憶装置７７０に格納する。ファイナライズを行うステップＳ１４２１は、図６に示すように、操作オブジェクト操作部１２８とストロークオブジェクト操作部１２２の間で発生する「Ｍ１（ローカル）」動作である。ストロークオブジェクト操作部１２２は、この時点で、第１及び第２の「スライス」オブジェクト及び／又は元のストロークオブジェクトｉを破棄することとしてもよい。
【０１８０】
図１６Ｃは、ファイナライズされた第１のストロークオブジェクト２１０のレンダリングされた（ディスプレイされた）パスを説明し、図１７Ｃは、ファイナライズされた第２のストロークオブジェクト２１０のレンダリングされた（ディスプレイされた）パスを説明している。図１６Ｃに示すように、ｐ１とｐ６の間の曲線セグメントは完全にディスプレイされるが、ｐ６とｐ７の間の終了曲線セグメントについては、終了パラメータ３０３（０．３７５）によって示される終了点までの部分のみがディスプレイされる。ｐ６から終了パラメータ３０３によって示される終了点までの部分は、元のストロークオブジェクト２１０の形状を正確に辿っている。なぜなら、新たに生成された第１のストロークオブジェクト２１０は、元のストロークオブジェクト２１０に含まれていたものと同じ、ｐ６とｐ７の間の終了曲線セグメントを定義する制御点ｐ５〜ｐ８を維持しているからである。同様に、図１７Ｃに示すように、ｐ７とｐ１２の間の曲線セグメントは完全にディスプレイされるが、ｐ６とｐ７の間の開始曲線セグメントについては、開始パラメータ３０１（０．６７５）によって示される開始点で始まる部分のみがディスプレイされる。開始パラメータ３０１によって示される開始点からｐ７までの部分は、元のストロークオブジェクト２１０の形状を正確に辿っている。なぜなら、新たに生成された第２のストロークオブジェクト２１０は、元のストロークオブジェクト２１０に含まれていたものと同じ、ｐ６とｐ７の間の開始曲線セグメントを定義する制御点ｐ５〜ｐ８を維持しているからである。
【０１８１】
図１４では、ステップＳ１４２２において操作オブジェクト操作部１２８が、新たに生成された第１及び第２のストロークオブジェクト２１０をリモートユーザの受信装置に向け、以下で図２０及び図２１を参照してより完全に記述するように、送信することができる。送信ステップＳ１４２２は、図６に示した「Ｍ２（リモート）」動作であり、操作オブジェクト操作部１２８と、インクデータ整形部１４０を介して、インクデータ処理部１００の外部のネットワークにより結合されたリモートユーザの受信装置との間で発生する。代替として、ステップＳ１４２２において、操作オブジェクト操作部１２８が新たに生成したストロークオブジェクト２１０の代わりに２つのスライスオブジェクト２７４を送信することとしてもよい。このケースでは、ステップＳ１４２１は受信装置において実行される。これについては、以下で図２０を参照しながら完全に記述する。
【０１８２】
ステップＳ１４２３において、複数の既存のストロークオブジェクトのそれぞれに対して繰り返されるループ処理が完了する。
【０１８３】
ステップＳ１４２７では、操作オブジェクト操作部１２８が、上記Ｓ１４１１のスライス操作ステップで生成及び使用されたすべてのスライスオブジェクト２７４を（もしまだであれば）流し去る（破棄する）。
【０１８４】
上述したスライス操作は、要するに、スライスされる元のストロークオブジェクト２１０を、スライス操作の結果として得られる２つの新たなストロークオブジェクト２１０に置き換えるというものである。したがって、２つの新たなストロークオブジェクト２１０が生成された後には、元のストロークオブジェクト２１０は破棄されてよい。
【０１８５】
図１４に記述された実施の形態では、操作情報（「入力３」）と関連付けられた新たなストロークオブジェクトｊが、１以上の既存のストロークオブジェクト２１０に対してスライス操作を実行するよう構成される操作オブジェクト２７０として取り扱われる。別の言葉で言えば、ストロークオブジェクトｊが操作オブジェクト２７０として使用される。
【０１８６】
別の実施の形態では、図１４のＳ１４１１のスライス操作ステップの間に生成されるスライスオブオブジェクト２７４が、既存のストロークオブジェクト２１０を共有する１以上のコンピュータ（１０−１−１，１０−１−２，１０−３，・・・）内に存在する１以上の既存のストロークオブジェクト２１０に対してスライス操作を実行するための操作オブジェクト２７０として使用され得る。この場合、スライスオブジェクト２７４は破棄されない。操作オブジェクト２７０としてのスライスオブジェクト２７４の使用については、以下で、図２０及び図２１Ａを参照しつつより完全に記述されるであろう。
【０１８７】
さらに別の実施の形態では、図１６Ａ、図１７Ａ、図１８Ａに示したホールセグメント１８０１を定義し、１以上の既存のストロークオブジェクト２１０に対してスライス操作を実行する操作オブジェクト２７０として使用されるホールセグメントオブジェクトが生成され得る。図１８Ｂは、ホールセグメントを定義するパラメータのデータ構造を説明している。行０１は、このデータ構造が、スライスオブジェクト２７４やストロークオブジェクト２１０とは異なる「ホールセグメント」オブジェクトを定義していることを示す。行０２の「ｈｏｌｅ＿ｆｒｏｍ  Ｉｎｄｅｘ」は、ホールセグメントの開始ポイントオブジェクトの番号を示すインデックス値（例えば整数）である。この例では、ホールセグメントがｐ６とｐ７の間にあることから、「６」となっている。行０３の「ｈｏｌｅ＿ｅｎｄＰａｒａｍｅｔｅｒ」は、図１４のステップＳ１４１７で導出された「０．３７５」（割合。ｆｌｏａｔ型）であり、ホールセグメント１８０１によって生成された１つ目のスライスの終了曲線セグメントの終了点を示している。行０４の「ｈｏｌｅ＿ｔｏ  Ｉｎｄｅｘ」は、ホールセグメントの終了ポイントオブジェクトの番号を示すインデックス値（例えば整数）である。この例では、ホールセグメントがｐ６とｐ７の間にあることから、「７」となっている。行０５の「ｈｏｌｅ＿ｓｔａｒｔＰａｒａｍｅｔｅｒ」は、図１４のステップＳ１４１９で導出された「０．６２５」（割合。ｆｌｏａｔ型）であり、ホールセグメント１８０１によって生成された２つ目のスライスの開始曲線セグメントの開始点を示している。操作オブジェクト２７０としてのホールセグメントオブジェクトの使用については、以下で、図２０及び図２１Ｂを参照しつつより完全に記述されるであろう。
【０１８８】
上述した実施の形態では、Ｐ＿Ｉｎｔｅｒｓｅｃｔ＿Ｌが１つ目のスライスの新しい終了点として使用され、Ｐ＿Ｉｎｔｅｒｓｅｃｔ＿Ｒが２つ目のスライスの新しい開始点として使用されているが、他の実施の形態では、同一のポイントが１つ目のスライスの新しい終了点及び２つ目のスライスの新しい開始点の両方として使用されてもよい。例えば、計算の簡単のため、Ｐ＿Ｉｎｔｅｒｓｅｃｔ＿Ｍｉｄが１つ目のスライスの新しい終了点及び２つ目のスライスの新しい終了点の両方として使用されてもよい。
【０１８９】
上述した本発明の実施の形態によれば、スライスされた曲線セグメント（例えば、「ホールセグメント」１８０１）のディスプレイは、１つ目のスライスのディスプレイが終了する終了点を定義する新たな終了パラメータ３０３と、２つ目のスライスのディスプレイが開始する開始点を定義する新たな開始パラメータ３０１とによって制御される。１つ目及び２つ目のスライスはともに、ホールセグメントの構造を完全に定義するデータを維持しており、１つ目のスライス及び２つ目のスライスの部分として表示するホールセグメントの部分を制限しているに過ぎない。したがって、レンダリングされる（ディスプレイされる）これらのスライスは、正確に、元のストロークオブジェクト２１０の形状を辿る。さらに、これらのスライスが元のストロークオブジェクト２１０内にあるものとしてのホールセグメントを完全に定義する同一のデータ（例えば制御点）を維持していることから、制御点の位置を再計算したり、新たな制御点を計算する必要がない。本発明のシステム及び方法は、好ましくは、キャットマル−ロム曲線やポリベジエ曲線のような、上述したように「局所的制御」という特徴を有する曲線補間アルゴリズムとともに用いられる。その後、スライス操作によって得られるスライスは、スライス操作から得られるホールセグメントを定義するための最小限のデータ量のデータ（最小数の制御点）を維持する必要がある。
【０１９０】
図１９は、ストロークファイルフォーマット（ＳＦＦ）で書かれ、図１６Ｃ及び図１７Ｃに表示した２つの新規生成ストロークオブジェクト２１０を含むファイルのサンプルを説明している。図１９は、元のストロークオブジェクトファイルのサンプルを説明する図１１と比較され得る。
【０１９１】
図１９では、破線の箱１９１０が図１６Ｃに示した第１の新規生成ストロークオブジェクト２１０を含むファイルを示している。第１のストロークオブジェクトファイルは、図１６Ｃのポイントオブジェクトｐ０〜ｐ８に対応するポイントｘ０〜ｘ８を含む。開始パラメータフィールド１９１２はデフォルト値の「０．０」を含み、終了パラメータフィールド１９１２は、図１４のステップＳ１４１７で導出された「０．３７５」という値を含む。破線の箱１９２０は、図１７Ｃに示した第２の新規生成ストロークオブジェクト２１０を含むファイルを示している。第２のストロークオブジェクトファイルは、図１６Ｃのポイントオブジェクトｐ５〜ｐ１３に対応するポイントｘ５〜ｘ１３を含む。開始パラメータフィールド１９２２は、図１４のステップＳ１４１９で導出された「０．６７５」という値を含み、終了パラメータフィールド１９１２はデフォルト値の「１．０」を含む。第１のストロークオブジェクトファイル１９１０は、（図１１の）元のストロークオブジェクトファイルの上書き又は変更されたインスタンスであってよく、独立したコピーを形成するために元のストロークオブジェクトファイルから複製されたものであってもよい。ここで使用している「新規生成」ファイルは、これらのファイルタイプのどちらをも意味していてよい。第２のストロークオブジェクトファイル１９２０もまた、図１９のフィールド１９２１に示すように、元のストロークオブジェクトファイルの複製されたコピーであってよい。
【０１９２】
図２０は、図１４のステップＳ１４２２におけるインクデータ伝送処理の詳細なフローチャートである。ステップＳ２０１２において、インクデータ処理部１００は、コンテキスト情報（「入力２」）から（ｉ）インクデータ処理部１００によって生成されるインクデータ２００（一組のストロークオブジェクト２１０）を共有するリモートユーザが存在するか否か、（ｉｉ）リモートユーザに対してインクデータ２００を送信するために使用されるメッセージタイプ、を示す情報を取得する。
【０１９３】
ステップＳ２０１４では、インクデータ処理部１００のインクデータ整形部１４０が、上記情報（ｉ）に基づき、ローカルデバイスのインクデータ２００が他のリモートのコンピュータに共有されているかを判定する。インクデータ２００を使用しているリモートユーザ又はコンピュータが現在のところ存在しないのであれば、ステップＳ２０２２においてオプションで、インクデータ整形部１４０が２つの新規生成ストロークオブジェクト２１０を、（図１９のＳＦＦフォーマットファイルに対応する）図２１Ｄに示すタイプＤのメッセージ形式でバッファリングすることとしてもよい。リモートユーザが後にインクデータ処理部１００のインクデータ生成セッションに参加する場合に、ファイル整形部１４０は、リモートユーザにタイプＤのメッセージを送ることができる。この時点で、スライシング操作オブジェクトｊを送信する必要はない。なぜなら、リモートユーザは、リアルタイムでスライス操作を見ておらず、スライス操作の結果、すなわち２つの新たに生成されたストロークオブジェクト２１０を受信することのみが必要であるからである。
【０１９４】
もしステップＳ２０１４でリモートユーザが存在すると判定された場合、ステップＳ２０１６においてインクデータ処理部１００が、上記情報（ｉｉ）に基づき、リモートユーザに対してインクデータ２００を送信するために使用するべきメッセージのタイプを判定する。適したメッセージのタイプは、リモートユーザの受信装置（図２２参照）によってサポートされる操作オペレーションのタイプ、特定のアプリケーションにおける時間遅延の許容量、利用可能な送信リソースの量などに応じて選択され得る。例えば、情報（ｉｉ）が、リモートユーザの受信装置がいかなる操作（例えばスライス）オペレーションもサポートしていないことを示している場合には、ステップＳ２０２２に進み、インクデータ整形部１４０が、スライス操作の結果、すなわちタイプＤのメッセージで書かれた新規生成ストロークオブジェクトのみをバッファリングして、リモートユーザに向けて送信する。
【０１９５】
ステップＳ２０１６において、もし上記情報（ｉｉ）により、リモートユーザの受信装置が、受信装置上の１以上のストロークオブジェクト２１０のスライスするためにストロークオブジェクト２１０を操作オブジェクト２７０として実行することをサポートしていることが示されていれば、処理はステップＳ２０２０に進む。ステップＳ２０２０では、インクデータ整形部１４０は、図２１Ｃに示すメッセージタイプＣで書かれた操作（スライス）ストロークオブジェクトｊを送信するためにインクデータ通信部１４４を使用することができる。
【０１９６】
図２１Ｃに示すタイプＣのメッセージは、型フィールドＦ１０１、描画領域ＩＤフィールドＦ１０２、及び、ストロークオブジェクトｊを識別するストロークＩＤフィールドＦ１０３を含むヘッダを有する。型フィールドＦ１０１は、このメッセージが、スライス操作を実施（実行）する「スライサー」タイプであることを示している。この例では、Ｆ１０１における「スライサー」タイプの表示は、関連するストロークオブジェクトｊが操作オブジェクト２７０であることを示す操作情報（「入力３」）を構成する。タイプＣのメッセージのペイロード部分は、ポイントオブジェクトｐ１〜ｐｎを含む操作（スライス）ストロークオブジェクトｊを含む。操作オブジェクト２７０としてのストロークオブジェクトｊを送信するためにタイプＣのメッセージを使うことの利点の１つは、送信側と受信側の両方において、リアルタイムで同時に同じスライス操作を発生させられるという点である。送信側は、ストロークオブジェクトｊの生成と実質的に同時に、受信側に対して操作情報（「入力３」）を有するストロークオブジェクトｊを送信することができ、したがって、両サイドで同時に、ストロークオブジェクトｊによる同じ操作を実行できるからである。
【０１９７】
図２０のステップＳ２０１６に戻り、もし上記情報（ｉｉ）により、リモートユーザの受信装置が、受信装置上の１以上のストロークオブジェクト２１０をスライスするためにスライスオブジェクト２７４又はホールセグメントオブジェクトを操作オブジェクト２７０として実行することをサポートしていることが示されていれば、処理はステップＳ２０１８に進む。ステップＳ２０１８では、インクデータ整形部１４０は、図２１Ａに示すメッセージタイプＡで書かれた操作オブジェクト２７０としてのスライスオブジェクト２７４を送信するためにインクデータ通信部１４４を使用することができる。又は、インクデータ整形部１４０は、ステップＳ２０１８において、図２１Ｂに示すメッセージタイプＢで書かれた操作オブジェクト２７０としてのホールセグメントオブジェクト（図１８Ｂ）を送信するためにインクデータ通信部１４４を使用することができる。
【０１９８】
図２１Ａに示すタイプＡのメッセージは、型フィールドＦ１０１、描画領域ＩＤフィールドＦ１０２、及び、ストロークオブジェクトｊを識別するストロークＩＤフィールドＦ１０３を含むヘッダを有する。タイプＡのメッセージのペイロード部分は、ストロークオブジェクトｊにより１以上の既存のストロークオブジェクト２１０をスライスした結果として得られる１以上のスライスオブジェクト２１０のペアを含む。図２１Ａは、２つのそのようなペアを図示している。１つは、それぞれフィールドＦ１１１＿３１及びＦ１１１＿３２に示す第１のスライス及び第２のスライスであり、これらはストロークオブジェクトｊにより既存のストローク３をスライスした結果として得られるものである。もう１つは、それぞれフィールドＦ１１１＿ｉ１及びＦ１１１＿ｉ２に示す第１のスライス及び第２のスライスであり、これらはストロークオブジェクトｊにより既存のストロークｉをスライスした結果として得られるものである（他のペアの記述は省略している）。タイプＡのメッセージの型フィールドＦ１０１は、このメッセージが、スライス操作を実施（実行）する「スライサー」タイプであることを示している。この例では、Ｆ１０１における「スライサー」タイプの表示は、関連するストロークオブジェクト２７４のペアが操作オブジェクト２７０を形成することを示す操作情報（「入力３」）を構成する。タイプＡのメッセージを受信した受信装置は、スライスオブジェクト２７４の各ペアを取り出し、ディスプレイ上に描画され得る２つの新たなストロークオブジェクト２１０を生成するために、スライス対象である元の（既存の）ストロークオフジェクト２１０を参照して、スライスオフジェクト２７４をファイナライズする。操作オブジェクト２７０としてのスライスオフジェクト２７４を送信するためにタイプＡのメッセージを使うことの利点の１つは、スライスオブジェクト２７４のデータサイズが一般的に、タイプＣのメッセージに含まれる、スライスするストロークオブジェクト２１０（ストロークオブジェクトｊ）のデータサイズや、タイプＤのメッセージに含まれる新規生成ストロークオブジェクト２１０のデータサイズより小さいという点である。
【０１９９】
図２１ＢのタイプＢのメッセージは、型フィールドＦ１０１、描画領域ＩＤフィールドＦ１０２、及び、ストロークオブジェクトｊを識別するストロークＩＤフィールドＦ１０３を含むヘッダを有する。タイプＢのメッセージのペイロード部分は、ストロークオブジェクトｊにより１以上の既存のストロークオブジェクト２１０をスライスした結果として得られる１以上のホールセグメントオブジェクトを含む。図２１Ｂは、２つのホールセグメントオブジェクトを図示している。１つは、フィールドＦ１１１＿３Ｈ内のホールセグメントストローク＿３であり、ストロークオブジェクトｊにより既存のストローク３をスライスした結果として得られるものである。もう１つは、フィールドＦ１１１＿ｉＨ内のホールセグメントストロークｉであり、ストロークオブジェクトｊにより既存のストロークｉをスライスした結果として得られるものである（他のホールセグメントオブジェクトの記述は省略している）。タイプＢのメッセージの型フィールドＦ１０１は、このメッセージが、スライス操作を実施（実行）する「スライサー」タイプであることを示している。この例では、Ｆ１０１における「スライサー」タイプの表示は、関連するホールセグメントオブジェクトが操作オブジェクト２７０を形成することを示す操作情報（「入力３」）を構成する。タイプＢのメッセージを受信した受信装置は、上述したタイプＡのメッセージと同様、ディスプレイ上に描画され得る２つの新たなストロークオブジェクト２１０を生成するために、ホールセグメントオブジェクトを取り出し、スライス対象である元の（既存の）ストロークオフジェクト２１０を参照して実行する。操作オブジェクト２７０としてのホールセグメントオブジェクトを送信するためのタイプＢのメッセージの利点の１つは、ホールセグメントオブジェクトのデータサイズが一般的に、タイプＣのメッセージに含まれる、スライスするストロークオブジェクト２１０（ストロークオブジェクトｊ）のデータサイズや、タイプＤのメッセージに含まれる新規生成ストロークオブジェクト２１０のデータサイズより小さいという点である。
【０２００】
図２２は、本発明の実施の形態による、ネットワークを介してインクデータ２００をリモート受信するように構成されたインクデータ受信装置の機能ブロック図である。
【０２０１】
この受信装置は、ネットワーク通信部３１０（Ｔｘ，Ｒｘ）と、インクデータ処理部１００Ｒと、アプリケーション部３００−２と、グラフィック処理部３００Ｒと、ディスプレイ１１３Ｒと、オペレーティングシステム４００−２とを含む。代表的な実施の形態では、インクデータ処理部１００Ｒは、送信側のインクデータ処理部１００を実現するライブラリに統合される。したがって、受信装置は一般に、インクデータ処理部１００によって実行される機能に対応する相対機能を実行する。
【０２０２】
図２２において、ポイント「Ｄ」、「Ｅ」、「Ｆ＿ｉｎ」、「Ｇ」、及び「Ｈ」は、送信側のインクデータ処理部１００の各ポイントに対応する。図２２において、Ｍ２'（リモート）は、送信側のＭ２（リモート）から送信された操作オブジェクト２７０が受信されるポイントを示す。Ｍ１'（ローカル）は、送信側のＭ１（ローカル）に対応するポイントを示し、そこでは、図４のステップＳ１４２１で実行されるスライスオブジェクト２７４をファイナライズする（コミットする）ｄ）が実行される。ただし、図２２では、スライスオブジェクト２７４（又は、スライスオブジェクト２７４を生成する操作ストロークオブジェクト２１０）は内部生成されず、送信側から受信されるという点を除く。
【０２０３】
ネットワーク通信部３１０（Ｔｘ，Ｒｘ）は、ＷＡＮ又は無線／有線のＬＡＮインターフェイスを介してパケットを受信し、図１２に記述したような様々なインクデータメッセージを取り出す。
【０２０４】
インクデータ処理部１００Ｒは、インクデータ整形部１４０Ｒ及びインクデータ生成部１２０Ｒを含む。インクデータ整形部１４０Ｒは送信側のインクデータ整形部１４０に対応するもので、それと同様に、ポイント「Ｅ」を介して記録のタイプであるストロークファイルフォーマット（ＳＦＦ）で書かれたインクデータ２００を受信するように構成される記録フォーマット操作部１４２Ｒと、ポイント「Ｆ＿ｉｎ」を介して通信のタイプであるストロークメッセージフォーマット（ＳＭＦ）で書かれたインクデータ２００を受信するように構成されるインクデータ通信部１４４Ｒとを含む。データ通信部１４４Ｒは、受信したメッセージ（「入力３」）のヘッダフィールドＦ１０１に含まれる値に基づき、受信したメッセージが操作オブジェクト２７０、すなわち、１以上の既存のストロークオブジェクトに対して操作（スライス）オペレーションを実行するように構成された特殊なタイプのストロークオブジェクト２１０（例えば、スライサータイプのストロークオブジェクト）、スライスオブジェクト２７４、又はホールセグメントオブジェクトを含むかを判定する。
【０２０５】
インクデータ生成部１２０Ｒは、送信側のインクデータ生成部１２０に対応する。送信側のインクデータ処理装置とは異なり、受信装置は、ストロークオブジェクト２１０を生成するためにペンイベントデータを受信することはない。その代わり、インクデータ生成部１２０Ｒは、ストロークオブジェクト２１０、操作オブジェクト２７０、描画スタイルオブジェクト２３０、及びメタデータオブジェクト２５０のような様々なオブジェクトを受信する。インクデータ生成部１２０Ｒは、受信したストロークオブジェクト２１０を処理し（例えば操作し）、操作した（変形した）ストロークオブジェクト２１０を記憶装置７７０に格納するために、ストロークオブジェクト操作部１２２及び操作オブジェクト操作部１２８を使用する。
【０２０６】
グラフィック処理部３００Ｒは、送信側のグラフィック処理部３００により実行される処理に対応する処理を実行する。図１３Ａ及び図１３Ｂに示すように、グラフィック処理部３００Ｒは、ストロークオブジェクト２１０内に含まれるポイントオブジェクトを制御点として用い、キャットマル−ロム曲線アルゴリズムのような曲線補間アルゴリズムに従って補間曲線を生成することにより、ストローク（パス）を再構築する。グラフィック処理部３００Ｒはさらに、ストロークオブジェクト２１０のために定義される開始パラメータ及び終了パラメータを参照し、ストロークオブジェクト２１０の表示範囲（部分）を制御する。例えば、もし開始パラメータが０．５であり、終了パラメータが０．５であったら、グラフィック処理部３００Ｒは、開始曲線セグメントの中点からストロークオブジェクト２１０の描画（ディスプレイ）を開始し、終了曲線セグメントの中点でストロークオブジェクト２１０のディスプレイを停止する。グラフィック処理部３００Ｒはまた、ストロークオブジェクト２１０に関連付けて受信された描画スタイルオブジェクト２３０を参照し、レンダリングしたストロークオブジェクト２１０に幅、色、及び他のグラフィック属性を追加する。
【０２０７】
ディスプレイ１１３Ｒは、送信側のディスプレイ１１３に対応する。アプリケーション部３００−２は、オペレーティングシステム４００−２によってサポートされ、動的又は静的に、インクデータ処理部１００Ｒを実現するライブラリにリンクされる。アプリケーション部３００−２は、送信側のアプリケーション部３００−１でサポートされるアプリケーションと同じ、又は、類似し、又は、異なるアプリケーションを含むことができる。
【０２０８】
図２３は、本発明の実施の形態による図２２の受信装置により実行され得る、操作（スライス）オブジェクトの受信処理を説明するフローチャートである。
【０２０９】
ステップＳ２３０１において、インクデータ整形部１４０Ｒは、ネットワーク通信部３１０を介して受信されるインクデータメッセージを受信し、メッセージヘッダ（「入力３」）に含まれる型フィールドＦ１０１から、各メッセージに含まれるメッセージのタイプを取り出す。
【０２１０】
ステップＳ２３０３において、インクデータ整形部１４０Ｒは、メッセージが標準のストロークオブジェクト２１０と操作オブジェクト２７０とのいずれを含むかを判定する。上述したように、操作オブジェクト２７０は、操作情報（「入力３」）と関連付けられた、ストロークオブジェクト２１０、スライスオブジェクト２７４、又はホールセグメントオブジェクトのいずれであってもよい。
【０２１１】
ストロークオブジェクト２１０は、図１２に示したようなストロークメッセージフォーマット（ＳＭＦ）ファイルによって書かれることができ、又は、図１１に示したようなストロークファイルフォーマット（ＳＦＦ）ファイルによって書かれることができる。操作オブジェクト２７０は、図２１Ａ〜図２１Ｃに示したように、ＳＭＦで書かれることが好ましい。
【０２１２】
標準のストロークオブジェクト２１０が受信されたと判定された場合、ステップＳ２３０５でストロークオブジェクト操作部１２２が、受信したストロークオブジェクト２１０を記憶装置７７０Ｒに追加する。
【０２１３】
操作（スライス）オブジェクトが受信されたと判定された場合、操作オブジェクト操作部１２８が、受信したメッセージ内に含まれる１以上の操作オブジェクトをステップＳ２３１１で取り出し、ステップ２３１３で、取り出した操作オブジェクトのリストを生成する。例えば、もし図２１Ａに示したタイプＡのメッセージが受信された場合、このリストは、フィールドＦ１１１＿３１、Ｆ１１１＿３２、Ｆ１１１＿ｉ１、及びＦ１１１＿ｉ２に含まれるスライスオブジェクト２７４の２つのペア（他のペアの記述は省略する）を操作オブジェクトとして識別するものとなる。もし図２１Ｂに示したタイプＢのメッセージが受信された場合、このリストは、フィールドＦ１１１＿３Ｈ及びＦ１１１＿ｉＨに含まれる２つのホールセグメントオブジェクト（他のホールセグメントオブジェクトの記述は省略する）を操作オブジェクトとして識別するものとなる。もし図２１Ｃに示したタイプＣのメッセージが受信された場合、このリストは、ストロークオブジェクトｊを操作オブジェクト２７０として識別するものとなる。
【０２１４】
続くステップＳ２３１５〜Ｓ２３１８は、リスト内に含まれる各操作オブジェクトについて繰り返される。
【０２１５】
ステップＳ２３１５では、操作オブジェクト操作部１２８が操作オブジェクト２７０が適用されるべきターゲットストロークオブジェクト２１０を決定する。例えば、図２１ＡのタイプＡのメッセージのケースでは、フィールドＦ１１１＿３１、Ｆ３１１＿３２のスライスオブジェクト２７４のペアの形を取る操作オブジェクト２７０が既存のストローク３に適用され、フィールドＦ１１１＿ｉ１、Ｆ３１１＿ｉ２のスライスオブジェクト２７４のペアの形を取る操作オブジェクト２７０が既存のストロークｉに適用されることが決定される。
【０２１６】
ステップＳ２３１７では、操作オブジェクト操作部１２８が、操作オペレーションを実行するためにステップＳ２３１５で識別したターゲットストロークオブジェクト２１０に対して操作オブジェクト２７０を適用し、完全に定義されたストロークオブジェクトを生成するために操作オペレーションをコミット（ファイナライズ）する。生成されたストロークオブジェクトはその後、ストロークオブジェクト操作部１２２の記憶装置７７０Ｒに格納される。ステップＳ２３１７の動作は一般に、図１４示したステップＳ１４２１の動作に対応する。一言で言えば、操作オペレーションのコミット又はファイナライズは、操作オペレーションの結果を、結果として得られるストロークオブジェクトに反映させる。
【０２１７】
ステップＳ２３１８では、操作オブジェクト操作部１２８が、ステップＳ２３１３のリスト内に識別された操作オブジェクトのすべてがそれぞれのターゲットストロークオブジェクトに対して実行されたかを判定する。もしされていなければ、次の（残りの）操作オブジェクト２７０を処理するために、処理はステップＳ２３１５に戻る。
【０２１８】
もしリスト内に識別された操作オブジェクトのすべてがそれぞれのターゲットストロークオブジェクトに対して実行され、それらの操作オペレーションがストロークオブジェクトの新しいセットを生成するためにコミットされ（ファイナライズされ）たとしたら、操作オブジェクト操作部１２８はステップＳ２３１９において、操作オブジェクトとして使用されたスライスオブジェクト２７４及び（もしあれば）ホールセグメントオブジェクトを流し去る。
【０２１９】
送信側のインクデータ処理部１００及び受信側のインクデータ処理部１００Ｒを、オペレーティングシステム４００−１又は４００−２上で動作するソフトウェアライブラリとして記述しているが、インクデータ処理部１００，１００Ｒは、特定用途向け集積回路（ＡＳＩＣ）又はＩＣのような、それとは異なる態様で実現されてもよい。
【０２２０】
したがって、第１の実施の形態によるインクデータの処理方法によれば、図９１に説明したように、ストロークオブジェクト２１０の一部を変更又は操作（例えばスライス）し、１以上の他のコンピュータ装置に対してその変更／操作を送信することが可能になる。
【０２２１】
第２の実施の形態
本発明の第２の実施の形態は、共通描画領域を共有する複数の装置（伝送装置、中継装置、受信装置）の間でインクデータ２００を通信する（送信する、中継する、受信して処理する、及びストリーミングする）ための方法及びシステムに向けられたものである。特に、この方法及びシステムは、共通描画領域内に異なる装置によってそれぞれ書き込まれたインクデータ２００の複数のレイヤを、リアルタイムで、正しい通信順序で、かつ、適時に重ね合わせることを可能にする。
【０２２２】
本発明の第２の実施の形態は、複数のユーザが同時かつリアルタイムに共通描画領域（又はカンバス）に手書き（フリーハンド）入力を行うことのできるリアルタイムコラボレーションアプリケーションの実現に特に適している。
【０２２３】
リアルタイムコラボレーションアプリケーションの使用のために、本発明は、インクデータ２００の断片の伝送タイミングを制御する新規な通信／再生産スキームにより、知覚可能な時間遅延なしに共有できるフルセットの属性（色、トレース又はストロークの幅、レンダリング（描画）スタイルなど）を有するインクデータを生成する能力を有する方法及びシステムを提供する。
【０２２４】
一側面によれば、インクデータ２００は、それぞれ異なるタイプの装置を用いて生成された（描画された）複数のストロークオブジェクトと、これらのストロークオブジェクトを特徴付ける描画スタイルオブジェクト２３０（例えば、どのタイプのペン先がストロークオブジェクトを描画するのには使用されるか）とを含み、そしてインクデータ２００は、共通描画領域内でレンダリングされる。リアルタイムコラボレーションアプリケーションのようないくつかのアプリケーションは、厳格な（速い）時間に対する要求を有している。一方で、他の種類のアプリケーションは、そのような厳格な時間に対する要求を有しない。本発明の一側面による装置及び方法は、使用中の特定のアプリケーションの要求に従い、インクデータ２００を適時に、正しい順序かつ正しいフォーマットで、送信／中継／受信するように構成される。
【０２２５】
一側面によれば、本発明は、それぞれ伝送装置と描画領域を共有する複数の受信装置と通信するために伝送装置によって実行される方法であり、伝送装置は、伝送装置の入力センサによって検出された入力操作のトレースを表すインクデータ２００を複数の受信装置に送信する。この方法は一般に、（ａ）インクデータ生成ステップ、（ｂ）メッセージ形成ステップ、（ｃ）送信ステップ、という３つのステップを含む。インクデータ生成ステップは、（ｉ）ポインタの動きに従って生成されるペンイベントデータ（入力１）を継続的に入力し、ストロークデータの断片化データを生成するステップであって、ストロークオブジェクトは、ポインタの前記動きのトレースを表すために複数のポイントオブジェクトを含み、断片化データは規定の単位Ｔごとに生成されるステップと、（ｉｉ）前記トレースの開始ポイントにおけるペンイベントデータの生成に対応するペンダウンタイムにおけるコンテキスト情報（入力２）に基づいて描画スタイルオブジェクト２３０を生成するステップであって、描画スタイルオブジェクト２３０は、ストロークオブジェクトの前記トレースの描画フォームを定義するステップとを含む。メッセージ形成ステップは、（ｉ）描画スタイルオブジェクト２３０を含む第１のメッセージを生成するステップと、（ｉｉ）第１のメッセージに続く１以上の第２のメッセージを生成するステップであって、１以上の第２のメッセージは断片化データを含むステップとを含む。最後に、送信ステップは、定義された通信プロトコルに従って、第１のメッセージと１以上の第２のメッセージとを順に送信するステップを含む。
【０２２６】
他の側面によれば、中継方法は、伝送装置の入力センサによって検出された入力操作のトレースを表すインクデータ２００を受信し、受信したインクデータ２００を、それぞれ伝送装置と描画領域を共有する複数の受信装置に対して中継するために提供される。この方法は一般に、（ａ）受信ステップ、（ｂ）制御ステップ、（ｃ）データメッセージ中継ステップ、（ｄ）送信ステップ、という３つのステップを含む。受信ステップは、描画領域に関する情報を含む制御メッセージを受信すること、及び、描画領域内にレンダリングされるインクデータ２００を含むデータメッセージを受信することを含む。制御ステップは、描画領域を共有する複数の受信装置の通信アドレスを列挙する接続リストを更新することを含む。データメッセージ中継ステップは、（ｉ）データメッセージに含まれるストロークオブジェクト２１０に基づいて描画領域を更新することを許容するか否かを決定すること、（ｉｉ）もし更新が許容されるなら、前記接続リストに列挙された受信装置に対して直接又は他の中継装置を介して中継されるべき新たなデータメッセージを生成すること、（ｉｉｉ）もし更新が許容されないなら、描画領域の更新要求が拒絶されたことを示す拒否メッセージを生成すること、を含む。最後に、送信ステップは、受信装置に対し、通信パケットで新たなデータメッセージを送信することを含む。
【０２２７】
さらなる側面によれば、本発明は、一般に４つのステップを含むインクデータ２００を受信する方法を提供する。第１のステップは、第１の断片ＩＤが関連付けられたメッセージ内のストロークオブジェクト２１０の第１の断片を受信することを含む。第２のステップは、第３の断片ＩＤが関連付けられたメッセージ内のストロークオブジェクト２１０の第３の断片を受信することを含む。なお、第３の断片ＩＤは第１の断片ＩＤと連続していない。第３のステップは、受信したストロークオブジェクト２１０の第１及び第３の断片に基づき、失われたストロークオブジェクト２１０の第２の断片を補間し、補間された第２の断片をディスプレイすることを含む。第４のステップは、ストロークオブジェクト２１０の終端を受信した後、全体としてのストロークオブジェクト２１０の再送信を要求するために、ストロークオブジェクト２１０のストロークＩＤを含む要求を送信することを含む。
【０２２８】
さらに他の側面によれば、インクデータ２００が格納されるサーバを用いて複数のストロークオブジェクトを含むインクデータをストリーミングする方法が提供される。この方法は一般に２つのステップを含む。第１のステップは、格納されたストロークオブジェクトを順番に読み出すことを含む。第２のステップは、ストロークオブジェクトを、ストロークオブジェクトの連続的な部分にそれぞれ対応する定義されたタイミングで、サーバから１以上の受信装置に送信することを含む。
【０２２９】
第２の実施の形態の記述
第１の実施の形態を参照して上述した図１は、本発明の第２の実施の形態に従ってインクデータ２００が生成され、通信され（送信され、中継され、受信され、処理され、流され、など）得るシステムの全体を説明する。例えば、図１の装置１０−３は、リアルタイムコラボレーションタイプのアプリケーションであり得るアプリケーションサービス＃２を用いて、リアルタイムに、装置１０−１−１及び装置１０−１−２からそれぞれ出力されるインクデータ２００を結合（合成）することができる。装置３は、装置１０−１−１及び装置１０−１−２から出力されるインクデータ２００を、互いに異なりかつ重ねられる複数のレイヤとして、その画面上にリアルタイムにレンダリング（描画）してもよい。
【０２３０】
生成され、本発明の実施の形態による異なる装置の間で通信されるインクデータ２００は、様々なタイプの装置、コンピュータ、オペレーションシステム、又はアプリケーションにより、通信リソース上で共有される。
【０２３１】
図２５は、インクデータ２００のための情報モデルの実体関連図である。図２５は、図２５のストロークオブジェクトが開始パラメータ３０１又は終了パラメータ３０３を含む必要がない点で図２と異なっているが、その他は図２と同じである。本発明の実施の形態によるインクデータ２００は、ストロークオブジェクト２１０（又はストロークオブジェクトセット２０２）（図３参照）と、レンダリング（描画、視覚化、ラスター化）時にストロークオブジェクト２１０の形及び色を制御するために必要となる情報を含む描画スタイルオブジェクト（セット）２３０とを含む。第１の実施の形態を参照して上述した図３Ｂ及び図３Ｃは、それぞれ、図３Ａに示した同じストロークオブジェクト２１０の２つの異なる描画スタイルオブジェクト２３０によるレンダリング（描画）結果を図示している。インクデータ２００はさらに、著者、ペンＩＤ、ローカルに取得される日時情報、ＧＰＳによって取得される位置情報のような、ストロークオブジェクト２１０を説明する非描画関連情報を含むメタデータオブジェクト（セット）２５０を含む。インクデータ２００はさらに、既存のストロークオブジェクト２１０を操作する（例えば、選択する、回転する、スライスする）ために必要となる情報を含む操作オブジェクト（セット）を含む。そのような情報は、それぞれがストロークオブジェクト２１０の所望の操作をもたらすために、既存のストロークオブジェクト２１０に対して実行可能である複数の操作オブジェクトの形式で組織化される。他の操作オブジェクトは、例えば、操作オブジェクトの切り取り（消去）、削除、コピー、拡大、及び縮小を含むことができる。
【０２３２】
図３Ａは、複数のポイントオブジェクト（ポイント１〜ポイントｎ）を含むストロークオブジェクト２１０を説明する。このストロークオブジェクト２１０は、ポインタの動きのトレースを表す情報を含む。ポインタは、ペン型の道具又は指である。具体的には、ストロークオブジェクト２１０は、トレースを形成する複数のポイントオブジェクト（ポイント１〜ポイントｎ）の座標を含む。各ポイントオブジェクトは、半径、色、透明（不透明）度のような属性に関連付けられ得る。
【０２３３】
複数のポイントオブジェクト（ポイント１〜ポイントｎ）の座標は、ペンイベントデータ（又はポインタ操作）を適切にサンプリングすることによって取得又は導出されるもので、ポインタの動きに従って生成される。必要に応じて、サンプリングされたポイント間の補間を行う。第１の実施の形態を参照して上述したように、キャットマル−ロム補間アルゴリズムのような適切な曲線アルゴリズムが、トレースを滑らかな曲線で表すために採用され得る。
【０２３４】
複数のポイントオブジェクトの（ｘ，ｙ）座標を生成するために、一般に２つの方法がある。１つ目の方法では、ペンイベントデータが入力されている間、ペンイベントデータから単位時間ごとに導出されるポイントが、「生値型」のポイントとして出力される。２つ目の方法では、１つのストロークを構成するすべてのポイントが入力された後、ストロークのための近似曲線（キャットマル−ロム曲線、ベジエ曲線など）に代表されるより高次の機能が生成され、近似曲線を表現するために必要な最小数のポイントオブジェクトが「最適化ポイント型」のポイントとして得られる。本発明の一実施の形態によれば、（ｘ，ｙ）座標を生成する２つの方法は、各アプリケーションによって要求されるインクデータ２００の通信の時間的制約により、選択的に切り替えられる。
【０２３５】
図３Ｂ及び図３Ｃの異なるレンダリング結果に説明されるように、各描画スタイルオブジェクト２３０は、トレースがスクリーン又はディスプレイ上でレンダリング（描画又は表現）される際のユニークな形、すなわち、トレースがどのようにスクリーン又はディスプレイ上に現れるか、に関する情報を含む。したがって、同じストロークオブジェクト２１０をレンダリングするために異なる描画スタイルオブジェクトを使用すると、それらがどのように現れるかという観点で、ストロークオブジェクト２１０の描画が異なるという結果になる。トレースの形は、１以上のポイントオブジェクトの形（例えば、図３Ｂの円及び図３Ｃのフレーク又は花びら）、トレースの幅（例えば、図３Ｂの各円の半径及び図３Ｃの各フレークのサイズ）、各ポイントオブジェクトに関連付けられた角度又はオフセット（図３Ｃ参照）、トレースの色（又はポイントオブジェクトの色）、トレースの（又はポイントオブジェクトの）透明度／不透明度、トレースのテクスチャ（又はポイントオブジェクトのテクスチャ）などによって定義され得る。ストロークオブジェクト２１０を描画するために必要とされる情報は、そのストロークオブジェクト２１０に関連付けられた描画スタイルオブジェクト２３０に含まれる。
【０２３６】
図２６は、本発明の実施の形態による通信システム図の全体である。この通信システムは、伝送装置１０−１、中継サーバ１０−２、及び複数の受信装置１０−３，１０−４、・・・、１０−ｎを含む。これらは皆、図１に示した一群のライブラリリソース１０を共有し使用する。中継サーバ１０−２はまた、より増進されたパフォーマンスのために、グローバルに分散した中継サーバの（コンテンツデリバリーネットワークと同様の）ピアツーピアネットワークの一部であり得る。図２６のシステムは、本発明の実施の形態によるリアルタイムコラボレーションを実現するために、インクデータ２００の送信、中継、及び受信の各方法を実行するのに適している。
【０２３７】
図２６の伝送装置１０−１は、図１の装置１０−１−１又は装置１０−１−２に対応する。
【０２３８】
伝送装置１０−１は、入力センサ１１０と、図示しない入力処理部と、インクデータ処理部１００Ｔと、アプリケーション部３００−１と、通信部１１２（「Ｔｘ  Ｒｘ」）とを含む。インクデータ処理部１００Ｔは、第１の実施の形態の図５に示した１００Ｔに対応する。アプリケーション部３００−１は、インクデータ処理部１００Ｔにリンクされ、一群のライブラリリソース１０（図１）によってサポートされる１以上のユーザアプリケーションを含む。図示した実施の形態では、アプリケーション部３００−１は、リアルタイム通信機能を利用するリアルタイムアプリケーション＃１を実行する。
【０２３９】
中継サーバ１０−２は、典型的には中継サーバであり、インクデータ交換サービスを具体化して提供する。図示した実施の形態では、中継サーバ１０−２は、リアルタイムでインクデータ２００を交換し、中継することにより、中継サーバ１０−２から見て遠隔地に位置する伝送装置１０−１及び受信装置１０−３，１０−４、・・・、１０−ｎに便宜を与える。
【０２４０】
中継サーバ１０−２は、通信部（５１０  Ｒｘ、５１１  Ｔｘ）、インクデータ中継部５４０、アプリケーションコントロール部５２０、及び、カンバスデータ（又は描画データ）を記憶するように構成されたリポジトリを含む。以下、これらについてより完全に記述する。本発明の一側面によれば、リポジトリは、継続的に更新される描画領域（カンバス）の最新の状態に関する情報を、図２８に説明されるストロークファイルフォーマット（ＳＦＦ）で記憶する。中継サーバ１０−２は、すべての伝送／受信装置が描画領域の最新状態（すなわち、「カンバス」が現在どのように見えるか）を共有できるようにするために、伝送／受信装置から要求があると、要求した装置に対して共通描画領域の最新状態を返す。一側面によれば、中継サーバ１０−２は、複数の装置により使用される複数の通信プロトコル間の違いを、それらの装置の間でインクデータ２００の通信及び交換を可能にするために吸収する。
【０２４１】
受信装置１０−３，１０−４、・・・、１０−ｎはそれぞれ図１の装置３に対応し、通信部（３１０「Ｒｘ  Ｔｘ」）、インクデータ処理部１００Ｒ、グラフィック処理部３００、及びアプリケーション部３００−２を含む。アプリケーション部３００−２は、インクデータ処理部１００Ｒにより処理されるインクデータ２００の定義及び通信プロトコルを利用するアプリケーション＃２を実行する。受信装置のアプリケーション＃２は、伝送装置１０−１によって使用されるアプリケーション＃１と同じものであってもよいし、アプリケーション＃１及び＃２の両方がインクデータ２００の同じ定義と通信プロトコルを共有できる限りにおいて、異なるものであってもよい。
【０２４２】
図２６に示す伝送装置１０−１、中継サーバ１０−２、及び複数の受信装置１０−３，１０−４、・・・、１０−ｎの間の区分は図示の容易さのためのものに過ぎず、本発明の実施の形態の適用及び実装によっては、これらの装置の各種機能は、部分的又は全体的に統合されてもよいし、又は、さらに分割及び分配されてもよい。例えば、受信装置１０−３は、伝送装置１０−１のインクデータ処理機能（図２７に記述される「インクデータ生成」１２０Ｔ及び「インクデータ整形」１４０Ｔ）を実行するように装備されてもよく、また、伝送装置１０−１は、受信装置１０−３のインクデータ処理機能（図３１に記述される「インクデータ整形」１４０Ｒ及び「インクデータ生成」１２０Ｒ）を実行するように装備されてもよい。いくつかの実装では複数の伝送装置が存在し、一方で、いくつかの実装では伝送装置が存在しない。後者のケースでは、例えば、中継サーバ１０−２がそのリポジトリ内にインクデータ２００を維持し、１以上のクライアントである受信装置１０−３，１０−４、・・・、１０−ｎに向けてインクデータ２００をストリーミングする。
【０２４３】
図２６では、破線の矢印が、複数の装置を介して入力されるインクデータ２００が複数のレイヤに重ねて表示される共通描画領域（又はカンバス）を設定する制御メッセージのようなインクデータ制御メッセージの流れを説明する。インクデータ制御メッセージ名称は、プレフィックス「ＣＴＲＬ＿」で始まる。
【０２４４】
実線の矢印は、共通描画領域に互いに重ねて表示されるために複数の装置を介して入力される実際のインクデータ２００を含むインクデータメッセージの流れを説明する。インクデータの名称は、プレフィックス「ＤＡＴＡ＿ＩＮＫ＿」で始まる。
【０２４５】
図２６に示す「ＳＭＦ」（ストロークメッセージフォーマット）は、伝送フォーマットにおいてパケット内に生成され配置されるメッセージであり、後述する図３４に説明される。簡単に説明すると、伝送フォーマット内のインクデータ２００は、知覚される遅延のないリアルタイム通信に適している。例えば、上述した「生値型」のポイントオブジェクトが、伝送フォーマットのストロークオブジェクト２１０を形成するために使用され得る。
【０２４６】
図２６に示す「ＳＦＦ」（ストロークファイルフォーマット）は、記録フォーマット内に生成され配置されるメッセージであり、後述する図２８に説明される。簡単に説明すると、記録フォーマット内のインクデータ２００は圧縮されており、記憶装置に適している。例えば、上述した「最適化ポイント型」のポイントオブジェクトが、記録フォーマットのストロークオブジェクト２１０を形成するために使用され得る。さらなる例では、ＳＭＦ伝送フォーマットでは色情報がＲＧＢで処理され得るのに対し、ＳＦＦ記録フォーマットでは色情報は圧縮効率のためにＹＣＣで処理され得る。
【０２４７】
本発明の様々な実施の形態において、伝送フォーマット（例えばＳＭＦ）は、複数の装置の間でリアルタイムにインクデータ２００を通信し交換するために使用される。一方、記録フォーマット（例えばＳＦＦ）は、共通描画領域（カンバス）を（初期のアクセスに応じて各装置に送信され得る）リポジトリ内に記憶するために使用される。
【０２４８】
破線矢印「Ａ．ＣＴＲＬ＿ＪＯＩＮ＿ＲＥＱ」は、コラボレーションサービスにより容易された共通描画領域の編集セッションに伝送装置１０−１が初めて参加するときに発行されるメッセージである。伝送装置１０−１は、共通描画領域に参加する最初の装置であってもよく、既に他の伝送装置によって開始された編集セッションに参加する遅参者であってもよい。破線矢印「Ａ．ＣＴＲＬ＿ＪＯＩＮ＿ＲＥＱ」は、受信装置１０−３，１０−４、・・・、１０−ｎによって共有される描画領域（又はカンバス）を設定するために伝送装置１０−１が発信するメッセージの伝送方向を示す。ＣＴＲＬ＿ＪＯＩＮ＿ＲＥＱメッセージは、中継サーバ１０−２と交渉され又は共有される伝送装置の環境（例えば、その送信／受信環境を記述する一組のパラメータ）に関する情報を含むメッセージを含み又はそのような情報と関連付けられることとしてもよい。
【０２４９】
例えば、伝送装置の送信／受信環境を記述するパラメータは、ストローク送信／受信の単位（サイズ）、メッセージ再送信制御設定など（図３０Ａの５２４−１）、ペンツールセットを定義する描画パラメータ、座標システムなど（図３０Ｂの５２４−２）、及び、リソース競合時の優先権やブロックするユーザのリストなど（図３０Ｃの５２４−３）のユーザポリシーパラメータ、などのような通信パラメータを含む。
【０２５０】
破線矢印「Ａ．ＣＴＲＬ＿ＪＯＩＮ＿ＲＥＰ」は、ＣＴＲＬ＿ＪＯＩＮ＿ＲＥＱメッセージに応じて、中継サーバ１０−２が発信する応答メッセージの伝送方向を示す。ＣＴＲＬ＿ＪＯＩＮ＿ＲＥＰは、伝送装置１０−１が自身のインクデータ２００を送信するために必要とする環境データを含む。特に、この環境データは、受信装置１０−３，１０−４、・・・、１０−ｎの描画領域（又はカンバス）の最新状態に関する情報を含むことができる。
【０２５１】
実線矢印「Ｃ．ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ」「ＤＡＴＡ＿ＩＮＫ＿ＭＶＤＯＳ」・・・「ＤＡＴＡ＿ＩＮＫ＿ＥＮＤＯＳ」（図３４参照）は、描画領域（又はカンバス）を更新するための更新メッセージとして、後に詳述する定義された通信プロトコルに従うタイミング及び伝送フォーマットで中継サーバ１０２に対し伝送装置１０−１が送信するインクデータ２００の伝送方向を示す。
【０２５２】
実線矢印「Ｄ．ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ」及び「ＤＡＴＡ＿ＩＮＫ＿ＭＶＤＯＳ」は、中継サーバ１０−２によって処理され、受信装置１０−３，１０−４、・・・、１０−ｎに対してそれぞれの通信線上で送信されるインクデータ２００の伝送方向を示す。
【０２５３】
図２７は、図２６の伝送装置１０−１を機能ブロック図の形で説明する。伝送装置１０−１は、（タッチ／ペン）センサ１００、入力処理部１１１、インクデータ処理部１００Ｔ、アプリケーション部３００−１、ネットワーク通信部（Ｔｘ，Ｒｘ）１１２Ｔ、グラフィック処理部３００、ディスプレイ１１３、及びオペレーティングシステム４００−１を含む。
【０２５４】
センサ１１０は、ユーザの（ペンや指などのポインタを通じた）手書き動作又は操作を検出し、検出した手書き動作を表現する入力データ信号を生成する。例えば、静電センサ、感圧センサ、電磁共鳴（ＥＭＲ）ベースのセンサが使用され得る。
【０２５５】
入力処理部１１１は、典型的には特定のセンサ装置とオペレーティングシステム４００−１上で動作するそのドライバとに依存する入力データ信号を受信し、感知された座標位置とポインタ圧力情報などの他の情報とを含む「ペンイベントデータ」に変換し、「入力１」としてそのペンイベントデータを出力する。ペンイベントデータは、なおも手書き動作入力を検出するために使用された特定のセンサ装置に依存している。入力処理部１１１は、典型的には、センサ１１０のためのドライバ、又は、センサドライバに対応する処理を行うライブラリにより提供される。例えば、静電センサが使用されるとき、入力処理は掌拒否処理などのような、継続的にエンターされる入力に基づくジェスチャを判定する処理を含み得る。ペンイベントデータがセンサ／装置に依存することから、ペンイベントデータは、センサ１１０が圧力／傾きの検出機能を有するか否かに応じて、ポインタ圧力情報又はポインタ傾き情報を含むかもしれないし、含まないかもしれない。センサ１１０及び入力処理部１１１の構成は図示されたものに限定されず、センサ１１０及び入力処理部１１１の全部又は一部は、ペン形の装置のようなデジタル文具装置の形態で提供されてもよい。
【０２５６】
インクデータ処理部１００Ｔは、インクデータ生成部１２０Ｔ及びインクデータ整形部１４０Ｔを含む。インクデータ処理部１００Ｔは、第１の実施の形態の図５における１００Ｔに対応する。インクデータ処理部１００Ｔは、センサ／装置に依存するペンイベントデータ（「入力１」）を、様々な装置の様々なアプリケーションによって使用され共用され得るインクデータ２００に変換することを担当する。
【０２５７】
インクデータ生成部１２０Ｔは、センサ／装置に依存するペンイベントデータを引き出し又は受信し、それを非装置依存型のインクデータ２００に変換する。インクデータ２００は、本物のペンを使って紙の上に適用される（に描かれる、をよごす、に堆積される）インクのデジタル表現である。インクデータ生成部１２０Ｔは、図７のストロークオブジェクト操作部１２２に対応する。インクデータ生成部１２０Ｔは、規定の時間単位（例えば５秒）や規定のデータサイズ単位のような規定の単位Ｔごとにインクデータ（図７のメモリ７７０に記憶されるポイントオブジェクトｐ０〜ｐｎ−１）を引き出し、手書き動作により入力されたトレースを表すストローンオブジェクト２１０、又は、ストローンオブジェクト２１０の断片（部分）を生成する。
【０２５８】
インクデータ生成部１２０Ｔは、センサ１１０からペンイベントデータ（「入力１」）を受信し、また、アプリケーション部３００−１（例えば、リアルタイムコラボレーションアプリケーション）又はオペレーティングシステム（４００−１）からコンテキスト情報（「入力２」）を受信する。
【０２５９】
コンテキスト情報（「入力２」）は、ストロークの最初の部分が描かれた時点（すなわち「ペンダウン」の時点）における、ペンイベントデータのコンテキスト又は環境にかかる情報である。コンテキスト情報は、典型的にはセンサ１１０によりペンイベントデータの生成に先立ち、アプリケーション部３００−１によって設定される。例えば、コンテキスト情報は、使用されるペン先のタイプ（例えば、ブラシ、クレヨン、鉛筆）、ストローク／トレースの色（赤、緑、青）、ペンストロークの透明度（又は不透明度）の値（アルファ）、ストローク／トレースの幅などを含むことができる。インクデータ生成部１２０Ｔは、ペンイベントデータの開始のタイミングで（図３２のＳ６０５で。後述）コンテキスト情報（「入力２」）に基づき、ディスプレイ上にストロークオブジェクト２１０を描画（レンダリング）するために使用される描画スタイルオブジェクトを生成する。
【０２６０】
コンテキスト情報（「入力２」）はまた、著者情報、ペンＩＤ、日時情報、位置情報などのようなペンイベントデータについての非描画関連情報を含む。インクデータ生成部１２０Ｔは、そのような非描画関連コンテキスト情報に基づき、メタデータオブジェクト２５０を生成する。
【０２６１】
インクデータ生成部１２０Ｔは追加で、アプリケーション部３００−１から操作情報（「入力３」）を受信する。入力３は、センサ１１０からの次の入力が通常のストロークオブジェクト２１０を定義するものではなく、既存のストロークオブジェクト２１０に対する操作オペレーション（例えば、スライス、削除、コピー、拡大など）を具体化し実行する操作オブジェクト２７０を定義するものであることを特定する。入力３が受信されると、１以上の既存のストロークオブジェクト＃０〜＃ｉに対して、次のストロークオブジェクト＃ｊが操作オブジェクト２７０として形成され、その操作オペレーションが適用される。
【０２６２】
インクデータ整形部１４０Ｔは、インクデータ通信部１４４Ｔ及び記録フォーマットデータ処理部１４２Ｔを含む。一般的に、インクデータ整形部１４０Ｔは、インクデータ生成部１２０Ｔによって規定の単位Ｔごとに生成されるストロークの断片化データを整形する（例えば、伝送パケット内に配置する）。インクデータ整形部１４０Ｔはまた、インクデータ生成部１２０Ｔによって生成された描画スタイルオブジェクト２３０、メタデータオブジェクト２５０、及び操作オブジェクト２７０の整形も行う。インクデータ整形部１４０Ｔは、アプリケーション部３００−１から受信されるフォーマット選択情報（Ｆｍｔ＿Ｓｅｌ）に従って、様々なオブジェクトと、各ストロークオブジェクト２１０の断片化データとをメッセージ及び伝送パケット内にフォーマットする。
【０２６３】
インクデータ通信部１４４Ｔは、アプリケーション部３００−１から受信されるフォーマット選択情報（Ｆｍｔ＿Ｓｅｌ）が出力フォーマットとしての伝送フォーマット（例えばＳＭＦ）の使用を特定しているとき、以下の機能を実行する。
【０２６４】
１）インクデータ生成部１２０Ｔによって生成されたストロークオブジェクト２１０を規定の単位Ｔごとの断片化（又は完全な）データとして受け付け、暗示的に定義された、又は、明示的に交渉されたパラメータに従って、様々なタイプのデータメッセージ（図３４に示すように、プレフィックス「ＤＡＴＡ＿ＩＮＫ＿」で始まるメッセージ）を生成する。
【０２６５】
２）インクデータ生成部１２０Ｔによって生成された描画スタイルオブジェクト２３０を受け付け、「最初」のデータメッセージ（図３４の「ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ）にその描画スタイルオブジェクト２３０（図３４の「Ｆ１０４」）を加える。
【０２６６】
３）ストロークオブジェクト２１０のユニークなストロークＩＤを決定し、ストロークオブジェクト２１０の断片化データを含むすべてのデータメッセージにそのストロークＩＤ（図３４の「Ｆ１０３」）を加える。
【０２６７】
４）応答メッセージ（図３６Ａの「ＤＡＴＡ＿ＩＮＫ＿ＮＡＣＫ」又は図３７の「ＤＡＴＡ＿ＩＮＫ＿ＲＥＪＯＳ」）の受信に応じて、交渉されたパラメータ（例えば、図３０Ａの５２４＿１ｆ。５２４＿１ａとともにあってもよいし、又は、５２４＿１ａなしで５２４＿１ｆのみがあってもよい）に従い、再送処理（図３５Ａ、図３５Ｂ、図３６Ａ参照）又は無視する処理（図３７）を適応的に行う。
【０２６８】
記録フォーマットデータ処理部１４２Ｔは、アプリケーション部３００−１により生成されたインクデータ２００を、伝送フォーマットとは異なる記録フォーマット（例えばＳＦＦ）の形式に処理する。例えば、記録フォーマット内のインクデータ２００は、受信装置１０−３，１０−４、・・・、１０−ｎの複数のユーザによって共有（アクセス）される共通描画領域（カンバス）の現在状態を示すために、リアルタイムコラボレーションアプリケーションへの初期アクセスに応じて、伝送装置１０−１から中継サーバ１０−２にアップロードされ得る。これに対し、複数の装置間でリアルタイムにインクデータ２００を通信するため、記録フォーマットに代えて伝送フォーマットが使用されてもよい。
【０２６９】
図２８は、本発明の実施の形態で使用される記録フォーマットのサンプルを説明している。この記録フォーマットは、含まれるデータ／省略されるデータのタイプ、データの順序及び冗長性の点で、（図３４の）伝送フォーマットとは異なっている。
【０２７０】
含まれるデータ／省略されるデータのタイプ
例えば、既存のストロークオブジェクト２１０を修正するために操作オブジェクト２７０が生成されるとき、１以上のコンピュータに存在するインクデータ２００を変形するための操作オブジェクト２７０（例えば、第１の実施の形態を参照して上述したスライスオブジェクト２７４）が伝送フォーマットで生成され、送信される。これに対し、記録フォーマットでは、操作（更新）が完了した後の状態のみを記録するのに十分であり、したがって、操作オブジェクト２７０自身を維持する必要はない。したがって、図２８の記録フォーマット例は、操作オブジェクト２７０を含まない。
【０２７１】
データの順序及び冗長性
メタデータオブジェクト２５０は、著者情報、ペンＩＤなどのようなストロークオブジェクト２１０についての非描画関連情報を含む。非描画関連情報はしばしば、同時に入力されたいくつかのストロークオブジェクト１〜５にとって同一である。例えば、同じペンを使用する同じ著者は、複数のストロークオブジェクト１〜５をこの順で生成する。
【０２７２】
記録フォーマットでは、記録フォーマットで書かれたデータを整形する時点で全体のデータ内容が既知となっていることから、冗長性が低減され得る。図示した例では、同じ値の著者をストロークオブジェクト１〜５のすべてに適用することができ、したがって、同じ値が５回繰り返される必要はない。描画スタイルオブジェクト２３０に含まれる描画関連情報もまた、例えば、同じタイプのペン先形状（例えばブラシ）が複数のストロークオブジェクトを描画するために使用されるというように、いくつかのケースで冗長性を含み得る。したがって、他の例としては、同じ値のペン先形状をストロークオブジェクト１，３，５に適用しており、この値が記録フォーマット内で３回繰り返される必要はなくなっている。同様に、同じ値のペン先形状がストロークオブジェクト２，４に適用される場合、
その値は記録フォーマット内で繰り返される必要はない。この点について、記録フォーマット内においてストロークオブジェクトの時間的な順番（すなわち、それらが入力された順）を維持することは重要ではない。また、記録フォーマット内に注入される時点で各ストロークオブジェクトは完全に完成しているので、１つのストロークオブジェクトを形成するポイントオブジェクトの合計数を、ストロークオブジェクト自身の中に含めることができる。
【０２７３】
これに対し、伝送フォーマットでは、もしリアルタイム通信が重要であるならば、ストロークオブジェクトの時間的な順番を再編することは困難である。リアムタイム通信では一般に、ストロークオブジェクト１〜５が入力され生成された時間的な順番で、ストロークオブジェクト１〜５に関する情報を送信することが必要である。また、単一のストロークオブジェクトの断片化データを送信するとき、そのストロークオブジェクト内にいくつのポイントオブジェクトが含まれることになるのかを予め知ることは不可能である。したがって、ストロークオブジェクトを完結させる最後の断片化データについては、そのことを示す必要がある（最後の断片化データは、ストロークオブジェクト内に含まれるポイントオブジェクトの合計数に関する情報を含むこととしてもよい）。
【０２７４】
本発明の実施の形態によれば、同じ量の情報は、伝送フォーマットより記録フォーマットの方が少ないバイト数で含まれ得る。伝送フォーマットは、知覚可能な時間遅延のないリアルタイム通信を実現する目的のために、冗長性と厳格な時間的順番を有する必要があるからである。したがって、省記憶スペース化の目的のために、中継サーバ１０−２のリポジトリに記憶される最新の描画領域情報は好ましくは記録フォーマットで形成され、それはその後、中継サーバ１０−２に接続される様々な装置により、より少ない送信リソース量を用いてアクセスされ、引き出され得る。
【０２７５】
図２７を再度参照すると、伝送装置１０−１のネットワーク通信部１１２Ｔ（Ｔｘ，Ｒｘ）は、インクデータ処理部１００Ｔによって生成されたメッセージをペイロードとして含む通信パケット（図３４参照）を生成し、そのパケットを、メディアに接続されたネットワークインターフェイス（イーサネット（登録商標）など）を介して出力する。
【０２７６】
様々な通信プロトコルが、必要に応じ、通信環境の点から見て暗黙の又は（交渉を介した）明示の定義に基づいて使用され得る。例えば、ビルトインの再送メカニズムを含むＴＣＰ、ＨＴＴＰオーバーＴＣＰ、ＳＳＬのようなプロトコルを使用してもよいし（図３５Ａ）、それ自身は再送メカニズムを提供しないＵＤＰ（又はＲＴＰ／ＵＤＰ）のようなプロトコルを使用してもよい（図３５Ｂ）。さらに、ＵＤＰが使用される場合には、メッセージ再送メカニズムを採用してもよいし（図３６Ａ）、リアルタイム型アプリケーションの時間的要求に従う目的のためにメッセージ再送メカニズムを省略してもよい（図３６Ｂ）。また、制御メッセージとデータメッセージとでは、それぞれ異なる通信プロトコルを用いることも可能である。例えば、破線矢印で示される制御メッセージの送信には再送メカニズムを有するプロトコルを採用し、一方で、実線矢印で示されるデータメッセージの送信には再送メカニズムを有しないプロトコルを採用することも可能である。
【０２７７】
アプリケーション部３００−１は、本発明の実施の形態によるインクデータ送信方法を使用するアプリケーションを提供する。アプリケーション部３００−１は、共通描画領域（又はカンバス）の最新状態を管理する中継サーバ１０−２（具体的には図２９の５２０）に対し、ネットワーク通信部１１２Ｔ（Ｔｘ）を介して、ＣＴＲＬ＿ＪＯＩＮ＿ＲＥＱなどを発行する。アプリケーション部３００−１は、入力装置１１０を使用してその上で描画を実行する描画領域（カンバス）を決定する。
【０２７８】
アプリケーション処理部３００−１は、以下の情報を処理し、伝送装置１０−１のインクデータ処理部１００Ｔに対して提供する。
・色情報、ペン先形状、著者情報、生成日時などのコンテキスト情報（入力２）、
・操作オブジェクトを構成する入来入力を特定する操作情報（入力３）、及び／又は
・伝送フォーマットと記録フォーマットのいずれが選択されるべきかを指定するフォーマット選択情報（Ｆｍｔ＿Ｓｅｌ）。
【０２７９】
アプリケーション処理部３００−１は、インクデータ生成部１２０Ｔによって生成されたインクデータ２００を受信し、リモートに位置する受信装置（１０−３，１０−４、・・・、１０−ｎ）と、伝送装置自身のローカルディスプレイ（もしあれば）の両方に出力する能力を有する。
【０２８０】
グラフィック処理部３００は、インクデータ２００に基づいてピクセルデータを生成する。グラフィック処理部３００は、ローカルディスプレイ上にストロークオブジェクトを直ちに描画（レンダリング）する能力を有し、これは、複数の装置を介して入力されたインクデータ２００が異なるレイヤとして重ねられた共通描画領域の状態を表し得る。
【０２８１】
本発明の実施の形態によるインクデータ伝送装置１０−１は、使用のために、描画領域（カンバス）の最新の（更新された）状態を決定し、規定の単位Ｔ（例えば５ミリ秒）ごとに、ストロークオブジェクト２１０の断片化（又は完全な）データを生成するために、ペンイベントデータを継続的に処理する。インクデータ伝送装置１０−１はさらに、コンテキスト情報（入力２）の各部分を選択することにより、関連する描画スタイルオブジェクト２３０及びメタデータオブジェクト２５０を生成し、入力３に基づいて操作オブジェクトを生成し、生成されたオブジェクトを、中継サーバ１０−２及び受信装置１０−３，１０−４、・・・、１０−ｎへの送信のために伝送フォーマットに整形する。規定の単位Ｔは、コラボレーションアプリケーションからの要求に基づいて適応的に決定され得る。
【０２８２】
図２９は、中継（又はストリーミング）サーバ１０−２のブロック図である。中継サーバ１０−２は、１以上の伝送クライアント装置から１以上の受信クライアント装置１０−３，１０−４、・・・、１０−ｎに受信される断片化データを中継することにより、リアルタイムコラボレーションサービスを提供する。中継サーバ１０−２の機能は、単一の装置内に含まれることとしてもよいし、ネットワークによってリンクされた複数のサーバに分散されることとしてもよい。
【０２８３】
中継サーバ１０−２は、メッセージ受信部５１０、描画領域管理部５２０、インクデータ中継部５４０、及びメッセージ送信部５１１を含む。
【０２８４】
メッセージ受信部５１０は、制御メッセージとデータメッセージとを、伝送装置１０−１から別々に受信する。これらのメッセージは、あるプロトコル（ＲＴＰ／ＨＴＴＰ／ＨＴＴＰＳ（ＳＳＬ）／ＴＣＰ／ＵＤＰ／Ｗｅｂｓｏｃｋｅｔなど）に従う通信パケットの形で、かつ、予め定義されるか、或いは、装置が初めて共通描画領域に参加したときに装置間で行われるオンデマンド交渉に基づいて定義されてよいメッセージタイプ（断片化、再送信、最大遅延など）で、伝送装置１０−１と中継サーバ１０−２の間を伝送される。図示するように、メッセージ受信部５１０は、制御メッセージとデータメッセージを区別するために複数の受信ポートを採用することができる。ただし、制御メッセージとデータメッセージを区別するために他の方法も採用され得る。例えば、制御メッセージを処理する分離装置（サーバ）が、データメッセージを処理する中継サーバ１０−２とは別に用意され得る。また、共通の受信ソケットバッファから取得可能なメッセージヘッダが２つのタイプのメッセージを区別するために使用されてもよい。
【０２８５】
描画領域管理部５２０は、複数の装置から入力され、中継サーバ１０−２を通じて交換されたインクデータ２００が異なるレイヤとして互いに重ねられる描画領域の状態を管理する。描画領域管理部５２０は、サービス管理部５２２及び描画領域情報管理部５２４を含む．
【０２８６】
サービス管理部５２２は、本発明の実施の形態によるインクデータ中継方法を用いるサービスを管理する。サービス管理部５２２は、例えば会計機能、新たなユーザの認証機能、共通描画領域への契約ベースの視聴アクセスを提供し、共通描画領域に対してインクデータ２００を入力するために各ユーザを許可し或いは許可しない機能など、すなわち所謂ＡＡＡ（会計(Accounting)、認証(Authenticating)、許可(Authorizing)）機能を実行するために、外部サーバ（図示せず）と協力する。
【０２８７】
描画領域情報管理部５２４は、インクデータ中継方法の動作を制御するために使用される描画領域情報を管理する。描画領域情報は一般に、３つのタイプの情報（図３０Ａｋ５２４＿１、図３０Ｂの５２４＿２、図３０Ｃの５２４＿３）を含む。描画領域情報管理部５２４は、これら３つのタイプの情報を管理し、これら３つのタイプの情報の更新に基づいて、各描画領域（カンバス）に接続されている１以上のユーザを列挙するユーザ接続リスト５４１の維持、パージを行う。
【０２８８】
図３０Ａは、インクデータ２００の送受信に関連する一組の通信パラメータ５２４＿１を示している。これらの通信パラメータは、例えばアプリケーションが起動する時点で通信している装置の間で交換される。通信パラメータ５２４＿１は、以下を含み得る。
【０２８９】
（５２４＿１ａ）パケット再送信パラメータは、インクデータ２００を運ぶために使用される通信パケット（又はプロトコルスタック）に再送メカニズムがビルトインされているか否かを定義する。例えば、送信に（再送信サポートのある）ＴＣＰを用いる一方で受信に（再送信サポートのない）ＵＤＰを用いる場合、送信にはＴＲＵＥが設定され、受信にはＦＡＬＳＥが設定される。これは例えば、強固かつ信頼性の高い伝送装置１０−１から中継装置１０−２へのインクデータの送信を実現する一方、同時に、リアルタイムで知覚可能な遅延のない、中継サーバ１０−２から複数の受信装置１０−３，１０−４、・・・、１０−ｎへのインクデータ２００のストリーミングを提供する。
【０２９０】
（５２４＿１ｂ）ＭＴＵ(Maximum Transmission Unit)、ＭＳＳ(Maximum Segment Size)パラメータは、伝送装置が接続されるメディア（例えばイーサネット（登録商標））のタイプに依存するＭＴＵ及びＭＳＳを定義する（例えば１４６バイト）。
【０２９１】
（５２４＿１ｃ）ストロークデータ断片化可否パラメータは、ストロークオブジェクト２１０を、それぞれが全体としてのストロークオブジェクト２１０より小さい複数の断片に断片化するか否かを設定する。
【０２９２】
（５２４＿１ｄ）最大Ｒｘ遅延パラメータは、受信遅延の許される最大値を、例えばミリ秒（ｍｓｅｃ）で設定する。
【０２９３】
（５２４＿１ｅ）メッセージ暗号化スキームパラメータは、暗号化が使用されるか否か、されるとしたら何の暗号化／復号アルゴリズムが使用されるのか、を定義する。
【０２９４】
（５２４＿１ｆ）メッセージ再送パラメータは、通信レイヤに再送メカニズムを含まないＵＤＰのようなプロトコルのために、メッセージレイヤで再送信を実行するか否かを定義する。例えば、このパラメータは、メッセージレイヤでの再送信を使用すること（図３６Ａ）と、メッセージレイヤでの再送信を使用しないこと（図３６Ｂ）とを切り替えるために使用される。
【０２９５】
（５２４＿１ｇ）音声同期可否パラメータは、音声とストロークデータが同期して再生されるか否かを定義するもので、断片の形態で又は完全な形態（ストローク単位で）でインクデータ２００を送信するか否かを決定するために使用され得る。例えば、音声とストロークデータが同期して再生されるとき、ストロークデータは、各断片が対応する音声データと同期して再生され得るよう、それぞれにタイプスタンプが付された各断片に断片化され得る。
【０２９６】
（５２４＿１ｚ）他パラメータ設定識別子は、通信パラメータの所定の組を定義する。
【０２９７】
図３０Ｂは、インクデータ２００の描画（レンダリング）に関連する一組の描画パラメータ５２４＿２を示しており、以下を含み得る。
【０２９８】
（５２４＿２ａ）描画領域ＩＤパラメータは、ユーザ装置が参加し得る共通描画領域を設定する。図示した例では、図３０Ｂは、共通描画領域（又はカンバス）ＩＤである「＃１２３」を示している。いくつかの実施の形態では、中継サーバ１０−２は、それぞれの中で共同編集が行われており、ユーザ装置が参加のために１つを選択できる複数のカンバスの複数のＩＤをユーザに提示することとしてもよい。他の実施の形態では、ユーザ装置が新しい描画領域を開始するとき、ユニークな描画領域ＩＤが新しく開始された描画領域に割り当てられることとしてもよい。
【０２９９】
（５２４＿２ｂ）ユーザローカルなカンバスのオフセット、回転、スケールのパラメータは、共通描画領域のグローバルな座標システムと、共通描画領域の編集セッションに参加するために使用されるユーザ装置のローカルな座標システムとの間の関係を定義する。例えば、これは２人の異なるユーザが、２つの異なる角度から、それぞれ描画中のインクデータの上部及び下部を編集することを可能にする。
【０３００】
ペンツールセットＩＤは、連帯して描画領域上にペンストロークがどのように現れるかを定義するペンパラメータの集合（ペン先形状、色、ストローク幅、インクの透明度／不透明度など）に割り当てられるＩＤである。複数のＩＤが複数の集合のために予め定義されており、ユーザは、共通描画領域上の共同編集セッションに参加するときに、その中から１つを選択することができる。
【０３０１】
図３０Ｃは、ストロークデータの優先度、フィルタリング、サービス品質（ＱｏＳ）を含む共通描画領域に対するユーザアクセスを管理するポリシーに関連する一組のユーザポリシーパラメータ５２４＿３を示しており、以下を含み得る。
【０３０２】
（５２４＿３ａ）ユーザアカウント優先度パラメータは、インクデータ伝送サービス内でストロークデータに与える優先度を設定する。図示した例では、このパラメータは「Ｈｉｇｈ」に設定されており、これは例えば、中継サーバ１０−２のリソース調停（又はＱｏＳ）制御５４４が、「Ｈｉｇｈ」優先度のストロークデータを、優先度が「Ｌｏｗ」に設定された他のストロークデータに対して優先的に処理及び送信することを意味する。
【０３０３】
（５２４＿３ｂ）ブロックユーザリストは、あるユーザがブロックしたいと思う他のユーザ、すなわちそのユーザからのインクデータ２００を受信したくないと願うユーザを含む。このリストは、ユーザがインクデータ２００を送信したいと願わないユーザも含み得る。そのユーザからの受信又はそのユーザへの送信を否定するためにユーザをリスト化する代わりに、そのユーザからの受信又はそのユーザへの送信を受け入れるためにユーザをリスト化することも可能である。
【０３０４】
インクデータ中継部５４０は、データメッセージが追加（描画）される描画領域に現在接続されているすべての装置をリスト化してなる接続リスト５４１を参照して、伝送装置１０−１から受信したデータメッセージを、１以上の他の受信装置に中継する。接続リスト５４１はまた、接続リスト５４１内に列挙された各装置と通信するためにどの通信、描画、ユーザポリシーのプロトコルが使用されるべきかをリスト化している。様々な実施の形態において、インクデータ中継部５４０は、パケット単位ではなくメッセージ単位で、しかし「１つの流れ」として、ストロークオブジェクトメッセージを処理する（転送する、落とす）。
【０３０５】
インクデータ中継部５４０は、新ストロークフロー検出部５４２、リソース調停（又はＱｏＳ）制御５４４、フィードバック送信部５４６（ＤＡＴＡ＿ＴｏＳｅｌｆ）、及びオールキャスト送信部５４８（ＤＡＴＡ＿ＴｏＯｔｈｅｒｓ）を含む。
【０３０６】
新ストロークフロー検出部５４２は、受信メッセージのヘッダをチェックし、そのメッセージが新しいストローク（「ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ」）を含むか否か、又、そのメッセージが、中継処理が既に始まっているものと同じ（現在の）ストロークオブジェクト２１０の断片化データを含むか否かを判定する。
【０３０７】
リソース調停（又はＱｏＳ）制御５４４は、各ストロークオブジェクト２１０の始端を参照することにより、そしてもし必要なら各ストロークオブジェクト２１０の終端も参照することにより、送信リソースを制御する。新しいストローク（ＢＧＮＯＳ）の始端を処理するとき、リソース調停（又はＱｏＳ）制御５４４は、様々な基準に基づき、描画領域（カンバス）内に新しいストロークを受け入れるか否かを決定する。例えば、もし伝送装置１０−１から新たに受信されたストロークオブジェクト２１０のストロークＩＤが既に描画領域内で使用されているストロークＩＤと同一であるならば、リソース調停（又はＱｏＳ）制御５４４は、同じストロークＩＤを有する新たに受信されたストロークオブジェクト２１０を拒絶することができる。他の例として、もし特定の時点でストロークオブジェクト２１０を転送し又は処理するためにネットワークリソースが不十分であると判明した場合、リソース調停（又はＱｏＳ）制御５４４は、ネットワークリソースの状況が改善するまで、新たに受信されるストロークオブジェクトの入力を拒絶する。これは、十分なネットワーク又はコンピュータのリソースがないことによりストロークオブジェクト２１０を完成させる前に入力処理を中止するためだけに、ユーザが新しいストロークオブジェクト２１０の入力を開始するという状況が発生することを防止する。さらなる例として、もし特定の装置（ユーザ）が一時的に更新権を否定されるのであれば、リソース調停（又はＱｏＳ）制御５４４は、その特定の装置によって生成されたすべてのストロークオブジェクトを拒絶する。例えば、リソースは、「Ｈｉｇｈ」優先度（図３０Ｃの５２４＿３）を有するユーザから伝送されたストロークデータを処理することに、「Ｌｏｗ」優先度を有するユーザから伝送されたストロークデータに対して先取権のある状態で割り当てられる。リソース調停（又はＱｏＳ）制御５４４は、いかなる装置から受信される新たなストロークをも拒絶すると決定したとき、フィードバック送信部５４６に「ＲＥＪＥＣＴ」を送信する。リソース調停（又はＱｏＳ）制御５４４は、ある装置から受信される新たなストロークを受け入れると決定したとき、他のすべての装置（その新たなストロークを送信した装置を除く）に対し、オールキャスト送信部５４８を介して、その新たなストロークを送信（転送）する。
【０３０８】
本発明の様々な実施の形態によれば、各ストロークオブジェクト２１０が断片化データに断片化され、順番に送信及び中継されるので、リモートに位置する装置は、知覚可能な時間遅延なしでリアルタイムに入力されるのと同様に、ストロークオブジェクト２１０を共有することができる。同時に、リソース調停（又はＱｏＳ）制御５４４は、複数のユーザの間のいかなる衝突をも解決し、新たなストロークオブジェクト２１０を入力する権利を認められたすべてのユーザに対して十分なリソースが提供されること（例えば、最初のユーザが入力している間、他のユーザは入力することを一時的に妨げられるとしても）を確実にするトラフィック制御機能を実行する。
【０３０９】
フィードバック送信部５４６（ＤＡＴＡ＿ＴｏＳｅｌｆ）は、中継サーバ１０−２に対してメッセージを送信した伝送装置１０−１に対してのみ応答を送り返す。例えば、リソース調停（又はＱｏＳ）制御５４４が伝送装置１０−１による新たなストロークオブジェクト２１０の入力を許可しないと決定したとき、フィードバック送信部５４６は、その伝送装置１０−１に対してのみ拒否メッセージ（図３７参照）を送信する。
【０３１０】
オールキャスト送信部５４８（ＤＡＴＡ＿ＴｏＯｔｈｅｒｓ）は、描画領域に現在接続されているすべての装置（接続リスト５４１に含まれるもの）に対してメッセージを送信する。ただし、中継サーバ１０−２に対してそのメッセージを送信した伝送装置１０−１を除く。図示した例では、伝送装置１０−１からメッセージが受信され、中継可能であると判定されたとき、オールキャスト送信部５４８は、すべての受信装置１０−３，１０−４、・・・、１０−ｎに向けてメッセージを送信する。
【０３１１】
中継サーバ１０−２は、このようにして、一の伝送装置からインクデータ２００を受信し、全体としてのネットワークリソースの効率的な利用を最適に制御しつつ、それを１以上の受信装置に対して選択的に中継する。
【０３１２】
図３１は、図２６のインクデータ通信システムのインクデータ受信装置１０−３のブロック図である。受信装置１０−３は、ネットワーク通信部３１０（Ｒｘ，Ｔｘ）、インクデータ処理部１００Ｒ、アプリケーション部３００−２、グラフィック処理部３００、オペレーティングシステム４００−２を含む。
【０３１３】
オペレーティングシステム４００−２上で動作するアプリケーション部３００−２は、本発明の実施の形態によるインクデータ受信方法を利用するアプリケーションを含む。そのアプリケーション又はオペレーティングシステムの種類は、伝送装置１０−１のアプリケーション部３００−１のアプリケーション（又はオペレーティングシステム）と同じであってもよいし、両方のアプリケーションが共通描画領域を通じて互いにインクで゛―他２００の入力、送信、及び受信を許容する限りにおいて異なっていてもよい。これは、共通に定義される（標準化される）インクデータ２００が、異なるアプリケーション及びオペレーティングシステムの間で、特定のプラットホームから独立して、送信及び受信され得るからである。受信装置１０−３が共通描画領域の編集セッションに参加する通信初期化のタイミングで、アプリケーション部３００−２は、他のユーザがおそらく異なるレイヤとしてそれぞれのインクデータ２００を重ねている描画領域（カンバス）の最新状態をダウンロードする。
【０３１４】
アプリケーション部３００−２は、それが生成したインクデータ２００を、中継サーバ１０−２の描画領域に対してアップロードすることができる。受信装置１０−３によってローカルに生成されたインクデータ２００は、共同編集セッションにおそらく先立って、記録フォーマットとされ得る。一方、共同編集セッションの間にリアルタイムで生成されたインクデータ２００は、伝送フォーマットとされ得る。記録フォーマット及び伝送フォーマットどちらのインクデータ２００であっても、中継サーバ１０−２に対してアップロードされ得る。この接続の中で、アプリケーション部３００−２は、インクデータ生成部１２０Ｒによって生成されたインクデータ２００を出力し、描画領域内に重ねるようグラフィック処理部３００に命令する。
【０３１５】
ネットワーク通信部３１０（Ｔｘ，Ｒｘ）は、伝送装置１０−１のネットワーク通信部１１２Ｔ（Ｔｘ，Ｒｘ）に対応する。ネットワーク通信部３１０は、ネットワークインターフェイスを介して通信パケット（Ｐｃｋｔ）を受信し、そのパケットのペイロード部分からメッセージを取り出す。受信装置１０−２によって使用される受信プロトコルは、伝送装置１０−１によって使用される通信プロトコルとは異なっていてもよい。例えば、伝送装置１０−１は、中継サーバ１０−２にメッセージを送信するためにＴＣＰ、ＨＴＴＰオーバーＴＣＰ、ＨＴＴＰＳオーバーＳＳＬのような再送メカニズムを含むプロトコルを採用し得る一方、中継サーバ１０−２は、受信装置１０−２にメッセージを送信するために、ＵＤＰ、ＲＴＰオーバーＵＤＰのような、それほど信頼できないけれもストリーミングに適したプロトコルを採用することとしてもよい。どの通信プロトコルを使用するかは、通信する装置の間で通信開始時に交渉を通じて決定されればよい。
【０３１６】
インクデータ処理部１００Ｒは、インクデータ整形部１４０Ｒ及びインクデータ生成部１２０Ｒを含み、伝送フォーマット又は記録フォーマットのいずれかで整形されたインクデータからインクデータ２００を取り出す。インクデータ処理部１００Ｒは、伝送装置１０−１のインクデータ処理部１００Ｔに対応する。
【０３１７】
インクデータ整形部１４０Ｒは、インクデータ通信部１４４Ｒ及び記録フォーマット操作部１４２Ｒを含む。インクデータ通信部１４４Ｒは、伝送フォーマットの形式で更新されたインクデータ２００を処理する。具体的には、インクデータ通信部１４４Ｒは各データメッセージ内の情報（例えばストロークＩＤ）を取り出し、送信側によって規定の単位Ｔで分割されたストロークデータ２１０の断片である断片化データを出力する。インクデータ通信部１４４Ｒはまた、ストロークオブジェクト２１０のために、１番目のメッセージ、すなわち「ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ」メッセージに含まれる描画スタイルオブジェクト２３０を取り出す。描画スタイルオブジェクト２３０は、関連するストロークオブジェクトをレンダリング（描画）するために必要な情報を含む。
【０３１８】
記録フォーマット操作部１４２Ｒは、最新の描画領域を再構築するために、中継サーバ１０−２のリポジトリに記憶（アーカイブ）されるものとして、記録フォーマットで描画領域情報を受信し処理する。
【０３１９】
アプリケーション３００−２は、出力／入力されるインクデータのフォーマットに従い、インクデータ通信部１４４Ｒから又は記録フォーマット操作部１４２Ｒから選択的にインクデータ２００を受信するよう、インクデータ生成部１２０Ｒを制御する。
【０３２０】
例えば、アプリケーションが初めて共通描画領域における共同編集セッションに参加するとき、記録フォーマット（ＳＦＦ）で書かれたファイル内の最新の描画領域情報を引き出すために、「ＣＴＲＬ＿ＪＯＩＮ＿ＲＥＱ」要求が発行される。引き出されたの最新の描画領域のインクデータ２００は記録フォーマットで書かれており、そのようなものとして、記録フォーマット操作部１４２Ｒで処理される。続けて引き出されるインクデータ２００は、図３４に示した「ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ」及び他のメッセージ（ＤＡＴＡ  ＩＮＫ＊）のように、伝送フォーマット（ＳＭＦ）であり得、そのようなものとして、インクデータ通信部１４４Ｒにおいて一度に１メッセージ（又は１ストロークを表す複数のメッセージ）が処理される。
【０３２１】
インクデータ２００のリアルタイム処理を実現するため、インクデータ処理部１４４Ｒは、ストロークオブジェクト２１０の断片化データを、ストロークオブジェクト２１０を形成するすべてのポイントオブジェクト（又は断片化データ）を引き出すのを待つのではなく、それらが受信されたときにグラフィック処理部３００に対して出力する。
【０３２２】
受信装置１０−３のインクデータ生成部１２０Ｒは、伝送装置１０−１のインクデータ生成部１２０Ｔの送信処理に対応する受信処理を実行する。
【０３２３】
それぞれ複数のポイントオブジェクト、描画スタイルオブジェクト２３０、メタデータオブジェクト２５０、及び、ストロークオブジェクトに関連する操作オブジェクトからなる複数のストロークオブジェクトからなるインクデータ２００は、すべて、送信側で既に生成されている。したがって、受信側で新たに生成される必要はない。むしろ受信側では、インクデータ生成部１２０Ｒが、そのアプリケーション＃２によって利用可能な形態でインクデータ２００を記憶し、更新する。例えば、インクデータ生成部１２０Ｒは受信した第１のデータ型（例えば整数型）のインクデータ２００を、アプリケーション＃２によって使用可能な第２のデータ型（例えばｆｌｏａｔ型、ｄｏｕｂｌｅ型）のインクデータ２００に変形し、変形したデータを、アプリケーション部３００−２又はアプリケーション部３００−２によって使用されるグラフィック処理部３００に提供する。
【０３２４】
受信装置１０−３のグラフィック処理部３００は、伝送部１０−１のグラフィック処理部３００に類似する。グラフィック処理部３００は、受信したインクデータ２００に基づいてピクセルデータを生成する処理を行い、受信装置１０−３のディスプレイスクリーン１１３上にストロークオブジェクトをディスプレイする。
【０３２５】
図３２は、本発明の実施の形態による、伝送装置１０−１、中継サーバ１０−２、及び受信装置１０−３の間で行われるインクデータ通信を説明するシーケンス図である。
【０３２６】
図３２において、伝送装置１０−１、中継サーバ１０−２、及び受信装置１０−３の機能及びセクションは、上記図２７、図２９、図３１で使用されたものと同じ参照番号により識別される。本シーケンスは、既に開始されているリアルタイムコラボレーションセッションに伝送装置１０−１が参加し、複数のユーザにより入力されたインクデータ２００が互いに重ねられ得るケースを説明する。
【０３２７】
＜アプリケーション部３００−１を開始＞
ステップＳ６０１では、伝送装置１０−１が、本発明の実施の形態によるインクデータ通信方法を利用するアプリケーション部３００−１を活性化する。アプリケーション部３００−１の活性化は、インクデータ処理部１００内のインクデータ生成部１２０Ｔ及びインクデータ整形部１４０Ｔの活性化のきっかけとなる。
【０３２８】
初めに、伝送部１０−１のアプリケーション部３００−１が、中継サーバ１０−２の画像領域管理部５２０内に保持されている複数の描画領域のうちの１つをターゲット描画領域（５２４＿２ａ）として特定する制御メッセージ（ＣＴＲＬ＿ＪＯＩＮ＿ＲＥＱ。パラメータ５２４＿１，５２４＿２，５２４＿３を有していても有していなくてもよい）を発行する。中継サーバ１０−２の描画領域管理部５２０は、特定された描画領域の最新状態を、高度に圧縮されていてもよい記録フォーマット（ＳＦＦ）で伝送装置１０−１に返す（ＣＴＲＬ＿ＪＯＩＮ＿ＲＥＰ）。その後、アプリケーション部３００−１は、記録フォーマットで書かれたインクデータ２００に基づいて描画領域の最新状態を再構築するよう、記録フォーマット操作部１４２Ｔを呼び出す。伝送装置１０−１はそれにより、受信装置１０−３及び１０−４のような他の装置が互いに重ねられるインクデータ２００の描画（入力）を既に開始しているかもしれない描画領域（又はインクデータの現在状態）の最新状態をローカルに再構築する（又は初期構築する）。この時点で、伝送装置１０−１は入力待ち状態に入る。
【０３２９】
＜インクデータ伝送処理＞
伝送装置１０−１は、トリガーとして「ペンイベントデータ入力開始」の検出を用いることにより、インクデータ伝送処理を実行する。ステップＳ６０５では、伝送装置１０−１の入力処理部１１１がストロークの開始点の入力を検出する。図３２では、ステップＳ６０５からステップＳ６０９までのハッチングされた期間「ｄ」の間、ペンイベントデータが継続的に、インクデータ処理部１００Ｔに入力される。その間、１つのストロークがストローク開始点で始まり、ストローク終了点で終わるように描かれる（以下、「ストローク単位」と称する）。この時間（期間ｄ）の間、入力処理部１１１は単位Ｔごとに継続的に、例えば５ミリ秒ごとに、インクデータ生成部１２０Ｔに対してペンイベントデータを出力する。
【０３３０】
インクデータ処理部１００Ｔは、ペンイベントデータ入力の開始をトリガとして用い、アプリケーション部３００−１から受信されるコンテキスト情報（入力２）に基づいて描画スタイルオブジェクト２３０を生成する処理を開始する。具体的には、インクデータ処理部１００は、アプリケーション部３００−１から受信されるペンイベントデータに関するコンテキスト情報（入力２）に基づいて、共通描画領域（カンバス）上にストロークオブジェクト２１０を描画（レンダリング）するために使用される情報を含む描画スタイルオブジェクト２３０を生成する。インクデータ処理部１００は、図画をレンダリングするため、受信側にとって必要であるコンテキストデータの一部分を選択的に取り出すことにより、描画スタイルオブジェクト２３０を生成する。描画スタイルオブジェクト２３０は、ストロークの色（赤、緑、青）、ペン先タイプ（ブラシ、クレヨン、鉛筆）、透明度又は不透明度の値（アルファ）、ストロークオブジェクト２１０内で透明度又は不透明度を変化させることが許容されるか、ストローク（トレース）の幅（例えば０．２〜６．０ポイント）、ストロークオブジェクト２１０内でストローク（トレース）の幅を変化させることが許容されるか、ラスター化の方法、ストロークのテクスチャのタイプなどのような情報を含む。
【０３３１】
描画スタイルオブジェクト２３０の生成は、ペンイベントデータの入力に基づくストロークオブジェクト２１０の開始点の入力の検出によって、すなわち図３２のＳ６０５で、トリガされる。したがって、描画動作を開始する前にユーザが繰り返しペンの色を変更したとしても、古い（時代遅れの）色情報は描画スタイルオブジェクト２３０内には含まれず、したがって、中継サーバ１０−２に送信されて例えば送信リソースを取り散らかすこともない。
【０３３２】
インクデータ処理部１００Ｔのインクデータ整形部１４０Ｔ（より具体的にはインクデータ通信部１４４Ｔ）は、ストロークオブジェクト２１０が生成されることのために、生成された描画スタイルオブジェクト２３０を最初のデータメッセージ（ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ１００１）に加える（図３４参照）。
【０３３３】
ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ１００１メッセージは、そのメッセージが、そのストロークオブジェクト２１０（例えばメッセージタイプＢＧＮＯＳ、Ｆ１０１）、描画領域ＩＤ（Ｆ１０２）、描画領域内でストロークオブジェクト２１０を一意に識別するために使用されるストロークＩＤ（Ｆ１０３）、描画スタイルオブジェクト２３０（Ｆ１０４）、及び、オプションで（もし空間が許せば）ストロークオブジェクト２１０の部分を構成するいくつかの断片化データ（Ｆ１０５）のための最初のメッセージであることを示す情報と、それに続くＣＲＣ誤り訂正値とを含む。
【０３３４】
描画スタイルオブジェクト２３０を生成し最初のデータメッセージ（ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ１００１）に含めた後、中継サーバ１０−２から「ＡＣＣＥＰＴ」メッセージの受信を待つ代わりに、伝送装置１０−１は、ストローク単位より小さい規定の単位Ｔごとに、継続的に断片化データを生成する。複数の断片化データは、連帯して１つのストロークオブジェクト２１０を形成する（Ｓ６０８）。具体的には、ペンイベントデータ入力操作の終了が検出されるまでの間、インクデータ生成部１２０Ｔは、インクデータ２００を製造するために、規定の単位Ｔごとに１つのストローク（又はトレース）を形成するペンイベントデータを処理し、インクデータ整形部１４０Ｔは、規定の単位Ｔに対応する通信メッセージ（図３４の「ＤＡＴＡ＿ＩＮＫ＿ＭＶＤＯＳ＿１，＿２，・・・，＿ｎ」）の形に断片化データを整形し、各メッセージ内の断片化データのそれぞれにストロークＩＤを割り当てる。
【０３３５】
ここで使用される規定の単位Ｔは、ペンイベントデータ入力のサンプリング時間単位と同じかそれより大きい時間の単位、例えば５ミリ秒であってよい。したがって、単位Ｔは、５ミリ秒、５０ミリ秒、２００ミリ秒などであり得る。代わりに又は追加で、規定の単位Ｔは、２５６バイト及び５１２バイトの固定長のような、データサイズの単位であってもよい。データ（バイト）サイズベースの単位Ｔは、図３４に示した所与の通信プロトコルに従うメッセージ転送単位（ＭＴＵ）のデータ（バイト）サイズより小さく設定され得る。さらなる代替として、単位Ｔは例えば、時間単位Ｔとデータサイズ単位Ｔとの間で動的に変更又は切り替えられることとしてもよい。
【０３３６】
単位Ｔは、各アプリケーション又はタイミングの要求に応じて、適応的又は選択的にアプリケーション部３００−１によって設定され得る。例えば、ストロークオブジェクト２１０が、あたかもリアルタイムに「描かれて」いるかのように継続的かつ成長的に受信装置１０−３上に現れることを可能にする目的のため、アプリケーション部３００−１は、生成されたポイントオブジェクト間で必要な補間処理が生じ得る最小の単位に対応するように単位Ｔを設定することとしてもよい。他の例として、同じメッセージヘッダ情報（例えば、１つのストロークオブジェクト２１０のためのすべてのメッセージに関連付けられるストロークＩＤ）を送らなければならないことに関連する通信プロトコルのオーバーヘッド（通信量）を低減する目的のため、アプリケーション部３００−１は、すなわちストロークオブジェクト自身の単位（ストローク単位）にまで至る可能な限り大きな値に単位Ｔを設定することとしてもよい。他の例として、ペンイベントデータの入力レートと表示レートとの間に大きな違いがある場合（例えば、ペンイベント入力は３〜４ミリ秒で到来するが、表示は１５ミリ秒ごとにリフレッシュされる場合）にメッセージ全体を低減する目的で、アプリケーション部３００−１は、表示レートにマッチするよう単位Ｔを設定してもよい。このケースでは、各ストローク断片化メッセージは、１以上のポイントオブジェクトのためのデータを含むであろう。
【０３３７】
図３３は、伝送装置１０−１及び／又は中継サーバ１０−２で実行され得る単位Ｔを規定する方法を説明するフローチャートである。ステップＳ７０１では、伝送装置と受信装置の間、又は、伝送／受信装置と中継サーバ１０−２との間でパラメータＴが明示的に交渉されるか否かが判定される。もし「ＹＥＳ」であれば、明示的に交渉された値が単位Ｔとして設定される（ステップＳ７０３）。例えば、単位Ｔは、ストロークデータが断片化されると設定（Ｓ５２４＿１ｃ、「ＴＲＵＥ」）し、かつ、受信遅延の最大値が１００ミリ秒であると設定（Ｓ５２４＿１ｄ、「１００」ミリ秒）するパラメータに従って交渉され定義され得る。一方、もしステップＳ７０１の判定結果が「ＮＯ」であれば、アプリケーション部３００の時間に関係する他の要求が単位Ｔを設定するために使用される。例えば、ステップＳ７０５では、インクデータ２００と他のデータ（音声、ビデオなど）が同期して再生されるかが判定される。もし「ＹＥＳ」であれば、ステップＳ７０９で、「アグリゲーションが要求されたか」が判定される。これについては、図４３及び図４４を参照して後に完全に説明されるであろう。もし「ＮＯ」であれば、ステップＳ７１１で、１ストロークに対応する単位より短い単位Ｔが単位Ｔとして設定される。また、規定の単位Ｔごとの（断片化された）データのそれぞれに、他のタイプのデータとの同期再生の目的のためのタイムスタンプが付与される。一方、もしステップＳ７０５の判定結果が「ＮＯ」であれば、タイミングについて特段の制約はないと仮定し、単位Ｔは、例えばストローク全体の単位のようなデフォルト値に設定される。
【０３３８】
図３２に戻り、伝送装置１０−１の入力処理部１１１がペンイベントデータ入力の終了（Ｓ６０９）を検出すると、すなわち、１つのストロークオブジェクト２５０の入力操作の終了を検出すると、インクデータ処理部１００Ｔは、ステップＳ６１１においてメタデータオブジェクト２５０を生成する。メタデータオブジェクト２５０は、ディスプレイ上にストロークオブジェクト２１０を描画（レンダリング）するために使用される（描画スタイルオブジェクト２３０に含まれる）情報以外の、生成されたストロークオブジェクト２１０に関する情報を含む。例えば、メタデータオブジェクト２５０は、著者情報、ペンＩＤなどを含む。
【０３３９】
＜インクデータ中継処理＞
中継サーバ１０−２は、１つのストロークデータ２１０のために断片化データを、伝送装置１０−１からのデータメッセージの中において受信されたとき、修正することなく受信装置１０−３に転送する。
【０３４０】
中継サーバ１０−２は、まず、伝送装置１０−１からストロークオブジェクト２１０の最初のメッセージ（ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ）を受信する。それから、図３２のステップＳ６１３（受け入れ）において、リソース調停（又はＱｏＳ）制御が受信された最初のメッセージＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳとともに始まるストロークオブジェクト２１０の新たなエントリ（更新）を許可するか否かを決定する。図３２のシーケンスは、リソース調停（又はＱｏＳ）制御が、伝送装置１０−１によって生成されたストロークオブジェクト２１０のエントリを許可すると決定した場合を図示している。中継サーバ１０−２はその後、単にメッセージヘッダを確認することにより同じストロークＩＤに関連付けられたすべての後続のデータメッセージを識別し転送できるようストロークＩＤを格納し、受信装置１０−３に対して最初のメッセージＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳを転送する。
【０３４１】
中継サーバ１０−２は、同じストロークオブジェクト２１０のために後続のデータメッセージ（ＤＡＴＡ＿ＩＮＫ＿ＭＶＤＯＳ）を、それらのヘッダに含まれるストロークＩＤを確認しつつ、リソース調停（又はＱｏＳ）制御に後続のデータメッセージのそれぞれについて独立した決定をさせることなく転送し続ける。このように、リソース調停の決定は、ストロークごとに１回だけ実行される必要がある。
【０３４２】
ストロークオブジェクト２１０のための複数のデータメッセージのうちの最後の１つが受信されるステップＳ６１５では、中継サーバ１０−２はその最後のメッセージを受信装置１０−３に転送し、リソース調停（又はＱｏＳ）制御は、この時点で完全に完成されたそのストロークオブジェクト２１０を転送するための中継サーバ１０−２の処理リソースを解放する。
【０３４３】
ステップＳ６１７では、１つのストロークオブジェクト２１０の転送の完了に続く後処理動作として、ストロークオブジェクト２１０が描画領域に追加され、同時に中継サーバ１０−２の描画領域リポジトリに格納される。
【０３４４】
中継（転送）処理がストロークオブジェクト２１０ごとに実行されることから、伝送フォーマットでリアルタイムに転送されたインクデータ２００は、中継処理が完了した時点で記録フォーマットに容易に変換されることができ、圧縮された記録フォーマットでリポジトリ内に格納される。このことは、複数の装置の１つによって生成されたストロークオブジェクト２１０の中継が完了する度に、中継サーバ１０−２が、その複数の装置によって共有される共通描画領域（又はカンバス）の状態を効率的に更新することを可能にする。
【０３４５】
＜インクデータ受信処理＞
受信装置１０−３はまず、新しく生成されたストロークオブジェクト２１０の最初のデータメッセージ（ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ）を中継サーバ１０−２から受信する。受信装置１０−３は、例えば色、ペン先タイプ、透明度／不透明度、レンダリング方法などのような描画スタイルオブジェクト２３０に含まれる情報を用いて、そのディスプレイ上に受信したストロークオブジェクト２１０の断片化データを描画するための描画（レンダリング）オペレーションを開始する。
【０３４６】
インクデータ処理部１００Ｒは、描画スタイルオブジェクト２３０に含まれる同じ情報を用いて、続けて受信されるデータメッセージに含まれる同じストロークオブジェクト２１０の断片化データを処理し続けることによってインクデータ２００を生成し、そのインクデータ２００をグラフィック処理部３００に出力する。
【０３４７】
グラフィック処理部３００は、断片化されたインクデータ２００の描画（レンダリング）処理を、それらが受信されるに従って開始及び継続する。図３２のステップＳ６１７−１〜Ｓ６１７−ｎはそれぞれ、異なる時刻のディスプレイ上におけるストロークオブジェクト２１０のレンダリングされた形態を表している。図３２は、ストロークオブジェクト２１０が部分的にのみ、しかし成長しながら描画される状態Ｇ１，Ｇ２，Ｇ３から、ストロークオブジェクト２１０が完全に描画される状態Ｇ４まで、ユーザが他のユーザによって紙上に描かれた実際のペンストロークを見る過程と同様にしてストロークオブジェクト２１０の断片化データがますます受信され処理されるにつれ、そのストロークオブジェクト２１０が連続的に描画されることを示している。
【０３４８】
図３４は、本発明の一実施の形態による、複数の装置間でのリアルタイム通信に適した通信パケットの形にアレンジされた、データメッセージの伝送フォーマットのサンプルを図示している。図示した例は、伝送装置１０−１が接続されているメディアインターフェイス（例えばイーサネット（登録商標））により規定される通信プロトコルのメッセージ転送単位（ＭＴＵ）より小さい規定の単位Ｔを用いるものである。
【０３４９】
図３４の一番上にある通信パケットは、伝送装置１０−１のネットワーク通信部１１２から出力される通信パケットを示している。
【０３５０】
図３４の「ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ」は、新しいストロークオブジェクト２１０のための複数のデータメッセージのうちの最初のデータメッセージを示している。
【０３５１】
Ｆ１０１フィールドは、データメッセージの型を特定する。最初のデータメッセージ「ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ」のＦ１０１フィールドは、それが新しいストロークオブジェクト２１０のための複数のデータメッセージのうちの最初のものであることを意味する「ＢＧＮＯＳ」を示す。
【０３５２】
Ｆ１０２フィールドは、新しいストロークオブジェクト２１０が追加され重ねられる描画領域の描画領域ＩＤを含む。
【０３５３】
Ｆ１０３フィールドは、ストロークオブジェクト２１０のストロークＩＤを含む。ストロークＩＤは、各ストロークオブジェクト２１０に共通描画領域で使用されるときにユニークに割り当てられる。様々な方法が、描画領域ごとに各ストロークオブジェクト２１０にユニークなストロークＩＤを割り当てることを可能にする。例えば、描画領域中で現在使用されている（最も高い）ストロークＩＤの値は、新しいストロークオブジェクト２１０に割り当てられる新しいユニークなＩＤを得るためにインクリメントされ得る。又は、新しいストロークオブジェクト２１０を入力するために使用されるペンのペンＩＤの値が、新しいストロークオブジェクト２１０のためのユニークなストロークＩＤを得るためにインクリメントされてもよい。伝送装置１０−１はこのようにして、それが生成する新しいストロークオブジェクト２１０にユニークなストロークＩＤを独立して割り当てることができる。また、上で議論したように、中継サーバ１０−２のリソース調停（又はＱｏＳ）制御５４４は、伝送装置１０−１がユニークなストロークＩＤを割り当てることに失敗した場合、オーバーラップする複数のストロークＩＤの使用を妨げる。伝送装置１０−１は、新しいストロークオブジェクト２１０にユニークなストロークＩＤを独立して割り当てることができるので、そうでなければ異なる装置により生成されたストロークオブジェクト２１０にユニークなストロークＩＤを一元的に割り当てるために要求される通信シーケンスは必要とされない。したがって、伝送装置１０−１は、ペンダウンタイム、すなわちユーザがストロークの描画を開始した直後にインクデータの送信を開始することが可能になる。
【０３５４】
Ｆ１０４フィールドは、描画スタイルオブジェクト２３０、又は、描画スタイルオブジェクト２３０に含まれ、いずれもストロークオブジェクト２１０をどのように描画（レンダリング）するかに関係する一組の描画パラメータを含む。この一組のパラメータは、例えば、形状パラメータ（図３Ｂに示す円、又は、図３Ｃに示すフレーク／小片）、形状の半径又はサイズ、形状の半径又はサイズの最小値及び最大値、（その筆圧やペンの傾きで描かれるストロークがディスプレイ上にどのように現れるかに影響する）筆圧又はペンの傾きの情報などを含み得る。
【０３５５】
いくつかの実施の形態では、一組の描画パラメータの全体がＦ１０４フィールドに含まれる。他の実施の形態では、一組以上の描画パラメータ（又は１以上の描画スタイルオブジェクト）が前もって伝送装置１０−１と中継サーバ１０−２（と受信装置１０−３）の間で共有され、どの組の描画パラメータがストロークオブジェクト２１０をレンダリングするのに使用されるかを特定する１つのパラメータセットのＩＤ（又は描画スタイルオブジェクトのＩＤ）のみがＦ１０４フィールドに含まれることとしてもよい。例えば、よく使われるペン先タイプ（鉛筆、ブラシ、ペン）及びよく使われる色の限られた数の組み合わせのような、頻繁に使用されるパラメータ設定が予め、各設定にユニークなＩＤを与えつつ定義されてよく、これらの設定ＩＤが、ストロークオブジェクト２１０がディスプレイ上にどのようにレンダリング（描画）されるかを通信するためにＦ１０４フィールドに含まれてもよい。パラメータ設定は、装置間で初期交渉の時点で明示的に交渉されてもよいし、システムのプロトコルの一部として暗黙的に定義されてもよい。
【０３５６】
Ｆ１０５フィールドは、連帯してストロークオブジェクト２１０を形成する複数の断片化データのうちの最初の断片化データを含む。最初のデータメッセージのＦ１０５フィールドは、例えば、ストロークオブジェクト２１０の開始座標位置を含む。図３４が最初のデータメッセージ（ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ）の中に含まれるものとして最初の断片化データを（Ｆ１０５内に）示しているが、もし（描画スタイルオブジェクトを含まなければならない）最初のデータメッセージ内に十分な空きがなければ、最初の断片化データ（Ｆ１０５）は、２番目のデータメッセージ内に含まれてもよい。
【０３５７】
図３４のデータメッセージ「ＤＡＴＡ＿ＩＮＫ＿ＭＶＤＯＳ」＿１，＿２，・・・は、すべて同じストロークオブジェクト２１０に関係しており、それぞれ２番目の断片化データ（Ｆ１０６）、３番目の断片化データ（Ｆ１０７）、・・・を含む。最初のデータメッセージとは違い、これら後続のデータメッセージは描画スタイルオブジェクト（Ｆ１０４）を含まず、Ｆ１０１において、「後続の」（最初ではない）タイプのデータメッセージとして識別される。後続のデータメッセージはすべて、最初のデータメッセージと同じ描画領域ＩＤ及び同じストロークＩＤを含む。
【０３５８】
データメッセージ「ＤＡＴＡ＿ＩＮＫ＿ＥＮＤＯＳ」は、ストロークオブジェクト２１０のための最後のデータメッセージであり、ストロークオブジェクト２１０の最後の断片化データを含み得る（Ｆ１０８）。また、最後のデータメッセージは、Ｆ１０９に、著者情報などの非描画関連情報を含むメタデータオブジェクト２５０を含む。
【０３５９】
図３５Ａは、ＴＣＰのようなビルトインのデータ再送メカニズムを含む通信プロトコルにおいて使用され得る伝送フォーマット、具体的には、データメッセージ「ＤＡＴＡ＿ＩＮＫ＿ＭＶＤＯＳ」を含む通信パケットを説明している。一方、図３５Ｂは、ＵＤＰのようなビルトインのデータ再送メカニズムを含まない通信プロトコルにおいて使用され得る通信パケットを説明している。図３５Ａのデータメッセージフォーマットとは違って、再送メカニズムのないプロトコルでの使用のための図３５Ｂのデータメッセージフォーマットは、各データメッセージにユニークに割り当てられる通しＩＤを含む追加のフィールドＦ１１０を含んでよい。この通しＩＤは、メッセージの消失を検出し、再送信を起動／要求するために使用され得る。
【０３６０】
具体的には、図３６Ａは、データ再送メカニズムを含まないＵＤＰのような通信プロトコルでの実行に適した、通しＩＤを用いるデータ再送処理のサンプルを示すシーケンス図である。例えば、図３６Ａは、送信側のパケット再送信パラメータ（５２４＿１ａ）が「ＦＡＬＳＥ」に設定され、メッセージ再送信パラメータ（５２４＿１ｆ）が「ＥＮＡＢＬＥ」に設定されている場合に適合する。ハッチングされた期間「ｄ」は、図３２の期間ｄに対応する。
【０３６１】
図３６Ａは、それぞれ通しＩＤ＃４５６，＃４５７，及び＃４５９に関連付けられた第１、第２、第４のデータメッセージが伝送装置１０−１から送信され、中継サーバ１０−２に成功裏に受信されたことを示している。図３６Ａはまた、通しＩＤ＃４５８に関連付けられた第３のデータメッセージが、伝送装置１０−１と中継サーバ１０−２の間のネットワーク内のどこかで失われ、中継サーバ１０−２によって受信されないことを示している。
【０３６２】
中継サーバ１０−２は、通しＩＤ＃４５８に関連付けられた第３のデータメッセージが期待されるが受信されず、代わりに通しＩＤ＃４５９に関連付けられた第４のデータメッセージが受信された時刻Ｔ１において、通しＩＤ＃４５８に関連付けられた第３のデータメッセージが失われたことを検出する。その後、中継サーバ１０−２は、通しＩＤ＃４５８に関連付けられた第３のデータメッセージが受信されていないことを示す通しＩＤ＃４５８を含む否定応答（ＮＡＣＫ。ＤＡＴＡ＿ＩＮＫ＿ＮＡＣＫ）メッセージを発行する。
【０３６３】
伝送装置１０−１は、ＮＡＣＫメッセージが受信された時刻Ｔ２において、通しＩＤ＃４５８に関連付けた第３のデータメッセージが失われたことを検出し、通しＩＤ＃４５８に関連付けた第３のデータメッセージ及び通しＩＤ＃４５８に続く後続のデータメッセージ（すなわち、＃４５９，＃４６０，・・・）を再送信する再送信処理を開始する。まさに失われたデータメッセージだけでなくすべての後データメッセージを再送する理由の１つは、知覚可能な時間遅延を避けるため、ストロークオブジェクト２１０の断片化データの送信を時系列で継続するためである。他の理由は、１つのデータメッセージが失われるときには、その失われたデータメッセージに続くデータメッセージもまた失われる可能性が高いからである。
【０３６４】
上述した再送信処理方法によれば、再送メカニズムを含まないプロトコルが使用されるときであっても、１つのストロークオブジェクト２１０を形成するために必要なすべてのデータメッセージが成功裏に受信されることを確実にすることが可能になる。この再送信処理方法は、伝送装置１０−１と中継サーバ１０−２の間で発生するものとして上述されたが、この方法は中継サーバ１０−２と受信装置１０−３との間でも同様に実行され得る。
【０３６５】
図３６Ｂは、メッセージ再送信の他の例を示している。図３６Ａと同様に、ハッチングされた期間「ｄ」は、図３２の期間ｄに対応する。図３６Ｂは、送信側のパケット再送信パラメータ（５２４＿１ａ）が「ＦＡＬＳＥ」に設定され、メッセージ再送信パラメータ（５２４＿１ｆ）が「ＤＩＳＡＢＬＥＤ」に設定されている場合に適合する。メッセージ再送信パラメータは、メッセージ再送信が可能であるか否かに関わりなく、メッセージ伝送遅延の許容量がほとんどない（すなわち、いかなる知覚可能な伝送遅延も有しないという厳格な要求がある場合）ときに「ＤＩＳＡＢＬＥＤ」に設定される。
【０３６６】
図３６Ａと同じように、図３６Ｂでもまた、それぞれ通しＩＤ＃４５６，＃４５７，及び＃４５９に関連付けられた第１、第２、第４のデータメッセージが伝送装置１０−１（又は送信側となる中継装置１０−２）から送信され、中継サーバ１０−２（又は受信装置１０−３）に成功裏に受信されている。受信側である中継サーバ１０−２は、通しＩＤ＃４５８に関連付けられた第３のデータメッセージが期待されるが受信されず、代わりに通しＩＤ＃４５９に関連付けられた第４のデータメッセージが受信された時刻Ｔ１において、通しＩＤ＃４５８に関連付けられた第３のデータメッセージが失われたことを検出する。その後、時刻Ｔ２Ｂにおいて受信側は、再送要求を発行することなく、成功裏に受信された通しＩＤ＃４５６，＃４５７，及び＃４５９に関連付けられたメッセージに基づき、失われた＃４５８に関連付けられたデータメッセージに対応するデータの失われた部分を補充或いは補間するべく、補間処理（又はエラー隠蔽処理）（Ｓ１２０５）を実行し、それによって継続的で途切れのないディスプレイ処理を実現する。時刻Ｔ３Ｂで、通しＩＤ＃４６１に関連付けられた最後のデータメッセージの処理が完了する。その後の時刻Ｔ４Ｂで受信側は、受信されたストロークＩＤを用いて、ＤＡＴＡ＿ＩＮＫ＿ＡＬＬＯＳ＿ＲＥＱメッセージ１５０３（図３９Ｂ参照）を発行する。その後送信側１０−１（又は１０−２）は、同定されたストロークの全体を含むメッセージであるＤＡＴＡ＿ＩＮＫ＿ＡＬＬＯＳメッセージ１５０１（図３９Ａ参照）を送信する。受信側１０−２（又は１０−３）は時刻Ｔ５Ｂで、必要に応じて、受信されたＤＡＴＡ＿ＩＮＫ＿ＡＬＬＯＳメッセージ１５０１を使用し、補充或いは保管されたデータの失われた部分のデータ訂正を実行する。
【０３６７】
図３６Ｃは、図３６ＢのステップＳ１２０５における補間処理（エラー隠蔽処理）で扱われる問題を説明している。メッセージ＃４５７，＃４５８，及び＃４５９が１つの完全なストロークデータを形成すると仮定する。図３６Ｃでは、メッセージ＃４５６は制御位置Ｐ４５７１，Ｐ４５６２，及びＰ４５６３を含む。黒四角の位置Ｐ４５６１は、ストロークの開始位置であり、位置の絶対座標を含む。図示した例では、この絶対座標は（１００，０）である。図では、黒四角の位置が（参照されるべきものとして）絶対座標に関連付けられている。一方、黒丸の位置Ｐ４５６２は、参照されるべきものとして絶対座標又は直前の先行位置の座標に対する差分（オフセット）に関連付けられている。図示した例では、位置Ｐ４５６２はＲｅｌ（＋２０，０）にあり、これは、Ｐ４５６１の絶対座標（１００，０）に対して水平方向に＋２０、垂直方向に＋０に位置していることを意味している。黒丸位置Ｐ４５６３は、直前の先行する黒丸位置Ｐ４５６２に対してＲｅｌ（＋２０，０）にある。メッセージ＃４５７は、それぞれその直前の先行位置に対してＲｅｌ（＋２０，０）にある３つの位置Ｐ４５７１，Ｐ４５７２，及びＰ４５７３を含む。図３６Ｂに示すように、メッセージ＃４５８は受信側に受信されないと仮定する。すると、最後のメッセージ＃４５９のクロスハッチングされた開始位置Ｐ４５９１は、決定されることができなくなる。位置Ｐ４５９１は、参照位置がない限り有用でない相対的なオフセット情報のみを含むからである。
【０３６８】
クロスハッチングされた開始位置Ｐ４５９１は、本発明の実施の形態による様々な方法により決定され得る。本発明の実施の形態による第１の方法は、なおも図３６Ｃを参照して記述されるように、受信側で実行される線形予測に関わる。例えば、メッセージが５０ミリ秒ごとに送信される場合、失われたメッセージ内の推定される軌道部分は、既に得られている位置座標の速度及び加速度に基づいて予測され得る。図３６Ｃでは、ストロークはＰ４５６３（メッセージ＃４５６の最後の制御位置）からＰ４５７３（メッセージ＃４５７の最後の制御位置）まで合計でＲｅｌ（＋６０，０）だけ前進しており、したがって、行方不明の（失われた）メッセージ＃４５８の最後の制御位置もまた、Ｐ４５７３に対してＲｅｌ（＋６０，０）だけ前進しているものと予測され得る。
【０３６９】
図３６Ｄは、本発明の実施の形態による、クロスハッチングされた開始位置Ｐ４５９１を得るための第２の方法を説明している。この方法では、黒四角位置Ｐ４５６１，Ｐ４５７１、Ｐ４５９１により示すように、送信側が、複数の断片化されたメッセージのそれぞれの開始制御位置において絶対座標を含むように変えることができる。一実施の形態では、伝送装置１０−１は、もし（ａ）記録型とは異なるフォーマットでの出力が要求され、かつ、ｂ）（ｉ）ストロークの断片化が使用され（５２４＿１において「ストロークデータ断片化可否」が「ＴＲＵＥ」）、（ｉｉ）メッセージ再送信がメッセージレイヤでは実行されず（５２４＿１ａの「パケット再送信」が「ＴＲＵＥ」であり、かつ、５２４＿１ｆの「メッセージ再送信」が「ＤＩＳＡＢＬＥＤ」）、（ｉｉｉ）各断片化メッセージに絶対座標を含むことが明示的に指示されている、という条件の１以上が満たされるならば、この方法を実行することを選択し得る。図３６Ｄはすべての断片化メッセージに絶対座標が含まれることを示しているけれども、絶対座標を含む頻度は変更され得る。例えば、ＩＥＴＦのＲＦＣ３５５０やＲＴＰ報告などのような通信プロトコル報告は、受信側で検出された受信品質に基づき、送信側において絶対座標の含有頻度を変化させるために使用され得る。
【０３７０】
クロスハッチングされた位置Ｐ４５９１を得るための第３の方法は、図３６Ｃの線形（前進）予測とともに用いられ得る後方確認である。図３６Ｅでは、図３６Ｃのケースとは異なり、最後のメッセージ＃４５９の最後の制御位置Ｐ４５９３が四角く作られており、図示した例のように絶対座標（３３３，０）を含む。メッセージ（＃４５８）の消失が検出されると、受信側は、絶対座標を含む最後のメッセージ＃４５９の最後の制御位置Ｐ４５９３に基づき、クロスハッチングされた丸位置Ｐ４５９１の後方確認を実施する。図示した例では、クロスハッチングされた位置Ｐ４５９１は、制御位置Ｐ４５９３（３３３，０）からＲｅｌ（−２０，０）によってＰ４５９２を計算し、もう１つのＲｅｌ（−２０，０）によってＰ４５９１に至るまで後方に向かって計算され、（２９３，０）となる。
【０３７１】
図３６Ｆは、上述した方法のいずれかに従って得られるクロスハッチングされた制御位置Ｐ４５９１を用いる、図３６ＢのステップＳ１２０５で実行される補充又は補間処理（エラー隠蔽処理）を説明している。実線１２０１は、メッセージ＃４５７に基づいて生成される部分的なストロークデータを示し、白丸Ｐ４５７３は、メッセージ＃４５７に含まれる断片化されたストロークオブジェクト２１０の最後（終わり）の制御位置を示している。実線１２０３は、メッセージ＃４５９に基づいて生成される他の部分的なストロークデータを示し、クロスハッチングされたＰ４５９１は、メッセージ＃４５９に含まれる断片化されたストロークオブジェクト２１０の最初（始まり）の制御位置を示している。部分的なストローク１２０１と部分的なストローク１２０３の間の（消失したメッセージ＃４５８に対応する）失われたデータは、補間を用いる、破線矢印１２０７に示す部分的なストローク１２０１から前進する方向と、他の破線矢印１２０９に示す部分的なストローク１２０３から後進する方向との両方向にかかる予測に基づいて導出される。
【０３７２】
図３６Ｇは、双方向予測処理の一例を説明している。この例では、Ｐ４５７３とＰ４５９１を結ぶ直線（又は近似曲線）１２２１が形成され、この直線１２２１を、近似曲線関数としてそれぞれ表現され得る２つの等しい直線（又は曲線）セグメント１２２３及び１２２５に分割する中点Ｐ＿ｐｒｅｄ＿ｍｉｄｓｔが発見される。
【０３７３】
上述したように、通信プロトコルが通信レイヤにおける再送メカニズムを含まないとき（例えばＵＤＰ）、システムは、図３６Ａに示すようなメッセージレイヤでのメッセージ送信を実行することと、図３６Ｂに示すようなメッセージレイヤでさえメッセージ再送信を実行しないこととを適応的に選択し得る。したがって、例えばインクデータ２００が音声データと同期して再生されるときのようなアプリケーションが厳格なタイミング要求を有しているとき、知覚可能な送信時間遅延を回避し、継続的でリアルタイムなインクデータ２００の受信とディスプレイを実現するため、通信レイヤ及びメッセージレイヤのいずれにおいても再送信が無効にされる。
【０３７４】
図３７は、伝送装置１０−１によって発行された共通描画領域の更新要求が中継サーバによって拒否される場合のインクデータ通信を説明するシーケンス図である。例えば、伝送装置１０−１が共通描画領域に新たなストロークオブジェクト２１０を追加することを要求し、その要求が中継サーバ１０−２によって拒否される。伝送装置１０−１が描画スタイルオブジェクト２３０を含む最初のデータメッセージ（ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ）を送信する点までは、図３２のシーケンス図に含まれるものと同じである。
【０３７５】
中継サーバ１０−２が最初のデータメッセージを受信するとき、インクデータ中継部５４０は、処理リソースの任意の制限、ネットワークリソースの任意の制限、ユーザアクセスポリシーなどの規定の基準に基づき、ステップＳ６１３（拒否）において、最初のデータメッセージの受信を拒否する。
【０３７６】
中継サーバ１０−２はその後、伝送装置１０−１に対し、フィードバック送信部５４６から拒否メッセージ（ＤＡＴＡ＿ＩＮＫ＿ＲＥＪＯＳ）を送信する。
【０３７７】
伝送装置１０−１は、ストロークオブジェクト２１０のための最初のデータメッセージに応じて拒否メッセージが受信されたとき、ステップＳ６１０において、送信処理を中止し、ストロークオブジェクト２１０のための後続のデータメッセージの送信をやめる。別の言葉で言えば、拒否メッセージが返送されない限り、伝送装置１０−１は、連続する複数のデータメッセージにおいて、１つのストロークオブジェクト２１０のためにすべての断片化データを送信する送信処理を、明示のＡＣＣＥＰＴメッセージの返送を待つことなく継続する。
【０３７８】
本発明の様々な実施の形態のインクデータ送信方法によれば、（例えば完了するまでに数秒を要する）長いストローク（トレース）が１つの装置によって描かれたときでさえも、異なる装置は、そのストロークの完成を待つことなく、共通描画領域に描かれるのと同時にそのストロークのディスプレイを開始することができる。所与のプロトコルシステム内にビルトインされ得る、又は、再送メカニズムのないプロトコルにおいて追加的に使用され得るいくつかの送信方法は、ストロークオブジェクト２１０が複数の断片化データに分けて送信されたときでさえも、受信側で完全なストロークオブジェクト２１０が成功裏に受信されることを確実にするために使用され得る。また、伝送装置１０−１によって送信されたストロークオブジェクト２１０のためのデータメッセージのいずれかが中継サーバ１０−２によって拒絶／拒否されるとき、伝送装置１０−１は、送信処理を無効にすることによって、大切な処理リソース及びネットワーク（送信）リソースの浪費を回避する。
【０３７９】
図３８は、中継サーバ１０−２が伝送装置１０−１からストロークオブジェクト２１０の断片化データを受け取り、受信装置１０−３に対して中継するために、そのストロークオブジェクト２１０のための断片化データのすべてを結合するようにした、図３２に示したシーケンス図の第１の変形例である。伝送装置１０−１から中継サーバ１０−２までの規定の単位Ｔごとの断片化データの送信は、図３２に示したものと同じである。
【０３８０】
この実施の形態では、受信装置１０−３は、受信装置１０−３が中継サーバ１０−２によって中継されたインクデータ２００をどのようにして受信するかを定義する受信パラメータを設定するために、中継サーバ１０−２と予め交渉してもよい。例えば、受信装置１０−３が中継サーバ１０−２に対し、受信装置１０−３が規定の単位Ｔごとではなくストローク単位でインクデータ２００を受信するつもりであること（５２４＿１ｃの「ストロークデータ断片化可否」の値が「ＦＡＬＳＥ」）を示す情報のような通信設定情報を含む制御メッセージ（ＣＴＲＬ＿ＪＯＩＮ＿ＲＥＱ５２４＿１）を送信する。中継サーバ１０−２は、中継サーバ１０−２が（他の受信装置に対しては規定の単位Ｔでインクデータ２００を中継することができる一方で）受信装置１０−３に対しストローク単位でインクデータ２００を中継することとなるよう、受信装置１０−３から受信される通信設定情報を描画領域情報管理部５２４に格納する。
【０３８１】
その後、図３２に示すように、伝送装置１０−１はストロークオブジェクト２１０の断片化データの送信を開始する。中継サーバ１０−２は、ステップＳ６１４（バッファリング）において、最後のデータメッセージ（ＤＡＴＡ＿ＩＮＫ＿ＥＮＤＯＳ）が受信されるまで、そのストロークオブジェクト２１０のための断片化データの記憶を続ける。最後のデータメッセージが受信されたとき、中継サーバ１０−２は、ストロークオブジェクト２１０の全体、関連する描画スタイルオブジェクト２３０、メタデータオブジェクト２５０などとともに含むデータメッセージを準備して送信し、Ｓ６１７でのレンダリングのために、それを「ＤＡＴＡ＿ＩＮＫ＿ＡＬＬＯＳ」として受信装置１０−３に対し送信する。
【０３８２】
この例では、中継サーバ１０−２が全ストロークオブジェクト２１０に関係するインクデータ２００を一度に送信するので、ストロークオブジェクト２１０内に含まれるポイントオブジェクトの数は既知となる。したがって、インクデータ２００は、伝送フォーマットに代えて記録フォーマットで送信されることができる。記録フォーマットは冗長性が小さいので、伝送フォーマットよりも圧縮され得る。
【０３８３】
図３９Ａは、記録フォーマットでの「ＤＡＴＡ＿ＩＮＫ＿ＡＬＬＯＳ」のデータメッセージフォーマットのサンプルである。このサンプルは、関連する描画スタイルオブジェクト２３０、メタデータオブジェクト２５０、そのストロークオブジェクト２１０に含まれるポイントオブジェクトの数などとともに、１つのストロークオブジェクト２１０のためのインクデータ２００のすべてを含んでいる。示されるように、このメッセージはメッセージＣＲＣを含み、もしメッセージサイズが所与の通信パケットＭＴＵを超えた場合には、そのメッセージは、インクデータメッセージレイヤの下層に位置する通信レイヤで２以上の通信パケット（パケット１，パケット２，パケット３など）に分割される。
【０３８４】
インクデータ２００をストローク単位ごとに送信するとき、断片化データを規定の単位Ｔごとにリアルタイムでストリーミングするために使用されるものとは異なる通信プロトコルを使用することができる。例えば、ＵＤＰのような再送メカニズムを有しないプロトコルが規定の単位Ｔごとに断片化データをストリーミングするために使用されるのに対し、ストローク単位でインクデータ２００を送信するためには、再送メカニズムを含むＴＣＰ又は（基本的にＴＣＰに依拠する）ＨＴＴＰが使用され得る。
【０３８５】
受信装置１０−３は、ステップＳ６１７でストローク単位ごとのインクデータ２００を受信し、１つの描画内にストロークオブジェクト２１０を描画（レンダリング）するためのグラフィック処理を適用する。
【０３８６】
図３８の修正されたシーケンス例は、トラフィック速度が遅く、各ストロークが連続的に受信されなければならないリアルタイムストリーミングは実現困難であるようなネットワーク環境にある受信装置１０−３による使用に適している。そのようなケースでは、受信装置１０−３は、１つのストロークオブジェクトを一度にデータ損失なしで受信するために、ストロークオブジェクト受信するためのより強固な受信方法を採用することを選択できる。
【０３８７】
図３９Ｂは、ストロークＩＤが知られているときにストローク全体にかかるストロークオブジェクト２１０のデータを要求するメッセージである「ＤＡＴＡ＿ＩＮＫ＿ＡＬＬＯＳ＿ＲＥＱ」１５０３のデータメッセージフォーマットのサンプルを説明する。このメッセージは、ストロークＩＤを使用するストロークオブジェクトデータの全体の再送信を要求するために使用され得る。
【０３８８】
図４０は、ストロークオブジェクト２１０が「そのまま」（すなわち、断片化されずに）伝送装置１０−１から中継サーバ１０−２を介して受信装置１０−３に伝送されるようにした、図３２に示したシーケンス図の第２の変形例である。
【０３８９】
この実施の形態では、伝送装置１０−１は、伝送装置１０−１が中継サーバ１０−２に対してインクデータ２００をどのように送信するかを定義する送信パラメータを設定するために、中継サーバ１０−２と予め交渉してもよい。例えば、伝送装置１０−１が中継サーバ１０−２に対し、伝送装置１０−１が規定の単位Ｔごとではなくストローク単位でインクデータ２００を送信するつもりであること（５２４＿１ｃの「ストロークデータ断片化可否」の値が「ＦＡＬＳＥ」）を示す情報のような通信設定情報を含む制御メッセージ（ＣＴＲＬ＿ＪＯＩＮ＿ＲＥＱ）を送信する。中継サーバ１０−２は、中継サーバ１０−２が（他の伝送装置からは規定の単位Ｔでインクデータ２００を受信することができる一方で）伝送装置１０−１からストローク単位ごとにインクデータ２００を受信するよう制御されることとなるよう、伝送装置１０−１から受信される通信設定情報を描画領域情報管理部５２４に格納する。
【０３９０】
図４０では、図３２に示すように、伝送装置１０−１は「ペンイベントデータ入力開始」（例えば「ペンダウン」イベント）の検出をトリガとして用いることにより、インクデータ伝送処理を実行する。具体的には、ステップＳ６０５において、伝送装置１０−１の入力処理部１１１がストローク開始点の入力を検出する。図４０では、ペンイベントデータは、１つのストロークがストローク開始点で描画を開始しストローク終了点で描画を終了するまでの間、入力処理部１１１において、ステップＳ６０５からステップＳ６０９までインクデータ処理部１００Ｔに継続的に入力される（そして同様に、インクデータ生成部１２０ＴにおいてＳ６０７からＳ６１１まで。集合的にはＳ６０８Ｂ）。
【０３９１】
伝送装置１０−１のインクデータ処理部１００Ｔは、「ペンイベントデータ入力開始」（例えば、「ペンダウン」イベント）（Ｓ６０５）をトリガとして用い、コンテキスト情報（入力２）に基づいて描画スタイルオブジェクト２３０を生成する。
【０３９２】
伝送装置１０−１のインクデータ整形部１４０Ｔはその後、中継サーバ１０−２への送信対象である最初のデータメッセージ（ＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳ）を整形することができ、中継サーバ１０−２は、それを受け入れる（Ｓ６１３（受け入れ））か拒否するかを決定することができる。この場合における最初のデータメッセージは、中継サーバ１０−２が伝送装置１０−２からのインクデータ２００を受け入れられるか否かを確認するために送信されるもので、そのようなものであるために、例えばストロークオブジェクト２１０の開始点の座標を含む必要はない。
【０３９３】
中継サーバ１０−２から拒否メッセージ（ＮＡＣＫ）が受信されない限り、伝送装置１０−１は、ストロークオブジェクト２１０の全体のためのインクデータ２００を、ストロークオブジェクト２１０の全体と、関連する描画スタイルオブジェクト２３０及びメタデータオブジェクト２５０などを含むメッセージ「ＤＡＴＡ＿ＩＮＫ＿ＡＬＬＯＳ」の形に整形し、中継サーバ１０−２に対して送信する。
【０３９４】
インクデータ２００をストローク単位で伝送するとき、インクデータを規定の単位Ｔで伝送するために使用されるものとは異なるデータフォーマットを使用することができる。例えば、規定の単位Ｔで断片化されるインクデータ２００が伝送フォーマットで伝送され得るのに対し、ストローク単位のインクデータ２００は記録フォーマットで伝送され得る。また、ストローク単位のインクデータ２００を伝送するとき、より強固な（高い信頼性を有する）インクデータ２００の伝送を実現するために、再送メカニズムを提供する通信プロトコルが使用され得る。
【０３９５】
中継サーバ１０−２は、ストロークオブジェクト２１０の全体とともに、関連する描画スタイルオブジェクト２３０、メタデータオブジェクト２５０などを含むデータメッセージ（ＤＡＴＡ＿ＩＮＫ＿ＡＬＬＯＳ）を受信し、それを「そのまま」（ＤＡＴＡ＿ＩＮＫ＿ＡＬＬＯＳ）、受信装置１０−３に対して中継する。これを実現するため、受信装置１０−３は、受信装置１０−３が中継サーバ１０−２から中継されるインクデータ２００を規定の単位Ｔごとではなくストローク単位で受信することを定義する受信パラメータを設定すべく、前もって中継サーバ１０−２と交渉することとしてもよい。
【０３９６】
受信装置１０−３は、ストローク単位でインクデータ２００を受信し、ステップＳ６１７で、１つの描画内にストロークオブジェクト２１０を描画（レンダリング）するためのグラフィック処理を適用する。
【０３９７】
図４０の修正されたシーケンス例が、トラフィック速度が遅く、それゆえ各ストロークが継続的に送受信され得るリアルタイムの実現が難しいネットワーク環境にある伝送装置１０−１及び受信装置１０−３による使用に適したものとなり得る。いくつかのケースでは、伝送装置１０−１及び受信装置１０−３は、ストロークオブジェクト２１０を、一度に１つのストロークオブジェクト２１０ずつデータ損失なく送受信するための、より強固な送受信方法を採用することを選択し得る。
【０３９８】
図４１は、中継サーバ１０−２が、伝送装置１０−１からストロークオブジェクト２１０を受信し、受信装置１０−３に対して中継又は送信するために、受信したストロークオブジェクト２１０を複数の断片化データに分割する、図３２に示したシーケンス図の第３の変形例である。
【０３９９】
先に示した図４０のシーケンスと同様、伝送装置１０−１は、ストロークオブジェクト２１０の全体にかかるインクデータ２００を含むデータメッセージを、関連する描画スタイルオブジェクト２３０、メタデータオブジェクト２５０などとともに生成し（ＤＡＴＡ＿ＩＮＫ＿ＡＬＬＯＳ）、中継サーバ１０−２に対して伝送する（インクデータ生成部１２０ＴにおけるステップＳ６０７からＳ６１１、集合的にはＳ６０８Ｃを参照）。
【０４００】
期間「ｄ」の間、伝送装置１０−１のインクデータ生成部１２０Ｔは、ストロークオブジェクト２１０を形成するためにペンイベントデータから導出された複数のポイントオブジェクトのそれぞれに対応する時間をインクデータ２００内に埋め込む。例えば、アプリケーション部３００−１が音声と関係して使用されるとき（例えば、５２４＿１ｇ「音声同期可否」パラメータが「ＥＮＡＢＬＥ」）、伝送装置１０−１は、音声又はその他のデータの再生タイミングとの同期の目的で、インクデータ２００に対し、スライスごとにタイムスタンプ情報を挿入する。時刻は、中継サーバ１０−２がインクデータ２００を中継する際に用いることができ、かつ、受信装置１０−３がインクデータ２００を再生（レンダリング）する際に用いることのできる「再生時刻」として埋め込まれる。例えば、時刻Ｔ１に生成されたインクデータ２００の第１の部分（第１のポイントオブジェクト）は、対応する時刻Ｄ＿Ｔ１に中継サーバ１０−２によって中継され、時刻Ｔ２（Ｔ１とＴ２の間）に生成されたインクデータ２００の第２の部分（第２のポイントオブジェクト）は、対応する時刻Ｄ＿Ｔ２に中継サーバ１０−２によって中継される、などである。同様に、時刻Ｔ１乃至Ｔ４に生成されたインクデータ２００の第１乃至第４の部分（ポイントオブジェクト）は、それぞれ、Ｓ６１７の「グラフィック処理開始」ステップで始まる時刻Ｔ１からＴ４に基づく対応するタイミングで、受信装置１０−３によって再生（描画）される。
【０４０１】
中継サーバ１０−２は、伝送装置から、ストロークオブジェクト２１０の全体と、関連する描画スタイルオブジェクト２３０、メタデータオブジェクト２５０などとのためのインクデータ２００を含むデータメッセージＤＡＴＡ＿ＩＮＫ＿ＡＬＬＯＳを受信し、伝送装置１０−１が図３２のシーケンス例で断片化データを生成するやり方と同様にして、このインクデータ２００を規定の単位Ｔごとに複数の断片化データに分割する。規定の単位Ｔは、この例ではストローク単位より小さい。中継サーバ１０−２は、生成した断片化データを、それぞれＤ＿Ｔ１，Ｄ＿Ｔ２，Ｄ＿Ｔ３，Ｄ＿Ｔ４のタイミングで受信装置３に対して出力する。
【０４０２】
受信装置１０−３は、図３２のシーケンス例における受信装置１０−３と同様、連帯して１つのストロークオブジェクト２１０を形成する、断片化データを含む複数のデータメッセージを受信して処理する。具体的には、受信装置１０−３は、それが１つのストロークオブジェクト２１０を構成する一連のデータメッセージのうちの最初のデータメッセージであることを示す最初のデータメッセージＤＡＴＡ＿ＩＮＫ＿ＢＧＮＯＳを受信する。受信装置１０−３は、この最初のデータメッセージに含まれる描画スタイルオブジェクト２３０を取り出し、ストロークオブジェクト２１０の断片化データのレンダリング（描画）を開始するために、描画スタイルオブジェクト２３０内の情報を使用する。インクデータ処理部１００Ｒは、後続のデータメッセージ内に受信される後続の断片化データの処理を続け、描画部３００は、ストロークオブジェクト２１０の残りのレンダリング（描画）を成長する（増加する）ようなやり方で続ける。図４１は、ストロークオブジェクト２１０が、それが部分的にのみ存在し、しかし成長しつつある状態Ｇ１，Ｇ２，Ｇ３からストロークオブジェクト２１０が完全に描画されている状態Ｇ４まで、その断片化データが徐々に受信され処理されるに従って連続的に描画されることを示している。上記の例では、中継サーバ１０−２がストロークデータの中継伝送のタイミングを制御しているが、中継サーバ１０−２にストロークの単位でストロークデータを伝送させ、その後受信装置１０−３が、受信したストロークデータの各断片の再生タイミングを制御するように構成することも可能である。さらに、中継サーバ１０−２にストロークデータを維持させ、スケジュールされた時間に、１以上の受信装置に対してストロークデータのストリーミングを開始するように構成することも可能である。例えば、スケジュールされた時間は２０２０年１月１日の０：００に設定されることができ、受信装置は、そのスケジュールされた時間に、それぞれのディスプレイに描画されるべきメッセージ「Ｈａｐｐｙ  Ｎｅｗ  Ｙｅａｒ」を示す一組のストロークの受信を開始することができる。
【０４０３】
上述した様々な実施の形態及び変形例は、さらなる実施の形態を提供するために結合され得る。本実施の形態の側面は、さらなる実施の形態を提供するために修正され得る。
【０４０４】
例えば、いくつかの実施の形態においては、受信装置１０−３は、中継サーバ１０−２が伝送装置１０−１から伝送されたデータメッセージを受け入れるか拒否するかを決定するように構成されるのと同様に、中継サーバ１０−２から中継されたデータメッセージを受け入れるか拒否するかを決定するように構成され得る。中継サーバ１０−２は、拒否メッセージ（ＤＡＴＡ＿ＩＮＫ＿ＲＥＪＯＳ）を受信すると、（同じデータメッセージが他の受信装置には転送され得る一方で）伝送装置１０−１からのデータメッセージがその受信装置１０−３には転送されないことを示すように接続リスト５４１を更新する。
【０４０５】
いくつかの実施の形態では、共通描画領域の原点は、ユーザ特有の描画領域の原点（すなわち、伝送／受信装置におけるディスプレイ１１３の原点）と同一である。他の実施の形態では、ユーザ特有描画領域の原点及び寸法が共通描画領域の原点及び寸法と同じである必要はない。図４２は、共通描画領域の原点に関連して、ユーザ特有描画領域内におけるユーザ特有のストロークの開始ポイントの概念を説明する図である。
【０４０６】
図４２では、ポイント１６０１の（０，０）が共通描画領域の原点を示しており、一方で、ポイント１６０３のユーザ１０−１（０，０）は、ユーザ１０−１にとってのユーザ特有描画領域の原点を示し、ポイント１６０５のユーザ１０−３（０，０）は、他のユーザ１０−３にとってのユーザ特有描画領域の原点を示している。（０，０）からユーザ１０−１（０，０）へのベクトルは（２００，３０）となるように図示されており、（０，０）からユーザ１０−３（０，０）へのベクトルは（１３０，２６０）となるように図示されている。通信を開始するときに、伝送装置１０−１と受信装置１０−３は、それぞれの共通描画領域からの原点ベクトル（図示した例における（２００，３０）及び（１３０，２６０））を中継サーバ１０−２と共有する。したがって、伝送装置１０−１がオフセット１−１（１６０７）で開始するストロークＡを中継サーバ１０−２に送信するとき、伝送装置１０−１は、ユーザ１０−１（０，０）から開始ポイントであるオフセット１−１までのベクトルであるベクトル「オフセット１−１」のみを送る必要がある。その後中継サーバ１０−２は、共通描画領域の原点との関係で開始ポイント「オフセット１−１」の位置を決定するために、受信したベクトル「オフセット１−１」をベクトル（２００，３０）と結合することができる。
【０４０７】
中継サーバ１０−２はその後、共通描画領域の原点に対して開始ポイント「オフセット１−１」の位置を定義する、ポイント１６０１（０，０）からポイント１６０３ユーザ１０−１（０，０）を介してオフセット１−１（１６０７）に至る結合ベクトルを、受信装置１０−３に送信することができる。受信装置１０−３はその後、受信した結合ベクトルから自身の原点ベクトル（１３０，２６０）を減ずることにより、ユーザ１０−３（０，０）（１６０５）という原点を有する自身のユーザ特有描画領域に対して、開始ポイント「オフセット１−１」の位置を定義することができる。或いは、中継サーバ１０−２が、受信装置１０−３のユーザ特有描画領域のユーザ１０−３（０，０）（１６０５）という原点に対する開始ポイント「オフセット１−１」の位置を算出するための減算動作を行ってもよい。中継サーバ１０−２がユーザ１０−３（０，０）（１６０５）という原点に対する開始ポイント「オフセット１−１」の算出された位置を受信装置１０−３に対して送信した場合、受信装置１０−３は直ちに、自身のユーザ特有描画領域内で受信した位置を処理することができる。
【０４０８】
これらの実施の形態では、中継サーバ１０−２が共通描画領域の原点に関する座標変換を行うので、伝送及び受信装置１０−１及び１０−３は、自身で変換を行う必要はなく、自身の原点に対する座標データとして座標データ（ベクトルデータ）を送受信する。すなわち、一旦伝送及び受信装置１０−１及び１０−３が共通描画領域の原点に対する自身の原点を中継サーバ１０−２と共有した場合、座標変換処理は、完全に伝送及び受信装置１０−１及び１０−３に対して透明となり得る。
【０４０９】
インクデータ２００を送信するための規定の伝送単位Ｔは、ストローク単位と同じかそれより小さいとして記述されたが、ストローク単位より大きい単位でインクデータ２００を伝送することも可能である。すなわち、インクデータ２００を、ストローク単位よりも大きい意味の単位ごとに「集める」ことも可能である。例えば、図３３に示した規定の単位Ｔの処理では、ステップＳ７０９において、アグリゲーションが要求されたかが判定される。もし「ＹＥＳ」であれば、ステップＳ７１３において、単位Ｔがストローク単位より大きい値、すなわち意味の単位に設定される。
【０４１０】
図４３は、意味単位の概念を説明する図であり、図４４は、意味単位でインクデータ２００を伝送するフローのサンプルを説明する図である。
【０４１１】
図４３は、７つの手書き文字からなる単語「Ｎｅｔｗｏｒｋ」を図示している。７０１１は１番目のストロークを示し、７０１２は２番目のストローク（連帯して最初の文字「Ｎ」を構成する）を示し、７０１３は３番目のストロークを示し、７０１４及び７０１５はそれぞれ、連帯して３番目の文字「ｔ」を構成する４番目と５番目のストロークを示している。ここで、１番目及び２番目のストローク７０１１及び７０１２は、それらが連帯して１つの文字を示すことから、１つの意味単位を構成するものと看做される。同様に、４番目及び５番目のストローク７０１４及び７０１５は、それらが連帯して１つの文字を示すことから、１つの意味単位を構成するものと看做される。
【０４１２】
図４４は、１つの意味単位を構成する複数のストロークを「集め」、意味の単位でストロークデータを伝送するフローのサンプルを図示している。この例では、アプリケーション３００−１が文字認識エンジンにリンクされる。図４４では、ハッチングされた期間「ｄ＿ｆｏｒ＿７０１１」が１番目のストローク７０１１が検出される期間である。インクデータ生成部１２０Ｔは、アプリケーション３００−１によって使用される文字認識エンジンの分析結果に基づき、１番目のストローク７０１１が完全な意味単位を構成していないことを検出する。意味単位が完成していないので、ステップＳ１９１１において、プロセスはインクデータ伝送ステップをスキップする。その後、ハッチングされた期間「ｄ＿ｆｏｒ＿７０１２」の間に２番目のストローク７０１２が検出される。ステップＳ１９１３において、インクデータ生成部１２０Ｔは、１番目及び２番目のストローク７０１１及び７０１２が１つの意味単位を構成していることを検出する。ステップＳ１９１５において、インクデータ生成部１２０Ｔは、１番目及び２番目のストローク７０１１及び７０１２を集め、そしてまた、１番目及び２番目のストローク７０１１及び７０１２が連帯して１つの意味単位を構成し、連帯して「Ｎ」を意味していることを示すメタデータ情報を生成する。伝送装置１０−１は、受信側（中継サーバ１０−２又は受信装置１０−３）に対し、メタデータ情報とともにストローク（インク）データ（１５０１  ＤＡＴＡ＿ＩＮＫ＿ＡＬＬＯＳ）を伝送する。ステップＳ１９１７では、受信側がメタデータを取り出し、１番目及び２番目のストローク７０１１及び７０１２が連帯して１つの意味単位を構成し、連帯して「Ｎ」を意味していることを決定する。その後、ステップＳ１９１９では、受信側がそのディスプレイ上に、１番目及び２番目のストローク７０１１及び７０１２をレンダリング（描画）する。
【０４１３】
第３の実施の形態
第３の実施の形態は、手書きデータを表すように構成されたインクデータを生成し再生する方法と、再生されたインクデータを使って図画を出力（レンダリング）する方法とに向けられたものである。特に、インクデータを生成するための特定の入力装置センサに依存するペンイベントデータ９２０２を抽象化（一般化）する図９２の処理が記述される。例えば、非装置依存型の共通の属性値を生成するために、筆圧データを有するペンイベントデータ（タイプ１）と、筆圧データを有しないペンイベントデータ（タイプ２）とを抽象化（一般化）する処理が記述される。
【０４１４】
第３の実施の形態の背景
上記非特許文献５は、インクデータの標準を記述しており、標準の目的を次のように規定している。「Ｊｏｔ［標準］は、インクが非常に広い範囲のアプリケーション及び装置にわたって使用されることを可能にする。標準の交換フォーマットを使えば、多数のシナリオが可能となる。ここには、インク共有のいくつかの例がある。もちろん、Ｊｏｔが多様なプラットホームで実行されるのと同じくらい、より多くのアプリケーションが作られ得る。」
【０４１５】
この標準は、インクデータの属性の１つである筆圧データが存在することを示す「ｉｎｋＦｏｒｃｅＤａｔａＰｒｅｓｅｎｔ」と呼ばれるフラグを使用する。
【０４１６】
ストロークを構成する複数のポイント（複数のドット）のそれぞれが、以下の表１のデータ構造で定義される。
【表１】
2020057442.tif 000005
【０４１７】
上記において、「ｆｏｒｃｅ」が筆圧に対応する値である。したがって、筆圧情報を取得可能な電子装置に対して、ｉｎｋＦｏｒｃｅＤａｔａＰｒｅｓｅｎｔフラグの値は筆圧データの存在を示すブール値に設定され、筆圧（「ｆｏｒｃｅ」）の値は入力情報として入力される。
【０４１８】
非特許文献１は、他のインクデータ標準を記述しており、標準の目的を次のように規定している。「ハードウェア及びソフトウェアベンダーは、典型的には、専有の或いは制限的なフォーマットを使用するデジタルインクを供給し、代表してきた。公開のかつ包括的なデジタルインクフォーマットの欠如は、複数のベンダーによって開発される異種の装置を跨がるデジタルインクのキャプチャ、伝送、処理、及び提示を厳しく制限してきた。この必要性に応じ、インクマークアップ言語（ＩｎｋＭＬ）は、ソフトウェアアプリケーション間でのデジタルインクの交換を促進するために、シンプルでかつプラットホーム中立なデータフォーマットを提供する。」
【０４１９】
この標準では、ストロークは「トレース」と呼ばれ、そのデータ構造は、予め定義された複数の属性セットの中から自由に選択される属性によって定義され得る。
【０４２０】
デフォルトの設定では、トレースは、以下の表２−１の構造による十進数の組み合わせ（Ｘ，Ｙ）のリストとして表される。
【０４２１】
表２−１  非特許文献１のデータ構造（デフォルト）
<traceFormat xml:id="DefaultTraceFormat">
<channel name="X" type="decimal"/>
<channel name="Y" type="decimal"/>
</traceFormat>
【０４２２】
デフォルトのデータ構造に対し、さらなる属性がＦ（ｆｏｒｃｅ）のような定義される追加のチャネル名により追加され得る。例えば、ペン圧力を示す属性（チャネル名）は、次のようなものである。
【表２】
2020057442.tif 000006
【０４２３】
＜ｔｒａｃｅＦｏｒｍａｔ＞の＜ｃｈａｎｎｅｌ  ｎａｍｅ＞タグを例えば「Ｆ（Ｆｏｒｃｅ）」に設定することにより、力属性を含む「トレースフォーマット」をカスタム定義することができる。
【０４２４】
トレースはその後、十進数の組み合わせ（Ｘ，Ｙ）として、任意のカスタム定義された「トレースフォーマット」に従って表される。したがって、カスタム定義されたトレースフォーマットで表されるインクデータ（例えば座標、筆圧など）は、継続する値のリストとして提供される。
【０４２５】
非特許文献２は、産業においてインクデータを標準化しようとする他の試みを記述するもので、その目的を次のように規定している。「インクシリアライズトフォーマット、すなわちＩＳＦは、書かれたインクデータを格納するためのマイクロソフト（登録商標）のフォーマットである。このフォーマットは主に、携帯情報端末、タブレットＰＣ、ウルトラモバイルＰＣがスタイラスにより入力されたデータを格納するために使用される。」非特許文献３はさらに、「インクオブジェクトは一連のストロークに過ぎず、各ストロークは一連のポイントであり、ポイントはＸ及びＹ座標である。新たなモバイル装置の多くはまた、圧力や角度のようなカスタム情報を提供する。加えて、［それらは］インクデータとともにカスタム情報を格納するために使用され得る。」
【０４２６】
筆圧情報が含まれるとき、次の属性がデータフォーマット内に含まれ得る。これは、圧力がｘ，ｙの次に重要であることを示している。
ＴＡＧ＿ＮＯＲＭＡＬ＿ＰＲＥＳＳＵＲＥ
【０４２７】
ＴＡＧ＿ＮＯＲＭＡＬ＿ＰＲＥＳＳＵＲＥ情報を含む情報はその後、順番に並べられて出力される。
【０４２８】
第３の実施の形態の概要
非特許文献１，２，及び５に提案される上述したインクデータの構造は、情報を抽象化又は一般化することなく、ペン型入力装置によって得られた装置特有の情報を出力しようとするものである。例えば、筆圧データがペン型入力装置による属性として取得されるとき、その筆圧データは、圧力データを受信して処理する能力を有する電子装置に対して出力され得るが、ほとんどの静電容量型のタブレットのような、そのような能力を有することが期待されない電子装置に対しては出力されない。同様に、ペン型入力装置が筆圧データを取得する能力を有しないとき、電子装置が筆圧データを受信して処理する能力を有しているとしても、その電子装置に対して筆圧データが出力されることはない。その上、静電容量型のセンサのような、指による手書き入力を受信する能力を有するいくつかの「指」型入力装置は、指がセンサ表面に押し付けられたときに指の圧力データを生成する能力を有しない。このように、すべてのペン型入力装置又は指型入力装置が筆圧データを取得する能力を有しているわけではなく、すべての電子装置（例えば、タブレット及びＰＣ）が筆圧データを取得し、受信し、処理する能力を有しているわけではないので、現在利用可能なインクデータ内の筆圧データの利用は、どちらかと言えば限定されている。このことは、現在利用可能なインクデータを、手書きデータをよりリアルにシミュレートし、表現するという目的に適さないものとする。なぜなら、現実においては、ユーザによって適用される筆圧が、ペンストロークの幅や濃度に影響し、又は、サイズを変更するしみやよごれを生成することにより、ペンストローク（又はペントレース）がどのように紙の上に現れるかということに多大な影響を及ぼすからである。
【０４２９】
非特許文献１，２，及び５に提案される技術は、ペンイベントの間、どれだけの筆圧が適用され、ペンの角度はどれくらいか、というような情報を含むペンの動き（すなわち、「ペンイベント」）を記録し、再生することを目的としている。しかしながら、記録され再生されることが究極的に必要である情報は、複数のストローク又はトレースがスクリーン上にどのように現れるかという、結果としての一連のペンイベントの「外観」である。一連のペンイベントの結果としての外観は、典型的にはグラフィックデータとして使用される。非特許文献３は、ベクトルデータの標準を提案する。しかし、非特許文献３は入力装置としてのペンの使用に無関心であり、結果としてそのデータは、ペンの使用の結果として得られるストロークを表し、表現するのに適さない。例えば、非特許文献３の技術は、バージョン１．１では、ストローク幅を変えることやストロークの透明度を変えることを許容しない。
【０４３０】
筆圧データをサポートしない装置によっても使用可能であるよう筆圧データを要求しないインクデータモデル（意味又は言語）に基づいてインクデータを生成し、再生する方法、及び、そのインクデータモデルに基づくインクデータフォーマットに対するニーズが存在する。いくつかの実施の形態では、インクデータを生成する方法は、すべてではないにしてもほとんどの多様な装置で容易に利用可能な情報に基づいて圧力の代用パラメータを生成する能力を有する。圧力情報を表現するために本発明のインクデータモデル内における代用パラメータを使用することは、実際のペンストロークをシミュレートする多様なニュアンスの表現やリアルな外観とともにレンダリング（描画）されたペンストロークを提供することを実現する。
【０４３１】
第３の実施の形態の記述
以下に示す本発明の様々な代表的な実施の形態の記述は、一般的に、以下に示す６セクションにまとめられる。
［１］システムアーキテクチャの全貌。図１及び図４５〜図４７Ｂを参照。
［２］ストローク言語（ＳＬ）及びストロークファイルフォーマット（ＳＦＦ）
［２−１］インクデータモデル（「ストローク言語」）。図４８Ａ〜図４８Ｉを参照。
［２−２］ストロークファイルフォーマット（ＳＦＦ）。図４８Ｊ〜図４８Ｌを参照。
［３］インクデータ処理部１００（生成部１００Ｔ）。図４９〜図６３を参照。
［４］インクデータ処理部１００Ｒ（再生部１００Ｒ）。図６４〜図６６を参照。
［５］インクデータレンダリング処理。図６７を参照。
［６］効果。インクデータ描画例。図６８〜図７２を参照。
【０４３２】
［１］システムアーキテクチャの全貌（図１及び図４５〜図４７Ｂ）
第１の実施の形態を参照して上述した図１は、本発明のインクデータ２００が生成され、再生され、スクリーン上にレンダリング（描画）される、本発明の第３の実施の形態によるシステムの全貌を説明している。特に、図１に実線で描かれたインクデータ交換インフラ１０は、共通の言語モデルに基づいてインクデータ２００を使用するライブラリによって実現されるインフラを表しており、そこでは、圧力データをサポートする様々なアプリケーションサービス及び装置、並びに、圧力データをサポートしない他のアプリケーションサービス及び装置によって共通に使用可能となるようにインクデータ２００が生成される。
【０４３３】
図１に示す装置１０−１−１は、入力センサとして、筆圧データを感知できるペン型の入力装置を含む。装置１０−１は、アプリケーションサービス＃１によって提供されるアプリケーションを用いてインクデータ２００を生成する。生成されたインクデータ２００はその後、目的地のメディア（例えばネットワーク）に対応する適切な出力フォームで出力され得る。
【０４３４】
装置１０−１−２は、ユーザの指によりなされる手書き入力を受信する能力を有するタブレット型の入力装置である。装置１０−１−２のセンサは、筆圧データを出力する能力を有しないが、圧力データを要求しないアプリケーションサービス＃２のために提供されるアプリケーションを用いてインクデータ２００を生成することができる。インクデータ２００はその後、目的地のメディアに対応する適切なフォームで出力され得る。
【０４３５】
装置１０−３は、アプリケーションサービス＃２に加入しているデスクトップ型のＰＣである。装置３は、アプリケーションサービス＃２によって提供されるアプリケーションを用いて、装置１０−１−１又は装置１０−１−２から出力されるインクデータ２００を処理する（例えば、ディスプレイスクリーン上にレンダリングしたり、再配布する）ことができる。
【０４３６】
装置１０−１−１，１０−１−２及び装置１０−３上で動作するアプリケーションサービス＃１及びアプリケーションサービス＃２はいずれも、インクデータ２００を表す共通の情報モデル（「ストローク言語」）を利用する。
【０４３７】
本発明の実施の形態によるインクデータ２００は、多様なサービスアプリケーション上の様々なタイプの装置によって使用可能とされ、それ自体に筆圧データを取得する又は処理する能力を有する装置及びサービスアプリケーションに限定されない。
【０４３８】
図４５は、インクデータ２００の処理部１００（生成部１００Ｔ）におけるデータ入出力を説明するとともに、左手側においてインクデータ生成方法を説明し、また、インクデータ処理部（再生部１００Ｒ）におけるデータ入出力を説明するとともに、右手側においてインクデータ生成方法を説明している。インクデータ処理部１００Ｔは、第１の実施の形態の図５における１００Ｔに対応する。
【０４３９】
本発明の実施の形態によるインクデータ処理部１００Ｔは、装置１０−１−１のセンサ及び装置１０−１−２のセンサからペンイベントデータを受信する。ペンイベントデータは、ペン（又は指）のストロークを生成したペン（又は指）の動きを表しており、ストロークの座標データ（例えば（Ｘ，Ｙ）位置）を含む。ペンイベントデータはまた、筆圧データやペンの傾きデータなどの装置依存型のデータを含み得る。図４５では、装置１０−１−１からのペンイベントタイプ１データは筆圧データを含む。装置１０−１−１のセンサは、圧力感知可能スタイラスとともに使用されるＥＭＲタイプのペンタブレットのためのペンタブレット装置ドライバ又はＡＰＩのような、圧力データを出力する能力を有する装置である。これに対し、装置２からのペンイベントタイプ２データは、如何なる圧力データも含まない。装置１０−１−２は、ｉＰａｄ（登録商標）タブレットや他の容量タイプのタッチセンサタブレットのような圧力データを出力する能力を有しない装置である。インクデータ処理部１００は、装置依存型のデータ（タイプ１及びタイプ２）を受信し、非装置依存型の本発明の実施の形態によるインクデータ２００を生成して出力する。このインクデータ２００は、圧力データを処理する能力に関わらず、様々な装置によって共有され得る。
【０４４０】
ペンイベントデータに基づいてインクデータ２００を生成するため、インクデータ処理部１００はまた、図４５に示すように、ペンイベントデータを入力するために使用されるアプリケーション又はオペレーティングシステムから、ペンイベントデータについてのコンテキスト情報（入力２）を受信する。生成されたインクデータ２００は、様々なオブジェクト（ストロークオブジェクト２１０、メタデータオブジェクト２５０、描画スタイルオブジェクト２３０、操作オブジェクト２７０など。図４８Ｂ参照）のコレクションであり、これらは図５に示すツリー構造で整理される。コンテキスト情報（入力２）は、例えば、描画アプリケーションから受信されるペン（先）タイプ（例えば、鉛筆、クレヨン、ブラシなど）及び／又はペン色の情報、ペンタブレットの解像度情報及びサンプリングレート、ペンイベントの入力時刻及び位置情報、ペンＩＤ、ＯＳによって提供されるユーザＩＤ、並びに、ストロークを生成（描画）するために使用された（ソフトウェア）アプリケーションによって提供されるストロークに関する他の任意の情報を含む。
【０４４１】
インクデータモデルは、インクデータ２００を処理するアプリケーション領域（ドメイン）において使用されるデータの意味を定義する。様々なアプリケーション及びサービスの間で共通のインクデータモデルが共有されるとき、情報は、インクデータ２００を処理するドメイン内のシステム構造の中において、信頼性を持って自由に共有され得る。
【０４４２】
図４５では、破線矢印が、インク情報モデルが定義するインクデータ２００の各クラスオブジェクトを示しており、インクデータオブジェクトのコレクションがインクデータ２００を構成する。
【０４４３】
インクデータ処理部１００は、生成したインクデータ２００を、データオブジェクトのコレクションとして、インクデータ２００を必要とするアプリケーションによって要求されたメディアフォーマット（例えば、ファイル、パケットなど）で出力する。一般的に、メディアフォーマットには２つのタイプがある。
（１）永続的（半永久的）な形態でインクデータ２００を記憶するストロークファイルフォーマット（ＳＦＦ）
（２）メッセージ又はリアルタイム通信においてインクデータ２００を伝送するのに適したストロークメッセージングフォーマット（ＳＭＦ）
【０４４４】
インクデータ処理部１００Ｒは、インクデータ２００をＳＦＦ又はＳＭＦファイルで受信し、特定のメディアに記録されたインクデータ２００を解釈して、バイト又はビットのシーケンスとして取り出し、取り出したインクデータ２００を、インクデータ２００を利用する様々なタイプのアプリケーション３００に対して提供する。インクデータ処理部１００Ｒは、アプリケーション３００−１，・・・，３０１−ｎのうちの１つからの要求に応じて、インクデータオブジェクトを取り出し、インクデータモデルによって定義される情報を再生し、要求しているアプリケーション３００−１，３００−２に対して、取り出した（再生した）インクデータ２００を提供する。インクデータ処理部１００Ｒは、典型的には、要求しているアプリケーション３００に動的に又は静的にリンクされたライブラリとして具体化され、パーソナルコンピュータ内のプロセッサ上で実行される。他の実施の形態では、インクデータ処理部１００Ｒは、インクデータモデルを解釈することによってインクデータ２００を再生するように構成されたクラウドサーバであってもよい。
【０４４５】
アプリケーション３００−１，・・・，３００−ｎのそれぞれは、インクデータ処理部１００Ｒによって取り出され、再生されたインクデータ２００の必要な量／部分を引き出し、様々な動作を実行する際に、引き出したインクデータ２００を利用する。例えば、アプリケーション３００−１は、図示した実施の形態では描画アプリケーションである。描画アプリケーションは、再生されたインクデータ２００の完全なセットを引き出し、引き出したインクデータ２００に対して、例えば、拡大縮小、ラスター化、レンダリング動作を適用し、画像ファイルとして出力することもできる。
【０４４６】
様々な実施の形態において、インクデータ処理部１００及びインクデータ処理部１００Ｒは、生成部／再生部の機能を実現するライブラリを利用するアプリケーション３００とともに、それぞれメモリとＣＰＵ（中央処理ユニット）又はＧＰＵ（グラフィック処理ユニット）を含む１以上のコンピュータ装置内に具体化され得る。例えば、インクデータ処理部１００、インクデータ処理部１００Ｒ、及び描画アプリケーション３００−１は、１つのコンピュータ装置内に具体化され得る。この場合、インクデータ処理部１００及びインクデータ処理部１００Ｒは、共通のインクデータオブジェクトを共有するために、装置のメモリを使用し得る。図４６Ａ〜図４６Ｃはそれぞれ、本発明の実施の形態によるインクデータ生成装置又は方法の３つの構成例を説明している。
【０４４７】
図４６Ａは、装置１０−１−２に結合され得るストローク入力端末とは異なるサーバ内にインクデータ処理部１００Ｔが存在するような、装置又は方法を説明する。装置１０−１−２は、筆圧データを含み又は含まない、装置依存型のペンイベントデータを取得する。図示した実施の形態では、装置１０−１−２のセンサが筆圧データを含まない、タイプ２の装置依存型のイベントデータを取得している。装置１０−１−２はその後、取得した装置依存型のペンイベントデータを、インターネットのようなネットワークを介して、インクデータ処理部１００Ｔを具体化しているサーバに伝送する。サーバ内で実行されるインクデータ処理部１００Ｔは、装置依存型のペンイベントデータを装置１０−１−２から受信し、インクデータモデルによって定義されるインクデータ２００を生成する。ペンイベントに関するコンテキスト情報（入力２）は、装置１０−１−２によってインクデータ処理部１００Ｔに提供され得るか、又は、例えばサーバによって提供されるアプリケーションが共通のペンタイプを利用する場合のようにコンテキスト情報（入力２）が必要ない場合には省略され得る。
【０４４８】
図４６Ｂは、インクデータ処理部１００Ｔが装置１０−１内に存在するような、他の装置又は方法を説明する。この場合、装置１０−１−１はまた、装置１０−１−１を制御するためのデバイスドライバーを含む。装置１０−１は、筆圧データを含む又は含まない装置依存型の生データを取得する。図示した実施の形態では、装置１０−１−１のセンサは、筆圧データを含む生データを取得する。装置１０−１のセンサは、ＵＳＢのような適切なインターフェイスを介して、端末のＩ／Ｏに対し筆圧データを含む生データを送る。端末のデバイスドライバーは、受信した生データを処理し、筆圧データを含むタイプ１の装置依存型のペンイベントデータを製造する。装置１０−１−１のインクデータ処理部１００は、デバイスドライバーからタイプ１の装置依存型のペンイベントデータを受信し、インクデータモデルによって定義される非装置依存型のインクデータ２００を生成する。このとき、図示したように、インクデータ処理部１００はまた、端末上で動作するアプリケーション及び／又はＯＳからペンイベントデータに関するコンテキスト情報（入力２）を受信してもよい。生成されたインクデータ２００は、バイトシーケンス、又は、ビット若しくはバイトのシーケンスの形で順序付けられ、適当なメディア（ネットワーク、ストレージ装置など）上に記録される。
【０４４９】
図４６Ｃは、インクデータ処理部１００Ｔが入力センサを含む端末（例えばタッチセンサ）内に存在するような、さらに他の装置又は方法を説明する。例えば、図４６Ｃの装置１０−１−２は、端末として機能し得る静電容量タイプのタッチセンサであり、タッチセンサに加えてインクデータ処理部１００を含んでいる。このタッチセンサは、装置依存型の位置データ（例えば、指によってタッチされた位置）を取得する能力を有する制御ＩＣを含むが、ペン（又は指）の圧力データ又は他のペン特有のデータ（角度、傾きなど）を取得することができるかもしれないし、できないかもしれない。図示した実施の形態では、タッチセンサは、筆圧データを含まないタイプ２のペンイベントデータを取得して送信している。インクデータ処理部１００Ｔは、センサの制御ＩＣからタイプ２の装置依存型のペンイベントデータを受信し、インクデータモデルによって定義される非装置依存型のインクデータ２００を生成する。このとき、インクデータ処理部１００はまた、もしあれば、装置１０−１−２上で動作するアプリケーション又はＯＳから、ペンイベントデータ（入力１）に関するコンテキスト情報（入力２）を受信することができる。インクデータ２００はその後、永続的な形態（ＳＦＦ）又はメッセージングパケットの形態（ＳＭＦ）などで適当なメディア（ネットワーク、ストレージ装置など）上に記録されるバイトシーケンス又はビットシーケンスの形で出力され得る。
【０４５０】
図４７Ａ及び図４７Ｂは、本発明の実施の形態によるインクデータ再生方法の動作を説明する。
【０４５１】
図４７Ａは、サーバが、インクデータ処理部１００Ｒ（受信及び再生側）と、アプリケーション３００−１と、インクデータ処理部１００Ｒと、サーバとともに動作するインクデータ処理部１００Ｔによって生成されたあるフォーマット（例えばＳＦＦ）のインクデータ２００が記憶され得るメモリ（ＲＡＭ）とを含むような、インクデータ再生方法を説明する。インクデータ処理部１００Ｒは、第１の実施の形態の図２２に示した１００Ｒに対応する。アプリケーション３００−１は、アプリケーション３００−１のために必要なデータを得るためにインクデータ処理部１００Ｒの静的／動的なライブラリを発動する。図示した実施の形態では、アプリケーション３００−１は、描画ディスプレイプログラムである。インクデータ処理部１００Ｒは、ＲＡＭ内に記憶されるインクデータの中から必要なデータを選択的に取り出して再生し、再生された必要なデータをアプリケーション３００−１に提供することができる。例えば、再生された必要なデータは位置データ及びＲＧＢ色データを含むことができるが、可変のストローク幅データを含んでもよいし含まなくてもよい。アプリケーション３００−１は、インクデータ処理部１００Ｒから再生された必要なデータを受信し、補間、幾何学的形状の生成及びラスター化などの必要な描画動作を実行し、それによってディスプレイスクリーンに（レンダリングされた）画像を出力する。
【０４５２】
図４７Ｂは、装置１０−３がインクデータ処理部１００Ｒ及びアプリケーション３００−２を含むような、他の再生方法を説明する。このケースでは、インクデータ処理部１００（図示せず）によって生成されたインクデータ２００は、ストリーミングプロトコルに従って（例えば、ＳＭＦで）メッセージ内に準備され、或いは、パケット化され、例えばネットワークに出力される。アプリケーション３００−２は、インクデータ処理部１００Ｒに対し、アプリケーション３００−２のために必要なデータを所得するよう要求する。図示した実施の形態では、アプリケーション３００−２は、任意のテキスト符号化スキームに従って手書きのテキストを機械読み取り可能なテキストに変換する文字画像テキスト化アプリケーションである。そのようなものとして、アプリケーション３００−２は位置データ（Ｘ−Ｙデータ）を要求するが、ＲＧＢ色データを必ずしも要求しない。また、アプリケーション３００−２は、インクデータ２００の著者についての情報を（例えば、特定の著者特有の手書きを区別するために）要求することができる。
【０４５３】
インクデータ処理部１００Ｒは、ネットワークから受信された（ＳＭＦで書かれた）メッセージ又はパケット内のインクデータ２００の中からアプリケーション３００−２にとって必要なデータを取り出して再生することができる。アプリケーション３００−２は、再生された必要なデータをインクデータ処理部１００Ｒから受信し、必要なテキスト化動作を実行して、おそらくは著者ＩＤとともにテキスト化の結果を出力する。
【０４５４】
上述したように、インクデータ処理部１００及びインクデータ処理部１００Ｒの機能及び動作は、各アプリケーション及び各実施の形態で使用されるメディアのタイプによっては、インターネット上の様々な装置（入力装置、端末、サーバなど）に分配され、統合され得る。
【０４５５】
［２］ストローク言語（ＳＬ）及びストロークファイルフォーマット（ＳＦＦ）
［２−１］インクデータモデル（「ストローク言語」）（図４８Ａ〜図４８Ｉ）
図４８Ａ及び図４８Ｂは、本発明の実施の形態によるインクデータ２００（ストローク言語）のための情報モデルを説明する実体関連図である。
【０４５６】
図において、１つの箱は、この情報モデルで使用される１つのオブジェクト又はクラスを示している。例えば、オブジェクト「ストローク」、「ポイント」、及び「メタデータ」が使用される。オブジェクトは、属性データのコレクションとして表現される構造のようなデータ構造とともに、オブジェクト由来の言語によって定義されるクラスオブジェクトを含む。
【０４５７】
図４８Ｂの楕円は、箱内に含まれるオブジェクトの属性を示す。例えば、属性「位置」、「色」、「半径」がデータオブジェクト「ポイント」のために使用される。属性のうち、実線の楕円で示されるものは、対応するデータオブジェクトにとって必須な属性である。例えば、属性「位置」はデータオブジェクト「ポイント」にとって必須である。破線で示される楕円は、追加され得る拡張可能な属性である。例えば、属性「色」は、データオブジェクト「ポイント」にとって単に追加し得るものであり、必須ではない。図中の菱形は、菱形によって接続されるデータオブジェクト間の関係を示している。例えば、「含まれる」と分類された菱形は、菱形によって接続されたデータオブジェクトの一方が他方のデータオブジェクトに含まれることを意味している。
【０４５８】
一般的に、「情報モデル」は、オブジェクト領域（ドメイン）でデータの意味を定義し、ドメイン内で使用される概念、関係、制約、ルール、及び処理を表す。情報モデルは、共有されるドメイン内のコンテキストにおいて、様々なアプリケーション及びサービスの間で信頼性の高い情報の要求を可能にする系統的な構造を提供する。インクデータ処理部１００Ｔによって出力され、及び／又は、インクデータ処理部１００Ｒによって再生されるインクデータモデルは、ユーザによって動かされるペンによって入力されるストロークのトレースと、ペンタイプ（鉛筆、ブラシなど）やペン色のような、トレースを入力するために使用されたペンの属性とを表現することができるように構成される。
【０４５９】
図４８Ａは、インクデータ２００のための情報モデルのサブドメインを説明する。インクデータ２００のための情報モデルは、様々なデータオブジェクトの機能及び目的に基づき、概念的に、以下の４つのサブドメインにカテゴライズされる。
【０４６０】
（ＳＭ）ストロークモデルサブドメイン。ともにインクデータ２００の位置（幾何学的形状）及びレイアウトを定義するストロークオブジェクト２１０及びポイントオブジェクトを含む。
【０４６１】
（ＭＤ）メタデータサブドメイン。主にストロークオブジェクト２１０のメタデータを定義する。
【０４６２】
（Ｒ）画像データに対する描画スタイルオブジェクト２３０（主にストロークデータ（ストロークオブジェクト）を変換するために必要となる情報定義するラスター化サブドメイン）。
【０４６３】
（Ｍ）操作サブドメイン。ストロークオブジェクトを削除する、分割する、動かす、コピーする、のように、動的にストロークオブジェクト又はストロークオブジェクトのインスタンスを操作するための一群のデータオブジェクトを含む。
【０４６４】
これらのサブドメインのそれぞれが、図４８Ｂを追加的に参照して以下に説明されるであろう。
【０４６５】
＜（ＳＭ）ストロークモデルサブドメイン＞
ストロークモデルサブドメインは、ストロークオブジェクト２１０、ポイントオブジェクト、及びカンバスオブジェクトを含む。
【０４６６】
（ＳＭ１）ストロークオブジェクト２１０は、インクデータモデルの本質的な構成要素であり、インクデータ２００の核を構成する。
【０４６７】
図４８Ｃは、ストロークオブジェクト２１０の構造を説明している。ストロークオブジェクト２１０は、集合的にストロークの幾何学的形状を定義する「１番目のポイント」から「ｎ番目のポイント」までの複数のポイントオブジェクトを含む。ストロークオブジェクト２１０は、ＩｎｋＭＬ（非特許文献１）で「トレース」、ＳＶＧ１．１（非特許文献３）で「パス」、ＨＴＭＬ５（非特許文献４）明細書で「カンバスパス」とタグ付けされたデータに対応する。
【０４６８】
ストロークオブジェクト２１０は、オブジェクト属性として、第１の実施の形態を参照して上述したように、開始パラメータ３０１及び終了パラメータ３０３を含むことができる。属性として開始パラメータ３０１及び終了パラメータ３０３を含むストロークオブジェクト２１０はにおいては、開始パラメータ３０１及び終了パラメータ３０３はポイントオブジェクトとは別に定義される。ストロークオブジェクト２１０は、ストロークごとに拡張可能な属性として、「色」及び「半径」（簡便のため「幅」に置き換えられ得る）の属性を含んでもよい。これらの属性については、後に詳細に記述されるであろう。
【０４６９】
（ＳＭ２）ポイントオブジェクトは、Ｎ個のポイントオブジェクトが１つのストロークオブジェクト２１０の中に含まれるようなオブジェクトである。ポイントオブジェクトは、必要な属性として、所与（例えば２Ｄ）の座標系における位置を示す「位置」を含む。ポイントオブジェクトは、拡張可能な属性として、「色」、「半径」などを含んでもよい。「色」は、ポイントごとに設定されてもよいし、ストロークごとに設定されてもよい。
【０４７０】
概念的なツリー構造の中で同じ属性が複数のデータオブジェクトに対して定義されるとき、より低いレベルのオブジェクト（例えば、ポイントオブジェクトにより近いオブジェクト）に与えられる属性に優先権が与えられる。例えば、もしストロークの色（Ｒ，Ｇ，Ｂ，及び透明度アルファ（α））が４Ｄベクトル（Ｒ１，Ｇ１，Ｂ１，α１）で表現され、かつ、もしストロークの３番目のポイントの色が（Ｒ２，Ｇ２，Ｂ２，α２）と定義されるならば、３番目のポイントの色は（Ｒ２，Ｇ２，Ｂ２，α２）と決定される。他の例としては、もし色属性が、ストロークオブジェクト２１０に対して適用されるシェイプフィリングラスター化（描画スタイル）オブジェクトと、ストロークオブジェクト２１０自身との間で異なっていたら、ストロークオブジェクト２１０自身の色属性が優先権を有する。
【０４７１】
ストロークオブジェクト２１０又はポイントオブジェクトは、それ自身が「追加」コマンドを所有していると考えられ得る。それは、新たなストロークオブジェクト２１０又は新たなポイントオブジェクトが生成される都度、その新たなストロークオブジェクト２１０又はその新たなポイントオブジェクトをデータ構造に追加すべきことを命令する。
【０４７２】
（ＳＭ３）カンバスオブジェクトは、１以上のストロークが入力されるときに使用される描画領域（「カンバス」）のサイズを示すもので、属性として例えば幅「Ｗ」及び高さ「Ｈ」を含む。それはまた、和紙、カーボン紙、普通紙、コピー用紙、写真用紙などの紙のタイプごとにインクの吸収量を示す。紙のタイプの情報は、インクデータ２００の実際の画像表現を決定するために、ラスター化（描画スタイル）オブジェクトと結合され得る。
【０４７３】
図４８Ｄは、カンバスオブジェクトを説明している。左の絵は、ストロークが入力されるときの描画領域のサイズを示している。それは、幅「Ｗ１」及び高さ「Ｈ１」により定義される描画領域にストロークが入力されることを図示している。右の絵は、インクデータ２００から取得されるカンバスサイズ（Ｗ１，Ｈ１）がストロークを再生するためにどのように使われ得るかを説明している。図示した例では、ストロークが、モバイル端末のような、ストロークが描かれたときに使用された領域（Ｗ１，Ｈ１）より小さい幅「Ｗ２」及び高さ「Ｈ２」の描画領域を含む装置上で再生されることを前提としている。そのような場合、元の描画領域（Ｗ１，Ｈ１）及び元の描画領域に対するストロークの関連するサイズ／位置は、レンダリングする装置（Ｗ２，Ｈ２）の所与のカンバス領域にフィットするようストロークを拡大し、低減（縮小）し、切り取り、又はオフセットする際に使用され得る。
【０４７４】
＜（ＭＤ）メタデータサブドメイン＞
メタデータサブドメインは、それぞれがストロークオブジェクト２１０のためのメタデータを定義する複数のメタデータオブジェクト２５０を含んでおり、メタデータは、そのストロークオブジェクト２１０を生成するために使用されたペンイベントデータに関するコンテキスト情報（入力２）を含む。
【０４７５】
（ＭＤ１）メタデータオブジェクト２５０は、ストロークオブジェクト２１０を「描写」するために、ストロークオブジェクト２１０と一対一の関係を有する。
【０４７６】
１）タイムスタンプ属性はストロークが記録された時刻の情報を含み、例えば定義されたフォーマット（３２ビットの符号なし整数）で書かれたＵＮＩＸ（登録商標）時刻の値を表す。図４８Ｅは、ストロークごとにタイムスタンプ属性を使用することの効果を説明している。２つのストロークａ及びｂが２人の異なるユーザにより実質的に同時に記録されたとする。左の絵は、ストロークａがストロークｂの後に描かれたこと、すなわち、ストロークａのタイムスタンプ値がストロークｂのタイムスタンプ値より大きいことを示している。右の絵は、ストロークａがストロークｂの前に描かれたこと、すなわち、ストロークａのタイムスタンプ値がストロークｂのタイムスタンプ値より小さいことを示している。例えば、異なるストロークにそれぞれ関連付けられた異なるタイムスタンプ値に基づいてどのストロークが各交点で他のストロークの上に位置するべきかを決定することで、複数のユーザによって入力された複数のストロークを正確にレンダリングすることが可能になる。
【０４７７】
２）著者属性は、ストロークを記録した著者を特定する情報を含む。
【０４７８】
３）ペンＩＤ属性は、ストロークを記録するために使用されたペンを特定する情報である。理想的には、ＩＤは各ペンに対してグローバルにユニークである。ペンＩＤが利用可能でない、又は、ペンＩＤが強固に確立される必要があるときには、ペンＩＤは、ペンによってなされた入力を検出するために使用されたセンサのセンサ側ＩＤに関連して使用され得る。
【０４７９】
上述した属性を用いることで、ストロークのメタデータは、限定されない例として、いつ、誰によって、どの特定のペンを用いてストロークが描かれたか、を記述することができる。
【０４８０】
＜（Ｒ）描画スタイルオブジェクト（ラスター化）サブドメイン＞
描画スタイルオブジェクト（ラスター化）サブドメインは、ストロークが入力されたときにストロークオブジェクト２１０に何の修飾する又は修正する処理が関連付けられたかをそれぞれ保持する一群の描画スタイルオブジェクト２３０を含む。描画スタイルオブジェクト２３０は、どのストロークオブジェクト２１０が生成されたかに基づいて、ペンイベントデータに関するコンテキスト情報（入力２）から構築される。例えば、描画スタイルオブジェクト２３０は、異なる描画ツール属性（ブラシ、鉛筆、クレヨンなど）及び異なるペン先幅のようなストロークに関連付けられる（適用される）様々な修飾又は修正処理を記録する。以下のオブジェクト（「描画スタイルオブジェクト」と総称される）は、ラスター化サブドメインの一部となり得る。
【０４８１】
（Ｒ１）ラスター化スタイルオブジェクトは、ストロークオブジェクト２１０に対してＭ：Ｎの割合の関係を有する「レンダリング」オブジェクトである。例えば、Ｍ個（例えば５個）の（拡張可能なオブジェクトを含む）スタイルオブジェクトが、Ｎ個（例えば２０個）のストロークオブジェクトに適用され得る。スタイルオブジェクトはいわゆるスーパークラスオブジェクトであり、その属性は、シェイプフィリングスタイルオブジェクトのような他のオブジェクトクラスによって、拡張された関係の中で受け継がれ得る。スタイルオブジェクトは、属性として「合成」を含む。「合成」は、ストロークを以前に生成されたストローク又は背景と混ぜ合わせるときに、どのタイプの機能（例えば、通常、複数、現在及び以前のストロークの中の最小又は最大、消去など）が使われるべきかを示す。図４８Ｆは、ストロークオブジェクト２１０を修飾又は修正するためにスタイルオブジェクトを拡張する代表的なオブジェクトの３つの概念的な例、すなわちシェイプフィリングスタイルオブジェクト、粒子散乱スタイルオブジェクト、及び領域複製スタイルオブジェクトを含む。
【０４８２】
（Ｒ２）シェイプフィリングスタイルオブジェクトは、図４８Ｆの一番上に図示されるように、ストロークオブジェクト２１０がスクリーン上にレンダリング（描画）されるときに、ストロークのアウトライン及び色を定義するためにストロークオブジェクト２１０に適用される。シェイプフィリングスタイルオブジェクトは、ストロークオブジェクト２１０を構成する複数のポイントオブジェクトに関連してそれぞれ位置取りされる複数の円を定義する。各円は、各ポイントオブジェクトが半径及び色属性に関連付けられていない場合に、半径及び色属性に関連付けられ得る。ポイントオブジェクト又は複数のポイントオブジェクトからなるストロークオブジェクト２１０を定義するための半径及び色属性の使用は本発明の特徴の１つであり、後に詳細に記述される。シェイプフィリングスタイルオブジェクトはまた、オーバーラップする一連の円の包絡線によって定義されるストロークのアウトラインのエッジを視覚的に除去するために何のアルゴリズムが使用されるべきかを定義するアンチエイリアス属性を含む。
【０４８３】
（Ｒ３）粒子散乱スタイルオブジェクトは、図４８Ｆの中ほどに図示されるように、上述したシェイプフィリングスタイルオブジェクトで使用される円に代えて「粒子」を用いる。粒子散乱スタイルオブジェクトは、上述したシェイプフィリングスタイルオブジェクトと同様、「半径」及び「色」の属性を含む。
【０４８４】
粒子散乱スタイルオブジェクトはまた、属性「乱数シード」（図４８Ｂ参照）を含む。これは整数値であり、鉛筆やウォーターカラーブラシのようなツールのために「荒さ」や「飛散」をシミュレートとする目的で疑似乱数を生成するために使用される。「乱数シード」属性は、ユーザがファイルを開け、又はリモートユーザがインクデータを受信するときに、毎回同じ絵を正確にレンダリングすることを可能にするために、ファイルフォーマット内に格納される。
【０４８５】
「シェイプ回転」属性は、各粒子がランダムな回転角で回転されるべきこと、又は、ある軌道に沿って回転されるべきことを示す。
【０４８６】
「間隔」属性は、２つの連続する粒子の間の距離を示す。
【０４８７】
属性「範囲」は、図４８Ｆに矢印で示すように、軌道方向と垂直な方向における各粒子のオフセット値を示す。矢印で定義される幅の範囲内で粒子の位置が、乱数シードに基づいて生成される乱数に基づいて、ランダムにオフセット（変更）され得る。
【０４８８】
属性「フィル」は、ハッチングのような、シェイプに適用されるべきテクスチャを定義する。
【０４８９】
属性「フィルオフセット」は、シェイプに適用されるハッチングのようなテクスチャの切り抜き位置を示し、同じテクスチャが連続して適用されるのを避けるべく切り抜き位置を定義し変更するために使用される。
【０４９０】
属性「ビルドアップ」は、ペンが連続的な期間の間固定ポイントに位置しているときに、時間の経過に応じて生成される粒子の数が増加されるか否かを示す。
【０４９１】
属性「ミキシング」は、２つの連続する粒子が互いに重なる位置の色を計算するためにどのタイプ（例えば、通常、複数、なし、など）の機能が使用されるべきかを定義する。例えば、色はそれらの粒子のうちの１つの色と同じとされるべきか、それともより濃い色にされるべきか（例えば、２つの色の混合）を定義することができる。
【０４９２】
（Ｒ４）領域複製スタイルオブジェクトは、図４８の一番下に図示されるように、スタイルオブジェクトを拡張するために使用される。領域複製スタイルオブジェクトは、ポイントの間を補間する閉じた曲線によって定義される領域を設定する。属性「変換マトリックス」は、閉じた曲線に囲まれた領域内で内容に適用されるべきアフィン(affine)変換マトリックスを保持する。その領域の内容は、変換マトリックスに基づいて、異なる座標にレンダリングされる。マトリックスに基づく変形は、ストロークオブジェクト２１０のレンダリングスタイルのみに影響し、ストロークオブジェクト２１０自身を操作したり修正したりすることはない。
【０４９３】
＜（Ｍ）操作サブドメイン＞
操作サブドメインは、インクデータモデルに従って生成された既存のストロークオブジェクト２１０の全部又は一部を操作する（分割する、消去する、コピーアンドペーストする、修正する、など）ための変換（又は操作オブジェクト）を定義する。
【０４９４】
（Ｍ１）スライスオブジェクト２７４は、ストロークオブジェクト２１０の１つ又は２つの部分を取り出すために適用される操作オブジェクト２７０である。図４８Ｇは、スライスオブジェクト２７４の動作を説明している。図４８Ｇの上の絵は、スライスオブジェクト２７４が適用される前のストロークオブジェクト２１０を図示している。スライスオブジェクト２７４は、「幅」を持ちストロークオブジェクト２１０を横切る（と交差する）他のストロークによって表される。「幅」を持つスライスオブジェクト２７４は、典型的には「消去」機能と関連付けられる。「幅」を持つスライスオブジェクト２７４が交差するストロークオブジェクト２１０上の位置はそれぞれ、ｋ番目のポイントとｋ＋１番目のポイントの間と、ｋ＋２番目のポイントとｋ＋３番目のポイントとに位置する。元のストローク曲線は各ポイントをキャットマル−ロム曲線で補間することによって生成されており、元のストロークの形を修正することなくそのストロークを２つのストロークに切断するためにストロークがスライスされるとき、新たに生成された終了点のために新たな終了ポイントオブジェクトが生成されることはない。その代わり、図４８Ｇの下の図に示すように、新たな終了パラメータ３０３ｎのための値が１番目のストロークのための属性として設定され、新たな開始パラメータ３０１ｎのための値が２番目のストロークのための属性として設定される。新たな終了パラメータ３０３ｎ及び開始パラメータ３０１ｎは、最初にディスプレイされたセグメント又は最後にディスプレイされたセグメントを定義する２つのポイント間の内部分割ポイントを示す１つ又はいくつかの「ｆｌｏａｔ」ポイントとして表現される。例えば、最初のストロークのための終了パラメータ３０３ｎは、元のｋ番目のポイントと元のｋ＋１番目のポイントの間の内部分割点として定義され得る。したがって、元のストロークの形状が、２つの新たに生成されたストロークの形状を表すために使用され得る。いくつかの実施の形態では、図４８Ｇの「幅」に沿って延在するスライスされた（削除された）ストローク部分は、元のストロークから分割された「３番目の」ストロークとして表現され得る。
【０４９５】
上述した方法によれば、元のストロークの２つのポイント間の内部分割ポイントは、新たに生成された（スライスされた）ストロークの属性（新たな終了パラメータ３０３ｎ及び新たな開始パラメータ３０１ｎ）として保持される。そういうものとして、新しいスライス動作の結果として新たなポイントオブジェクトが生成されることはなく、「入力ポイント」の元のコレクションは変更されない。したがって、補間されたキャットマル−ロム曲線から曲線が導出されるとき、曲線のアウトラインはスライス操作の前と後とで変化しない。
【０４９６】
属性「変更スタイル」及び「変更メタデータ」は、スライス動作によって元のストロークから分けられた複数のストロークの属性が、分けられたストロークのために変更される（新たに定義される）か（例えば、「著者」属性）、又は、元のストロークに関連付けられた属性から変更されず同じものとなるか（例えば、ペン色属性）を示す。
【０４９７】
開始及び終了パラメータ３０１及び３０３はそれぞれ、元のストロークから分けられた２つのストロークの開始及び終了位置を示す属性である。
【０４９８】
属性「ポイント範囲」は、図４８Ｇの「幅」により定義される横断ストローク（スライシング操作オブジェクト）が操作対象のストロークオブジェクトと交差するポイントの範囲を定義する。図４８Ｇでは、ポイント範囲はｋ＋１番目のポイントとｋ＋２番目のポイントとを含む。
【０４９９】
図４８Ｈは、スライシング操作オブジェクトを適用することによって実現される「消去」機能を説明している。そのような「消去する」操作オブジェクトが既存のストロークオブジェクト２１０に適用されるとき、ストロークオブジェクト２１０は、中間に「消去」される正確な部分（例えば、図１８のホールセグメント１８０１内のＰ＿ｉｎｔｅｒｓｅｃｔ＿ＬとＰ＿ｉｎｔｅｒｓｅｃｔ＿Ｒとの間）を有して、新たな終了パラメータ３０３ｎを有する第１のストローク（ストローク１）と、新たな終了パラメータ３０３ｎを有する第２のストローク（ストローク２）との２つのストロークに分割される。この場合、元の単一のストロークオブジェクト２１０を修正するためのこの操作がファイナライズ（コミット）されるとき、２つの新たなストローク（ストローク１及びストローク２）が生成され、中間部分は消去される。
【０５００】
（Ｍ２）選択オブジェクトは、図４８Ｉに示すように、複数（Ｎ個）のスライスオブジェクト２７４（スライシング操作オブジェクト）を「含む」操作オブジェクトである。選択オブジェクトは、複数（Ｎ個）のスライスオブジェクト２７４（スライス１、スライス２、スライス３）で囲まれた領域（スライス２）を「選択」し、それによって選択された範囲内の既存のストロークオブジェクト２１０の任意の部分がその後、その部分に変換マトリックスを適用することによって、操作され（移動され、コピーされ、拡大され、縮小され）得る。図４８Ｉでは、点線の閉じた曲線で形作られる投げ縄で示される選択範囲が、部分的にスライスされたストロークオブジェクト２１０を含み、これはその後、操作されることができる。一例では、図４８Ｉに図示したように、移動され（移され）ることができる。
【０５０１】
属性「変換マトリックス」は、アフィン(affine)変換マトリックスである。図示した例は、ｔｘ及びｔｙによって説明される領域内の値を示している。マトリックスオブジェクトが特定の操作を定義するために使用されるとき、まるで実質的に異なる位置に移動したかのように、領域（スライス２）内のポイントを表現することが可能となる。このケースでは、この操作オブジェクトが元の単一のストロークオブジェクト２１０を修正するためにファイナライズ（コミット）されるとき、３つの新たなストローク（ストローク１、ストローク２、及びストローク３）が生成される。
【０５０２】
属性「複製」は、オブジェクトを異なる位置へ実質的に移動するためにアフィン変換マトリックスを適用した後であっても、元の（変形前の）位置でオブジェクトを保持するか否かを示す。例えば、実質的に移動した新たな位置／領域に加えて元の位置／領域を保持することにより、元の位置／領域が新たな位置／領域にコピーされるというコピー動作を実現することが可能になる。
【０５０３】
［２−２］ストロークファイルフォーマットのサンプル（図４８Ｊ〜図４８Ｌ）
図４８Ｊは、本発明の実施の形態による、インクデータ構造がシリアライズされて維持されるストロークファイルフォーマット（ＳＦＦ）と同様に、図４８Ｂに示されるインクデータモデルの定義に従い、インクデータ処理部１００（１００Ｔ又は１００Ｒ）によって生成され処理されるインクデータの構造（オブジェクトツリー）を説明する。
【０５０４】
図４８Ｊの上部は、メモリスペースのようなその内部処理リソース内でインクデータ処理部１００によって生成されるインクデータ構造を説明している。例えば、ｉ個のストロークオブジェクトのそれぞれの中で、１以上のポイント（ポイント＃１〜＃ｊ）が例として挙げられ、１つのメタデータオブジェクト２５０と、１つの描画スタイルオブジェクト２３０とが互いに関連付けて（インスタンスツリーの形で）定義される。データ構造は、図４８Ｂの実体関連（ＥＲ）図に示されるように、インクデータモデルの定義によるものである。図４８Ｊでは、ストローク＃１とストローク＃２は、それらのスタイルオブジェクトのそれぞれにおける相当多数のデータは同じであるけれども、異なる名前の付けられたスタイルオブジェクト（スタイル＃１及びスタイル＃２）を含む。このようなことは、例えば、ストローク＃１とストローク＃２とが同じ（同じペン先タイプ及びペン色を有する）描画ツールを用いて同じ描画アプリケーション内で描かれているときに発生する。
【０５０５】
図４８Ｊの下部は、図４８Ｊの上部に示したデータ構造が配置されるストロークファイルフォーマット（ＳＦＦ）のファイルの例を説明する。すなわち、各ストロークオブジェクト＃１〜＃ｉのために、ストロークオブジェクト２１０を構成するポイントオブジェクト＃１〜＃ｊと、ストロークオブジェクト２１０を描写するメタデータオブジェクト２５０と、ストロークオブジェクト２１０がスクリーン上にどのようにレンダリング（描画）されるかを定義する描画スタイルオブジェクト２３０とがＳＦＦファイル内に定義される。示されるように、「ＩｎｋＤａｔａＦｉｌｅ」と名付けられた１つのファイルは、複数のストローク＃１〜＃ｉについての情報を含む。
【０５０６】
＜ストローク＃１についての情報＞
（１）第一に、ストローク＃１自身に関する情報が記述される。この情報は、ストローク＃１の開始パラメータ３０１及び終了パラメータ３０３のようなストローク＃１の属性がその中に符号化されるバイトシーケンス（又はバイナリシーケンス。ここでは交換できるように使用される）を含む。この情報はまた、ストローク＃１を構成する一群のポイントオブジェクトト＃１〜＃ｊがその中で符号化されるバイトシーケンスを含む。
【０５０７】
（２）第二に、ストローク＃１を「描写する」メタデータオブジェクト２５０がその中に符号化されるバイトシーケンスが含まれる。
【０５０８】
（３）第三に、ストローク＃１を「レンダリングする」描画スタイルオブジェクト２３０がその中に符号化されるバイトシーケンスが含まれる。
【０５０９】
＜ストローク＃２についての情報＞
上記ストローク＃１についての場合と同様、同じ整形処理がストローク＃２についても実行される。図４８Ｊの例では、描画スタイルオブジェクト＃１の値は、描画スタイルオブジェクト＃２の値と同じである。この場合、持続的なファイルフォーマット（ＳＦＦ）においては、ファイルスペースを節約し、冗長性を避けるために、同じ値を繰り返さないことが好適であり得る。したがって、描画スタイルオブジェクト＃２として同じ値が繰り返されることはなく、示されるように、メタデータオブジェクト＃２の後には描画スタイルオブジェクトが含まれない。再生側では、インクデータ処理部１００は、新しい（異なる）描画スタイルオブジェクト２３０が見つかるまで、各ストロークオブジェクト２１０をレンダリングするために同じ描画スタイルオブジェクト２３０を使い続けるであろう。すなわち、ファイル生成側及び再生側では、ストロークオブジェクト２１０のためのスタイルオブジェクトが省略されている場合、前のストロークオブジェクト２１０のために使用したスタイルオブジェクトが使用されるべきことが予め同意されている。
【０５１０】
図４８Ｋは、データオブジェクト（メタデータオブジェクト２５０、カンバスオブジェクト、描画スタイルオブジェクト２３０）の各クラスがＳＦＦファイル内に順序付けられて記憶されるときの各クラスのデータタイプを説明する。図４８Ｋでは、「ＩｎｋＤａｔａＦｉｌｅ」がデータ構造のルートに位置するオブジェクトである。
【０５１１】
図４８Ｋでは、各ブロックの最初の行が本発明のインクデータモデルによって定義されるオブジェクトの名前を示している。各ブロックの２行目以降は、左側のカラムにおいて名付けられたオブジェクトの属性を示し、右側のカラムにおいてそれらのデータタイプ（整数、符号なし文字列、など）。属性は、ＡＳＮ．１、ＢＥＲ、ＤＥＲといった符号化方法、又は、「ｓｉｎｔ３２型」、「ｆｌｏａｔ」のような第１の実施の形態の図１０に示したスキーマファイル内に示した符号化方法などの適切な方法を用いて符号化され得る。
【０５１２】
図４８Ｋに説明される属性の意味は、いくつのストロークオブジェクトが与えられたＳＦＦファイル内に含まれるかを示す「ｓｔｒｏｋｅＣｏｕｎｔ」のようなインクデータ２００を持続させる目的で必要となる情報を除き、図４８Ｂを参照して上述した属性と同じである。
【０５１３】
構造のルートにあるデータオブジェクトＩｎｋＤａｔａＦｉｌｅは、本発明の実施の形態によるファイル内に維持されるバイナリシーケンスを含む。
【０５１４】
１行目の「Ｈｅａｄｅｒ」はＩｎｋＤａｔａＦｉｌｅを持続的に記憶する目的で必要となるデータであり、後続するバイナリシーケンスを処理するうえでの使用のために、インクデータモデルの定義のバージョンに関する情報などを含む。ヘッダはさらに、インクデータの生成側が意図したようにインクデータ２００を再生するためにアプリケーション３００又は再生装置１００Ｒが必要とする、どのデータが圧縮されているか或いはいないか、使用されるバイナリ符号化方法、及び、その他の情報のような情報を含む。
【０５１５】
２行目の「ＤｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ」は位置座標値のような値の正確さのレベルを示し、記録フォーマット内で十進数により表現される。「ＤｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ」は、上述した第１の実施の形態の図１０の４行目のパラメータに対応する。「ＤｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ」は、インクデータモデル内では定義されていないが、インクデータファイルを維持する目的のために必要となるひとまとまりのデータである。「ＤｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ」の使用は、本発明の特徴の１つであり、以下で詳細に記述される。ｄｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ数（又は正確度）は、解像度の逆数に対応する。例えば、位置座標値が０．０１単位（例えば、０．０１ピクセル）の解像度で取得可能であるとき、ｄｅｃｉｍａｌＰｒｅｃｉｓｉｏｎとして表現される解像度は、１００（０．０１の逆数）として設定され得る。より最適な保管の目的で、ｄｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ値は、指数の形で表現され得る。例えば、値１００は、底１０の２乗として表現され得る（いくつかのケースでは、底は省略されてもよい）。本発明の実施の形態によるインクデータ生成及び再生方法の中で正確度を用いることは、図５８及び図６６を参照して後に完全に記述されるであろう。
【０５１６】
３行目の「ＭｅｔａＤａｔａ」は、図４８Ｂ及び図４８Ｅを参照して上で説明したメタデータオブジェクト２５０に対応する。
【０５１７】
４行目の「Ｃａｎｖａｓ」は、図４８Ｂ及び図４８Ｄを参照して上で説明したカンバスオブジェクトに対応する。
【０５１８】
５行目の「Ｓｔｙｌｅ」は、図４８Ｂ及び図４８Ｆを参照して上で説明した（描画）スタイルオブジェクトに対応する。
【０５１９】
６行目の「ｓｔｒｏｋｅＣｏｕｎｔ」は、インクデータファイルを維持する目的で必要となるひとまとまりの情報であり、特定のインクデータファイル内に含まれるストロークの数を示す符号又は整数値である。そのようなものとして、この属性はインクデータモデル自身には含まれない。典型的には、ｓｔｒｏｋｅＣｏｕｎｔはインクデータ符号シーケンスの中に、それらが動的に修正されるものではなく、その代わりに静的なストレージ型のメディアに出力されるものであるときに、追加される。ｓｔｒｏｋｅＣｏｕｎｔは、例えばインクデータがリモートに位置するインクデータ再生装置のためにリアルタイム通信で継続的に出力されるものであるとき、設定されず、又は何らの値も含まない（ＮＵＬＬ）。
【０５２０】
７行目の「ｓｔｒｏｋｅｓ」は、インクデータ内に含まれる一群のオブジェクトインスタンス「ｓｔｒｏｋｅｓ」（ストロークオブジェクト）に関連する。各「ｓｔｒｏｋｅ」（各ストロークオブジェクト２１０）は、図４８Ｌに記述されるように、１以上のポイントオブジェクトと様々な属性とを含む。
【０５２１】
図４８Ｌは、１番〜Ｎ（ｓｔｒｏｋｅＣｏｕｎｔ）番のストロークオブジェクトである各ストロークの中に含まれる情報を説明する。１行目と２行目の「Ｓｔａｒｔ＿ｖａｌｕｅ」及び「Ｅｎｄ＿ｖａｌｕｅ」は、図４８Ｃを参照して上述した開始パラメータ３０１及び終了パラメータ３０３に対応する。第１の実施の形態を参照して上述したように、これら２つのパラメータは、ストロークオブジェクト２１０の属性として、そのストロークオブジェクト２１０に含まれるポイントオブジェクトとは別に記憶される。
【０５２２】
４行目の「ＳｔｒｏｋｅＴｙｐｅ  ｖａｒｉａｂｌｅＡｌｐｈａ」は、ストロークに関連付けられる透明度（アルファ）がストロークの長さに沿って可変かを示す。「ｖａｒｉａｂｌｅＡｌｐｈａ」は、ストロークオブジェクト２１０の透明度がその長さに沿って可変であることが許容されているか否か（すなわち、固定されているか）を示すフラグであり、典型的にはブール値として表現される（ＴＲＵＥ又はＦＡＬＳＥ）。いくつかの実施の形態では、属性「ＳｔｒｏｋｅＴｙｐｅ  ｖａｒｉａｂｌｅＡｌｐｈａ」は図４８Ｂに示したインクデータモデル自身の中には存在せず、ストロークオブジェクトがＳＦＦファイル（インクデータファイル）内に維持されるときに使用される。本発明の様々な実施の形態で「ｖａｒｉａｂｌｅＡｌｐｈａ」を使用することが、後に詳細に記述されるであろう。
【０５２３】
５番目から８番目の値「ａｌｐｈａ」、「ｒｅｄ」、「ｇｒｅｅｎ」、及び「ｂｌｕｅ」は、連帯して、ストロークオブジェクト２１０の「色」属性を構成する。
【０５２４】
５行目の「ａｌｐｈａ」は、例えば「ｖａｒｉａｂｌｅＡｌｐｈａ＝ｆａｌｓｅ」により示されるようにストロークの「ａｌｐｈａ」が可変でない場合に使用される固定された透明度の値（又は不透明度／インクの濃度の値）を示す。「ａｌｐｈａ」が固定されているとき、固定された「ａｌｐｈａ」がストロークオブジェクト２１０の長さに沿って、すなわち、ストロークオブジェクト２１０を構成する複数のポイントオブジェクトのそれぞれに対して適用される。
【０５２５】
６行目から８行目の「ｒｅｄ」、「ｇｒｅｅｎ」、及び「ｂｌｕｅ」は、ＲＧＢ色空間が使用されるときに、ストロークオブジェクト２１０の色データを決定するための情報である。
【０５２６】
９行目の「ｐｏｉｎｔｓＣｏｕｎｔ」は、ストロークオブジェクト２１０内に含まれるポイントの数を示す。上述した「ｓｔｒｏｋｅｓＣｏｕｎｔ」と同様、「ｐｏｉｎｔｓＣｏｕｎｔ」は、ＳＦＦファイル内のインクデータファイルを維持する目的で使用されるもので、インクデータ２００が（より一時的なリアルタイム通信型のメディアではなく）静的なストレージ型のメディアに出力されるタイミングで決定され得る。「ｐｏｉｎｔｓＣｏｕｎｔ」は、例えばインクデータ２００が代わりにリアルタイム型のメディアに出力されるときには、データ構造内に存在せず、又は何らの値も含まない（ＮＵＬＬ）こととしてもよい。
【０５２７】
１０行目の「ｐｏｉｎｔｓ」は、ストロークオブジェクト２１０を構成する複数のポイントオブジェクトのそれぞれに関する情報を示す。
【０５２８】
ポイントオブジェクト（図４８Ｌの「ｐｏｉｎｔ」）は、処理されるストロークに含まれる１番〜Ｎ（ｐｏｉｎｔｓＣｏｕｎｔ）番のポイントのそれぞれに関する情報を含むデータオブジェクトである。図４８Ｂに示すように、１つのストロークオブジェクト２１０内にＮ（ｐｏｉｎｔｓＣｏｕｎｔ）個のポイントオブジェクトが含まれる。
【０５２９】
「ｐｏｉｎｔ」を定義する箱の１行目の「ｉｆ」フレーズは、ストロークが長さ方向の可変アルファを含むか否かを示すｖａｒｉａｂｌｅＡｌｐｈａの値（ＴＲＵＥ又はＦＡＬＳＥ）に応じた各「ｐｏｉｎｔ」データオブジェクトのための構文変更を意味する。
【０５３０】
（ｉ）２行目〜６行目は、ｖａｒｉａｂｌｅＡｌｐｈａの値がＴＲＵＥである（すなわち、ストロークが長さ方向の可変アルファ値を含む）場合に、「ｐｏｉｎｔ」データオブジェクトに含まれるデータを示す。
【０５３１】
２行目の「ｘ」は、処理されるポイントの最初の座標値を示す。
【０５３２】
２行目の「ｙ」は、処理されるポイントの２番目の座標値を示す。
【０５３３】
したがって、「ｘ」と「ｙ」は、連帯してポイントの２Ｄ座標を定義する。
【０５３４】
４行目の「ｒａｄｉｕｓ」は、中心としてポイントを含む円の半径のサイズを示す。「Ｒａｄｉｕｓ」は、ポイントオブジェクトに関連付けられる属性であり、筆圧値又はぺん先の力に関連付けられる必要はない。むしろ「ｒａｄｉｕｓ」は、後により完全に記述されるように、圧力や力の概念のようなより低レベルな概念を包含する、意味を有する一般化されたより高度な概念である。
【０５３５】
５行目の「ａｌｐｈａ」は、ポイントオブジェクトに関連付けられたアルファ値を示す。
【０５３６】
ポイントオブジェクトの２行目から５行目に含まれるデータのデータ型が、図５８を参照しながら後により完全に記述するように、描画処理アプリケーションで典型的に使用される浮動小数点（ｆｌｏａｔ）データ型でなく、整数（ｉｎｔ）又はｕｓｈｏｒｔ（又はｕｃｈａｒ）であることに注意すべきである。
【０５３７】
（ｉｉ）７行目〜１１行目は、ｖａｒｉａｂｌｅＡｌｐｈａの値がＦＡＬＳＥである（すなわち、ストロークが可変アルファ値を含まない。すなわち、アルファ（透明度）の値がストロークの長さに対して固定されている）場合に、「ｐｏｉｎｔ」データオブジェクトに含まれるデータを示す。
【０５３８】
７行目の「ｘ」は、ポイントの最初の座標値を示す（上述した２行目と同じ）。
【０５３９】
８行目の「ｙ」は、ポイントの２番目の座標値を示す（上述した３行目と同じ）。
【０５４０】
したがって、「ｘ」と「ｙ」は、連帯してポイントの２Ｄ座標を定義する。
【０５４１】
９行目の「ｒａｄｉｕｓ」は、中心としてポイントを含む円の半径のサイズを示す（上述した４行目と同じ）。
【０５４２】
このケースではストロークオブジェクト２１０が、ストロークオブジェクト２１０を構成する複数のポイントオブジェクトのそれぞれに適用されるべき固定されたアルファ値を有していることから、アルファ値はポイントオブジェクトのためには定義されない。
【０５４３】
上述したように、また、図５７を参照して後により完全に記述するように、データオブジェクトの構文は、ストロークオブジェクト２１０が長さに沿って可変なアルファ値を有するか又は固定されたアルファ値を有するかを示すｖａｒｉａｂｌｅＡｌｐｈａの値（ＴＲＵＥ又はＦＡＬＳＥ）に応じて変化する。
【０５４４】
１２行目及び後続する行は、各「ｐｏｉｎｔ」データオブジェクトについて、ｒｅｓｅｒｖｅＲａｗｆｌａｇの値に応じて、選択的に追加の属性を含むべく構文が変化することを示す。ｒｅｓｅｒｖｅＲａｗｆｌａｇがＴＲＵＥである場合、例えば各ポイントについて「タイムスタンプ」情報を含むように、元の情報を失うことなく、データオブジェクトを拡張する（拡充する）ことが可能である。
【０５４５】
インクデータモデルは、本発明の実施の形態によるインクデータモデルの構文及び意味論で定義されたストロークファイルフォーマット（ＳＦＦ）で書かれたインクデータファイル内のデータオブジェクトととともに、図４８Ａ〜図４８Ｌを参照して上述された。次に、本発明の実施の形態によるデータ構造を有するインクデータ２００を生成して出力するように動作可能であるインクデータ処理部１００（１００Ｔ）が記述される。
【０５４６】
［３］インクデータ処理部（図４９〜図６３）
図４９は本発明の実施の形態によるインクデータ処理部１００Ｔの機能ブロック図である。このインクデータ処理部１００Ｔは、図５の１００Ｔに対応する。インクデータ処理部１００Ｔは、上記図４８Ａ〜図４８Ｌに記述されるもののような、入力装置によって提供されるペンイベント及びペンイベントのコンテキスト情報（入力２）に基づくインクデータモデルの定義に従ってインクデータを生成する。インクデータ処理部１００Ｔは、生成したインクデータ２００を、例えば、上記図４８Ｊ〜図４８Ｌに記述したＳＦＦファイル（「インクデータファイル」）、バイナリシーケンス、パケットなどの形で出力する。
【０５４７】
インクデータ処理部１００Ｔは、インクデータ生成部１２０及びインクデータ整形部１４０を含む。インクデータ生成部１２０は、図７のストロークデータオブジェクト操作部１２２に対応する。インクデータ生成部１２０は、筆圧データを含むタイプ１のペンイベントデータ及び筆圧データを含まないタイプ２のペンイベントデータのような様々なタイプの装置依存型の入力データ（「入力１」）を受信する。図４９では、タイプ１のペンイベントデータは、タイムスタンプ情報（例えば「ｄｏｕｂｌｅ  ｔｉｍｅｓｔｍａｐ」）、複数組のＸＹ座標（例えば「ｆｌｏａｔ  ｘ，ｙ」）、及び筆圧データ（例えば「ｆｌｏａｔ  ｐｒｅｓｓｕｒｅ」）を含み、タイプ２のペンイベントデータは、タイムスタンプ情報（例えば「ｄｏｕｂｌｅ  ｔｉｍｅｓｔｍａｐ」）及び複数組のＸＹ座標（例えば「ｆｌｏａｔ  ｘ，ｙ」）を含む。インクデータ生成部１２０は、タイムスタンプ情報を受信する代わりに、例えばペンイベントデータを受信する時刻を、タイムスタンプ情報として使用することとしてもよい。
【０５４８】
インクデータ生成部１２０はまた、ペンイベントデータを入力するために用いたアプリケーション又はオペレーティングシステムから、ペンイベントデータについてのコンテキスト情報（「入力２」）を受信する。例えば、描画アプリケーションを用いて描かれたストロークの場合、コンテキスト情報（「入力２」）は、描画アプリケーションによってストロークを描くために設定される様々なパラメータを含むことができる。すなわち、コンテキスト情報（入力２）は、ストロークを生成（描画）する目的のために定義される構成情報を含むことができる。コンテキスト情報（入力２）は、もしタイプ１のペンイベントデータとタイプ２のペンイベントデータとが２つの異なるアプリケーションによって生成されるのであれば、その２つのアプリケーションからのタイプ１及びタイプ２のペンイベントデータそれぞれのために提供され得る。或いは、タイプ１及びタイプ２のペンイベントデータのためのコンテキスト情報（入力２）は、そのタイプ１及びタイプ２のペンイベントデータを生成するために共通に使用される同じアプリケーション又はオペレーティングシステムによって提供されてもよい。
【０５４９】
第１の実施の形態で図７のストロークデータオブジェクト操作部１２２を参照して上述したように、インクデータ生成部１２０は、受信したタイプ２のタイプ１のペンイベントデータ及び受信したコンテキスト情報（入力２）に基づき、それぞれがポイントに関するＸＹ座標（位置）及び半径及びアルファデータを含む一連のポイントオブジェクトを出力する。図４８Ｌのデータオブジェクト「ｐｏｉｎｔ」を参照して上述したように、半径はポイントに関連付けられる属性であり、圧力又はペン先の力に関連付けられる必要はないが、本発明の実施の形態によるインクデータモデルの定義によれば、むしろ、圧力やペン先の力より低いレベルの概念を包含する、一般化された、装置に依存しない、高度な、意味を有する概念である。
【０５５０】
インクデータ整形部１４０は、ポイントのＸＹ座標及び半径及びアルファデータを含むポイントごとにデータを受信し、入力されたデータを、例えば図４８Ｌに記述したポイントオブジェクトのデータ構造に対応するデータ構造に整形し、整形したデータを出力する。整形されたポイントオブジェクト内のデータは、描画処理アプリケーションで典型的に使用されるｆｌｏａｔ型のポイントデータ型（「ｆｌｏａｔ」）ではなく、「ｉｎｔ」（整数）、「ｕｓｈｏｒｔ」、「ｕｃｈａｒ」などのデータ型のものとなる。
【０５５１】
図５０Ａは、図４９のインクデータ生成部１２０によって実行される、本発明の実施の形態によるポイントオブジェクトの属性として半径及びアルファ情報を出力する処理を説明するフロー図である。典型的には、インクデータ生成部１２０はそれが受信するＸＹ座標データをインクデータ整形部１４０に単にパスするに過ぎないので、ＸＹ座標データ（位置（Ｘ，Ｙ））を出力することの記述は省略する。
【０５５２】
ステップＳ１２０１で、インクデータ生成部１２０は、処理されるべきポイントを含むストロークごとに、必要なコンテキスト情報（入力２）を取得する。コンテキスト情報（入力２）のサンプルが、図５０Ｂを参照して後述されるであろう。
【０５５３】
ステップＳ１２０２では、入力されたデータが筆圧データを含むか否かが決定される。
【０５５４】
ステップＳ１２０３では、入力されたデータが筆圧データを含むとステップＳ１２０２で決定された（「ＴＲＵＥ」）後、ポイントの筆圧データがその点でのパラメータ（ｖｎ・・・速度）を導出するために使用され得る。より大きな筆圧があるポイントに印加されるとき、そのポイントでの速度が遅くなると認められる。したがって、ｖｎは一般に圧力データと反比例の関係にあり得る。
【０５５５】
ステップＳ１２０４では、入力されたデータが筆圧データを含まないとステップＳ１２０２で決定された（「ＦＡＬＳＥ」）後、そのポイントの時刻情報が取得される。時刻情報は、ストロークを構成するポイントごとの入力情報として受信されてもよいし、または、インクデータ生成部１２０（又はインクデータ処理部１００Ｔ）がそのポイント情報を受信する時刻として設定されてもよい。
【０５５６】
ステップＳ１２０５では、図５１を参照して後により完全に記述するように、ポイント及び隣接する１又は複数のポイントの時刻情報に基づいて、そのポイントの速度が導出される。
【０５５７】
ステップＳ１２０７では、図５２を参照して後により完全に記述するように、ｖｎ（速度）、フェイズ情報、及びペンタイプ情報に基づき、ポイントの半径情報が取得される。
【０５５８】
ステップＳ１２０９では、図５５を参照して後により完全に記述するように、ｖｎ（速度）、フェイズ情報、及びペンタイプ情報に基づき、ポイントのアルファ（透明度又は不透明度）情報が取得される。
【０５５９】
図５０Ｂは、インクデータ生成部１２０に関連するコンテキスト情報（入力２）のいくつかを設定するために使用され得るアプリケーション又はオペレーティングシステムのＧＵＩのサンプルを説明する。インクデータ生成部１２０に対して提供されるコンテキスト情報（入力２）は、例えば、最大及び最小の半径値（「Ｃｎｔｘ１」）、図５１を参照して後述するように最大及び最小の半径値に関連付けられた最大及び最小の速度値（「Ｃｎｔｘ２」）、半径又はアルファ値を導出するために使用される機能（「Ｃｎｔｘ３」）、ストロークの始まり及び終わりのフェイズにあるポイントのために設定され得る例外的な値（図５３参照）（「Ｃｎｔｘ４」）、及び、ペンタイプ情報（図示せず）を含み得る。コンテキスト情報（入力２）は、インクデータ生成部１２０のために予め定義されていてもよいし、図５０Ｂに示すように、設定ＧＵＩを介してユーザにより明示的に設定されるものとしてもよい。
【０５６０】
図５１は、本発明の実施の形態による、図５０ＡのステップＳ１２０５において時刻情報に基づいて速度を導き出す処理を説明する図である。
【０５６１】
速度（Ｖｅｌｏｃｉｔｙ）は、距離を時間によって除することによって導出される。除算の分母は、現在の点座標が取得された時刻と、以前の点座標が取得された時刻との間の差分であり得る。除算の分子は、現在の点座標と以前の点座標との間の差分（距離）であり得る。サンプリングレートが固定されているとき（分母が固定されているとき）、現在の点座標と以前の点座標との間の変位が速度を示すものとして使用され得る。
【０５６２】
本発明の実施の形態において、速度は、０．０の最小値と１．０の最大値とを有するパラメータ値（ｖｎ）として、すなわち、最小と最大が規格化された速度値として出力される。最小値及び最大値は、図５０Ｂの「Ｃｎｔｘ２」に設定され得る。
【０５６３】
図５２は、図５０ＡのステップＳ１２０７において、ポイントオブジェクトの属性である半径を導出する処理を説明するフロー図である。一般に半径は、上述したステップＳ１２０５で計算された規格化された速度値であるパラメータｖｎから導出される。又は、本発明の実施の形態によるステップＳ１２０３の筆圧データから導出されることも可能である。
【０５６４】
ステップＳ１２０７＿０１では、現在ポイントの「フェイズ」が判定される。本発明の実施の形態によるストローク内のポイントの「フェイズ」の定義を説明する図５３をさらに参照すると、フェイズは現在のポイントがストローク内でどこ（どの位置）に位置するかを示す概念である。例えば、ストロークの最初のポイントは始まりのフェイズにあり、ストロークの最後のポイントは終わりのフェイズにある。最初のポイントと最後のポイントの間のポイントは中間のフェイズにある。各ポイントのフェイズは、ペンダウン、ペンムーブ、ペンアップの各タイプのような各ペンイベントタイプのために判定され得る。ペンダウンイベントは、ユーザがポインタ（ペン、指など）を用いてストロークを描画し始めるイベントであり、ペンアップイベントは、ユーザがポインタを用いるストロークの描画を終えるイベントであり、ペンムーブイベントは、ペンダウンイベントとペンアップイベントの間に生ずるイベントである。
【０５６５】
ステップＳ１２０７＿１において、処理対象のポイントが始まり又は終わりのフェイズにある、すなわちそのポイントがストロークの最初のポイント又は最後のポイントであると判定された後のステップＳ１２０７＿４では、１以上のポイントがストロークの最初（最初のポイントの前）及びストロークの最後（最後のポイントの後ろ）に付加され得る。
【０５６６】
ステップＳ１２０７＿２では、ストロークの最初又は最後に追加したポイントのそれぞれのために、図７２を参照して後により完全に記述するように、０である半径や通常の半径により大きい半径（例えば２倍）のような図５０Ｂの「Ｃｔｎｘ４」に設定された例外的な半径の値が、そのポイントの半径として設定される。
【０５６７】
ステップＳ１２０７＿１において、処理対象のポイントが中間のフェイズにある、すなわちそのポイントがストロークの最初のポイント及び最後のポイントのいずれでもないと判定された後のステップＳ１２０７＿０３では、ペンイベントデータを入力するために使用されるペンのペンタイプが判定される。
【０５６８】
ステップＳ１２０７＿０３においてペンタイプが通常（デフォルト）であると判定された後のステップＳ１２０７＿０５では、図５４の指数減衰（又はダンピング）関数（図５４の「減衰」を参照）のような通常（デフォルト）の関数を用いてパラメータｖｎから半径が導出される。
【０５６９】
ステップＳ１２０７＿０３においてペンタイプが、特に柔らかいペン先を有するペンのように、特殊なものであると判定された後のステップＳ１２０７＿０５では、半径は、図５４の「Ｓ字」及び「周期」関数のような特別な関数を用いてパラメータｖｎから導出される。通常及び特別な関数のいずれも、設定ＧＵＩを介し、図５０Ｂのコンテキスト情報「Ｃｎｔｘ３」の一部として明示的に定義又は修正され得る。
【０５７０】
図５４は、本発明の実施の形態による、ステップＳ１２０７＿０５及びＳ１２０７＿０７で使用される、パラメータｖｎ（速度）から半径を導出する３つの関数を説明するグラフである。
【０５７１】
水平の軸は、パラメータｖｎ（速度）を示し、垂直な軸は半径を示す。
【０５７２】
「減衰」と称される実線は、図５２のステップＳ１２０７＿０５で使用される通常の減衰（又はダンピング）関数を示している。この関数は、ｖｎが増加すると半径が指数的に減衰するという関係を定義する。通常関数は、通常（デフォルト）タイプのペンのために使用される。そのようなｖｎ−半径変換を引き起こすこの関数の使用は、以下の観測に基づいている。
【０５７３】
［観測Ａ］筆圧に起因して増加する線幅は、インクが紙の中に染み込む面積に対応する。
【０５７４】
［観測Ｂ］ペンが速く動くほど、各ポイントにおいてインクを染み込ませるためにペンが有する時間が短くなる。
【０５７５】
上記観測Ａ及びＢに基づき、ペンがゆっくり動くほど線幅が増加し、一方で、ペンが速く動くほど線幅が減少する、ということが理論化される。この理論は、ペンが速く動くほど、接触する各ポイントで線（ストローク）から紙の中にインクを染み込ませるためにペンが有する時間が短くなる、ということに基づいている。線幅は、一連のポイントがそれぞれ有する半径であると考えられる。したがって、本発明の実施の形態によれば、通常のペンに対しては、パラメータｖｎを半径に変換するために減衰（又はダンピング）関数が使用され、それにより、速度が増加すると半径が指数的に減衰することになる。
【０５７６】
筆圧データを取得する能力を有しない装置に関してさえも、本発明のインクデータ処理部１００Ｔは、タイムスタンプ情報を用いて速度情報を算出又は取得できることに注意が必要である。例えば、インクデータ処理部１００Ｔは、タイムスタンプ情報を算出又は取得するために、そのような装置からペンストローク情報を受信するローカルなタイミングを使用することができ、それに基づいて、速度ｖｎが各ポイントに対して決定され得る。したがってインクデータ処理部１００Ｔは、圧力データを取得する能力を有する装置、及び、圧力データを取得する能力を有しない装置を含む様々なタイプの装置に関して、速度ｖｎに基づいて各ポイントの半径を高い信頼性で決定し、出力することがてきる。
【０５７７】
図５４において、「Ｓ字」と称される破線は、減衰が指数的ではなく段階的に発生する特別な関数を示し、「周期」と称される破線は、周期的である他の特別な関数を示している。これらの特別な関数はともに、図７１を参照して後により完全に記述するように、図５２のステップＳ１２０７＿０７において、特殊なタイプのペンのために速度から半径を導出するために用いられ得る。
【０５７８】
速度をポイントの半径に変換するための上述したこれらの関数のいずれのアプリケーションもリアルタイムであり得る、ということに注意が必要である。或いは、パラメータｖｎの半径への変換は予め実行されてもよく、結果として得られるデータは、インクデータ処理部１００Ｔによってアクセス可能であるルックアップテーブルに格納されてもよい。
【０５７９】
図５５は、本発明の実施の形態による、図５０ＡのステップＳ１２０９で各ポイントの透明度（又は不透明度）を示すアルファ値を導出する処理を説明するフロー図である。
【０５８０】
ステップＳ１２０９＿０３では、ペンイベントデータを入力するために使用されるペンのペンタイプがコンテキスト情報（入力２）から判定される。
【０５８１】
ステップＳ１２０９＿０３においてペンタイプが通常（デフォルト）であると判定された後のステップＳ１２０９＿０５では、図５６に示す「冪」関数のような通常（冪）関数を用いて、パラメータｖｎからアルファが導出される。
【０５８２】
ステップＳ１２０９＿０３において、コンテキスト情報（入力２）により提供されたペンタイプが、特に柔らかいペン先を有するペンのように、特殊なものであると判定された後のステップＳ１２０９＿０７では、図５６に示す「Ｓ字」関数のような特別な関数を用いて、パラメータｖｎからアルファが導出される。
【０５８３】
図５６は、本発明の実施の形態による、図５５のステップＳ１２０９＿０５及び１２０９＿０７で使用される、パラメータｖｎからアルファ（透明度／不透明度）を導出するための２つの関数を説明するグラフである。
【０５８４】
水平の軸は、パラメータｖｎ（速度）を示し、垂直な軸は、透明度を示すアルファを示す。例えば、アルファ０．０は完全に透明であることを意味し、アルファ１．０は完全に透明性なし、すなわち不透明であることを意味することができる。
【０５８５】
「冪」と称される実線は、図５５のステップＳ１２０９＿０５で使用される通常の冪関数を示している。この関数は、速度ｖｎが増加すると半径が指数的に増加するという関係を定義する。通常（冪）関数は、通常（デフォルト）タイプのペンのために使用される。そのようなｖｎから半径への変換を引き起こすこの関数の使用は、以下の観測に基づいている。
【０５８６】
［観測Ｃ］筆圧に起因して増加するインクの濃度は、インクが紙の中に染み込む面積に対応する。
【０５８７】
［観測Ｄ］ペンが速く動くほど、各ポイントでペンから染み出すインクの量が少なくなる（なぜなら、ペンが各ポイントに接触している時間が短くなるから）。
【０５８８】
上記観測Ｃ及びＤに基づき、インクの濃度はペンがゆっくり動くほど増加し（不透明度が増加し）、一方で、ペンが速く動くほどインクの濃度が減少する（透明度が増加する）ことが理論化される。この理論は、ペンがゆっくり動くほど、接触している各ポイントにおいてペンから染み出すインクが増して濃い線（ストローク）を形成し、ペンが速く動くほど、接触している各ポイントにおいてペンから染み出すインクの量が減って明るい線（ストローク）を形成する、ということに基づいている。したがって、本発明の実施の形態によれば、通常のペンに対しては、パラメータｖｎをアルファに変換するために冪関数が使用され、それにより、速度が増加するとアルファ（透明度）が指数的に増加することになる。
【０５８９】
筆圧データを取得する能力を有しない装置に関してさえも、本発明のインクデータ処理部１００Ｔは、タイムスタンプ情報を用いて、高い信頼性で速度情報を算出又は取得できることに注意が必要である。例えば、インクデータ処理部１００Ｔは、タイムスタンプ情報を算出又は取得するために、そのような装置からペンストローク情報を受信するタイミングを使用することができ、それに基づいて、速度ｖｎが決定され得る。したがってインクデータ処理部１００Ｔは、圧力データを取得する能力を有する装置、及び、圧力データを取得する能力を有しない装置を含む様々なタイプの装置に関して、速度ｖｎに基づいてアルファを高い信頼性で決定し、出力することがてきる。
【０５９０】
図５６において、「Ｓ字」と称される破線は、図５５のステップＳ１２０９＿０７において、特殊なタイプのペンのために速度からアルファを導出するために用いられ得る増加関数の一例である特別な関数を示している。
【０５９１】
図５６を参照して上述したこれらの関数のいずれのアプリケーションもリアルタイムであり得る、ということに注意が必要である。或いは、パラメータｖｎのアルファへの変換は予め実行されてもよく、結果として得られるデータは、インクデータ処理部１００Ｔによってアクセス可能であるルックアップテーブルに格納されてもよい。
【０５９２】
上述したように、インクデータ処理部１００Ｔのインクデータ生成部１２０は、筆圧データを含み又は含まない入力ペンイベントデータに基づいて、各ポイントオブジェクトの半径とアルファの値を決定する。図４９に示すように、ポイントデータ導出部１２０は、それ自身の内部メモリ内に「ｆｌｏａｔ」データ型で半径とアルファの情報を出力する。その後、インクデータ整形部１４０は、ポイントオブジェクトの属性として半径とアルファの情報（ｆｌｏａｔ型）を受信し、ストロークファイルフォーマット（ＳＦＦ、図４８Ｌ参照）又はストロークメッセージフォーマット（ＳＭＦ）の中にそれらを出力する。
【０５９３】
図５７は、入力されたＸ及びＹ座標データとともに、入力された半径及びアルファの情報を、ストロークファイルフォーマット（ＳＦＦ）内又はストロークメッセージフォーマット（ＳＭＦ）内に整形するインクデータ整形処理を説明するフロー図である。一般的に、整形処理Ｓ１４０は、インクデータ２００を生成する処理の一部として、インクデータ処理部１００Ｔのインクデータ整形部１４０によって実行される。
【０５９４】
＜データオブジェクトＩｎｋＤａｔａＦｉｌｅのシリアライズ＞
ＳＦＦ内のＩｎｋＤａｔａＦｉｌｅをシリアライズするステップＳ１４０１では、インクデータと、ＳＦＦファイル内のＩｎｋＤａｔａＦｉｌｅを永続的なものとする目的のために必要となる情報とがシリアライズされる。そのような必要となる情報の例として、ｄｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ値がシリアライズされ、符号化される。図示した例では、値１００が「符号なし整数」データ型のｄｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ値として使用され、値１００が、ＡＳＮ．１、ＢＥＲといった符号化方法、又は、第１の実施の形態の図１０のスキーマファイル内に示される「ｓｉｎｔ３２型」及び「ｆｌｏａｔ」のような符号化方法によって符号化される。これに対し、リアルタイム伝送又はメッセージングに適したＳＭＦ内のＩｎｋＤａｔａＦｉｌｅをシリアライズするときには、ＳＦＦ内のインクデータを永続的なものとする目的のために必要となる情報は必要とされず、したがって、ＳＭＦ内のインクデータを整形するときにはステップＳ１４０１は省略され得る。ステップＳ１４０２では、ＩｎｋＤａｔａＦｉｌｅのためのｓｔｒｏｋｅｓＣｏｕｎｔ値がＳＦＦ内に符号化される（図４８Ｌ参照）。これに対し、ＳＭＦに整形するときには、ｓｔｒｏｋｅｓＣｏｕｎｔ値が含まれないので、ステップＳ１４０２は省略されることができ、プロセスは代わりに、処理されるすべてのストロークの中の最後のものを示すデータを符号化することとしてもよい。
【０５９５】
＜データオブジェクト「ｓｔｒｏｋｅ」のシリアライズ＞
図５７において点線で書かれたより大きな四角に含まれるステップＳ１４０３から始まる以下のステップは、ＩｎｋＤａｔａＦｉｌｅ内に含まれるＮ（ｓｔｒｏｋｅｓＣｏｕｎｔ）個のストロークのそれぞれに対して実行される。結果として、Ｎ個のストロークが規定の符号化方法を用いて整形され、出力される。
【０５９６】
ステップＳ１４０５では、ｖａｒｉａｂｌｅＡｌｐｈａ値が、処理されるストロークオブジェクト２１０内において符号化される。上述したように、このｖａｒｉａｂｌｅＡｌｐｈａ値（ＴＲＵＥ／ＦＡＬＳＥ）は、ストロークのアルファ値がストロークの長さに沿って可変かを示している。
【０５９７】
ステップＳ１４０６では、ストロークオブジェクト２１０内に含まれるポイントオブジェクトの数を示すｐｏｉｎｔｓＣｏｕｎｔ値が符号化される。例えばリアルタイム型のアプリケーションのケース（すなわち、ＳＭＦに整形するとき）において、もしｐｏｉｎｔｓＣｏｕｎｔ値が利用可能でなければ、ステップＳ１４０６は省略されることができ、プロセスは代わりに、処理されるストロークの終了を示すデータを符号化することとしてもよい。
【０５９８】
＜データオブジェクト「ｐｏｉｎｔ」のシリアライズ＞
図５７において点線で書かれたより小さな四角に含まれるステップＳ１４０７から始まる以下のステップは、整形されるストローク内に含まれるｐｏｉｎｔｓＣｏｕｎｔ個のポイントのそれぞれに対して実行される。結果として、ｐｏｉｎｔｓＣｏｕｎｔ個のポイントオブジェクトが整形され、出力される。
【０５９９】
ステップＳ１４０９では、処理されるポイントを含むストロークのアルファ値が可変か否かが判定される。すなわち、ｖａｒｉａｂｌｅＡｌｐｈａ値がＴＲＵＥかＦＡＬＳＥかが判定される。
【０６００】
ステップＳ１４０９において、そのストロークのためのアルファがその長さに沿って可変であり（「ＴＲＵＥ」）、したがってアルファはポイントから他のポイントまで変化し得ると判定された後のステップＳ１４１１では、図５８の上部を参照して後により完全に記述するように、ポイントに対してＸＹ座標の値が半径及びアルファの値とともに符号化される。
【０６０１】
ステップＳ１４０９において、そのストロークのためのアルファが可変ではないと判定された後のステップＳ１４１３では、図５８の下部を参照して後により完全に記述するように、ポイントに対してＸＹ座標の値及び半径の値のみが符号化され、アルファは符号化されない。
【０６０２】
この時点で、本発明の実施の形態による規定のデータ構造内に配置されたインクデータ２００は、適当なファイルフォーマット（例えばＳＦＦ）又はメッセージフォーマット（例えばＳＭＦ）にて、様々なタイプのメディアに対して出力され得る。
【０６０３】
図５８は、本発明の実施の形態による、上述したステップＳ１４１１及びＳ１４１３の実施例を説明している。
【０６０４】
図５８の上部の０１行〜０７行は、アルファ値がストロークの長さに沿って可変である場合に、ポイントについてＸＹ座標の値が半径及びアルファの値の両方とともに符号化されるときである図５７のステップＳ１４１１に対応する擬似コードである。
【０６０５】
図５８の下部の０８行〜１３行は、アルファ値がストロークに対して可変でない場合に、ポイントについてＸＹ座標の値及び半径の値が符号化され、アルファの値が符号化されないときである図５７のステップＳ１４１３に対応する擬似コードである。
【０６０６】
図５８において、「Ａ」及び「Ｂ」により示されるセクションは、本発明の実施の形態の実行に際し、上述したｄｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ値がどのように利用されるかを示している。
【０６０７】
好ましくは、ポイントのＸＹ座標の値及び半径の値は、プロセッサ内の値のために可能な最高の精度を維持するため、出力タイミングの直前まで浮動データ型又はダブルデータ型で維持される。これに対し、色々なデータ解釈方法によって広く（共通に）インクデータ２００を理解可能とする目的、及び、結果として得られるインクデータ２００を効率的に圧縮する目的のためには、各値を表すために最小数のビットを用いることが望まれ得る。
【０６０８】
したがって、図５８の上部に示すように、ステップＳ１４１１では、入力されたＸ，Ｙ及び半径の値は、図５８の「Ａ」に示すように、まず、それらの単位を標準化するための解像度（倍率）を示すｄｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ値によって増加せられ、その後、「Ｂ」に示すように、ｉｎｔ（整数）データ型に変換（キャスト）される。
【０６０９】
図５８の下部に示すステップＳ１４１３でもまた、ステップＳ１４１１と同様、入力されたＸ，Ｙ及び半径の値がｄｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ値によって増加せられ、その後、ｉｎｔ（整数）データ型にキャストされる。
【０６１０】
この点について、図５９は、本発明の実施の形態による、図５７のステップＳ１４１１及びステップＳ１４１３で使われる整数データ型への浮動データ型の変換を説明している。
【０６１１】
図５９において、浮動データ型のものとして記憶される入力データ１６１は、ＩＥＥＥ７５４標準による例である。入力データ１６１において、「ｓ」は符号化ビットであり、「ｅｘｐｏｎｅｎｔ」は浮動小数点の数の冪指数であり、「ｆｒａｃｔｉｏｎ」は浮動小数点の数の仮数である。
【０６１２】
入力データ１６１には、図５９の増加入力データ１６３を生成するため、図５８の「Ａ」によって示されるとともに上述したように、ｄｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ値が乗算される。増加入力データ１６３もまた、冪指数及び仮数を含む浮動小数点の数である。
【０６１３】
増加入力データ１６３は、図５８の「Ｂ」によって示されるとともに上述したように、「ｆｌｏａｔ」から「ｉｎｔ」（又は「ｓｈｏｒｔ」又は「ｕｓｈｏｒｔ」）へ変換（キャスト）され、それによって絶対値１６５が生成される。絶対値１６５はもはや浮動小数点の数ではない。図示した実施の形態では、ＸＹ座標の値と半径の値はすべてｉｎｔ（整数）にキャスト（変換）されるが、任意の浮動小数点でないデータ型にキャストされることとしてもよい。
【０６１４】
図６０は、本発明の実施の形態による、上述した「ｆｌｏａｔ」から「ｉｎｔ」へのデータフォーマットの変換（キャスティング）の結果としての圧縮の効率化を説明している。
【０６１５】
図６０では、説明と理解の容易のために、十進数が使用される。図示した例では、円周率πに色々な１０の指数（０、＋１、＋２の冪乗）が乗算される。
【０６１６】
図６０の左手側は、図５８のステップＳ１４１１及びＳ１４１３の処理に先立って取得される値を示している。
【０６１７】
図６０の右手側は、図５８のステップＳ１４１１及びＳ１４１３の処理の後に取得される値を示している。
【０６１８】
左手側の四角の中に含まれる先頭の３つの値及び最後の値は、処理の前における色々な浮動小数点の数（３．０、３．１、３．１４）であるが、これらはすべて、右手側に示す処理の後には、３に変換される。各数の正確さは変換によっていくらか妥協されており、値の効率的な圧縮のようにプロセッサにおける値の効率的な処理を促進するために、同じ値（例えば、この例では３）の使用頻度が増している。例えば、データタイプ整数で表現されるデータは、ＡＳＮ．１、ＢＥＲ、又はＤＥＲといった符号化方法を用いて、出力対象のファイル又はメッセージプロトコルに符号化され得る。
【０６１９】
図６１は、本発明の実施の形態による、規定されたインクデータオブジェクトの属性を圧縮するために図４９の「インクデータ整形部」１４０で実行され得る処理を説明するフロー図である。
【０６２０】
ステップＳ１８１では、予備的なステップとして、図５７のステップＳ１４１１及びＳ１４１３で実行されたように、圧縮対象となる生成されたインクデータ２００が整数精度の値として量子化される。
【０６２１】
ステップＳ１８３では、インクデータ整形部１４０がデータ圧縮のタイプを判定する。例えば、この判定は、出力フォーマットのタイプに依存し得る。また、この判定は、圧縮がリアルタイムデータを要求するアプリケーションのためのものであるのか、記憶装置タイプのメディア内でデータを利用するアプリケーションのためのものであるのか、に基づくものであり得る。もし、圧縮が実行されない（「ＮＯＮＥ」）のであれば、プロセスは、整数データ型のインクデータ値を「そのまま」出力する。例えば図６０に記述される先頭の３つの値を用いると、３２ビットで表される値「＋３」が３回出力され得る。
【０６２２】
ステップＳ１８３において第１のタイプの圧縮方法が選択された後のステップＳ１８５では、プロセスは、Ｘ座標値、Ｙ座標値、半径値などのようなデータシーケンスをそれらの属性に従うストリームへとカテゴライズし、生成されたインクデータ２００に対して第１のタイプの圧縮方法を適用する。例えば、第１のタイプの圧縮方法は、ランレングス符号化方法である。例えば図６０に記述される先頭の３つの値を用いると、値「＋３」が３回繰り返されることを示す符号が使用される。提案される符号化技術の効率は、ランレングス符号化を適用する前に値に対してデルタ符号化（データ差分）を実行することのような、いくつかの符号化方法を用いて改良され得る。これは、値間の変化がどちらかと言えば絶えず続くときには、繰り返される値の数を増加させるであろう。
【０６２３】
ステップＳ１８３において第２のタイプの圧縮方法が選択された後のステップＳ１８５では、プロセスは、生成されたインクデータ２００に対して第２のタイプの圧縮方法を適用する。例えば、第２のタイプの圧縮方法は、指数ゴロム符号を用いるエントロピー符号化方法である。これは、＋３のようなより小さな絶対値を有する値に対し、より大きな絶対値を有する値と比べて短いビット長を用いる可変長の符号化方法である。
【０６２４】
＜インクデータ処理部１００Ｔ及びインクデータ生成方法に対する変形例＞
上述したように、本発明の実施の形態によるインクデータ処理部１００Ｔは、各ストロークを構成するポイントの属性として半径及び／又はアルファ（透明度／不透明度）の情報を導出するために、いくつかは筆圧データを含み、他は筆圧データを含まない、様々なタイプの装置から受信されるデータを処理し、それによって非装置依存型のインクデータ２００を生成する能力を有する。インクデータ処理部１００Ｔは、ファイルフォーマット（例えばＳＦＦ）又はメッセージフォーマット（例えばＳＭＦ）のような様々なフォーマットで、生成したインクデータ２００を出力する。
【０６２５】
図５０Ａの例では、入力データが筆圧データを含むケース（ステップＳ１２０２の結果がＴＲＵＥであるとき）において、半径と透明度の情報が、タイムスタンプ情報を使用することなく、筆圧データから導出される。ただし、本発明はそのような実施例に限定されない。
【０６２６】
タイミング情報及び筆圧データを入力として受信し、半径を出力する関数が使用され得る。この場合、筆圧データだけでなくペンの速度にも基づいて、ストローク幅及び／又はストロークの透明度を変更することが可能になる。
【０６２７】
上述した様々な実施の形態において速度が導出される一方で、例えばペンが加速度センサを含むときや、加速に対応する値のみが取得可能であるときには、加速度が使用され得る。例えば、速度を導出するために加速度を積分することにより、上記に似た処理が利用され得る。
【０６２８】
図６２は、インクデータの属性として半径情報を出力するため、図４９のインクデータ生成部１２０において、図５２を参照して上述した方法に代えて実行される処理の他の例を示すフロー図である。
【０６２９】
ステップＳ１９２では、図５０ＡのステップＳ１２０２と同様に、入力されたデータが筆圧データを含むか否かが判定される。
【０６３０】
ステップＳ１９２において入力されたデータが筆圧データを含まないと判定された後（「ＦＡＬＳＥ」）のステップＳ１９６では、上記図５４を参照して説明したように、タイムスタンプ情報から導出される速度と半径との間の関係を用いて半径が算出される。すなわち、速度が増加するときに半径が減衰する、という関係が使用される。
【０６３１】
ステップＳ１９２において入力されたデータが筆圧データを含むと判定された後（「ＴＲＵＥ」）のステップＳ１９４では、入力された圧力データとタイムスタンプ情報の両方が半径を導出するために使用される。ステップＳ１９２は、筆圧が固定されているケースでは（ｉ）速度が増加するときに半径が減少し、速度が固定されているケースでは（ｉｉ）筆圧が増加するときに半径が増加する、という２つの変数を含む偏微分関数を使用する。したがって、ポイントの速度と筆圧の両方に基づいて、インクデータ２００の各ポイントの半径を符号化することが可能になる。
【０６３２】
ステップＳ１９８では、ステップＳ１９６又はステップＳ１９４で導出された半径が出力される。
【０６３３】
図６３は、インクデータの属性として可変のアルファ情報を出力するため、図４９のインクデータ生成部１２０において、図５５を参照して上述した方法に代えて実行される処理の他の例を示すフロー図である。
【０６３４】
ステップＳ２００２では、図５０ＡのステップＳ１２０２と同様に、入力されたデータが筆圧データを含むか否かが判定される。
【０６３５】
ステップＳ２００２において入力されたデータが筆圧データを含まないと判定された後（「ＦＡＬＳＥ」）のステップＳ２００６では、上記図５６を参照して説明したように、タイムスタンプ情報から導出される速度とアルファとの間の関係を用いてアルファ（透明度／不透明度）が算出される。すなわち、速度が増加するときにアルファもまた増加する（より透明になる）、という関係が使用される。
【０６３６】
ステップＳ２００２において入力されたデータが筆圧データを含むと判定された後（「ＴＲＵＥ」）のステップＳ２００４では、入力された圧力データとタイムスタンプ情報の両方がアルファ値を導出するために使用される。ステップＳ２００４は、筆圧が固定されているケースでは（ｉ）速度が増加するときにアルファが増加し（より透明になり）、速度が固定されているケースでは（ｉｉ）筆圧が増加するときにアルファが減少する（より不透明になる）、という２つの変数を含む偏微分関数を使用する。したがって、ポイントの速度と筆圧の両方に基づいて、インクデータ２００の各ポイントのアルファ（透明度）を符号化することが可能になる。
【０６３７】
ステップＳ２００８では、ステップＳ２００６又はステップＳ２００４で導出されたアルファが出力される。
【０６３８】
図６２及び図６３の処理は、半径とアルファの両方の値が入力された圧力データ及びタイムスタンプ情報から導出され得るよう、一緒に用いられ得る。或いは、半径の値のみ又はアルファの値のみが、入力された圧力データ及びタイムスタンプ情報から導出されることとしてもよい。
【０６３９】
速度（ｖｎ）を半径又はアルファに変換する関数のサンプルについては、図５４及び図５６を参照して上に述べた。一般に、速度（ｖｎ）を半径及び／又はアルファに変換するために何の関数が使用されるべきか、ということは、ペンのタイプ（又はペン先のタイプ）、及び、センサ表面がシミュレートすることを期待される「紙」のタイプ（例えば、和紙、カーボン紙、普通紙、コピー用紙、写真用紙、インク吸収紙など）に依存する。したがって、速度を半径及び／又はアルファに変換するために選択される関数のいくつかは、ペンのタイプ及び／又は紙のタイプによって調整され得る。別の言葉で言えば、速度から導出される半径及び／又はアルファは、ペンのタイプ及び／又は紙のタイプによって変化し得る。
【０６４０】
本発明のさらなる側面に従えば、上述したように本発明の様々な実施の形態で利用される筆圧データは、ペン角度（又はペンの傾き）データやペンの回転（ペンの転がり）データなどのような、様々なタイプの入力装置から受信され得る他のタイプの属性値によって置き換えられ得る。ペンの角度／傾きデータのようなこれらの属性値は、本発明の様々な実施の形態による半径及び／又は透明度（アルファ）の情報を導出するために、上述した例において使用した筆圧データに代えて使用され得る。例えば、いくつかのペン型入力装置は、ペン軸によりセンサ表面又はセンサ表面の法線に対して作られる角度を示すペン角度（ペンの傾き）データを生成する能力を有する。センサ表面に対して垂直に保持されるペンは、傾いているためにセンサ表面に対してより平行な方向に延在するペンより、センサ表面に対して大きな圧力を加える傾向にある。したがって、筆圧データがパラメータｖｎ（速度）と相互に関連付けられ得るのと同様、ペンの角度／傾きデータもｖｎと相互に関連付けられ得る。
【０６４１】
例えば、ペンがセンサ表面に対してよりまっすぐに（すなわち、センサ表面の法線に近づくように）保持されるほど（すなわち圧力が大きくなるほど）、速度（ｖｎ）が遅くなるという関係を規定する関数が使用され得る。一旦ｖｎが角度／傾きデータから導出されると、ｖｎを半径及び／又はアルファ情報に変換するために使用される上述した関数と同様の関数が使用され得る。すなわち、ペンの角度／傾きデータは、後に半径及び／又はアルファ情報に変換されるｖｎと相互に関連付けられることができる。これに対し、センサ表面に垂直に保持されるペンが、おそらくは傾いたペン先とセンサ表面との間の増加した接触面積に起因してより広いストロークを生成（描画）する傾向にある傾いたペンよりも、狭いストロークを生成する傾向にあることもまた、観測され得る。この場合、ペンがセンサ表面に対してまっすぐに保持されるほど、速度（ｖｎ）が速くなって狭いストロークが生成されるようになる、という関係を規定する適切な関数が使用され得る。一旦ｖｎが角度／傾きデータから導出されると、ｖｎはその後、上述した関数を用いて半径及び／又はアルファ情報に変換され得る。角度／傾きデータをｖｎに変換するために何の関数が使用されるか、ということは、ペンのタイプ（又はペン先のタイプ）、及び、センサ表面がシミュレートすることを期待される「紙」のタイプ（例えば、和紙、カーボン紙、普通紙、コピー用紙、写真用紙、インク吸収紙など）に依存する。さらに、センサ表面に対して垂直に保持されたペンは、より狭くより細かい（より透明な）ストロークを生成する傾向にある傾いたペンよりも、より広くより濃いストロークを生成する傾向にあることが観測され得る。そこで、いくつかの実施の形態では、最初に角度／傾きデータをｖｎと相互に関連付け、ｖｎをポイントごとの半径及び／又はアルファ情報に変換するのではなく、ペンの角度／傾きデータを直接的に半径及び／又はアルファ情報に変換する適切な関数が使用され得る。同様に、いくつかの実施の形態では、もし利用可能であるならば筆圧データを、最初に圧力データをｖｎに変換し、その後にｖｎをポイントごとの半径及び／又はアルファ情報に変換することに代え、直接的に半径及び／又はアルファ情報に変換する適切な関数が使用され得る。
【０６４２】
［４］インクデータ処理部／復号器（図６４〜図６６）
図６４は、本発明の実施の形態による、インクデータ処理部１００Ｒと様々なアプリケーション３００−１，３００−２，３００−ｎとの間の関係を説明する図である。インクデータ処理部１００Ｒは、第１の実施の形態の図２２における１００Ｒに対応する。
【０６４３】
図４５に示されるように、インクデータ処理部１００Ｒは本質的に、様々なアプリケーション３００からの要求に応じて、メモリ（「ＲＡＭ」）や様々なタイプのメディア（例えばハードディスク）内にあるファイル又はメッセージフォーマット内に格納されているインクデータ２００を、あるメモリ位置に、アプリケーションによって使用可能なデータフォーマットで取り出すすソフトウェアライブラリである。例えば、アプリケーション３００−１が（図５のグラフィック処理部３００を利用する）描画処理アプリケーションであるとき、インクデータ処理部１００Ｒは、必要なデータオブジェクト「ストローク」、「ポイント」などを（各ストローク及び／又はポイントが半径及び／又はアルファ情報に関連付けられる）グラフィック処理部３００に対して出力するが、必要でないデータオブジェクト「著者」などは出力しない。他の例として、例えばアプリケーション３００−２が電子会議の参加者を判定する目的で著者情報のみを要求するとき、インクデータ処理部１００Ｒは、メタデータオブジェクト２５０内のデータオブジェクト「著者」を出力する。本発明の実施の形態では、インクデータ処理部１００Ｒは、図６５に記述されるように、プロセッサによって実行されるインクデータ再生処理Ｓ２００として実現される。以下、アプリケーション３００が描画アプリケーション３００−１である描画処理に関して、インクデータ再生処理Ｓ２００が記述されるであろう。
【０６４４】
図６５は、本発明の実施の形態による、生成されたインクデータを再生し（取り出し）することにより、半径及びアルファの情報をＸ及びＹ座標とともに取得するインクデータ再生処理Ｓ２００と、取得した情報及びデータを描画アプリケーション３００−１からの要求に応じて出力することとを説明するフロー図である。描画アプリケーション３００−１はその後、ストローク上に描画／レンダリングするときに、よりリアルな外観と表現の微妙な違いとをストロークに与えるために、半径及びアルファの情報を使用することができる（図６８〜図７２参照）。本質的に、インクデータ再生処理Ｓ２００は、上記図５７を参照して記述したインクデータＳ１４０を生成する（整形する）処理の逆処理である。
【０６４５】
＜データオブジェクトＩｎｋＤａｔａＦｉｌｅの再生又は取り出し＞
ステップＳ２００１では、ｄｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ値のような、処理対象のストロークを含むインクデータ２００のためのコンテキスト情報（入力２）（又は構成情報）が取り出される。この再生処理は、図５７のステップＳ１４０１における符号化処理に逆対応する。
【０６４６】
ステップＳ２００２では、データオブジェクトＩｎｋＤａｔａＦｉｌｅ内に含まれるｓｔｒｏｋｅｓＣｏｕｎｔ値が、図４８Ｌに示すように、取り出される。例えばもしｓｔｒｏｋｅｓＣｏｕｎｔ値が利用可能でなければ、ステップＳ２００２は省略されることができ、プロセスは代わりに、ＩｎｋＤａｔａＦｉｌｅ内に含まれるすべてのストロークのうちの最後のものを示すデータを再生することにより、いつ処理を終わらせるかを判定することとしてもよい。
【０６４７】
＜データオブジェクト「ｓｔｒｏｋｅ」の再生＞
図６５において点線で書かれたより大きな四角に含まれるステップＳ２００３から始まる以下のステップは、ＩｎｋＤａｔａＦｉｌｅ内に含まれるＮ（ｓｔｒｏｋｅｓＣｏｕｎｔ）個のストロークのそれぞれに対して実行される。結果として、Ｎ個のストロークが再生され、出力される。
【０６４８】
ステップＳ２００５では、データオブジェクト「ｓｔｒｏｋｅ」内のｖａｒｉａｂｌｅＡｌｐｈａ値（図４８Ｌ参照）が取り出される。上述したように、このｖａｒｉａｂｌｅＡｌｐｈａ値（ＴＲＵＥ／ＦＡＬＳＥ）は、ストロークの長さに沿って可変なアルファ値を処理されるストロークが含むかを示している。
【０６４９】
ステップＳ２００６では、ストロークオブジェクト２１０内に含まれるポイントオブジェクトの数を示す「ｐｏｉｎｔｓＣｏｕｎｔ値」が取得される。例えばリアルタイム型のアプリケーションにおいて、もしｐｏｉｎｔｓＣｏｕｎｔ値が利用可能でなければ、ステップＳ２００６は省略されることができ、プロセスは代わりに、処理されるストロークの終了を示すデータを再生することにより処理の終了を判定することとしてもよい。
【０６５０】
＜データオブジェクト「ｐｏｉｎｔ」の再生＞
図６５において点線で書かれたより小さな四角に含まれるステップＳ２００７から始まる以下のステップは、再生されるストロークオブジェクト２１０内に含まれるｐｏｉｎｔｓＣｏｕｎｔ個のポイントのそれぞれに対して実行される。結果として、ｐｏｉｎｔｓＣｏｕｎｔ個のポイントオブジェクトが再生され、出力される。
【０６５１】
ステップＳ２００９では、処理されるストロークのアルファが可変か否かが判定される。すなわち、ｖａｒｉａｂｌｅＡｌｐｈａ値がＴＲＵＥか否かが判定される。
【０６５２】
ステップＳ２００９においてｖａｒｉａｂｌｅＡｌｐｈａ値がＴＲＵＥであると判定された後のステップＳ２０１１では、そのポイントについて、ＸＹ座標値とともに半径及びアルファ値が復号され、出力される。このステップは、再生されるインクデータ２００を要求している特定のアプリケーションによって要求される（使用される）データフォーマットに、図５７のステップＳ１４１１で符号化されたデータを逆転させる（変換する）ものである。
【０６５３】
ステップＳ２００９においてｖａｒｉａｂｌｅＡｌｐｈａ値がＦＡＬＳＥであると判定された後のステップＳ２０１３では、図６６の下部で後により完全に記述するように、アルファ値がストロークの全体に対して固定値として設定される一方で、そのポイントについてＸＹ座標値及び半径が復号及び再生され、出力される。このステップは、再生されるインクデータ２００を要求している特定のアプリケーションによって要求される（使用される）データフォーマットに、図５７のステップＳ１４１３で符号化されたデータを逆転させる（変換する）ものである。
【０６５４】
したがって、インクデータ再生処理Ｓ２００は、データオブジェクト「ｐｏｉｎｔ」から、ＸＹ座標値及び半径値、及び、ある場合にはアルファ値を取り出す。
【０６５５】
図６６は、本発明の実施の形態による、上述した図６５のステップＳ２０１１及びＳ２０１３の実施例を説明している。
【０６５６】
図６６の上部の０１行〜０７行は、ポイントを含むストロークの長さに沿ってアルファ値が可変である（すなわち、ストロークを構成する色々なポイントが色々なアルファ値を有することができる）場合に、そのポイントについてＸＹ座標の値が半径及びアルファの値の両方とともに取り出されるときである図６５のステップＳ２０１１に対応する擬似コードである。
【０６５７】
図６６の下部の０８行〜１４行は、ポイントを含むストロークの長さに沿ってアルファ値が可変でない（すなわち、ストロークを構成するすべてのポイントが同じアルファ値を有する）場合に、ポイントについてＸＹ座標の値及び半径の値が取り出される一方、アルファの値として固定値（例えば、図示した例では「１．０」）が設定されるときである図６５のステップＳ２０１３に対応する擬似コードである。
【０６５８】
図６６において、「Ａ」及び「Ｂ」により示されるセクションは、本発明の実施の形態の実行に際し、上述したｄｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ値がどのように利用されるかを示している。具体的には、図６６の「ＩＮＶ＿Ｂ」に示すように、図５８に示した関数の逆関数を用いて、ステップＳ２０１１において、入力されたＸ，Ｙ及び半径及びアルファのデータがｉｎｔ（整数）からｆｌｏａｔ（浮動小数点）データ型にまず逆変換（キャスト）される。その後、図６６の上部の「ＩＮＶ＿Ａ」に示すように、解像度を示すｄｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ値によってＸ，Ｙ及び半径のデータが除される。
【０６５９】
図６６の下部に示すステップＳ２０１３では、ステップＳ２０１１と同様に、入力されたＸ，Ｙ及び半径の値がｆｌｏａｔ（浮動小数点）データ型にキャストされ、その後、ｄｅｃｉｍａｌＰｒｅｃｉｓｉｏｎ値によって除される。これに対し、アルファ値は、図示した例における「１．０」のような固定値として設定される。
【０６６０】
したがって、アプリケーション３００が、例えば入力データが「ｆｌｏａｔ」データ型であることを要求する描画アプリケーションであるとき、整数型のデータを含む生成されたインクデータ２００は、要求された浮動小数点データ型、又は、アプリケーション３００によって要求された任意の他の非整数の元のデータ型に戻る方向で再生（復号）される。
【０６６１】
［５］インクデータ描画処理（図６７）
図６７は、本発明の実施の形態による、スクリーン上にストロークを描画（レンダリング）するためにインクデータ２００を利用する描画アプリケーション３００−１（及び図５のグラフィック処理部３００）によって実行される描画処理Ｓ３００−１を説明するフロー図である。
【０６６２】
ステップＳ２００において、プロセスは、ストロークと各ストロークに含まれるポイントとに関する情報を取り出すため、上述したようにして、インクデータ処理部１００ＲにＩｎｋＤａｔａＦｉｌｅを取得させて再生させ、それにより、取り出された情報が描画処理Ｓ３００−１の入力データとして使用可能となる。
【０６６３】
次に、処理されるストロークオブジェクト２１０に関連付けられた描画（ラスター化）スタイルオブジェクトが判定される。図４８Ｂに示したように、インクデータ２００は、（ストロークモデルサブドメイン内の）各ストロークオブジェクト２１０が、スクリーン上に描画（レンダリング、ラスター化など）されたときのストロークオブジェクトの外観を定義する１以上の（ラスター化サブドメイン内の）描画スタイルオブジェクトと関連付けられるように構造化されている。多くのタイプの描画スタイルオブジェクトが存在する一方で、図６７の図示した実施の形態では、散乱スタイルオブジェクトと、シェイプフィルスタイルオブジェクトとの２つのオプションが利用可能である（図４８参照）。
【０６６４】
散乱スタイルオブジェクトが選択されるとき、サブ処理Ｓ３００−１Ｓにおいて、ストロークごとに頂点（ポイント）配列が導出される。この導出は、頂点配列が低密度に位置する一組の離散ポイントからなるようになされる。頂点配列を導出する処理は、「間隔」及び「範囲」の値のようなインクデータ処理部１００によって生成された属性値を使用する。頂点配列を導出する処理はまた、アプリケーション又はオペレーティングシステムから受信されるコンテキスト情報（入力２）を使用することができる。例えば、スクリーンがシミュレートすることを期待される紙タイプ（例えば、和紙、カーボン紙、普通紙、コピー用紙、写真用紙、インク吸収紙など）についてのコンテキスト情報が、頂点配列内において低密度で位置する離散ポイントの個数を増加させ又は減少させるために使用され得る。生成された頂点配列は、一連の粒子を表す。図示した実施の形態では、描画処理Ｓ３００−１Ｓを制御するＧＰＵが、各ポイントの「半径」値に基づいて各粒子に規定サイズを与えるために、生成された頂点配列に対して第１の頂点シェイダーを適用する。このＧＰＵはまた、各ポイントの「アルファ」値に基づいて各粒子に透明度（又は不透明度）の規定レベルを与えるために、粒子の配列に対して第１の断片シェイダーを適用する。描画処理Ｓ３００−１Ｓは、このようにして、「散乱」粒子のスタイルで所与のストロークを描画する（図４８Ｆ参照）。
【０６６５】
シェイプフィルスタイルオブジェクトが選択されるとき、サブ処理Ｓ３００−１Ｆにおいて、まず各ストロークに対してスプラインセグメントが導出される。この導出は、各スプラインセグメントが、連続するストローク曲線の部分ごとに定義される十分滑らかな多項式関数となるようになされる。すなわち、一組のスプラインセグメントは、頂点をつなぎ、連帯してストロークを表現する複数の曲線セグメントを定義する。ＧＰＵは、各頂点（ポイント）の「半径」値に基づき、ストロークに沿って存在する各頂点を中心とする各円に規定のサイズを与えるために、一組のスプラインセグメントに対し第２の頂点シェイダーを適用する。ＧＰＵはまた、各頂点（ポイント）の「アルファ」値に基づいて各円に透明度（又は不透明度）の規定レベルを与えるために、一組のスプラインセグメントに対し第２の断片シェイダーを適用する。描画処理Ｓ３００−１Ｆは、このようにして、「シェイプフィル」のスタイルで所与のストロークを描画する（図４８Ｆ参照）。
【０６６６】
［６］効果。インクデータ描画例（図６８〜図７２）
図６８〜図７２は、様々な描画レンダリング例を説明している。これらは、本発明の実施の形態による、インクデータ生成方法、インクデータ再生方法、及びインクデータ描画（レンダリング）方法を説明するために使用される。図６８〜図７２において、「ｓ」はストロークの開始位置を示し、「ｅ」はストロークの終了位置を示す。すべてのケースにおいて、ペンの動きの速度は、「ｓ」から「ｅ」にかけて増加している（加速している）と仮定する。
【０６６７】
図６８は、本発明の実施の形態による、図５４に示した減衰（ダンピング）関数に基づいて生成されたインクデータの入力の結果としての描画レンダリング例を説明している。減衰関数を用いることで、速度が増加すると、半径が減少することになる。したがって、図６８に示すすべての描画例において、ストロークの幅は「ｓ」から「ｅ」に向かって減少している。これらの例では、アルファ（透明度）は固定値として設定されている。
【０６６８】
このレンダリング例は、筆圧に応じて増加する線幅はインクが紙に染み出す面積に対応し［観測Ａ］、ペンが速く動くほど、各ポイントにおいてペンがインクを染み出させるために有する時間が短くなる［観測Ｂ］、という上述した観測結果に従っている。本発明の実施の形態によるインクデータ処理部は、与えられたペンイベントデータ入力が圧力情報を含んでいないときでさえ、各ポイントについて速度情報を取得し、その速度情報に基づいて各ポイントの半径情報を算出する能力を有する。したがって、生成されたインクデータは、少なくともいくつかのポイントのそれぞれについて半径情報を含む。半径情報は、インクデータ２００がスクリーン上にレンダリング（描画）されるとき、描画されるストロークに対し、紙上にインクで手書きされた本物のストロークの外観を厳密にシミュレートするリアルな外観及び表現の微妙な違いを与えるために使用され得る。
【０６６９】
図６９は、本発明の実施の形態による、図５６に示した冪関数に基づいて生成されたインクデータ２００の入力の結果としての描画レンダリング例を説明する図である。冪関数を用いることで、速度が増加すると、アルファ（透明度）が増加することになる。したがって、図６９に図示したすべての描画例において、ストロークは、「ｓ」から「ｅ」に向かってより明るく、より透明になっている（すなわち、濃度が減少している）。これらの例では、半径は固定値として設定されている。
【０６７０】
このレンダリング例は、筆圧に応じて増加するインクの濃度はインクが紙の中に染み出す面積に対応し［観測Ｃ］、ペンが速く動くほど（ペンが各ポイントに接触している時間が短くなるため）各ポイントでペンから染み出すインクの量が少なくなる［観測Ｄ］、という上述した観測結果に従っている。本発明の実施の形態によるインクデータ処理部は、与えられたペンイベントデータ入力が圧力情報を含んでいないときでさえ、各ポイントについて速度情報を取得し、その速度情報に基づいて各ポイントのアルファ情報を算出する能力を有する。したがって、生成されたインクデータは、少なくともいくつかのポイントのそれぞれについてアルファ情報を含む。アルファ情報は、インクデータ２００がスクリーン上にレンダリング（描画）されるとき、描画されるストロークに対し、紙上にインクで手書きされた本物のストロークの外観を厳密にシミュレートするリアルな外観及び表現の微妙な違いを与えるために使用され得る。
【０６７１】
図７０は、本発明の実施の形態による、図５４に示した減衰関数及び図５６に示した冪関数の両方に基づいて生成されたインクデータ２００の入力の結果としての描画レンダリング例を説明する図である。減衰関数を用いることで、速度が増加すると半径が減少することになり、冪関数を用いることで、速度が増加するとアルファ（透明度）が増加することになる。したがって、図７０に図示したすべての描画例において、ストロークの幅が「ｓ」から「ｅ」に向かって減少する一方で、同時にストロークは、「ｓ」から「ｅ」に向かってより明るく、より透明になっている（すなわち、濃度が減少している）。本発明の実施の形態によるインクデータ処理部は、与えられたペンイベントデータ入力が圧力情報を含んでいないときでさえ、各ポイントについて速度情報を取得し、その速度情報に基づいて各ポイントの半径及びアルファ情報を算出する能力を有する。したがって、生成されたインクデータは、少なくともいくつかのポイントのそれぞれについて半径及びアルファ情報を含む。半径及びアルファ情報は、インクデータ２００がスクリーン上にレンダリング（描画）されるとき、描画されるストロークに対し、紙上にインクで手書きされた本物のストロークの外観を厳密にシミュレートするリアルな外観及び表現の微妙な違いを与えるために使用され得る。
【０６７２】
図７１は、本発明の実施の形態による、特にやわらかいペン先を有するペンのような特殊なタイプのペンのために図５２のステップＳ１２０７＿０７で使用されるものとしての図５４の他の関数（Ｓ字及び周期関数）の効果を示す描画レンダリング例を説明する図である。
【０６７３】
左手側の描画例は、減衰が、「減衰」関数における指数的とは対照的に段階的に発生する図５４の「Ｓ字」関数の結果として得られる描画例である。したがって、結果としての描画（レンダリング）例のそれぞれにおいて、ストロークの半径（幅）は、図６８の例において徐々に減少しているのとは対照的に、広い部分から狭い部分まで段階的に減少している。図５６の「Ｓ字（増加）」関数においては、減衰が段階的に発生する図５４の「Ｓ字（減少）」関数とは対照的に、増加が段階的に発生する。したがって、図５６の「Ｓ字（増加）」関数の結果として得られる描画例は、図７１の左手側の描画例のそれと類似の外観を有しつつも、「ｓ」と「ｅ」の位置が入れ替わったものとなる。
【０６７４】
図７１の右手側の描画例は、半径の出力が周期的に変化する（増減する）図５４の「周期」関数の結果として得られる描画例である。したがって、結果として描画（レンダリング）されるストロークのそれぞれにおいて、「ｓ」から「ｅ」に向かってストロークの半径（幅）が周期的に変化している。
【０６７５】
図７２は、本発明の実施の形態による、図５２のステップＳ１２０７＿０４で追加される開始点（ｓ）及び終了点（ｅ）の半径として特別な値を用いることの効果を示す描画レンダリング例を説明している。
【０６７６】
具体的には、図５２のステップＳ１２０７＿０２において、ストロークの開始及び終了にそれぞれ追加される開始点（ｓ）及び終了点（ｅ）のそれぞれに対して、半径として特別な値が設定される。
【０６７７】
図７２の左手側は、開始及び終了点の半径がゼロ（「０」）に設定される場合の描画例を説明している。これは、ストロークの開始又は終了においてユーザがいかにペンを速く動かしたり遅く動かしたりしようとも、ストロークの開始及び終了点の半径（幅）は、結果としての絵において本質的に無視されるということを意味する。
【０６７８】
図７２の右手側は、開始及び終了点の半径が、通常算出される半径、すなわち、上述した様々な関数を用いて本発明の様々な実施の形態により算出される半径より大きく（例えば２倍に）設定される場合の描画例を説明している。示されるように、このことは、ユーザが紙上でペンを用いてストロークを描くときに（ペンストロークの開始及び終了でペンがしばしば休止するために）各ストロークの開始及び終了点がしばしば紙の上で強調されるのと同様に、各ストロークの開始及び終了点が強調される結果となる。
【０６７９】
上述したように、本発明の様々な実施の形態のインクデータ処理部、インクデータ生成方法、インクデータ処理部、インクデータ再生方法、及びインクデータ描画方法によれば、リアルな外観を有するストロークをレンダリング（描画）するために、非装置依存型のインクデータが生成され、使用され得る。インクデータ２００は、そのうちのいくつかは圧力データをサポートする一方、他は圧力データをサポートしない様々なタイプの装置及びアプリケーションによって共有され得るよう構造化される。このインクデータ２００の構造は、各ストロークの各ポイントに対して半径及び／又はアルファの値を定義し、この半径及び／又はアルファの値は、スクリーン上に描画されるストロークに対し、圧力データの代わりに、紙上にインクで手書きされた本物のストロークの外観を厳密にシミュレートするリアルな外観及び表現の微妙な違いを与えるために使用され得る。
【０６８０】
上記の記述においては、大部分において圧力はペンによって印加される筆圧であるとして記述したが、例えば指によって印加された圧力を取得（測定）する能力を有する装置に関しては、圧力は指の圧力を意味することとしてもよい。したがって、本記述において、「筆圧」という用語は「圧力」の同義語と解されるべきであり、「ペン」という用語は、ペン、指、並びに他の任意の、ユーザが入力装置上で位置を指示するために利用できる器具、機器、及び要素を含み得る「指示体」の同義語と解されるべきである。
【０６８１】
上記の記述においては、アルファは透明度の度合いを示すもの（アルファが大きいほど透明度が大きくなる）として使用したが、その値が大きいほど不透明の度合いが大きくなるという不透明度の度合いを示すパラメータもまた使用可能である。
【０６８２】
インクデータ処理部は、インクデータ処理部から再生されたインクデータを要求する様々なアプリケーションとは別の実体であるとして一般に記述されるが、これらは、例えばライブラリリンクを介する接続に基づき、連帯的に又は一体的に構成されてもよい。
【０６８３】
第４の実施の形態
本発明の第４の実施の形態は、ユーザの手書き動作に基づくペンイベントデータを受信するとともに、手書き動作をサポートするアプリケーション又はオペレーティングシステムによって提供されるコンテキスト情報（入力２）を受信するシステム及び方法に向けられたものである。コンテキスト情報（入力２）は、ペンのタイプや著者ＩＤなどのようなペンイベントデータについての情報を含む。このシステム及び方法は、受信したペンイベントデータ及び受信したコンテキスト情報（入力２）に基づいて、ストロークオブジェクト２１０、メタデータオブジェクト２５０、及び描画スタイルオブジェクト２３０を含むインクデータ２００を生成する。このシステム及び方法はさらに、手書き動作をサポートするアプリケーション又はオペレーティングシステムから操作情報を受信し、受信したペンイベントデータ、受信したコンテキスト情報（入力２）、及び受信した操作情報に基づいて、インクデータの一部を構成する操作オブジェクトを生成することができる。
【０６８４】
第４の実施の形態の背景
色々なオペレーションシステム、色々なアプリケーション、色々なサービス、色々な画像フォーマット、ストロークに関する既存の色々な標準などの間で、デジタル化された手書き入力データ又はインクデータが共有されることを可能にする枠組みが望まれている。要するに、ストロークデータモデルの統一が望まれている。
【０６８５】
ハイパーテキストマークアップ言語（ＨＴＭＬ）は、成功した統一の枠組みの一例である。ＨＴＭＬは、（１）本質的に決まった数の文字コードの組み合わせである「テキスト」、（２）このテキストが表示されるときにどのように特徴付けられ描写されるべきかを埋め込むメタタグ、を埋め込むための共通の言語として広く採用されてきた。例えば、メタタグはフォント、サイズ、色、列、行、グループ、表などを指示するもので、テキストの外観を特定するための色々なタイプのブラウザにより共通に解釈される。そのような共通言語は、色々なコンピューティング環境の色々な装置上で、実質的に同一の態様で表示され得るドキュメントの生成を可能にする（もっとも、例えば各ブラウザの実装に起因して、いくつかの小さな変種及び相違はあり得る）。
【０６８６】
同じことが、手書き入力データについても望まれる。すなわち、（１）（ユーザの手書き動作によって入力される）「ストローク」（又は「トレース」又は「パス」）、及び、（２）ストロークの色、テクスチャ、オフセット位置などのような「ストローク」を特徴付け又は描写する「オブジェクト」、を定義する共通言語が望まれる。以下では、そのような共通言語（又は情報モデル）を「ストローク言語（ＳＬ）」と称する。ストローク言語（ＳＬ）は、色々なコンピューティング環境の色々な装置上で、実質的に同一の態様（同一の外観）で表示され得るデジタルドキュメントの生成を可能にするであろう。もっとも、例えば各レンダリングエンジンの実装に起因して、いくつかの小さな変種及び相違はあり得るが。
【０６８７】
上記非特許文献１，２，５に記述されるように、ＩｎｋＭＬ、ＩＳＦ、及びＪＯＴデータ構造のような色々なアプリケーションで共有可能な態様で手書きストロークを表現するように構成されたいくつかのデータ構造が知られている。
【０６８８】
簡単に言えば、ＩｎｋＭＬ（非特許文献１）は、電子ペン又はスタイラスを用いて入力されたインクを、入力データを記述するマークアップ言語を用いることによって表現する目的のために提供されるものである。例えば、ＩｎｋＭＬはストロークのためのデータ構造を定義しており、そこでは、データ構造＜ｔｒａｃｅ＞が入力装置によって生成された一連のデータを含み、そしてこのデータのフォーマットは、多数の＜ｃｈａｎｎｅｌ＞要素を使用する独自のデータ構造＜ｔｒａｃｅｆｏｒｍａｔ＞に定められる。
【０６８９】
ＩＳＦ（非特許文献２）は、入力機構としてスタイラスを使用するＰＤＡ、タブレットＰＣ、及びその他のようなモバイル装置で使用されることを意図するバイナリフォームでインクデータを記憶する目的のために提供されるものである。例えば、ＩＳＦはストロークのためのデータ構造を定義しており、そこでは、データ構造ＴＡＧ＿ＳＴＲＯＫＥが入力装置によって生成された一連のデータを含み、そしてこのデータのフォーマットは、ＴＡＧ＿ＮＯ＿Ｘ、ＴＡＧ＿ＢＵＴＴＯＮＳその他の各種タグを使用する独自のデータ構造ＴＡＧ＿ＳＴＲＯＫＥ＿ＤＥＳＣ＿ＢＬＯＣＫに定められる。ＩＳＦは、圧縮符号化を必要とし、データのタイプごとに最も適した圧縮方法を選び取る方法を用いて、静的な（永続的な）ストリームを生成する能力を有する。彼らは、例えば、入力座標、圧力レベル、及び他のスタイラスによって生成されるデータのためにデルタ符号化とハフマンアルゴリズムの調整されたバージョンとの組み合わせを用い、カスタム描画属性のようなカスタム特性のためにＬＺアルゴリズムを用いる。
【０６９０】
ＪＯＴ（非特許文献５）は、電子ペン又はスタイラスによって入力されたデータを、様々なオペレーティングシステム及びアーキテクチャを用いる色々なマシンの間で交換する目的のために提供されるものである。例えば、ＪＯＴはストロークのためのデータ構造を定義しており、そこでは、データ構造ｔａｇ＿ＩＮＫ＿ＰＯＩＮＴが、単一のペンイベントと、その位置、力（圧力）、回転などのような特徴とを記述する。
【０６９１】
また、手書きストロークを処理することに限定されない色々な標準が、入力から独立した態様でベクトルグラフィックスを記述する目的で存在している。ＳＶＧ１．１（非特許文献３）は、そのような例の１つである。ＳＶＧのバージョン１．１は、ストロークを表現することを目的に、直線及びベジエ曲線に依存するパス要素を含む。
【０６９２】
第４の実施の形態の概要
本発明の実施の形態は、３つの側面のうちの１以上、特に側面３を扱うものとして理解され得る。
【０６９３】
上述した本発明の１以上の側面を実現するために、新規な言語（又は情報モデル）で定義されるインクデータ２００を生成し、変換し、その他の方法で処理するためのシステム及び方法が提供される。
【０６９４】
本発明の実施の形態は、メタデータオブジェクトによって静的に描写され、及び／又は、描画スタイルオブジェクト及び操作オブジェクトによって動的に制御又は操作されるストロークオブジェクトを含むインクデータ２００を出力することに向けられたものである。ストロークオブジェクト、メタデータオブジェクト、描画スタイルオブジェクト、及び操作オブジェクトは、全体として、記録フォーマット（例えば、ストロークファイルフォーマット（ＳＦＦ））又は伝送フォーマット（例えば、ストロークメッセージフォーマット（ＳＭＦ））で記憶され得るインクデータ２００を構成する。
【０６９５】
本発明の実施の形態によるストロークオブジェクトは、上述した第３の実施の形態で示したように、可変のストローク幅（すなわち、ストロークの長さに沿って変化する幅）、可変のストローク色又は透明度（アルファ）／不透明度（すなわち、ストロークの長さに沿って変化する色又は透明度／不透明度）を有することができる。本発明の実施の形態によるストロークオブジェクトは、上述した第１の実施の形態で示したように、キャットマル−ロムスプライン法のような適切な補間方法を用いて定義され、ストロークの任意の部分の開始及び／又は終了を記述するために特別なパラメータを使用することができる。
【０６９６】
本発明の実施の形態は、ローカルなストロークオブジェクトを動的に操作するのと同様にして、リモートな（リモートに位置する）ストロークオブジェクトを、例えばリモートホストとの接続／結合状態に応じて動的に操作することのできるインクデータ２００を生成する方法に向けられたものである。
【０６９７】
第４の実施の形態の記述
図７３は、本発明の実施の形態による、インクデータ２００が使用されるシステムの全体を説明する図である。図１に記述したシステムと比較すると、図７３のシステムは、追加で、装置１０−１−２及び装置１０−１−３によってアクセスされるアプリケーションサービス＃２をサポートするサーバ＃２を含んでいる。図７３のアプリケーションサービス＃１及びアプリケーションサービス＃２はともに、インクデータ交換インフラ１０を介して、インクデータ２００を利用し交換することができる。図７３では、装置１０−１は筆圧データを出力可能に構成されたペン型の入力装置であり、アプリケーションサービス＃１によって提供されるアプリケーション３００−＃１を用いてインクデータ２００を生成する。アプリケーション３００−１は、ＴＣＰ／ＩＰライブラリと、本発明のインクデータ生成方法を実行するインクデータ処理部１００及びグラフィック処理部３００（図示せず）のためのライブラリとにリンクする。生成されたインクデータ２００はその後、宛先であるメディア（例えば、ネットワーク）に対応する適切な出力フォーム（例えば、パケット）で出力され得る。
【０６９８】
装置１０−１−２は、ユーザの指による手書き入力を受信可能に構成されたタブレット型の入力装置である。装置１０−１−２のセンサは、筆圧データを出力する能力を有しないが、アプリケーションサービス＃２によって提供されるアプリケーション３００−２を用いてインクデータ２００を生成することができる。アプリケーション３００−２は、ＴＣＰ／ＩＰスタックのようなライブラリと、本発明のインクデータ生成方法を実行するサーバ＃２上のインクデータ処理部１００のためのライブラリとにリンクし、又はこれらを利用する。生成されたインクデータ２００はその後、宛先であるメディア（例えば、ネットワーク）に対応する適切な出力フォーム（例えば、パケット）で出力され得る。
【０６９９】
装置１０−３は、アプリケーションサービス＃２に加入しているデスクトップ型のＰＣである。装置１０−３は、アプリケーションサービス＃２によって提供されるアプリケーション３００−２を用いて、装置１０−１−１又は装置１０−１−２から出力されるインクデータ２００を処理する（例えば、ディスプレイスクリーン上にレンダリングしたり、再配布する）ことができる。アプリケーション３００−２は、ＴＣＰ／ＩＰスタックのようなライブラリと、本発明のインクデータ生成方法を実行するサーバ＃２上のインクデータ処理部１００のためのライブラリとに動的にリンクし、又はこれらを利用する。
【０７００】
図７４は、本発明の実施の形態によるインクデータ処理部１００のブロック図である。このインクデータ処理部１００は、図６に示したインクデータ処理部１００に対応する。インクデータ処理部１００は、図６に示したグラフィック処理部３００を利用する描画アプリケーション３００−１のようなアプリケーションに動的又は静的にリンクされるライブラリとして実装され得る。インクデータ処理部１００は、インクデータ生成部１２０及びインクデータ整形部１４０を含む。インクデータ生成部１２０は一般に、１）ペンイベント型の入力情報（「入力１」）、２）コンテキスト情報（「入力２」）、及び３）操作情報（「入力３」）という３つのタイプの情報を入力し、含み、受信する。
【０７０１】
入力１。
「ペンイベント型の入力データ」又は単に入力データ又はペンイベントデータは、ペンタブレットセンサのような入力装置からデータを取得するためのＯＳ、デバイスドライバー、ＡＰＩから入力される。入力データは、図９２の左手側に図示するように、様々な種類の入力装置からのものであり得る。入力データは、入力装置からの生データに限られず、ＩｎｋＭＬ及びＩＳＦデータのような、生データを処理することによって生成されるペンイベントデータを含むことができる。
【０７０２】
入力２。
コンテキスト情報は、上述したペンイベント型の入力データの入力をサポートするために使用されるコンテキストを示す。コンテキスト情報は、例えば、ストロークに関する日時情報（例えば、いつストロークが入力されたか）、ペンタイプ、ペン色、ペンＩＤ、著者ＩＤ、入力装置の解像度及びサンプリングレートなどを含むことができ、これらはストロークを生成するために使用されるアプリケーション（アプリケーション３００−１）又はＯＳによって提供される。
【０７０３】
入力３。
操作情報は、入力されるべき次のストロークが、通常のストロークオブジェクト２１０である代わりに、既存のストロークオブジェクト２１０を操作するために使用される操作オブジェクトを構成するためのものであることを示すコマンドである。そのようなコマンドは、入力装置に関連付けられたスイッチ又はボタンのユーザ起動によって入力されることができ、アプリケーション３００−１からインクデータ生成部１２０に提供される。例えば、ユーザが既存のストロークオブジェクト２１０を「スライス」することを望むとき、ユーザは操作情報を発行し、既存のオブジェクトをスライスするための手書き動作を行う。操作情報の観点では、インクデータ生成部１２０は、ユーザのスライス動作に基づいて他のストロークを描画する代わりに、既存のストロークオブジェクト２１０をスライスするためにユーザのスライス動作を使用する。
【０７０４】
インクデータ生成部１２０は、これら３つのタイプの情報（入力１、入力２、及び入力３）を入力／受信し、第３の実施の形態を参照して上述した図４８Ｂに示したように、ストローク言語（ＳＬ）の定義に従う一群のオブジェクトを生成する。
【０７０５】
インクデータ整形部１４０は、様々なオブジェクトを含むインクデータを生成するインクデータ言語操作部１２０とは切り離されている。図７４では、インクデータ生成部１２０によって生成された一群のオブジェクトが、下から上、すなわち出力の方向で、「記録フォーマット」又は「伝送フォーマット」でデータを出力するインクデータ整形部１４０に入力される。図７４では、記録フォーマット又は伝送フォーマットで書かれたデータが、上から下、すなわち入力の方向で、一群のオブジェクトを再生し、再生した一群のオブジェクトをインクデータ生成部１２０に提供するインクデータ整形部１４０に入力される。以下の図では、ＳＬはストローク言語（図４８Ｂ参照）を意味し、ＳＦＦは記録フォーマットの一種であるストロークファイルフォーマットを意味し、ＳＭＦは伝送フォーマットの一種であるストロークメッセージフォーマットを意味する。
【０７０６】
図７５は、本発明の様々な実施の形態による、図７４に示したインクデータ処理部のより詳細な機能ブロック図である。この図におけるインクデータ処理部１００は、図６に示したインクデータ処理部１００に対応する。
【０７０７】
インクデータ生成部１２０は、ストロークオブジェクト２１０の操作部１２２、メタデータオブジェクト操作部１２４、レンダリング（描画スタイル）オブジェクト操作部１２６、及び操作オブジェクト操作部１２８を含む。
【０７０８】
ストロークオブジェクト操作部１２２は、入力（入力１）としてペンイベント型の入力データを受信するとともにコンテキスト情報（入力２）を参照して、ストローク言語の核を構成するストロークオブジェクト２１０を生成する。
【０７０９】
メタデータオブジェクト操作部１２４は、ペンイベント型の入力データ（入力１）及びコンテキスト情報（入力２）に基づき、ストロークオブジェクト２１０を描写するメタデータオブジェクト２５０を生成する。メタデータオブジェクトは、日時情報、著者ＩＤ、及びペンＩＤのような、スクリーン上に描画されるときにストロークオブジェクト２１０の外観に影響を与えないストロークオブジェクト２１０についての非描画関連情報を含む。
【０７１０】
レンダリング（描画スタイル）オブジェクト操作部１２６は、ストロークオブジェクト操作部１２２によって生成されたストロークオブジェクトに基づくとともにコンテキスト情報（入力２）を参照して、ストロークオブジェクト２１０のレンダリング（描画）を制御し、スクリーン上にレンダリングされたときにストロークオブジェクト２１０がどのような現れるかを定義する描画スタイルオブジェクト２３０を生成する。
【０７１１】
操作オブジェクト操作部１２８は、操作情報（図７５の「入力３」）の受信に応じて、ローカルに（「ローカル」）、又は、ネットワークの向こうにリモートに（「リモート」）存在する既存のストロークオブジェクト２１０の状態を操作するために構成される操作オブジェクト２７０を生成するために、入力１として受信される次の「ストローク」を使用する。
【０７１２】
したがって、インクデータ生成部１２０は、３つのタイプの入力情報（入力１、入力２、及び入力３）に基づいて、図４８Ｂに示したように、ストローク言語に基づく一群のオブジェクトを生成する。
【０７１３】
インクデータ整形部１４０は、ＳＦＦ、ＩｎｋＭＬ、ＪＰＥＧフォーマットのような記録フォーマットでファイルを出力するように構成される記録フォーマットデータ処理部１４２と、ＳＭＦフォーマットのような伝送フォーマットでメッセージを出力するように構成されたインクデータ通信部１４４とを含む。これらの様々なフォーマットの定義に従うストローク言語によって定義されるデータは、ＳＦＦ構造記述ファイル（スキーマファイル）（Ｆ１４２−１−１）、ＳＶＧ構造記述ファイル（Ｆ１４２−２−１）、及びＳＭＦ構造記述ファイル（Ｆ１４４−１）などの形で出力される。したがって、ストローク言語に従って様々なオブジェクトを生成し再生することが可能になり、生成されたオブジェクトは、様々な記録フォーマット及び／又は伝送フォーマットで入出力され得る。図示したファイルインクデータ生成部１４０は２つの記録フォーマットＳＦＦ及びＳＶＧをサポートしているが、２つ以上の記録フォーマットをサポートしてもよいし、アプリケーション３００−１がすべての可能なファイルフォーマットをサポートする必要がないときには１つだけ記録フォーマットをサポートすることとしてもよい。
【０７１４】
操作オブジェクト操作部１２８からの出力（例えば、図７５の操作オブジェクト２７０）はＳＭＦメッセージ内に配置され、リモートに存在する１以上の既存のストロークオブジェクト２１０を操作する（例えば、スライスする）ためにネットワークを介して伝送され得る。
【０７１５】
＜言語オブジェクトを生成する方法＞
図７６〜図８３Ｂは、本発明の実施の形態による、ストロークオブジェクト操作部１２２、メタデータオブジェクト操作部１２４、レンダリング（描画スタイル）オブジェクト操作部１２６、及び操作オブジェクト操作部１２８の構造及び動作を説明する機能ブロック図及びフローチャートである。
【０７１６】
＜ＳＭ（ストロークモデル）。ストロークオブジェクトを生成する装置／方法＞
図７６は、図７５に示したストロークオブジェクト操作部１２２の機能ブロック図である。ストロークオブジェクト操作部１２２は、ペンイベントデータ（「入力１」）、又はｉｎｋＭＬデータのようなペンイベント型のデータを入力し、ポイントオブジェクトを出力するストロークモデル処理部（１２２＿１）を含む。各ポイントオブジェクトはポイントのｘ及びｙ座標を含み、また、上記第３の実施の形態を参照して記述したように、ポイントの属性として半径及びアルファの値を含むことがてき、そうすることによって、出力されるポイントオブジェクトは（ｘ，ｙ，半径、アルファ）と表現され得る。ストロークオブジェクト操作部１２２は、コンテキスト情報（「入力２」）を受信し、ポイントオブジェクトの生成での使用のためにストロークモデル処理部（１２２＿１）に対して出力されることになるコンフィグレーションを準備するモデル生成部（１２２＿２）を含む。ストロークオブジェクト操作部１２２はさらに、連帯して１つのストロークを構成する複数の生成されたポイントオブジェクトを、１つのストロークオブジェクト２１０に組み立てるストロークモデルビルダ部（１２２＿３）を含む。ストロークオブジェクト操作部１２２はその後、複数の生成されたストロークオブジェクトを出力する。
【０７１７】
図７７Ａは、ストロークオブジェクト２１０を生成する処理を説明するフローチャートである。Ｓ１２２＿１では、モデル生成部１２２＿２がコンテキスト情報（「入力２」）を処理し、入力レートのような、コンフィグレーションを定義するために使用されるパラメータを取り出す。Ｓ１２２＿６では、規定のコンフィグレーションがストロークモデル処理部１２２＿１にロードされ、ポイントオブジェクトを生成するために使用される。もしこのコンフィグレーションがストロークモデル処理部１２２＿１に対し平滑化を適用することを命令していたら、ストロークモデル処理部１２２＿１はＳ１２２＿２において、平滑化されたポイントオブジェクトを生成するためにポイントの配列に対して平滑化を適用する。例えば、適切なウインドウサイズ、平滑化データ因数、及び方向平滑化因数によって構成される二重指数平滑アルゴリズムが使用され得る。もしこのコンフィグレーションが平滑化が適用されないことを命令していたら、Ｓ１２２＿２はスキップされる。もしこのコンフィグレーションがストロークモデル処理部１２２＿１に対し追加のポイントを生成することを命令していたら、ストロークモデル処理部１２２＿１はＳ１２２＿３において追加のポイントを生成し、それらをストロークの始まり及び／又は終わりに付加する。Ｓ１２２＿２及びＳ１２２＿３のようなステップは、モデル生成部１２２＿２内で処理されるコンテキスト情報に応じてＳ１２２＿７の前に実行される。他の例としては、ストロークオブジェクト２１０を構成するポイントオブジェクトの位置の値が、Ｓ１２２＿６でロードされたコンフィグレーション内に特定される補間方法（例えば、キャットマル−ロムスプライン法）に依存することとしてもよい。ステップＳ１２２＿７では、ストロークモデル構築部１２２＿３が生成されたポイントオブジェクトを組み立てて新たなストロークオブジェクト２１０を形成し、既存のストロークオブジェクト２１０を更新する。
【０７１８】
図７７Ｂは、追加のポイントが生成され、ストロークの始まり及び／又は終わりに付加される図７７ＡのＳ１２２＿３の詳細なアルゴリズムを記述している。示されるように、処理されるポイントのフェイズに応じて、異なるアルゴリズムが実行される。ポイントのフェイズは、そのポイントが属するストロークに対するポイントの位置を示す。例えば、もしフェイズが、そのポイントがストロークの開始点であることを示す「始まり」である（「終わり」は相似のもので、ストロークの終了点を示す）ならば、Ｓ１２２＿４（「終わり」フェイズに対してはＳ１２２＿５）において、１以上（例えば３）のポイントが生成され、ストロークの始まり（終わり）を構成するために付加される。図７７ＡのＳ１２２＿７と同様、Ｓ１２２＿４（Ｓ１２２＿５）で生成され追加されたポイントオブジェクトの位置の値が、Ｓ１２２＿６でロードされたコンフィグレーション内に特定される補間方法（例えば、キャットマル−ロムスプライン法）に依存することとしてもよい。もしフェイズがポイントがストロークの中間部にあることを示す「中間」であれば、そのポイントのための追加のポイントは生成されない。
【０７１９】
＜ＭＤ（メタデータ）。メタデータオブジェクトを生成する装置／方法＞
図７８は、図７５に示したメタデータオブジェクト操作部１２４の機能ブロック図である。メタデータオブジェクト操作部１２４は、コンテキスト情報（「入力２」）を受信し、そこから著者ＩＤ、位置などのようなメタデータを取り出す。そのようなメタデータの少なくともいくつかがコンフィグレーション内に配置され、ストロークオブジェクト操作部１２２から受信されるストロークオブジェクト２１０をコンフィグレーションに従って処理するメタデータ処理部１２４＿２に送られる。メタデータオブジェクト２５０は、受信されたストロークオブジェクト２１０を描写するために生成されるものである。メタデータ処理部１２４＿２は、受信したストロークオブジェクト２１０から時刻情報のようなメタデータを取り出し、取りだしたメタデータをメタデータ構築部１２４＿３に送る。メタデータ生成部１２４＿１はまた、コンテキスト情報から取り出した静的なコンフィグレーションをメタデータ構築部１２４＿３に送る。典型的には、静的なコンフィグレーションは絵の全体に共通である。メタデータ構築部１２４＿３は、メタデータ生成部１２４＿１及びメタデータ処理部１２４＿２から受信されるメタデータに基づいてメタデータオブジェクト２５０を構築する。
【０７２０】
図７９は、メタデータオブジェクト２５０を生成する処理を説明するフローチャートである。Ｓ１２４＿１では、メタデータ生成部１２４＿１及びメタデータ処理部１２４＿２がそれぞれの入力から、ペンＩＤ、タイムスタンプなどのようなメタデータを取り出す。Ｓ１２４＿２では、アプリケーションコンテキスト情報として取り出されたメタデータがメタデータ構築部１２４＿３にロードされる。Ｓ１２４＿３では、処理されるポイントのフェイスが判定される。もしそのポイントがストロークオブジェクト２１０の開始点であったならば、メタデータオブジェクト２５０が生成され、そのポイントと関連付けられる。典型的には、ストロークオブジェクト２１０ごとに必要なメタデータオブジェクト２５０は１つだけであるから、開始点以外の残りのポイントについては、メタデータオブジェクト２５０は生成され関連付けられる必要はない。
【０７２１】
＜Ｒ（ラスター化）。レンダリング（描画スタイル）オブジェクトを生成する装置／方法＞
図８０は、図７５に示したレンダリング（描画スタイル）オブジェクト操作部１２６の機能ブロック図である。レンダリングオブジェクト操作部１２６は、コンテキスト情報（「入力２」）を受信し、最小／最大半径情報、最小／最大速度情報、最小／最大圧力情報、色情報などの情報を取り出す。そのような情報の少なくともいくつかがコンフィグレーション内に配置され、ストロークオブジェクト操作部１２２から受信されるストロークオブジェクト２１０をコンフィグレーションに従って処理するスタイル処理部１２６＿２に送られる。描画スタイルオブジェクト２３０は、受信されたストロークオブジェクト２１０をどのように描画（レンダリング）するかを定義するために生成されるものである。スタイル処理部１２６＿２は、受信したストロークオブジェクト２１０から、（可変の）半径、（可変の）色、（可変の）アルファ（透明度）、及びアンチエイリアシングパラメータのようなスタイルに関係するパラメータを取り出し、取りだした情報をスタイル構築部１２６＿３に送る。スタイル生成部１２６＿１はまた、コンテキスト情報から取りだした静的なコンフィグレーションをスタイル構築部１２６＿３に送る。典型的には、静的なコンフィグレーションは絵の全体に共通である。例えば、１つの絵の中のすべてのストロークが同じ合成混合モードを有していたら、そのモードの値は静的なコンフィグレーションである。
【０７２２】
図８１は、スタイルオブジェクトを生成する処理を説明するフローチャートである。ステップＳ１２６＿１では、スタイル処理部１２６＿２が、アプリケーションから利用可能なストロークオブジェクト２１０及びコンテキスト情報に基づいて、圧力データ、タイムスタンプデータ、位置データなどのような入力特性を決定する。Ｓ１２６＿２では、ステップＳ１２６＿１で決定された特性に応じて、適切なコンフィグレーションがロードされる。例えば、もしアプリケーション内で選択されたツールがボールペンであり、かつ、入力特性が圧力データを含むのであれば、圧力ベースのボールペンのためのコンフィグレーションがロードされる。他の例としては、もし選択されたツールがボールペンであり、かつ、入力特性が圧力データを含まずタイムスタンプを含むのであれば、速度ベースのボールペンのためのコンフィグレーションがロードされる（タイムスタンプ情報から速度が導出できるため）。ステップＳ１２６＿３では、幅（又は色）が可変であるか否かを判定するために、ロードされたコンフィグレーションが検査される。その後、ステップＳ１２６＿４において、幅（又は色）がポイントごとに可変か、すなわち、ストロークがその長さに沿って変化する幅又は色を有するかが判定される。もし「ｙｅｓ」であれば、Ｓ１２６＿５において、カスケーディングスタイルプロパティである半径（及び／又は色）がポイントオブジェクトごとに生成される。さもなければ、ステップＳ１２６＿６において、カスケーディングスタイルプロパティがストロークオブジェクト２１０のために生成される。
【０７２３】
オプションのカスケーディングプロパティのための他の例は、強化プロパティである。強化プロパティは、入力装置がダウン状態で静止しているとき、特別なインクの流出量をシミュレートするために使用される。このプロパティに対する実世界の類似物は、柔らかい紙の上における水彩筆の振る舞いである。水彩筆が静止位置にあるとき、柔らかい紙は絵の具を吸い込み、したがって接触点はより濃く大きくなる。ステップＳ１２６＿７では、もし入力されたストロークオブジェクト２１０がＳ１２６＿２でロードされたコンフィグレーションによって特定される強化条件を満たすならば、各ポイントオブジェクトのために強化プロパティが生成される。例えば、もしユーザがダウン状態でいかなる動きも生じさせず、かつ、ロードされたコンフィグレーション内で強化アルゴリズムが活性化されていたならば、ステップＳ１２６＿７では、現在の（最後に生成された）ポイントが、特定の位置におけるポイント密度を増加させるために複製又は更新される。
【０７２４】
Ｓ１２６＿８の前に、Ｓ１２６＿２でロードされたコンフィグレーションに応じて、先に説明したステップと同様の他のステップが実行され得る。ステップＳ１２６＿８では、スタイルオブジェクトが生成される。ステップＳ１２６＿５，Ｓ１２６＿６，及びＳ１２６＿７他で更新されるカスケーディングスタイルプロパティのすべてが、Ｓ１２６＿８でスタイルオブジェクト内に組み入れられる。
【０７２５】
＜Ｍ（操作）。操作オブジェクトを生成する装置／方法＞
図８２は、図７５に示した操作オブジェクト操作部１２８の機能ブロック図である。操作オブジェクト操作部１２８は、コンテキスト情報（「入力２」）を受信して処理することにより操作プロセッサ１２８＿２による使用のためにコンフィグレーションを準備する操作者生成部１２８＿１を含む。操作プロセッサ部１２８＿２は、操作者生成部１２８＿１から受信されるコンフィグレーションと、アプリケーションから受信される操作情報（「入力３」）を参照してペンイベントデータ（「入力１」）を処理し、それによってスライスの実体のような操作の実体を生成する。操作ビルダ１２８＿３は、スライスの実体のような操作の実体を受信し、スライスオブジェクト２７４のような操作オブジェクトを構築する。操作オブジェクトは、既存のストロークオブジェクト２１０に対し、規定の動作を実行するように構成される。例えば、スライスオブジェクト２７４は、既存のストロークオブジェクト２１０を２つのスライスピースにスライスするために使用される。操作ビルダ１２８＿３によって生成された操作（例えばスライス）オブジェクトのコレクションは、リモートに存在する既存のストロークオブジェクト２１０上で実行されるために、ネットワークを介して送られることができ、又は、ストロークオブジェクト操作部１２２によって生成され格納された既存のストロークオブジェクト２１０上でローカルに実行されることができる。図示するように、操作プロセッサ１２８＿２はまた、操作の実体を生成するためのどれかに基づいて、ストロークオブジェクト操作部１２２からストロークオブジェクトを受信することができる。
【０７２６】
図８３Ａは、操作オブジェクトを生成する処理を説明するフローチャートである。ステップＳ１２８＿１では、圧力、位置、及びタイムスタンプ情報のような入力特性が入力１及び入力から取り出され、また、操作情報（入力３）が受信される。ステップＳ１２８＿２では、取り出された入力特性及びアプリケーションのコンテキスト情報（「入力２」）から決定される適切なコンフィグレーションがロードされる。ステップＳ１２８＿３では、操作オブジェクトを形成するために、ロードされたコンフィグレーションに従って新たな入力が処理される。例えば、もし新たな入力が多角形の形状であったら、その多角形が操作領域を定義する。例えば、もし生成される操作オブジェクトが投げ縄ツールであったら、その多角形の形状が投げ縄ツールの範囲を定義する。Ｓ１２８＿４では、複数の既存のストロークオブジェクトの中から１つの既存のストロークオブジェクト２１０が選択され、Ｓ１２８＿５では、選択された既存のストロークオブジェクト２１０と、操作領域（例えば多角形の形状）との間の交点が算出される。もし、Ｓ１２８＿７で交点が発見されなければ、他の既存のストロークオブジェクト２１０が選択され、既存のストロークオブジェクト２１０との交点が少なくとも１つ見つかるまで、ステップＳ１２８＿４，Ｓ１２８＿５，及びＳ１２８＿６が繰り返される。既存のストロークオブジェクト２１０と操作領域との間の交点が発見された場合、Ｓ１２８＿７において、既存のストロークオブジェクト２１０を交点で「スライス」するように構成されるスライシング操作オブジェクトが生成される。Ｓ１２８＿１４では、操作領域が交差し得る既存のストロークオブジェクト２１０がもっとあるかが判定される。もし「ｙｅｓ」であれば、処理はステップＳ１２８＿４に戻る。既存のストロークオブジェクトのすべてについて操作領域とのそれらの交点がチェックされると、ステップＳ１２８＿１５において、生成されたスライスオブジェクトがスライスオブジェクトのコレクションに組み上げられる。
【０７２７】
図８３Ｂは、スライスオブジェクトを生成する処理を説明するフローチャートである。Ｓ１２８＿８では、Ｓ１２８＿２でロードされたコンフィグレーションが「操作精度」を判定するために使用される。もし操作精度が「あるがままのストローク」であれば、Ｓ１２８＿９において、既存のストロークオブジェクト２１０をスライスして２つのスライスチップを生成するスライスオブジェクト２７４が生成され、２つのピースはそれぞれ、既存のストロークオブジェクト２１０を構成する元のポイントオブジェクトのサブセットにより定義される。別の言葉で言えば、操作領域との交点が、既存のストロークオブジェクト２１０の隣接する２つのポイントオブジェクトの間に位置しているときであっても、交点の正確な位置が２つのスライスチップを定義するために使用されることはない。
【０７２８】
もし操作精度が「正確なポイント」であれば、Ｓ１２８＿１０において、隣接する２つのポイントオブジェクトの間の交差セグメント（曲線）が見出される。ここで、交差セグメントとは、操作領域が既存のストロークオブジェクト２１０と交差するところである。１以上の交差セグメントが見出される。Ｓ１２８＿１１では、各交差セグメントが、交点の正確な位置を見つけるために、例えば補間法を用いて処理される。Ｓ１２８＿１２では、各交差セグメントに対して、それぞれ終了点又は開始点として交点の正確な位置を有する２つのスライスチップが生成される。Ｓ１２８＿１３では、生成されたスライスチップが更新されてそれぞれ新たなストロークオブジェクトとなり、新たに生成されたストロークオブジェクトのそれぞれがメタデータオブジェクト２５０及び描画スタイルオブジェクト２３０に関連付けられる。
【０７２９】
上述したように、インクデータ処理部１００と、その関連する方法とは、ストロークオブジェクトとともに、メタデータオブジェクト２５０、ラスター化描画スタイルオブジェクト２３０、操作オブジェクト２７０を含む、ストロークオブジェクト２１０に関連付けられるオブジェクトを生成する。
【０７３０】
以下、インクデータ整形部１４０の構成及び動作について、図８４〜図９０Ｃを参照しながら詳細に記述する。
【０７３１】
図８４は、図７５に示したインクデータインクデータ整形部１４０の機能ブロック図である。図７５を参照して説明したように、インクデータ整形部１４０は、ＳＦＦ、ＩｎｋＭＬ、及びＪＰＥＧフォーマットのような記録フォーマットでファイルを出力する記録フォーマットデータ処理部１４２と、伝送フォーマットで各種のオブジェクト（ストロークオブジェクト２１０、メタデータオブジェクト２５０、描画スタイルオブジェクト２３０、及び操作オブジェクト２７０）を出力するように構成されたインクデータ通信部１４４とを含む。したがって、ストローク言語に従って様々なオブジェクトを生成し再生することが可能になり、生成されたオブジェクトは、様々な記録フォーマット及び／又は伝送フォーマットで入出力され得る。
【０７３２】
記録フォーマットデータ処理部１４２は、記録フォーマット内に、ストロークオブジェクト、メタデータオブジェクト、描画スタイルオブジェクトを配置するように構成される。サブセクション１４２−１，１４２−２，・・・は、それぞれの出力ファイルフォーマットに従ってオブジェクトを整えるように構成された処理部である。
【０７３３】
インクデータ通信部１４４は、スライスオブジェクト２７４のような操作オブジェクトを、ネットワークを介してリモート装置に（リアルタイム）伝送することに適したストロークメッセージフォーマット内に配置する。伝送フォーマット内に配置される操作オブジェクトは、ローカルに存在し、又は、ネットワークを関してリモートに存在する既存のストロークオブジェクト上で実行され得る。
【０７３４】
図８５は、インクデータ整形部１４０において実行される処理を説明するフローチャートである。まず、オブジェクトを送信する必要があるかが判定される。この判定は、現時点でローカルに組み立てられたストロークオブジェクト２１０がリモート端末に共有されるか否か、ということに基づいて実行される。もし肯定なら、オブジェクトはステップＳ１４４において、ネットワークを介して伝送されるストロークメッセージフォーマット（ＳＭＦ）内に配置される。これに対し、もしオブジェクトが伝送されないと判定されれば、オブジェクトは、複数の記録フォーマットの中から選択される適切な記録フォーマット内に配置される。もしストロークファイルフォーマット（ＳＦＦ）が出力フォーマットとして使われるのであれば、ステップＳ１４２−１において、ＳＦＦ生成処理が実行される。もしＳＶＧやＪＰＥＧフォーマットのような他のフォーマットが使われるのであれば、ステップＳ１４２−１において、例えば、ＳＶＧの拡張に基づくストローク言語情報を含むＳＶＧフォーマットのファイルを出力するために、ＳＶＧ生成処理が実行される。
【０７３５】
図８６は、ストロークファイルフォーマット（ＳＦＦ）のデータを出力する処理を説明するフローチャートである。Ｓ１４２−１−１では、ＳＦＦ構造体を生成するために、ＳＦＦ構造記述ファイル（Ｆ１４２−１−１）が分析される。ＳＦＦ構造体は、インターフェイス記述言語を用いて記述される。ＳＦＦを使用する各ソフトウェアアプリケーションは、ＳＦＦデータを適切に扱うために、記述ファイルを理解（分析）する必要がある。例えば、もしＳＦＦ構造体がプロトコルバッファＩＤＬを用いて表現されていたら、プロトコルバッファのコンパイラによって生成されるスタブクラスがＳ１４２−１−１でロードされる。Ｓ１４２−１−２においては、図７５のインクデータ生成部１２０で生成された様々なオブジェクトにより、ＳＦＦ構造体を埋める。Ｓ１４２−１−３では、可変長整数符号化技術及び指数ゴロム符号技術のような抽象データ型の最適なメモリ表現のための各種技術を用いて、ＳＦＦ構造体が処理される。Ｓ１４２−１−４では、生成されたＳＦＦ構造のメモリ表現がメモリストリーム内に詰め込まれる。生成されたメモリストリームは、ファイルシステム又はファイル構造内に保存され得る。
【０７３６】
Ｓ１４２−１−２は、ＳＦＦデータ構造を適切に満たすための複数のステップを含むことができる。処理対象であるインクデータに含まれる各ストロークオブジェクト２１０について（Ｓ１４２−１−５）、及び、処理対象であるそのストロークオブジェクト２１０内に含まれる各ポイントオブジェクトについて（Ｓ１４２−１−６）、圧縮動作が実行されるか否かが判定される。もし「ｙｅｓ」であれば、Ｓ１４２−１−７において、すべての浮動小数点値が固定小数点精度の値に変換され、整数として表現される。精度の損失は、ストロークオブジェクト操作部１２２内又はレンダリングオブジェクト操作部１２６内で、ポイントオブジェクトの浮動小数点値を所望の精度に丸めることによって補償される。Ｓ１４２−１−８では、生成された整数値に対し、データ符号化のような圧縮アルゴリズムが適用される。Ｓ１４２−１−９では、オブジェクト、もし圧縮が適用された場合には圧縮処理を受けたもの、がＳＦＦ構造体を埋めるために使用される。
【０７３７】
図８７は、ＪＰＥＧフォーマットのデータを出力する処理を説明するフローチャートである。処理対象であるインクデータ内に含まれる各ストロークオブジェクト２１０について（Ｓ１４２−２−１）、Ｓ１４２−２−２において、ストロークオブジェクト２１０に結合されているすべての描画スタイルオブジェクト２３０が読み出され、描画スタイルオブジェクト内に定義されているすべてのラスター化（描画）プロパティがロードされる（例えば、混合及びテクスチャプロパティ）。このとき、色及び半径の値のようなすべてのカスケーディングプロパティが分析される。Ｓ１４２−２−３では、ストロークの幾何学的形状がＣＰＵ又はＧＰＵを用いて生成される。Ｓ１４２−２−４では、生成された幾何学的形状に対し、ＣＰＵ又はＧＰＵを用いて、色、テクスチャなどのすべてのラスター化／グラフィカル情報を適用することにより、ストロークがラスター化（描画）される。Ｓ１４２−２−５では、ラスター化されたすべてのストロークが一斉に組み上げられる。Ｓ１４２−２−６では、レンダリング（描画、ラスター化）されたすべてのストロークオブジェクト２１０を含むビットマップが生成される。Ｓ１４２−２−７では、このビットマップデータがＪＰＥＧアルゴリズムを用いて圧縮される。
【０７３８】
図８８は、ストロークメッセージングフォーマット（ＳＭＦ）のデータを出力する処理を説明するフローチャートである。Ｓ１４４−１では、図７５に示したオブジェクト操作部１２２，１２４，１２６，又は１２８の中の１つから、オブジェクトが受信される。Ｓ１４４−２では、ストロークオブジェクト２１０、メタデータオブジェクト２５０、描画スタイルオブジェクト２３０、又は操作オブジェクトとしてオブジェクトタイプが決定される。Ｓ１４４−３では、オブジェクトと、処理対象であるインクデータ内の残りのオブジェクトとの間の関係を示すため、オブジェクトに対し識別子（例えば、ストロークＩＤ、スタイルＩＤ）が割り当てられる。Ｓ１４４−４では、ＳＭＦ構造記述ファイル（Ｆ１４４−４）が分析され、決定されたオブジェクトタイプに対応するＳＭＦ構造体がロードされる。例えば、もしＳＭＦ構造体がプロトコルバッファを用いて表現されていたら、プロトコルバッファコンパイラによって生成されるスタブクラスがロードされる。Ｓ１４４−５では、決定されたオブジェクトに対して圧縮動作が実行されるか否かが判定される。もし「ｙｅｓ」であれば、Ｓ１４４−６において、すべての浮動小数点値（例えば、ｘ，ｙ，半径、不透明度、透明度）が固定小数点精度の値に変換され、整数として表現される。Ｓ１４４−７では、生成された整数値に対し、データ符号化のような圧縮アルゴリズムが適用される。Ｓ１４４−８では、オブジェクト、もし圧縮が適用された場合には圧縮処理を受けたもの、がＳＭＦ構造体を埋めるために使用される。Ｓ１４４−９では、ＳＭＦデータがメモリストリーム内に保存される。
【０７３９】
図８９は、様々なファイルフォーマット及び伝送フォーマットで出力されたデータ（ＳＦＦ／ＪＰＥＧ及びＳＭＦ）の入力処理を説明する機能ブロック図である。
【０７４０】
図８９では、左手側に図示したインクデータ出力操作部１４０Ｔが、上述した出力処理を実行する。インクデータ２００は、ＳＦＦフォーマット及びＪＰＥＧフォーマットのような記録フォーマットで出力されるか、又は、ＳＭＦフォーマットのような伝送フォーマットで出力される。
【０７４１】
各種フォーマットで出力されるこれらのファイル及び／又はメッセージは、その後、図８９の右手側に図示したインクデータ入力操作部１４０Ｒによって入力（受信）される。様々な実施の形態において、インクデータ入力処理及びインクデータ出力処理は、同じサブセクション１４２−１（ＩＮ及びＯＵＴの両方）並びに同じサブセクション１４２−２（ＩＮ及びＯＵＴの両方）のような同じライブラリを共有する同じ処理部で実行される。
【０７４２】
インクデータ入力操作部１４０Ｒ内の記録フォーマットデータ処理部１４２は、入力されたデータからフォーマットに依存するデータを除去し、様々なタイプのインクデータオブジェクトに関する情報を取り出し、取り出したインクデータオブジェクトに関する情報を受信側のインクデータ生成部１２０に対して出力する。
【０７４３】
インクデータ入力操作部１４０Ｒ内のインクデータ通信部１４４Ｒは、受信したパケット又はメッセージから操作オブジェクトを取り出し、取り出された各操作オペレーションに対して、受信側のインクデータ生成部１２０内で既存のストロークオブジェクト２１０に対して実行（適用）されるよう命令する。
【０７４４】
図９０Ａは、ＳＦＦファイル内に配置されたオブジェクトを解釈して再生するための処理のフローチャートである。Ｓ１４２−１（ＩＮ）−１では、ＳＦＦ構造体を生成するためにＳＦＦ構造記述ファイルが分析される。Ｓ１４２−１（ＩＮ）−２では、ＳＦＦ構造体が復元される。１以上のＳＦＦ構造体が復元され、復元された各ＳＦＦ構造体について（Ｓ１４２−１（ＩＮ）−３）、復元されたＳＦＦ構造体が圧縮されているか否かが判定される。もし「ｙｅｓ」であれば、Ｓ１４２−１（ＩＮ）−４において、復元されたＳＦＦ構造体が解凍され、Ｓ１４２−１（ＩＮ）−５において、整数として表現されている解凍された固定小数点値が浮動小数点表現に逆変換される。Ｓ１４２−１（ＩＮ）−６では、対応するストローク言語オブジェクトが生成される（例えば、ストロークオブジェクト２１０、描画スタイルオブジェクト２３０、メタデータオブジェクト２５０）。
【０７４５】
図９０Ｂは、ＩｎｋＭＬでの入力に基づくオブジェクトを解釈して再生するための処理のフローチャートである。Ｓ１４２−２（ＩＮ）−１では、ＩｎｋＭＬファイルが分析され、メモリ内にロードされる。Ｓ１４２−２（ＩＮ）−２では、トレースオブジェクトが、ポインタ入力イベントのサンプルに変換される。この処理は、位置、圧力、角度、傾き、及びタイムスタンプデータのような入力データを取り出し、取り出した入力データをポインタ入力イベントのシーケンスにモデリングすることを意味する。Ｓ１４２−２（ＩＮ）−３では、ポインタ入力イベントのシーケンスが、ストロークオブジェクト操作部１２２に渡される。ストロークオブジェクト操作部１２２はまた、ＩｎｋＭＬファイルに含まれるデータ（例えば、圧力チャネルがあるかないか）に基づいてコンテキスト情報を受信する。ストロークオブジェクト操作部１２２は、ストロークオブジェクトを生成する。Ｓ１４２−２（ＩＮ）−５では、メタデータオブジェクト操作部１２４が、メタデータオブジェクトを生成する。Ｓ１４２−２（ＩＮ）−５では、ラスター化（描画スタイル）オブジェクト２３０が、描画スタイルオブジェクトを生成する。
【０７４６】
図９０Ｃは、ＳＭＦによる操作（スライス）オブジェクトを受信して実行する処理のフローチャートである。Ｓ１４４−１では、ＳＭＦで書かれたスライスオブジェクト２７４のコレクションが受信される。Ｓ１４４−２では、スライスオブジェクト２７４が復元される。Ｓ１４４−３では、Ｓ１４４−２で復元されたスライスオブジェクト２７４により影響されるストロークオブジェクトの位置を特定するため、既存のストロークオブジェクトが検討される。Ｓ１４４−４では、影響されるストロークオブジェクトが検討される。Ｓ１４４−５では、影響されるすべてのストロークオブジェクト２１０が、対応するスライスオブジェクトを用いて修正（スライス）される。対応するスライスオブジェクト内であると特定されるポイント範囲内のすべてのポイントオブジェクトが削除（消去）される。Ｓ１４４−６では、望むならば、１つ又は２つの新たなストロークオブジェクトが生成される。例えば、もし削除されたポイントオブジェクトがスライスされたストロークオブジェクト２１０の中間にあるのであれば、元のストロークオブジェクト２１０の始まりの部分が新たなストロークオブジェクト２１０を構成し、元のストロークオブジェクト２１０の終わりの部分がもう１つの新たなストロークオブジェクト２１０を構成し得る。Ｓ１４４−８では、影響されるストロークのスタイルプロパティが修正されるべきか否かが判定される。もしスタイルプロパティが修正されるべきであるなら、Ｓ１４４−９が、新しいストロークオブジェクトに対して新しいスタイルプロパティの値を設定する。そうでなければ、Ｓ１４４−７が元のストロークオブジェクト２１０のスタイルプロパティの値を、新しく生成されたストロークオブジェクトに単にコピーする。同じ処理がメタデータにも適用される。もしメタデータが修正されるべきであるなら、Ｓ１４４−１１が、新しく生成されたストロークオブジェクトに対して新しいメタデータを設定する。そうでなければ、Ｓ１４４−１０が元のストロークオブジェクト２１０のメタデータを、新しく生成されたストロークオブジェクトに単にコピーする。Ｓ１４４−１２では、元のストロークオブジェクト２１０の開始パラメータ３０１及び終了パラメータ３０３の値が、新しく生成されたストロークオブジェクトにコピーされる。上述した処理は、影響されるすべてのストロークについて繰り返される。Ｓ１４４−１３では、現在のスクリーンに再描画する必要があるかないかを決定するための検査が実行される。もし「ｙｅｓ」であれば、Ｓ１４４−１４において、修正された領域内の、１以上のスライスオブジェクト２７４によってスライスされたストロークオブジェクトが、スクリーン上に描画（レンダリング）される。
【０７４７】
第１乃至第４の実施の形態の効果
図９１は、上述した側面１に関して、図７５のインクデータ２００の処理装置（１０１）を使用することの効果を説明する図である。本発明の様々な実施の形態による操作オブジェクトは、伝送フォーマットを用いる操作オペレーションの内容の伝送を許容し、それによって、複数の場所に位置しているストロークオブジェクトの状態を容易に同期させる。例えば、図９１の左手側の１つの装置と、右手側の２つの装置（それぞれ、図１及び図７３の装置１０−１−１，１０−１−２，１０−１−３に対応する）とがリアルタイムコラボレーションアプリケーションを実行していると仮定する。さらに、これらの装置が、まだスライスされていない処理対象のストロークオブジェクト２１０を共有していると仮定する。すると、本発明の実施の形態によれば、以下の動作が可能になる。
１．まず、左手側の装置が、規定のストローク幅ＷＩＤＴＨを有するストロークオブジェクト２１０に対してスライス操作オペレーションを実行する。
２．次に、インクデータ２００の処理装置１００（操作オブジェクト操作部１２８）が、スライス操作オペレーションに基づいて操作オブジェクトを生成する。
３．次に、インクデータ処理装置１０１が、そのローカルのストロークオブジェクト２１０に対してスライス操作オペレーションを実行することにより、ローカルのストロークオブジェクト２１０を修正する（図７５の矢印「ローカル」参照）。この処理は、上記ステップ２に先行して実行されてもよいし、上記ステップ２と並行して実行されてもよい。
４．次に、インクデータ処理装置１０１（インクデータ通信部１４４）が操作オブジェクトをＳＭＦフォーマットに整形し、ＳＭＦデータをネットワークに送信する（図７５の矢印「リモート」参照）。
５．装置１０−１−２及び１０−３は、ＳＭＦデータである操作オブジェクトを受信して操作オブジェクトに関連付けられたストロークＩＤを取り出し、取り出されたストロークＩＤによって識別される複数のストロークオブジェクトのそれぞれに対し、操作オペレーション（スライスオペレーション）を実行する。結果として、取り出されたストロークＩＤによって識別されるストロークオブジェクトの（スライスされた）状態が、左手側の装置＃１と、右手側の装置１０−１−２及び１０−３との間で同期される。
【０７４８】
したがって、本発明の実施の形態によるインクデータ処理方法は、ローカルで、及び、２つの遠隔に位置する装置間のネットワークを介してリモートで、ストロークデータを動的に操作する能力を有する。
【０７４９】
図９２は、上述した側面２に関して、図７５のインクデータ処理装置（１０１）を使用することの効果を説明する図である。
【０７５０】
図９２の左手側は、入力側における装置依存型の生データを示しており、図９２の右手側は、最終製品としての出力ファイル内に含まれることになるデータを示している。左手側は、ストロークを生成するために使用され得る入力データの以下に示す４つのタイプを示している。
１．タイプ１の装置、すなわち、容量タイプのタッチセンサを組み込む装置のような比較的単純な装置によって取得される一連の点座標。
２．筆圧情報を取得する能力を有するタイプ２の装置によって取得される一連の点座標と一連の筆圧情報。
３．例えばコンピュータグラフィックを生成するために使用されるプロフェッショナル級のハードウェア及びアプリケーションの結合によって取得される、ペンの回転角、筆圧、Ｘ方向のペンの傾き角、Ｙ方向のペンの傾き角など様々な詳細を含むタイプＮのデータ。
４．方位、高さ、ペンの向きの情報を表現できる、ＩｎｋＭＬのような標準化されたデータ。
【０７５１】
側面２を参照して上述したように、一般に、手書き入力データに基づいて再生される必要のある情報は、ペン（スタイラス）が何度の角度で保持されたか、どの程度の筆圧が印加されたか、などのような、「どのように」手書きデータが入力されたかということではない。むしろ、再生される必要のある情報は、そのようなペン操作の「結果」であり、それはペン操作によって生成された１以上のストロークを含む。したがって、できるだけ抽象化され一般化された手書き入力データを作るストロークモデルを使用すること、すなわち、可能な限り、図９２の右手側で手書きデータを処理することが望まれる。そのようなストロークモデルは、様々な特殊な（抽象的でない）態様で「どのように」を記録する色々な装置の間に存在する違いを吸収することができる。
【０７５２】
図９２の最も右手側には、インクデータ処理の最終製品としての画像ファイルに含まれるデータ構造又はファイルフォーマットを示している。図９２の中間部は、本発明の実施の形態によるインクデータ２００の処理の結果として得られる、テキスト化、署名認証、注釈、及びリアルタイムコラボレーションアプリケーションのような様々なアプリケーションでの使用に適した中間ベクトルデータを示している。中間ベクトルデータは、装置に依存しない態様で、すなわち、ペン入力に由来しない態様でベクトルグラフィックスを定義する既存のＳＶＧデータ（非特許文献３）を含む。そのようなものとして、ＳＶＧは、ストローク幅、ストローク色、ストロークの透明度のようなペン由来のデータを変化又は調整することを容易には許容せず、結果として、ストロークデータをマークアップする（特徴付ける）には特に適してはいない。これに対し、本発明の実施の形態による中間ベクトルデータに基づくストローク言語（ＳＬ）は、生データから導出されるストロークオブジェクトをマークアップし、特徴付け、そのようなストロークオブジェクト上で動作する、メタデータオブジェクト、レンダリングオブジェクト、操作オブジェクトのような様々なオブジェクトを提供している。
【０７５３】
図９３は、上述した側面３に関して、図７５のインクデータ処理装置（１０１）を使用することの効果を説明する図である。特定のフォーマットに紐付けられてはいないが様々なフォーマットで使用できる共通のストローク言語（又は、言語の意味及び文法を定義する共通の情報モデル）の供給は、インクデータエコシステムのライフサイクルを延長する。図９３では、１００−１，１００−２，・・・，１００−Ｎが、本発明の実施の形態によるインクデータ処理方法が埋め込まれた色々なアプリケーションを表している。生の「入力データ」がアプリケーション１００−１に入力されるとき（図９３の「ステップ１」）、アプリケーション１００−１のインクデータ生成部１２０は、ストローク言語（又はストローク言語を定義する情報モデル）のオブジェクトに生データを抽象化する。オブジェクトはその後、記録フォーマット又は伝送フォーマット（「第１のフォーマット」又は図示した例におけるＳＶＧ）に変換され、出力される（図９３の「ステップ２」）。アプリケーション１００−２は、レンダリング又は操作用としてストローク言語で書かれたオブジェクトを取り出すため、ＳＶＧで書かれたデータを受信して解釈する。アプリケーション１００−２は、他の記録フォーマット又は伝送フォーマット（「第２のフォーマット」又は図９３の「ステップ３−２」におけるＳＦＦ）にオブジェクトを整形することができる。ＳＦＦで書かれたデータはその後出力され、レンダリング又は操作用としてストローク言語で書かれたオブジェクトを取り出すためにＳＦＦで書かれたデータを解釈するアプリケーション１００−Ｎによって受信される。アプリケーション１００−Ｎは、さらに他の記録フォーマット又は伝送フォーマット（「第３のフォーマット」又はビットマップ）にオブジェクトを整形し、出力することができる。したがって、例えば非特許文献５における、単一のフォーマットを使用してインクデータ構造体を処理するＪＯＴと比較すると、本発明の実施の形態は、様々なフォーマットでインクデータを処理する能力を有しており、したがって、インクデータ２００のライフサイクルを延長している。図９３の図示した例では、インクデータ２００は、アプリケーション１００−１によって、アプリケーション１００−２によって、及び、最後のアプリケーション１００−Ｎを含むさらなるアプリケーションによって、使用可能とされている。
【０７５４】
上述した要素、装置、ステップ、及び処理のそれぞれを、実装及び応用のそれぞれに応じて、他の要素、装置、ステップ、及び処理と組み合わせることができ、又は、サブ要素、サブ装置、サブステップ、サブ処理にさらに分割できることが、当業者によって理解される。さらに、上記ステップ及び処理は、実装及び応用のそれぞれに応じて、単一のプロセッサで実行されることができ、又は、複数のプロセッサ内で分散的に実行されることができる。
【図１】
2020057442.tif 000007
【図２】
2020057442.tif 000008
【図３Ａ】
2020057442.tif 000009
【図３Ｂ】
2020057442.tif 000010
【図３Ｃ】
2020057442.tif 000011
【図４Ａ】
2020057442.tif 000012
【図４Ｂ】
2020057442.tif 000013
【図５】
2020057442.tif 000014
【図６】
2020057442.tif 000015
【図７】
2020057442.tif 000016
【図８】
2020057442.tif 000017
【図９】
2020057442.tif 000018
【図１０】
2020057442.tif 000019
【図１１】
2020057442.tif 000020
【図１２】
2020057442.tif 000021
【図１３Ａ】
2020057442.tif 000022
【図１３Ｂ】
2020057442.tif 000023
【図１４】
2020057442.tif 000024
【図１５Ａ】
2020057442.tif 000025
【図１５Ｂ】
2020057442.tif 000026
【図１６Ａ】
2020057442.tif 000027
【図１６Ｂ】
2020057442.tif 000028
【図１６Ｃ】
2020057442.tif 000029
【図１７Ａ】
2020057442.tif 000030
【図１７Ｂ】
2020057442.tif 000031
【図１７Ｃ】
2020057442.tif 000032
【図１８Ａ】
2020057442.tif 000033
【図１８Ｂ】
2020057442.tif 000034
【図１９】
2020057442.tif 000035
【図２０】
2020057442.tif 000036
【図２１Ａ】
2020057442.tif 000037
【図２１Ｂ】
2020057442.tif 000038
【図２１Ｃ】
2020057442.tif 000039
【図２１Ｄ】
2020057442.tif 000040
【図２２】
2020057442.tif 000041
【図２３】
2020057442.tif 000042
【図２４Ａ】
2020057442.tif 000043
【図２４Ｂ】
2020057442.tif 000044
【図２５】
2020057442.tif 000045
【図２６】
2020057442.tif 000046
【図２７】
2020057442.tif 000047
【図２８】
2020057442.tif 000048
【図２９】
2020057442.tif 000049
【図３０Ａ】
2020057442.tif 000050
【図３０Ｂ】
2020057442.tif 000051
【図３０Ｃ】
2020057442.tif 000052
【図３１】
2020057442.tif 000053
【図３２】
2020057442.tif 000054
【図３３】
2020057442.tif 000055
【図３４】
2020057442.tif 000056
【図３５Ａ】
2020057442.tif 000057
【図３５Ｂ】
2020057442.tif 000058
【図３６Ａ】
2020057442.tif 000059
【図３６Ｂ】
2020057442.tif 000060
【図３６Ｃ】
2020057442.tif 000061
【図３６Ｄ】
2020057442.tif 000062
【図３６Ｅ】
2020057442.tif 000063
【図３６Ｆ】
2020057442.tif 000064
【図３６Ｇ】
2020057442.tif 000065
【図３７】
2020057442.tif 000066
【図３８】
2020057442.tif 000067
【図３９Ａ】
2020057442.tif 000068
【図３９Ｂ】
2020057442.tif 000069
【図４０】
2020057442.tif 000070
【図４１】
2020057442.tif 000071
【図４２】
2020057442.tif 000072
【図４３】
2020057442.tif 000073
【図４４】
2020057442.tif 000074
【図４５】
2020057442.tif 000075
【図４６Ａ】
2020057442.tif 000076
【図４６Ｂ】
2020057442.tif 000077
【図４６Ｃ】
2020057442.tif 000078
【図４７Ａ】
2020057442.tif 000079
【図４７Ｂ】
2020057442.tif 000080
【図４８Ａ】
2020057442.tif 000081
【図４８Ｂ】
2020057442.tif 000082
【図４８Ｃ】
2020057442.tif 000083
【図４８Ｄ】
2020057442.tif 000084
【図４８Ｅ】
2020057442.tif 000085
【図４８Ｆ】
2020057442.tif 000086
【図４８Ｇ】
2020057442.tif 000087
【図４８Ｈ】
2020057442.tif 000088
【図４８Ｉ】
2020057442.tif 000089
【図４８Ｊ】
2020057442.tif 000090
【図４８Ｋ】
2020057442.tif 000091
【図４８Ｌ】
2020057442.tif 000092
【図４９】
2020057442.tif 000093
【図５０Ａ】
2020057442.tif 000094
【図５０Ｂ】
2020057442.tif 000095
【図５１】
2020057442.tif 000096
【図５２】
2020057442.tif 000097
【図５３】
2020057442.tif 000098
【図５４】
2020057442.tif 000099
【図５５】
2020057442.tif 000100
【図５６】
2020057442.tif 000101
【図５７】
2020057442.tif 000102
【図５８】
2020057442.tif 000103
【図５９】
2020057442.tif 000104
【図６０】
2020057442.tif 000105
【図６１】
2020057442.tif 000106
【図６２】
2020057442.tif 000107
【図６３】
2020057442.tif 000108
【図６４】
2020057442.tif 000109
【図６５】
2020057442.tif 000110
【図６６】
2020057442.tif 000111
【図６７】
2020057442.tif 000112
【図６８】
2020057442.tif 000113
【図６９】
2020057442.tif 000114
【図７０】
2020057442.tif 000115
【図７１】
2020057442.tif 000116
【図７２】
2020057442.tif 000117
【図７３】
2020057442.tif 000118
【図７４】
2020057442.tif 000119
【図７５】
2020057442.tif 000120
【図７６】
2020057442.tif 000121
【図７７Ａ】
2020057442.tif 000122
【図７７Ｂ】
2020057442.tif 000123
【図７８】
2020057442.tif 000124
【図７９】
2020057442.tif 000125
【図８０】
2020057442.tif 000126
【図８１】
2020057442.tif 000127
【図８２】
2020057442.tif 000128
【図８３Ａ】
2020057442.tif 000129
【図８３Ｂ】
2020057442.tif 000130
【図８４】
2020057442.tif 000131
【図８５】
2020057442.tif 000132
【図８６】
2020057442.tif 000133
【図８７】
2020057442.tif 000134
【図８８】
2020057442.tif 000135
【図８９】
2020057442.tif 000136
【図９０Ａ】
2020057442.tif 000137
【図９０Ｂ】
2020057442.tif 000138
【図９０Ｃ】
2020057442.tif 000139
【図９１】
2020057442.tif 000140
【図９２】
2020057442.tif 000141
【図９３】
2020057442.tif 000142