説明

ベクトルグラフィックスのためのマークアップ言語およびオブジェクトモデル

要素オブジェクトモデル、およびプログラムコード開発者がグラフィックスを生成するためにシーングラフデータ構造と一貫してインターフェースできるように、その要素オブジェクトモデルを使用するためのベクトルグラフィックスマークアップ言語。ベクトルグラフィックスの要素オブジェクトモデルは、一般に、シーングラフのシーングラフオブジェクトモデルと相関する、形状要素ならびに画像およびビデオ要素を含む他の要素に対応する。マークアップは、シーングラフデータ構造のオブジェクトに変換される要素ツリー内の要素を含むデータに解析することができる。他のマークアップは、シーングラフオブジェクトを作成するデータおよび呼出しに直接変換することができる。マークアップ言語は、マークアップ内の他の場所での再使用を可能にする、命名できる単純な文字列フォーマットまたは複雑なプロパティ構文を含む要素を記述する独特の方法を提供する。


【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般にコンピュータシステムに関し、より詳細には、コンピュータシステムで表示するためのグラフィックおよび他のビデオ情報の処理に関する。
【背景技術】
【0002】
コンピュータシステム上のグラフィックスにアクセスする従来の即時モードモデルは限界に達してきている。その原因の一部は、メモリおよびバスのスピードが主プロセッサおよび/またはグラフィックスプロセッサの進歩に遅れをとっていることである。一般に、フレームを作成するための現在の(たとえばWM_PAINT)モデルでは、複雑なグラフィックス効果が望まれる場合に、ハードウェアのリフレッシュ速度に遅れないために大量のデータを処理する必要がある。結果として、従来のグラフィックスモデルで複雑なグラフィックス効果が試される場合、結果的に次のフレームで遅れずに視覚効果が知覚されるように変更を完了する代わりに、異なるフレームにわたって変更が追加される場合があり、視覚的にかつ顕著に望ましくない結果となる。
【0003】
グラフィックス出力を制御するための新しいモデルが記載されており(たとえば、特許文献1、2、3、4、5、および6を参照)、本発明の譲受人に譲渡され、参照により本明細書に組み込まれている。この新しいモデルは、グラフィックス処理技術においていくつかの重要な改良点を提供するものである。たとえば、複数レベルのグラフィックス処理のシステムおよび方法を対象としているものもあり(たとえば、特許文献1参照)、(たとえば、オペレーティングシステムの)より高いレベルのコンポーネントが、簡略化されたデータ構造および/またはグラフィックスコマンドを低いレベルのコンポーネントに渡すために、シーングラフの構築、アニメーションパラメータの更新、およびシーングラフのデータ構造のトラバースという、相対的に遅い動作速度で集中的に計算が行われる態様を実行する。高いレベルの処理がデータを大幅に簡略化することから、低いレベルのコンポーネントは、グラフィックスサブシステムのフレームのリフレッシュ速度に対応する速度など、(高いレベルのコンポーネントに比べて)より高速に動作し、データをグラフィックスサブシステム用の定常出力データに処理することが可能である。アニメーションが使用される場合、低いレベルの処理は、変更に伴ってシーン全体を書き直すことなく、必要に応じてレンダリング時にわずかに変更されたシーンをフレームごとに提供する瞬間値を取得するためにパラメータ間隔を補間し、平滑なアニメーションを提供することができる。
【0004】
可変(アニメーション化された)値を提供するパラメータ化されたシーングラフと、グラフィックスを描画しようとするプログラムコード(たとえば、アプリケーションプログラムまたはオペレーティングシステムコンポーネント)が、他のアスペクトはそのままでシーングラフ記述の一定のアスペクトを選択的に変更できるようにパラメータ化されたグラフコンテナとが記載されている(たとえば、特許文献2を参照)。プログラムコードは、異なるパラメータを使用する可能性のある、シーングラフのうちのすでに構築された部分を再使用することもできる。パラメータ化を介して表示されたアイテムの外観を容易に変更する機能、および/またはシーングラフの既存の部分の再使用は、グラフィックス処理効率全体を大きく改善することが理解されよう。
【0005】
シーングラフ内のオブジェクトおよびデータを介して映像情報を格納するための、キャッシュデータ構造および関連機構が、全体として記載されている(たとえば、特許文献3を参照)。データ構造は一般に、その中の映像情報がどのように読み込み(populate)および使用されるかを知的に制御する機構に関連付けられる。たとえば、アプリケーションプログラムが特に要求しない限り、データ構造内に格納されたほとんどの情報はそれに対する外部参照を持たないため、この情報を最適化するかまたはその他の方法で処理することができる。これによって効率性とリソースの保存性が与えられ、たとえばキャッシュデータ構造内のデータを、よりコンパクトであり、かつ/または、ビットマップまたは他の後処理結果などの後続の反復的な処理が少ない異なるフォーマットに処理可能であることが理解されよう。
【0006】
上記の改良点はグラフィックス処理技術に大きな恩恵を与えるものであるが、依然として、この改良されたグラフィックスモデルおよびその他の関連する改良点を簡単な方法で効果的に使用するためのプログラムが求められている。
【0007】
【特許文献1】米国特許出願第10/184795号明細書
【特許文献2】米国特許出願第10/184796号明細書
【特許文献3】米国特許出願第10/185775号明細書
【特許文献4】米国特許出願第10/401717号明細書
【特許文献5】米国特許出願第10/402322号明細書
【特許文献6】米国特許出願第10/402268号明細書
【発明の開示】
【発明が解決しようとする課題】
【0008】
改良されたグラフィックスモデルによって提供される多くの特徴およびグラフィックス処理機能を利用し、それによって複雑なグラフィックスおよび視聴覚データを効率的な方法で出力するための、包括的かつ簡単なプログラム用のモデルが必要とされている。
【課題を解決するための手段】
【0009】
簡潔に言えば、本発明は、要素オブジェクトモデル(element object model)と、プログラムコード開発者がシーングラフデータ構造と常時インターフェースしてグラフィックスを作成できるように、その要素オブジェクトモデルにアクセスするためのベクトルグラフィックスマークアップ言語とを提供するものである。ベクトルグラフィックスマークアップ言語は、要素オブジェクトモデルを介してベクトルグラフィックスを表現するための交換フォーマットを備える。マークアップ言語は、解釈される場合、シーングラフデータ構造のオブジェクトに変換される要素ツリー内の要素を含むデータに解析される。要素ツリーレベルでは、多くをプログラム可能にする、継承の特徴およびイベンティング(eventing)を含むプロパティシステムおよびレイアウトシステムが提供され、起こり得る複雑なシーン(scene)をシーン設計者が簡単に設計できるようにしている。一般にベクトルグラフィックス要素は、シーングラフオブジェクトモデルのシーングラフオブジェクトと相互に関連する画像およびビデオ要素を含む、形状要素と他の要素とに対応する。ベクトルグラフィックス要素のプロパティおよび他のリソースは、シーングラフオブジェクトモデルの同様のプロパティおよびリソースとも相互に関連している。
【0010】
ベクトルグラフィックスシステムは、要素レベルまでプログラミングすることが可能であり、それぞれの描画形状はページ/スクリーン内の残りのプログラム可能な要素と同レベルの要素として表されるため、レイアウトシステム、イベント、およびプロパティと対話することができる。ベクトルグラフィックスシステムは、リソースレベルまでプログラミングするための機構も提供するものである。これによってシーン設計者は、要素ツリーおよびレイアウトシステムを本質的にショートカットし、ならびにシーングラフデータ構造と対話する映像APIレイヤまで直接プログラミングすることができる。これにより、適切なオブジェクトを出力するためのより効率の良い軽量の方法が提供されるが、要素レベルの一部はプログラムできなくなる。一実施態様では、「映像ブラシ(visual brush)」型の塗りつぶし(fill)がプログラミングされると、パーサ(parser)はリソースレベルデータを備えたAPIレイヤを直接呼び出して、(同じく要素オブジェクトモデルとシーングラフオブジェクトモデルとの間の相関である)対応する映像ペイントオブジェクトを作成することができる。この2層システムでは、要素レベルベクトルグラフィックスは後でオブジェクトに変換する必要のある作成済み要素に解析され、リソースレベルベクトルグラフィックスは効率的な方法で解析されて直接保存される。同時に、リソースレベルデータまたはそれによって作成されたオブジェクトは、要素ごとおよび要素ツリーの部分ごとに参照することができる。このために、映像ペイント要素を含む要素に命名することができる。したがってシーン設計者は、必要に応じて効率性とプログラム可能性との釣り合いをとることができる。
【0011】
要素クラス階層には、形状(Shape)クラス、画像(Image)クラス、ビデオ(Video)クラス、およびキャンバス(Canvas)クラスが含まれる。形状クラスの要素には、矩形、線分群、多角形、軌跡、線分、および楕円が含まれる。各要素は、塗りつぶし(プロパティ)データ、ストロークデータ、クリッピングデータ、変形データ、フィルタ効果データ、およびマスクデータを含むか、またはこれらに関連付けることができる。形状は、形状を描画するのに必要なペンおよびブラシの構築に使用される継承およびカスケードされた提示プロパティで描画された、(シーングラフオブジェクトモデルの)ジオメトリに対応する。画像クラスは形状クラスよりも特異的であり、より多くのラスタグラフィカルデータを含むことが可能であって、ビデオクラスは表示された要素の中でビデオ(または同様のマルチメディア)を再生させることができる。キャンバスクラスは、形状を軽量に保つために形状用のコンテナとして動作することが可能である。
【0012】
一実施態様では、一般に要素レベルの要素を要素ツリー/プロパティシステムに追加しそれらの要素にデータを付加するパーサ/トランスレータによって、マークアップコードが解釈される。その後レイアウトシステムは、付加されたプレゼンタと共に要素ツリーを取得し、(ビルダを介して)データをオブジェクトに変換して、シーングラフとインターフェースする映像APIレイヤを呼び出し、シーングラフオブジェクトを作成する。
【0013】
マークアップ言語は、単純な文字列フォーマットまたは複雑なオブジェクト表記法(複雑なプロパティ構文)を含む、要素を記述するための明確な方法を提供する。単純な文字列フォーマットの場合、パーサ/トランスレータおよび/またはレイアウトシステムは、文字列を適切な映像APIオブジェクトに変換するために、型変換器を使用する。塗りつぶし属性が複雑すぎて単一の文字列に組み込まれない場合、マークアップでは線分の内側である可能性のある複雑なプロパティ構文がプロパティセットを記述するために使用される。同じレンダリングモデルが要素レベルとAPIモデルで共用されるため、オブジェクトの多くが同じであり、解析/変換はかなり効率的なものとなり、他の利点を提供している。リソースインスタンスはどこか他の場所(たとえばマークアップまたはファイル)にも位置し、名前によって参照することができる。この方法では、シーン設計者は、複雑なプロパティ構文によって記述される要素を含む要素ツリー内の要素をシーン全体にわたって再使用することができる。
【0014】
他の利得および利点は、図面に関して以下の詳細な説明を読めば明らかとなろう。
【発明を実施するための最良の形態】
【0015】
(例示的なオペレーティング環境)
図1は、本発明が実施可能である、適したコンピューティングシステム環境100の一例を示す図である。コンピューティングシステム環境100は、好適なコンピューティング環境の一例に過ぎず、本発明の使用または機能の範囲に関していかなる制限をも示唆することを意図するものではない。さらにコンピューティング環境100は、例示的オペレーティング環境100内に示されたいずれのコンポーネントまたはコンポーネントの組合せに関しても、いかなる依存性または要件を有するものとも解釈されるべきではない。
【0016】
本発明は、多数の他の汎用または特定用途向けのコンピューティングシステム環境または構成を使用して動作可能である。本発明で使用するのに適する可能性のある、よく知られたコンピューティングシステム、環境、および/または構成の例には、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップ装置、タブレット装置、マルチプロセッサシステム、マイクロプロセッサベースシステム、セットトップボックス、プログラム可能な市販の電子製品、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、上記システムまたは装置のいずれかを含む分散コンピューティング環境、およびその他が含まれるが、これらに限定されるものではない。
【0017】
本発明は、コンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令との全体的な関連において説明することができる。一般に、プログラムモジュールにはルーチン、プログラム、オブジェクト、コンポーネント、データ構造、などが含まれ、特定のタスクを実行するかまたは特定の抽象データ型を実施する。本発明は、タスクが通信ネットワークを介してリンクされたリモート処理装置によって実行される、分散コンピューティング環境でも実施可能である。分散コンピューティング環境では、プログラムモジュールは、メモリ記憶装置を含むローカルおよびリモート双方のコンピュータ記憶媒体に配置することができる。
【0018】
図1を参照すると、本発明を実施するための例示的システムには、コンピュータ110の形の汎用コンピューティング装置が含まれる。コンピュータ110のコンポーネントは、処理装置120と、システムメモリ130と、システムメモリを含む様々なシステムコンポーネントを処理装置120に結合するシステムバス121とを含むことができるが、これらに限定されるものではない。システムバス121は、メモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスを含む、いくつかの種類のバス構造のうちのいずれであってもよい。例を挙げると、こうしたアーキテクチャには、ISA(Industry Standard Architecture)バス、MCA(Micro Channel Architecture)バス、拡張ISA(EISA)バス、VESA(Video Electronics Standards Association)ローカルバス、AGP(Accelerated Graphics Port)バス、およびメザニンバスとも呼ばれるPCI(Peripheral Component Interconnect)バスが含まれるが、これらに限定されるものではない。
【0019】
コンピュータ110は、通常、様々なコンピュータ読取り可能な媒体を含む。コンピュータ読取り可能な媒体は、コンピュータ110によってアクセス可能な揮発性および不揮発性媒体、ならびに取外し可能および固定の両方の媒体を含む、任意の使用可能な媒体とすることが可能である。例を挙げると、コンピュータ読取り可能な媒体はコンピュータ記憶媒体および通信媒体を含むことができるが、これらに限定されるものではない。コンピュータ記憶媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュール、または他のデータなどの、情報を記憶するための任意の方法または技術で実施された揮発性および不揮発性、取外し可能および固定の、両方の媒体を含む。コンピュータ記憶媒体には、RAM、ROM、EEPROM、フラッシュメモリまたは他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)または他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、あるいは所望の情報を記憶するために使用可能でありコンピュータ110がアクセス可能な任意の他の媒体が含まれるが、これらに限定されるものではない。通信媒体は、通常、コンピュータ読取り可能な命令、データ構造、プログラムモジュール、または搬送波または他の移送機構などの被変調データ信号中の他のデータを具体化し、任意の情報送達媒体を含むものである。「被変調データ信号」という用語は、信号内の情報を符号化するような方法で、その特性のうちの1つまたは複数が設定または変更された信号を意味する。例を挙げると、通信媒体には、有線ネットワークまたはダイレクトワイヤード接続などの有線媒体と、音波、RF、赤外線、および他の無線媒体などの無線媒体とが含まれるが、これらに限定されるものではない。上記のうちの任意の組合せも、コンピュータ読取り可能な媒体の範囲に含まれるものとする。
【0020】
システムメモリ130は、読取り専用メモリ(ROM)131およびランダムアクセスメモリ(RAM)132などの揮発性および/または不揮発性メモリの形のコンピュータ記憶媒体を含む。コンピュータ110内の要素間での起動時などの情報転送に役立つ基本ルーチンを含む基本入力/出力システム133(BIOS)は、通常、ROM131に格納される。RAM132は、通常、処理装置120が即時にアクセス可能であり、かつ/または現在動作中である、データおよび/またはプログラムを含む。例を挙げると、図1にはオペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136、およびプログラムデータ137が示されているが、これらに限定されるものではない。
【0021】
コンピュータ110は、他の取外し可能/固定の、揮発性/不揮発性のコンピュータ記憶媒体を含むこともできる。単なる例として、図1には、固定の不揮発性磁気媒体からの読取りまたはこれへの書込みを行うハードディスクドライブ141と、取外し可能な不揮発性磁気ディスク152からの読取りまたはこれへの書込みを行う磁気ディスクドライブ151と、CD−ROMまたは他の光媒体などの取外し可能な不揮発性光ディスク156からの読取りまたはこれへの書込みを行う光ディスクドライブ155が示されている。例示的なオペレーティング環境で使用可能な他の取外し可能/固定の、揮発性/不揮発性のコンピュータ記憶媒体には、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートRAM、ソリッドステートROM、などが含まれるが、これらに限定されるものではない。ハードディスクドライブ141は、通常、インターフェース140などの固定のメモリインターフェースを介してシステムバス121に接続され、磁気ディスクドライブ151および光ディスクドライブ155は、通常、インターフェース150などの取外し可能メモリインターフェースによってシステムバス121に接続される。
【0022】
上記で考察し、図1に示すドライブおよびそれらの関連するコンピュータ記憶媒体は、コンピュータ読取り可能な命令、データ構造、プログラムモジュール、およびコンピュータ110に関する他のデータのストレージを提供するものである。たとえば図1では、ハードディスクドライブ141は、オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146、およびプログラムデータ147を格納しているものとして示されている。これらのコンポーネントは、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136、およびプログラムデータ137と同じであるかまたは異なるかの、いずれであってもよいことに留意されたい。本明細書では、オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146、およびプログラムデータ147には、少なくともこれらが異なるコピーであることを示すために異なる番号が与えられている。ユーザは、タブレット(電子ディジタイザ)164、マイクロフォン163、キーボード162、および、一般にマウス、トラックボール、またはタッチパッドと呼ばれるポインティングデバイス161などの入力装置を介して、コマンドおよび情報をコンピュータ110に入力することができる。他の入力装置(図示せず)には、ジョイスティック、ゲームパッド、衛星放送用パラボラアンテナ、スキャナ、またはその他を含むことができる。これらおよび他の入力装置は、システムバスに結合されたユーザ入力インターフェース160を介して処理装置120に接続されることが多いが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス(USB)などの他のインターフェースおよびバス構造によって接続することも可能である。モニタ191または他の種類のディスプレイ装置も、ビデオインターフェース190などのインターフェースを介してシステムバス121に接続される。モニタ191は、タッチスクリーンインターフェースなどのインターフェースを介してコンピュータシステム110に手書き入力するなどの、デジタル化された入力を行うことのできる、タッチスクリーンパネルまたはその他と一体型にすることも可能である。モニタおよび/またはタッチスクリーンパネルは、タブレット型のパーソナルコンピュータの場合などのように、コンピューティングデバイス110が組み込まれたハウジングに物理的に結合可能であり、ここでタッチスクリーンパネルは本質的にタブレット164として働くことに留意されたい。さらに、コンピューティングデバイス110などのコンピュータは、出力周辺インターフェース194またはその他を介して接続可能なスピーカ195およびプリンタ196などの他の周辺出力装置も含むことができる。
【0023】
コンピュータ110は、リモートコンピュータ180などの1つまたは複数のリモートコンピュータへの論理接続を使用して、ネットワーク化環境で動作することができる。リモートコンピュータ180は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピア装置、または他の一般的なネットワークノードとすることが可能であり、通常は、コンピュータ110に関して上記で述べた要素の多くまたはすべてを含むが、図1にはメモリ記憶装置181のみが記載されている。図1に示された論理接続には、ローカル絵リアネットワーク(LAN)171およびワイドエリアネットワーク(WAN)173が含まれるが、他のネットワークを含むこともできる。こうしたネットワーキング環境は、オフィス、企業規模コンピュータネットワーク、イントラネット、およびインターネットで普及している。
【0024】
LANネットワーキング環境で使用される場合、コンピュータ110はネットワークインターフェースまたはアダプタ170を介してLAN171に接続される。WANネットワーキング環境で使用される場合、コンピュータ110は通常、インターネットなどのWAN173を介した通信を確立するためのモデム172または他の手段を含む。モデム172は内蔵型または外付けが可能であり、ユーザ入力インターフェース160または他の適切な機構を介してシステムバス121に接続することができる。ネットワーク化環境では、コンピュータ110に関して示されたプログラムモジュールまたはその一部を、リモートのメモリ記憶デバイスに格納することができる。例を挙げると、図1にはリモートアプリケーションプログラム185がメモリ装置181に常駐しているように示されているが、これらに限定されるものではない。図示されたネットワーク接続は例示的なものであり、コンピュータ間に通信リンクを確立する他の手段が使用可能であることを理解されよう。
【0025】
(グラフィックスアーキテクチャ)
本発明の一態様は、一般に、アプリケーションまたはオペレーティングシステムコンポーネントなどのプログラムコードが、システムディスプレイ上にグラフィック出力をレンダリングするために、描画命令および他の情報(たとえば画像ビットマップ)をグラフィックスコンポーネントに送ることができるようにすることを対象としている。このため本発明は、プログラムがデータ構造、描画プリミティブ(コマンド)、および他のグラフィックス関連データと共にシーングラフを読み込めるようにするマークアップ言語ならびに形状要素および他の要素のセット、グループ化および複合化システム、ならびにオブジェクトモデルにおける一般的なプロパティシステムとの統合を提供するものである。処理が実行されると、シーングラフはスクリーン上にグラフィックスを表示することになる。
【0026】
図2は、本発明が実施可能な、全体的なレイヤードアーキテクチャ200を示す図である。図2に示されるように、プログラムコード202(たとえばアプリケーションプログラムまたはオペレーティングシステムコンポーネントなど)を開発して、画像化機構204を介すること、ベクトルグラフィック要素206を介すること、および/または映像アプリケーションプログラミングインターフェース(API)レイヤ212に直接配置された機能/メソッド呼出しを介することを含む、1つまたは複数の様々な方法で、グラフィックスデータを出力することができる。APIレイヤとの直接対話については、前述の「Visual and Scene Graph Interfaces」という名称の同時係属出願により詳細に記載されている。
【0027】
一般に、画像化機構204は、たとえばビットマップなどの画像のロード、編集、および保存のための機構をプログラムコード202に提供するものである。これらの画像はシステムの他の部分が使用することも可能であり、画像に直接描画するためにプリミティブ描画コードを使用する方法もある。
【0028】
本発明の一態様によれば、ベクトルグラフィックス要素206は、オブジェクトモデルの残りの部分に適合する、グラフィックスを描画するための他の方法を提供する(以下で説明)。ベクトルグラフィック要素206はマークアップ言語を介して作成することが可能であり、要素/プロパティシステム208およびレイアウトシステム210はこれを処理して、映像APIレイヤ212を適切に呼び出す。以下で説明するように、一般にベクトルグラフィック要素206は、シーングラフが描画される元となるオブジェクトモデルのオブジェクトに解析され、これを、要素/プロパティシステム208およびレイアウトシステム210を介した要素レベルを介してシーングラフに提供するか、またはリソースレベルでのより効率的な方法で提供することが可能であり、これについても以下で説明する。
【0029】
一実施態様では、グラフィックスレイヤアーキテクチャ200には高いレベルの合成およびアニメーションエンジン214が含まれ、これがキャッシュデータ構造216を含むかまたは他の方法でこれに関連付けられる。キャッシュデータ構造216は、以下で説明するように、定義済みオブジェクトモデルに従って管理される階層上に配置構成されたオブジェクトを備えたシーングラフを含む。一般に、映像APIレイヤ212は、オブジェクトの作成、オブジェクトにデータを提供するためのオブジェクトのオープンおよびクローズなどの機能を含む、キャッシュデータ構造216へのインターフェースをプログラムコード202(およびレイアウトシステム210)に提供する。つまり、高いレベルの合成およびアニメーションエンジン214は、開発者が、グラフィックス情報を表示するためにグラフィックスおよび媒体に関する意図を表現し、基礎となるプラットフォームがプログラムコードに対するハードウェアの使用を最適化できるようにプラットフォームに十分な情報を提供する際に使用できる統一媒体APIレイヤ212を公開する。たとえば基礎となるプラットフォームは、キャッシュ、リソースの折衝(negotiation)、および媒体の統合に関する責務を負うことになる。
【0030】
一実施態様では、高いレベルの合成およびアニメーションエンジン214は、命令ストリームおよび可能な他のデータ(たとえばビットマップを指すポインタ)を高速の低いレベルの合成およびアニメーションエンジン218に渡す。「高いレベル」および「低いレベル」という用語が本明細書で使用される場合、他のコンピューティングシナリオで使用される場合と同様に、一般に、高いレベルのコンポーネントに比べてソフトウェアコンポーネントが低いレベルであるほど、そのコンポーネントはハードウェアに近くなる。したがって、たとえば高いレベルの合成およびアニメーションエンジン214から送られたグラフィックス情報を、低いレベルの合成およびアニメーションエンジン218で受け取ることが可能であり、ハードウェア222を含むグラフィックスサブシステムにグラフィックスデータを送信する際にその情報が使用される。
【0031】
高いレベルの合成およびアニメーションエンジン214はプログラムコード202と共に、プログラムコード202によって提供されたグラフィックスシーンを表すためのシーングラフを構築する。たとえば、描画されるそれぞれのアイテムを描画命令と共にロードすることが可能であり、システムはこれをシーングラフデータ構造216にキャッシュすることができる。以下で説明するように、このデータ構造216および何を描画するかを指定するにはいくつかの様々な方法がある。さらに、高いレベルの合成およびアニメーションエンジン214は、タイミングおよびアニメーションシステム220と統合し、宣言(または他の)アニメーション制御(たとえばアニメーション間隔)およびタイミング制御を提供する。アニメーションシステムは、本質的にアニメーション値を、たとえば要素プロパティレベル208、映像APIレイヤ212の内部、および任意の他のリソース内を含む、システム内のどこにでも渡せるようにするものであることに留意されたい。タイミングシステムは、要素レベルおよび映像レベルで公開される。
【0032】
低いレベルの合成およびアニメーションエンジン218はシーンの合成、アニメーション、およびレンダリングを管理し、その後これがグラフィックスサブシステム222に提供される。低いレベルのエンジン218は、複数のアプリケーションのシーンについてレンダリングを合成し、レンダリングコンポーネントを使用して、スクリーンへのグラフィックスの実際のレンダリングを実施する。しかし、時には、一部のレンダリングはより高いレベルで発生することが必要かつ/または有利な場合があることに留意されたい。たとえば、複数アプリケーションからのサービス要求が低レイヤになるほど、アプリケーションごとのインスタンス生成がより高レイヤになり、これによって、画像化機構204を介して、時間のかかるまたはアプリケーション特有のレンダリングが高いレベルで実行され、ビットマップへの参照が低レイヤに渡される可能性がある。
【0033】
(シーングラフオブジェクトモデル)
以下で説明するように、レンダリングモデルは、高いレベル、コントロールベースのベクトルグラフィックス要素206と、シーングラフデータ構造216で使用される映像APIレイヤ212によって作成された低いレベルのオブジェクトによって共用される。これによって、本発明の高いレベルの要素と低いレベルのオブジェクトとの間にかなりの相関関係がもたらされる。次に、シーングラフオブジェクトモデルの一実施態様について説明する。
【0034】
本発明は、グラフィックスおよびレンダリングサービスへのいくつかのレイヤのアクセスを提供するものである。トップレイヤでは、ベクトルグラフィックスが、本発明のオブジェクトモデルでの使用が簡単であること、容易に再使用できること、および同様のシステムのユーザには一般によく知られていることを含む、XMLベースグラフィックスのマークアップでは一般的ないくつかの利点を提供する。オブジェクトは、それらの要素に関する属性または複雑なプロパティのどちらか一方として公開されたプロパティを備えるマークアップ要素として使用可能である。
【0035】
本発明は、Visualオブジェクトの使用によってグラフィックスコンテンツをレンダリングするものである。この基礎となるVisualレイヤはいくつかの方法で使用可能である。プログラマは、コード内で直接Visualにアクセス可能であり、オブジェクトモデルを使用してプログラミング可能であり、本発明の一態様に従って、XMLベースのマークアップが使用可能である。
【0036】
予め定義されたベクトル形状は、PolygonおよびPath要素と同様にベクトルグラフィックスで使用可能であり、Canvas、Dock Panel、およびFlow Panelなどのレイアウト要素内に格納される。Canvas要素は、親空間内に要素を絶対的に配置するための手段を提供する。Canvasおよびその子形状の場合、スクリーン座標用のデフォルトの測定単位は、装置に依存しないピクセルである。DockPanelおよびFlowPanelは、いくつかのサイズおよび位置合わせプロパティ、ならびに境界線をまたがるコントロールを提供する。
【0037】
ベクトルグラフィックスは、SVGのユーザにはよく知られたいくつかの定義済みベクトルグラフィックス形状を提供する。これらの要素はShapeクラスを継承し、Ellipse(楕円)、Line(線分)、Path(軌跡)、Polygon(多角形)、およびRectangle(矩形)を含む。これらの要素は、座標および頂点を指定するためのStrokeおよびStrokeThickness、Fill、ならびにデータ属性を含む、いくつかの一般的な属性をShapeから継承する。開発者は、変形を適用することによって形状を傾斜、回転、変換、および縮尺することもできる。
【0038】
Line要素は、便利な一例を提供するものである。以下の例では、始点および終点、ストロークの色および幅、ならびに線分端部での丸めキャッピング(rounded capping)用の座標を指定する。
【0039】
【表1】

【0040】
形状の中央をCenterXおよびCenterYプロパティで定義することによって、楕円が作成される。焦点を指定する代わりに、RadiusXおよびRadiusYプロパティを設定することによって、楕円の範囲が設定される。ベクトルグラフィックスで円を描画する場合、開発者はRadiusXとRadiusYの値が等しい楕円を指定することができる。
【0041】
【表2】

【0042】
Pathオブジェクトは、オープンまたはクローズどちらかの、曲線および複雑な形状を描画する手段を提供する。Pathは、Shapeクラスから継承したオブジェクト上で使用可能なプロパティを公開するが、曲線を記述するためにより複雑なパラメータを開発者に指定させることもできる。開発者は、Data内で特殊な構文を使用して軌跡データを指定すること、またはPathGeometryおよびPathGeometryオブジェクトを使用して個々の軌跡セグメントを指定することを含み、マークアップ内で様々な方法で軌跡を使用することができる。
【0043】
Data属性に提供される座標ペアおよび線分の内側パラメータは、線分セグメント、ベジェ曲線、および様々な他の軌跡の仕様を指定することができる。以下の例は、2つの下位の軌跡を定義するPath要素を示すものである。
【0044】
【表3】

【0045】
Data属性文字列は、Mで示された「moveto」コマンドで始まり、Canvasの座標系において軌跡の始点を確立する。Pathデータパラメータは大文字と小文字を区別する。大文字のMは新規の現在位置に関する絶対位置を示す。小文字のmは相対座標を示す。第1の下位の軌跡は、2つの制御位置(100,25)および(400,350)を使用して描画される、(100,200)で始まり(400,175)で終わる3次ベジェ曲線である。この下位の軌跡は、Data属性文字列内のCコマンドで示される。ここでも、大文字のCは絶対軌跡を示し、小文字のcは相対軌跡を示すことになる。
【0046】
第2の下位の軌跡は、絶対水平「lineto」コマンドHで始まり、先行する下位の軌跡の終点(400,175)から新しい終点(280,175)まで描画される線分を指定するものである。これは水平「lineto」コマンドであるため、指定される値はx軸座標である。
【0047】
より詳細な構文を使用してマークアップ内の軌跡データを指定することも可能であり、これは、開発者が複雑なプロパティを指定し、マークアップをより読みやすくするという利点を有する場合がある。この場合、PathGeometryオブジェクトを使用して、円弧および曲線などの複雑な形状を作成することができる。PathGeometryオブジェクトは1つまたは複数のPathFigureオブジェクトからなり、各PathFigureは異なる「図」または形状を表す。各PathFigureは、それ自体が1つまたは複数のPathSegmentオブジェクトからなり、それぞれが図または形状の接続された部分を表す。セグメント型には、LineSegment、BezierSegment、およびArcSegmentが含まれる。
【0048】
以下のコードは、PathGeometryおよびPathfigureを使用することによって軌跡データを指定するものであり、PathFigureにいくつかのセグメントが加えられて1つの形状を形成する。この場合、セグメントはPathFigureオブジェクトのSegmentsプロパティを使用して加えられる。このマークアップは、4つのベジェ曲線を作成する。PathFigureの第1のセグメントはStartSegmentであることに留意されたい。
【0049】
【表4−1】

【0050】
【表4−2】

【0051】
ベクトルグラフィックス形状は、それらのStrokeおよびFillの色を指定するために、Brushオブジェクトの様々な属性を公開する。以下の例では、CanvasおよびEllipse要素に関してこれらの属性を指定する。色プロパティに有効な入力は、キーワードまたは16進カラー値のどちらでも可能であることに留意されたい。
【0052】
【表5】

【0053】
別の方法として、開発者は、複雑なプロパティ構文およびSolidColorBrushクラスを使用して色を指定することができる。より複雑な構文を使用してプロパティを指定することは、プロパティシートを備えたグラフィックスマークアップを再使用する場合、または同じ色の形状プロパティをアニメーション化するために、必要となる。
【0054】
【表6】

【0055】
この不規則な線分群の形状は、StrokeおよびFillプロパティに予め定義されたカラー値を使用する。FillOpacityプロパティは、この場合はわずかに透明(不透明度0.8)にすることによって塗りつぶす色に影響を与えるため、任意の基礎となる色と調和する。
【0056】
【表7】

【0057】
形状に対してソリッドカラーの塗りつぶしおよび背景を指定する場合とまったく同様に、勾配(gradient)を指定することも可能である。以下の例は、RectangleのFill属性として水平勾配を、開始色としてBlueおよび終了色としてRedを設定するものである。
【0058】
【表8】

【0059】
開発者は、複雑なプロパティ表記法で勾配を指定することもできる。この表記法は、勾配のレンダリングにおいて非常に特異であり、追加のプロパティを公表する。たとえば勾配を使って形状の塗りつぶしをアニメーション化する場合、複雑な表記法が使用されることになる。以下の例では、RadialGradientBrushオブジェクトを使用してRectangleに勾配を設定する。RadialGradientBrushオブジェクトは、その半径およびそれに設定することのできる任意の変形およびアニメーションと同様に、勾配のプロパティへアクセスし、これらのプロパティはGradientBrushから継承される。GradientStopCollection集合は、開発者が複数の勾配停止を指定し、それらのオフセット(勾配の停止位置)を指定できるようにするものである。
【0060】
【表9】

【0061】
本発明は、ベクトルが描画する形状に標準の変形を行うものである。開発者は、静的グラフィックスとしてまたはアニメーションで、形状を傾斜させ、それらを回転させ、それらの縮尺を変更し、それらを変換(再配置)することができる。マークアップでTransformオブジェクトを使用する場合、それらをTransformDecoratorの子として指定する必要がある。
【0062】
ScaleTransform変形は、使用可能な変形の中で最も簡単であり、要素をサイズ変更するべき係数を指定するだけで使用される。以下の例は、親Canvasの座標系のy軸に沿ってPolygon要素のサイズを150パーセント変更するものである。
【0063】
【表10】

【0064】
同じTransformDecoratorオブジェクトをさらに変形するように指定する場合、TransformCollectionで囲む必要があることに留意されたい。また、各変形が解析および適用される順番によって、最終的な効果が異なる。たとえば、要素を異なるスクリーン座標に変換する前に回転させると、異なる効果を生じさせることができる。
【0065】
以下の例では、2つの線分群要素に回転および変換が適用される。
【0066】
【表11】

【0067】
これら2つの変形では、それぞれの形状の最終スクリーン位置が同じにならないことに留意されたい。回転変形を使用する場合、変形は特定要素の座標系全体を回転させる。起点を基準にした要素の位置によって、回転の効果が要素を「所定の位置で」回転させない場合がある。たとえば、x軸に沿って0から200単位に配置された要素の場合、30度回転させると、起点を中心に描かれた半径200の円に沿って要素を30度回す効果がある。そのため、Transformを処理する場合、要素を起点に変換し、回転、傾斜、または縮尺の変形を加え、その後要素を最終位置に再変換する方が簡単である。
【0068】
特定の構文を使用して、変形設定の他の変換とは無関係に、特定ポイントを中心とした回転を指定することができる。実際には、この構文は新しい起点への変換、回転、および以前の起点への再変換を指定する。ポイント(cx,cy)を中心とするr度の回転を指定する場合、以下の構文を使用する。
transform="rotate(rx [cx,cy])"
【0069】
開発者は傾斜変形を使用して、一方または両方の軸に沿って形状を歪ませることができる。SkewTransformクラスは、どちらかの軸に沿って比例オフセットを指定する、AngleXおよびAngleYプロパティを提供する。
【0070】
【表12−1】

【0071】
【表12−2】

【0072】
他の変形の場合と同様に、傾斜変形の適用効果は単に形状だけでなく座標系を傾斜させることである。したがって起点が設定されると必ず、座標系は起点から傾斜する。起点からある程度距離を有する形状で傾斜変形が行われると、「空空間」もその傾斜を反映し、要素の配置に影響を与える。同じ理由から、開発者が配置変形を適用する順番も、レンダリングされる傾斜または回転に影響を与える。
【0073】
形状またはコントロールに色が加えられる場合は、いつでもブラシが使用される。本発明は、開発者のアプリケーションが、単純なソリッドカラーから複雑なパターンおよび画像のセットまで何でも使用してユーザインターフェース(UI)要素をペイントできるようにする、マークアップを提供する。
【0074】
ブラシは、キャンバスに描かれた形状の内部および枠に色付けすることができる。ブラシを使用して、UIを形成する任意の要素の外観を変更することもできる。以下に記載するのはBrush型の属性の一部であり、いずれのブラシも使用することができる。
Control.Background
Control.BorderBrush
Column.Background
Text.Foreground
Shape.Fill
Shape.Stroke
【0075】
2つの主な型のブラシ、すなわちベクトルブラシおよびビットマップブラシがある。ベクトルベースのブラシには、SolidColorBrush、LinearGradientBrush、RadialGradientBrush、およびDrawingBrushが含まれる(ただしDrawingBrushはビットマップで塗りつぶされた形状を含むことができる)。ビットマップベースのブラシには、ImageBrushおよびNineGridBrushが含まれる。一般にビットマップは、領域を塗りつぶすために引伸ばしまたは縮尺された場合に品質が低下するが、ベクトルは低下しない。したがって、可能であれば必ずベクトルベースのブラシを使用すべきである。
【0076】
基本型の塗りつぶしは、領域をソリッドカラーで塗りつぶすSolidColorBrushである。ソリッドカラーを指定するには、いくつかの方法がある。よく知られた色は、名前で選択することができる。たとえば、形状のFill属性を「Red」に設定することができる。赤、緑、および青の量を指定することにより32ビットの色パレットから色を選択して、単一のソリッドカラーに混合することができる。32ビットのパレットから色を指定するための形式は「#RRGGBB」であり、ここでRRは赤の相対的な量を指定する2桁の16進数であり、GGは緑の量を指定し、BBは青の量を指定する。さらに、色は「#AARRGGBB」として指定することも可能であり、ここでAAは、色のアルファチャネル、すなわち透過性を指定する。他の配色も実行可能である。
【0077】
以下の例で、Ellipse要素のFillは、予め定義された色名のうちの1つを使用して設定される。
【0078】
【表13】

【0079】
アルファチャネルは、任意のソリッドカラーブラシに直接指定することが可能である一方で、ブラシのOpacityプロパティで指定することもできる。要素全体およびその子要素の不透明度は、UIElement.Opacityプロパティを使用して指定することができる。これらの値は、それぞれ0と1の間のDoubleとして指定される。1の値は完全に不透明であり、0の値は完全に透明である。不透明度を記述する様々な方法は累積的である。すなわち、アルファチャネルが0×7F(50パーセント不透明)でありUIElement.Opacityプロパティが0.5(50パーセント不透明)である場合、要素は25パーセント不透明でペイントされる。
【0080】
勾配ブラシとは、軸に沿って1つの色から他の色に変化する塗りつぶしのことである。ベクトルグラフィックス(Vector Graphics)でサポートされている勾配には、線形勾配および放射勾配の2種類がある。
【0081】
勾配ブラシの基本的な構築ブロックは勾配停止である。勾配停止は、勾配軸に沿って相対的なオフセットで色を指定する。勾配停止間の点の色は、2つの境界となる勾配停止によって指定された色の組合せとして、線形補間される(linearly interpolated)。オフセットは、0から1までの範囲のDoubleである。以下に、勾配の例を示す。
【0082】
勾配ブラシを持つ方法の1つは、勾配停止を明示的に指定することである。以下にその一例を示す。
【0083】
【表14】

【0084】
以下の例では、LinearGradientBrushを使用して、4つの勾配停止を有するボタンの背景を線形勾配で塗りつぶす。
【0085】
【表15】

【0086】
RadialGradientBrushを使用して、放射勾配で領域を塗りつぶす。放射勾配は線形勾配と同様であるが、勾配の軸は楕円の内側から外側へと存在する。放射勾配で塗りつぶされた円は、黄色の中心と緑の輪郭を有し、それらの間で色を補間することができる。以下の画像は、白から灰色への放射勾配で塗りつぶされた矩形を示すものである。外側の円は勾配円を表し、赤いドットは焦点を示す。この勾配では、SpreadMethodをPadに設定している。
【0087】
以下の例では、Rectangle要素のFillプロパティはRadialGradientBrushを使用して設定される。放射勾配は(0.5,0.5)の焦点を有する。
【0088】
【表16】

【0089】
2色のみで勾配を作成する場合、Stroke、Fill、およびBackgroundのプロパティにキーワードを使用して、表記法を簡略化することができる。以下のサンプルは、青から赤へ変化する線形勾配型の水平勾配で塗りつぶされた矩形を作成する方法を示す。
【0090】
【表17】

【0091】
水平、垂直、および放射の勾配を作成するための省略された構文は、GradientType StartColor EndColorであり、ここでGradientTypeはVerticalGradient、HorizontalGradient、またはRadialGradientである。StartColorおよびEndColorは、予め定義された色名(青など)または16進値とすることができる。
【0092】
垂直勾配とは、始点と終点が垂直な線を形成する線形勾配のことである。同様に、水平勾配とは、始点と終点が水平な線を形成する線形勾配のことである。開発者は、構文
LinearGradient StartPoint EndPoint StartColor EndColor
を使用して彼ら自身の2色の線形勾配を明示的に記述することが可能であり、ここでStartPointおよびEndPointは開始および終了座標であって、それぞれの座標が0.1,0.1および0.5,0.5などの0から1までのx値とy値のペアとして表される。これらの値は始点または終点の相対位置を示し、0.5,0.5の終点は、塗りつぶし領域の右まで50パーセント、領域の上部からの距離の50パーセントで配置され、この点が形状の中央になるように位置付けられる。
【0093】
以下の例で、Rectangle要素のFillプロパティは線形勾配を使用して明示的に設定される。
【0094】
【表18】

【0095】
以下の例に、省略された構文を使用して2色の放射勾配で領域を塗りつぶす方法を示す。
【0096】
【表19】

【0097】
Fill属性に加え、勾配を使用してShape要素のStrokeなどのオブジェクトの輪郭を塗りつぶすこともできる。
【0098】
描画ブラシとは、形状またはコントロールを、他の形状およびブラシの組合せで塗りつぶすことができるようにするものである。通常のShape要素とは異なり、DrawingBrush内部のShapeは要素ツリーの中の要素ではない。その代わりに、媒体レイヤによって直接解析およびレンダリングされる。その結果、ユーザインターフェースの一部が多くの形状からなる場合、性能を大幅に向上されることができる。
【0099】
描画ブラシはタイルブラシの一種である。ここでは、開発者が描画ブラシをどのようにコントロールして出力領域を塗りつぶすことができるかについて、追加の機能に関する情報を提供する。
【0100】
ImageBrushは、領域をビットマップ画像で塗りつぶすものである。以下のサンプルでは、ImageBrushを使用して画像をCanvasの背景としてレンダリングする方法を示す。
【0101】
【表20】

【0102】
画像ブラシはタイルブラシの一種である。このセクションでは、画像がどのように出力領域を塗りつぶすかをコントロールするのに開発者が使用できる追加の機能に関する情報を提供する。
【0103】
DrawingBrushおよびImageBrushはどちらもタイルブラシの一種である(TileBrushクラスから導出する)。したがって、開発者が領域の塗りつぶし方法をかなり詳細にコントロールすることのできる、共通の機能集合を有する。たとえば、開発者は、単に引伸ばされた画像で領域を塗りつぶすのではなく、パターンを作成する一連の画像タイルで領域を塗りつぶすことができる。
【0104】
タイルブラシは、コンテンツで塗りつぶされた1つまたは複数のタイルを記述するものである。ImageBrushは、そのタイルをビットマップ画像で塗りつぶすタイルブラシである。DrawingBrushは、そのタイルを描画で塗りつぶすタイルブラシである。
【0105】
タイルブラシは、開発者に2つのレベルのコントロールを提供するため、開発者はブラシのコンテンツがそのタイルをどのように塗りつぶすかをコントロールすることが可能であり、その開発者はブラシのタイルが領域をどのように塗りつぶすかをコントロールすることができる。デフォルト時には、タイルブラシは出力領域を単一のタイルで塗りつぶし、ブラシのコンテンツはそのタイルを塗りつぶすように引伸ばされる。開発者がこのデフォルトの挙動を上書きできるようにするプロパティの中には、Stretch、ViewPort、およびViewBoxのプロパティがある。(図18を参照しながら以下でも説明する)Stretchプロパティは、ブラシのコンテンツがそのタイルをどのように塗りつぶすかを定義する。ViewPortはブラシのタイルのサイズおよび位置を定義し、ViewBoxプロパティはブラシのコンテンツのサイズおよび位置を決定する。
【0106】
Stretchプロパティは、タイルブラシのコンテンツがそのタイルを塗りつぶすためにどのように引伸ばされるかをコントロールする。Stretchプロパティは、Stretch列挙法で定義された以下の値を受け入れる。
None: ブラシのコンテンツはタイルを塗りつぶすために引伸ばされない。
Fill: ブラシのコンテンツはタイルに合うように縮尺される。コンテンツの高さおよび幅は別個に縮尺されるため、コンテンツのオリジナルのアスペクト比が保持されない可能性がある。すなわち、出力タイルを完全に塗りつぶすために、ブラシのコンテンツが歪められる場合がある。
Uniform: ブラシのコンテンツは、タイル内に完全にはまるように縮尺される。コンテンツのアスペクト比は保持される。
UniformToFill: ブラシのコンテンツは出力領域を完全に塗りつぶすように縮尺される一方で、コンテンツのオリジナルのアスペクト比は保持される。
【0107】
HorizontalAlignmentおよびVerticalAlignmentプロパティは、タイルブラシのコンテンツがそのタイル内でどのように位置合わせされるかを決定する。HorizontalAlignmentプロパティは、HorizontalAlignment列挙法で定義された、Left、Center、およびRightの値を受け入れる。VerticalAlignmentプロパティは、VerticalAlignment列挙法で定義された、Top、Center、およびBottomの値を受け入れる。
【0108】
ViewPortプロパティは、ブラシのタイルのサイズおよび位置を決定する。ViewPortUnitsプロパティは、ViewPortが絶対座標または相対座標のどちらを使用して指定されるかを決定する。相対座標の場合、出力領域のサイズに比例する。ポイント(0,0)は出力領域の左上コーナを表し、(1,1)は出力領域の右下コーナを表す。ViewPortプロパティが絶対座標を使用するように指定するためには、ViewPortUnitsプロパティをAbsoluteに設定する。
【0109】
以下の例では、幅および高さが100であり、その左上コーナが(0,0)にあるタイルが、画像を使用して作成される。
【0110】
【表21】

【0111】
ブラシのコンテンツのサイズおよび位置は、ViewBoxプロパティを使用して指定することができる。タイルブラシのタイルが出力領域を完全に塗りつぶしていない場合、そのTileModeプロパティが残りの出力領域をどのように塗りつぶすかを指定する。TileModeプロパティは、TileMode列挙法で定義された以下の値を受け入れる。
None: 基本タイルのみが描画される。
Tile: 基本タイルが描画され、残りの領域は、1つのタイルの右縁が次のタイルの左縁に隣接し、下と上も同様に隣接するように、基本タイルを反復することによって塗りつぶされる。
FlipX: Tileと同様であるが、タイルの交互の列が水平に反転される。
FlipY: Tileと同様であるが、タイルの交互の行が垂直に反転される。
FlipXY: FlipXおよびFlipYの組合せ。
【0112】
様々なタイリングモードについて、図19を参照しながら以下で説明する。
【0113】
図17を参照しながら以下で説明するNineGridBrushは、領域をビットマップ画像で塗りつぶすという点が画像ブラシと非常によく似ている。しかし、NineGridBrushでは、画像は4本の境界によって9つの領域またはグリッドに分けられる。詳細な情報については、NineGridBrushのページを参照されたい。
【0114】
図3および4はそれぞれ、Visualと呼ばれる基本オブジェクトを含むシーングラフ300および400の例を示す図である。映像オブジェクトまたは単に映像は、線分、テキスト、および画像などのグラフィカルコンテンツ用のコンテナである。図5のVisualクラスのオブジェクト継承で示されるように、グラフィカルコンテンツを直接含まないが子Drawing Visualオブジェクトを含むContainerVisualを含む、いくつかの異なる映像オブジェクトがある。子Drawing Visualオブジェクトは、他のDrawingVisualオブジェクトではなく、ContainerVisualに追加される。これによって開発者は、全体の描画コンテキストを再作成およびその後の再レンダリングすることなく、個々の映像オブジェクトのプロパティを変更および設定することが可能であり、同時に、コンテナオブジェクトのクリッピングおよび変形プロパティにアクセスすることもできる。ContainerVisualオブジェクトは入れ子にすることができる。
【0115】
DrawingVisualとは、グラフィカルコンテンツを格納することのできるVisualのことである。このVisualはいくつかの描画方法を公開する。DrawingVisualの子オブジェクトは、ゼロベースまたはzオーダの空間で編成される。RetainedVisualとは、描画に使用できる「保持された命令ストリーム」を導入するVisualのことである。簡単に言うと、RetainedVisualは、開発者が映像のコンテンツを保持し、必要なときだけこれを再描画できるようにするものである。RetainedVisualはDrawingVisualと同様に、RenderOpenを呼び出すことおよび戻されたDrawingContextを描画に使用することによって、命令的に使用することができる。RetainedVisualは、妥当性検査コールバック機能およびInvalidateVisualメソッドを提供する。妥当性検査機能を使用するために、ユーザは、RetainedVisualまたはそれから導出されたクラスでIRetainedRenderインターフェースを実施する。
【0116】
図5に戻ると、さらに他の映像HwndVisual 505があり、これは従来のMicrosoft(登録商標)Win32(登録商標)のコントロールまたはウィンドウを、シーングラフの映像シーン内で子映像としてホストするために使用される映像である。より具体的に言えば、依然として古いプログラムが、以前のグラフィックス技術に基づいて子HWnd(または同様のもの)を描画するWM_PAINTメソッド(または同様のもの)を介して動作することになる。こうしたプログラムを新しいグラフィックス処理モデルでサポートするために、HwndVisualはHwndがシーングラフ内に格納され、親映像の再配置に従って移動されるようにすることができる。2次元世界と3次元世界を接続することのできる3次元(3D)映像などの、他の型の映像も実現可能であり、たとえばカメラのようなビューが2次元映像を介して3次元世界にビューを入れることが可能である。
【0117】
図3に示されるように、映像マネージャ304は、映像ツリーを媒体に接続するオブジェクトを備える。映像マネージャは、映像データ構造(ルート映像302)とそのデータのレンダリング先である対象との間に保持された接続を確立し、その2つの相違点を追跡する機能を提供する。映像マネージャ304はウィンドウメッセージを受け取り、描画座標内の1つのポイントを装置座標に変形するための方法、およびその逆を提供する。
【0118】
典型的なアプリケーションは、前述のように(たとえば、特許文献4参照)「XAML」でレイアウトを定義することによって、さらにまた何らかの描画オペレーションをC#で指定することによって、グラフィックスを描画することができる。開発者は、Shape要素を作成するか、またはプリミティブを備えたGeometryクラスを使用して幾何学形状を描画することができる。以下のシナリオでは、コードはCanvasの下にあるVisualでの楕円の描画を実演する。
【0119】
【表22】

【0120】
代わりに開発者は、映像APIを使用してVisualに直接描画することができる(そうでなければLayout要素を介してアクセスされることになる)。
【0121】
DrawingVisualオブジェクトのコンテンツをレンダリングするために、通常、アプリケーションはDrawingVisualでRenderOpenメソッドを呼び出す。RenderOpenはDrawingContextを戻し、アプリケーションはこれを使用して描画オペレーションを実行することができる。Visualのコンテンツを消去する場合、アプリケーションはDrawingContextでCloseを呼び出す。アプリケーションがCloseを呼び出すと、その後DrawingContextは使用できなくなる。
【0122】
以下のコードは、楕円形状ではなくGeometryオブジェクトを使用して、DrawingVisualに楕円(前の例と同じ楕円)を描画するものである。この例では、DrawingVisualを作成し、DrawingVisualのDrawingContextを取得し、DrawingContextのDrawGeometryメソッドを呼び出して楕円を描画する。開発者は、この場合はウィンドウであるトップレベルオブジェクトの映像ツリーに、Visualを追加する必要があることに留意されたい。
【0123】
【表23】

【0124】
以下の例は、同様の楕円をContainerVisualに追加することによって、前の例にさらに構築するものであり、この例はわかりやすくするために冗長であることに留意されたい。ContainerVisualを使用すると、シーンオブジェクトを編成する際に役立ち、開発者がヒットテストまたは妥当性検査(RetainedVisualオブジェクト)を実行するために、Visualオブジェクトを通常の描画コンテンツから分離し、コンテンツの不必要な再描画を最小限に抑えることができる。
【0125】
【表24−1】

【0126】
【表24−2】

【0127】
【表24−3】

【0128】
RetainedVisualはDrawingVisualと似ているが、映像コンテンツの選択的な再描画が可能である。その名前が示唆するように、RetainedVisualはコンテンツを媒体上で複数出現させるために保持することができる。また、コールバックおよび妥当性検査機能も提供する。この機能は、コンテンツの再レンダリングを介して開発者により多くのコントロールを提供することで、レンダリングの実行を助けることができる。
【0129】
基本レベルでは、ユーザはRetainedVisualをDrawingVisualとほとんど同様に作成および使用することが可能であり、すなわちユーザはRenderOpenを呼び出してDrawingContextを取得することができる。別法として、ユーザはRetainedVisualでIRetainedRenderインターフェースを実施することができる。そのように実行することにより、ユーザは、グラフィックスシステムがRenderBoundsプロパティに設定された値をIRetainedVisual.Render呼出しでレンダリングされるコンテンツの境界として確実に使用できるようにする。
【0130】
シーンをレンダリングする場合、グラフィックスシステムは任意の子Visualを検査することになる。RenderBoundsプロパティの値が、シーンをレンダリングする際に特定のVisualのコンテンツが必要となることを示す場合、システムはIRetainedVisual.Renderを呼び出してVisualのコンテンツを塗りつぶし、すでにメモリ内にある任意のコンテンツを置き換えることになる。アプリケーションは、InvalidateVisualを呼び出して、Visualからコンテンツを直接フラッシュする(flush)こともできる。アプリケーションがRetainedVisualでIRetainedRenderを実施しなかった場合、InvalidateVisualへのいずれの呼出しも例外処理を実行することになる。
【0131】
以下のコードは、RetainedVisualでIRetainedRenderを実施し、それに描画するクラスをインスタンス化するものである。
【0132】
【表25】

【0133】
映像APIは、本発明のグラフィックスシステムの残りの部分と同様に管理されたAPIであり、強力なタイピングおよびガーベッジ集合を含む管理されたコードの典型的な機能を使用する。また、レンダリングのためのハードウェア加速機能も利用する。既存の管理されていないアプリケーションを使用して作業を行う開発者に対処するために、映像APIは、本グラフィックスシステムとMicrosoft Windows(登録商標)のGraphics Device Interface(GDI)ベースのレンダリングサービスとの間に限られた相互運用性を提供する。
【0134】
この相互運用性により、開発者は、本発明の描画およびレンダリングに基づいたHwnd Visualオブジェクト、書込み制御、およびテーマ化を使用して、映像認識アプリケーションでGDIベースのウィンドウをホストするが、依然として古いGDIアプリケーションで動作し、ハードウェア加速およびカラーモデルを含む新しいレンダリング機能を利用するようにGDI HWNDベースのアプリケーションを修正することができる。
【0135】
HwndVisualは、Win32コンテンツを映像認識アプリケーションでホストできるようにするものである。図5に示されるように、HwndVisualはContainerVisualを継承する。GDIと新しい描画モデルとを同じHwndVisualで混合できないことに留意されたい。代わりに、この映像は、制限された範囲の古いコントロールにはより役立つ可能性がある。以下の例では、HwndVisualでコントロールを作成することおよびそれを映像ツリーに追加することを実演する。
【0136】
【表26】

【0137】
他のオブジェクトの場合と同様に、開発者は、Visualでいったんホストされると変形および他のプロパティの変更をコントロールに適用することが可能である。
【0138】
【表27】

【0139】
図3に示されるように、トップレベル(またはルート)のVisual302は映像マネージャオブジェクト304に接続され、これは(たとえばハンドルを介して)、ウィンドウ(Hwnd)306またはプログラムコード用にグラフィックデータが出力される同様の単位との関係も有する。映像マネージャ304は、トップレベルのVisual(およびそのVisualの任意の子)のそのウィンドウ306への描画を管理する。図6は、本明細書に記載されたグラフィックスシステムのオブジェクトモデルにおけるオブジェクトの集合600のうちの1つとしての映像マネージャを示す図である。
【0140】
描画する際、映像マネージャ304は、前述の米国特許出願に全体として記載されたように、ディスパッチャ308がスケジュールしたようにシーングラフを処理(たとえば、トラバースまたは伝送)し、低いレベルのコンポーネント218(図2)へのグラフィックス命令および他のデータをその対応するウィンドウ306に提供する。シーングラフの処理は、通常、低いレベルのコンポーネント218および/またはグラフィックスサブシステム222のリフレッシュ速度よりも比較的遅い速度で、ディスパッチャ308によってスケジュールされることになる。
【0141】
図3は、トップレベル(ルート)Visual302の下に階層状に配置構成された、いくつかの子Visual310〜314を示す図であり、その一部は、たとえば命令リストおよび他のVisualを含む関連するそれぞれの命令リスト318および319と共に、(その一時的な性質を表すために破線の四角で示された)描画コンテキスト316、317を介して読み込まれたように表されている。Visualは他のプロパティ情報を含むこともできる。一般に、基本映像クラスでのほとんどのアクセスは、IVisualインターフェースを介して行われ、Visualは図5に示されるようにDependencyObjectから導出される。他の描画プリミティブの中で、命令リストはImageDataへの参照を含むことができる。その後、そのImageDataは、描画コンテキストをそれから取得することによって、またはSurfaceVisualRender(あるいはImageDataVisualRendererと名付けられた)を有することによって、直接変更/更新することができる。
【0142】
Visualは、クリップ、不透明度、ならびに、ゲットメソッドを介して設定および/または読み取ることのできる可能な他のプロパティを提供することによって、サービスを提供する。さらにVisualは、どのようにヒットテストに参加するかをコントロールするフラグを有する。Showプロパティを使用してVisualが表示/非表示となり、たとえばfalseの場合Visualは不可視であり、そうでない場合Visualは可視である。さらに、これらのオブジェクト(映像APIレイヤのVisualかまたは要素レイヤの要素)は、階層状に存在する。座標系はこの階層を下に向かって継承される。この場合、親は、レンダリングする軌跡を修正してその親の子に適用させる座標変形を強要することができる。
【0143】
Visual用の変形は、そのVisualへの接続上にある。つまり、親のIVisualインターフェース上で[Get|Set]ChildTransformを介して設定される。
【0144】
座標変形は、あたかもビットマップに対して行なわれるかのように、一様な方法であらゆるものに適用可能であることに留意されたい。これは、変形は常にビットマップに適用されるが、レンダリングされるものが等しく変形の影響を受けることを意味するものでないことに留意されたい。例を挙げると、ユーザが1インチ(約2.54cm)幅の丸いペンを使用して円を描画し、X方向にその円の2倍のスケールを適用した場合、ペンは左右は2インチ(約5.08cm)幅、上下は1インチ(約2.54cm)幅のみとなる。これは、時に(ジオメトリのみに影響を与えるスケルトンまたはジオメトリスケールとは対照的に)合成またはビットマップ変形と呼ばれることがある。図8に、非変形画像800を左側に示し、非均一スケールの変形済み画像802を右側に表すスケーリング変形を示す。図9には、非変形画像800を左側に示し、ジオメトリスケーリングの変形済み画像904を右側に示すスケーリング変形を示す。
【0145】
映像の座標変形に関して、TransformToDescendantはポイントを基準映像から下位映像へと変形する。ポイントは、基準映像の変形後座標空間から下位映像の変形後座標空間へと変形される。TransformFromDescendantは、ポイントを下位映像から親チェーンを上方に基準映像まで変形する。ポイントは、下位映像の変形後座標空間から基準映像の変形後座標空間へと変形される。ユーザは、下位へおよび下位から、ならびにいずれかの任意映像からおよび任意映像への、行列を取得することができる。Visualのコンテンツの境界ボックスを決定するために使用できる2つのプロパティ、すなわち下位の境界ボックスであるDescendantBounds、およびコンテンツの境界であるContentBoundsが使用可能である。これらにUnionを適用すると、全体の境界が与えられる。
【0146】
クリッププロパティは、Visualのクリッピング領域を設定(および取得)する。任意のGeometry(Geometryクラスは図10に示されている)をクリッピング領域として使用することが可能であり、クリッピング領域は変形後座標空間で適用される。一実施態様では、クリッピング領域に関するデフォルト設定はnull、すなわちクリッピングなしであり、これは無限大のクリッピング矩形(−∞,−∞)から(+∞,+∞)とみなすことができる。
【0147】
不透明度プロパティは、Visualのコンテンツが不透明度値および選択された混合モードに基づいて描画表面で混ぜ合わされるように、Visualの不透明度値を取得/設定する。BlendModeプロパティを使用して、使用される混合モードを設定(または取得)することができる。たとえば、不透明度(アルファ)値は0.0から0.1の間に設定し、線形アルファ混合を、たとえば、Color = alpha * foreground color + (1.0-alpha)*background color)のモードとして設定することができる。たとえば、ぼかし、モノクロなどの特殊効果プロパティなどの他のサービスを、Visualに含めることができる。
【0148】
(変形、不透明度、およびクリップを含む)様々なサービスを描画コンテンツ上でプッシュ(push)およびポップ(pop)させることが可能であり、プッシュ/ポップオペレーションは、各プッシュ呼出しに対して適切なポップ呼出しがある限り、入れ子にすることができる。
【0149】
PushTransformメソッドは、変形をプッシュする。後続の描画オペレーションは、プッシュされた変形を基準にして実行される。ポップ呼出しは、以下のように、合致するPushTransform呼出しによってプッシュされた変形をポップする。
【0150】
【表28】

【0151】
同様に、PushOpacityメソッドは、不透明度値をプッシュする。後続の描画オペレーションは、指定された不透明度値を使用して一時表面上でレンダリングされ、シーンに合成される。Pop( )は、以下のように、合致するPushOpacity呼出しによってプッシュされた不透明度をポップする。
【0152】
【表29】

【0153】
PushClipメソッドは、クリッピングジオメトリをプッシュする。後続の描画オペレーションはジオメトリにクリップされる。クリッピングは、変形後空間に適用される。Pop( )は、以下のように、合致するPushClip呼出しによってプッシュされたクリッピング領域をポップする。
【0154】
【表30】

【0155】
プッシュオペレーションは、ポップオペレーションがプッシュと合致する限り、任意に入れ子にできることに留意されたい。たとえば、以下は有効である。
【0156】
【表31】

【0157】
ProxyVisualは、シーングラフ、たとえばContainer Visualの下に、複数回追加することのできるVisualである。ProxyVisualによって参照される任意のVisualには、ルートからの複数のパスを通すことが可能であるため、読取りサービス(TransformToDescendent、TransformFromDescendent、およびHitTest)はProxyVisualを介して動作しない。実際のところ、任意のVisualから映像ツリーのルートへの標準パスが1つあり、そのパスはいずれのProxyVisualも含まない。
【0158】
図4に、ContainerVisualおよびDrawingVisual(およびその他)がシーングラフ内で関連しており、(たとえば対応する描画コンテキスト内に)命令リストの形の関連するデータを有するシーングラフ400の一例を示す。ContainerVisualはVisual用のコンテナであり、ContainerVisualは互いに入れ子にすることができる。ContainerVisualの子は、ContainerVisualを実施するIVisualインターフェース上のメソッドを介して操作することができる。VisualCollection内のVisualの順序が、Visualがレンダリングされる順番を決定するものであり、すなわち、Visualは最下位のインデックスから最高位のインデックスへと、後ろから前へレンダリングされる(ペインティング順序)。
【0159】
前述のように、Visualは、Geometry、ImageSource、およびMediaDataを含む様々な描画プリミティブと共に、その描画コンテキストを読み込むことによって描画することができる。さらに、このスタック全体を通じて共用されるリソースおよびクラスの集合がある。これには、Pen、Brush、Geometry、Transform、およびEffectが含まれる。DrawingContext抽象クラスは、DrawingVisual、ValidationVisual、ImageDataなどを読み込むために使用できる描画オペレーションの集合を公開する。言い換えれば、DrawingContext抽象クラスは描画オペレーションの集合を公開し、各描画オペレーションについて、定数を引数として取る方法とアニメータを引数として取る方法の2つがある。
【0160】
Geometryは、ストロークまたは塗りつぶしなしでベクトルグラフィックススケルトンを定義するクラスの一種である(図10)。各Geometryオブジェクトは単純な形状(LineGeometry、EllipseGeometry、RectangleGeometry)、複雑な単一形状(PathGeometry)、または組合せオペレーション(たとえば合併、交差など)が指定されたこうした形状のリストGeometryCollectionである。これらのオブジェクトは、図10に示されるようなクラス階層を形成する。
【0161】
図11に示すように、PathGeometryは、Figureオブジェクトの集合である。ここでは、それぞれのFigureオブジェクトが、実際に図の形状を定義する1つまたは複数のSegmentオブジェクトからなる。Figureとは、セグメント集合を定義するGeometryのサブセクションである。このセグメント集合は、単一の関連した一連の2次元Segmentオブジェクトシリーズである。Figureは、領域が定義されたクローズ形状、または曲線は定義するが領域はクローズでない接続された一連のSegmentのみの、いずれかが可能である。
【0162】
図12に示されるように、ジオメトリ(たとえば矩形)を描画する場合、以下で説明するようにブラシまたはペンを指定することができる。さらに、PenオブジェクトはBrushオブジェクトも有する。Brushオブジェクトはグラフィックで平面を塗りつぶす方法を定義するものであり、クラス階層のBrushオブジェクトがある。これを図12に、矩形およびブラシの命令およびパラメータを含む映像が処理されると、結果として生じる塗りつぶされた矩形1202として示す。Penオブジェクトは、以下で説明するように、BrushならびにWidth、LineJoin、LineCap、MiterLimit、DashArray、およびDashOffsetに関するプロパティ上で保持される。さらに以下で説明するように、(勾配および9グリッドなどの)Brush型の中には、それ自体でサイズを決めるものもある。これらのBrushが使用される場合、そのサイズは境界ボックスから取得される。たとえば、Brush用のGradientUnits/DestinationUnitsがRelativeToBoundingBoxに設定されている場合、描画されているプリミティブの境界ボックスが使用される。これらのプロパティがAbsoluteに設定された場合、座標空間が使用される。
【0163】
本発明のグラフィックスオブジェクトモデルには、Brushオブジェクトモデルが含まれ、これは一般に平面をピクセルでカバーするという概念を対象としている。Brush型の例は、図13でBrush基本クラスの下に階層状に示されており、GradientBrush、NineGridBrush、SolidColorBrush、およびTileBrushが含まれる。GradientBrushには、LinearGradientおよびRadialGradientのオブジェクトが含まれる。DrawingBrushおよびImageBrushはTileBrushから導出される。クラスの代替の配置構成が実現可能であり、たとえばTileBrushからImageBrush、VisualBrush、VideoBrush、NineGridBrush、およびDrawingBrushを導出することができる。Brushオブジェクトは、それらが使用される場合に座標系にどのように関係するか、および/またはそれらが使用される形状の境界ボックスにそれらがどのように関係するかを認識できることに留意されたい。一般に、サイズなどの情報は、ブラシが描画されるオブジェクトから推測することができる。より詳細には、Brush型の多くがそれらのパラメータの一部を指定する際に座標系を使用する。この座標系は、Brushが適用される形状の単純な境界ボックスを基準に定義するか、またはブラシが使用される時点でアクティブな座標空間を基準に定義することが可能である。これらはそれぞれ、RelativeToBoundingBoxモードおよびAbsoluteモードとして知られている。
【0164】
SolidColorBrushオブジェクトは、識別された平面をソリッドカラーで塗りつぶす。色のアルファコンポーネントがある場合、これは、倍加する方法でBrush基本クラスの対応する不透明度属性と組み合わされる。以下に、SolidColorBrushオブジェクトの例を示す。
【0165】
【表32】

【0166】
GradientBrushオブジェクトまたは単にGradientは勾配塗りつぶしを行い、何らかの進行に沿って色を指定する勾配停止の集合を指定することによって描画されるものである。Gradientは、ガンマ2.2RGB色空間で勾配停止間の線形補間を実行することによって描画されるが、代わりに他のガンマまたは他の色空間(HSB、CMYKなど)を介した補間を実行することもできる。この2つの型のGradientオブジェクトには、線形勾配および放射勾配が含まれる。
【0167】
一般に、Gradientは勾配停止のリストからなる。これらの勾配停止は、それぞれ色(アルファ値が含まれる)およびオフセットを含む。指定された勾配停止がない場合、ブラシは、あたかもブラシがまったく指定されていないかのように濃淡のない透明な黒として描画される。勾配停止が1つだけ指定された場合、ブラシは1色だけ指定されたソリッドカラーとして描画される。「Changeable Class and Pattern to Provide Selective Mutability in Computer Programming Environments」という名称の米国特許出願に記載されているように、勾配停止クラス(下記の表の例)は他のリソースクラスと同様に変更可能クラスから導出されるため、選択的に可変である。
【0168】
Gradientは勾配停止の集合を指定することによって描画される。これらの勾配停止は、何らかの連続した色を指定する。現在サポートされている勾配には2つの型、すなわち線形勾配および放射勾配がある。Gradientは、指定された色空間内の勾配停止間で補間を実行することによって描画される。
【0169】
Gradientは、勾配停止のリストからなる。これらの勾配停止はそれぞれ、色(アルファ値が含まれる)およびオフセットを含む。指定された勾配停止がない場合、ブラシは(あたかもブラシがまったく指定されていないかのように)透明として描画される。勾配停止が1つだけ指定された場合、ブラシは1色だけ指定されたソリッドカラーとして描画される。0から1の範囲内(0.0...1.0)のオフセットを備えた任意の勾配停止が考慮の対象とされ、最大の停止は(−∞...0.0]、最小の停止は[1.0...+∞)である。考慮の対象とされる停止の集合に0から1の範囲外にある停止が含まれる場合、暗黙の停止として0(および/または1)が導出され、これがこの停止で発生することになる補間された色を表す。さらに、2つまたはそれ以上の停止が同じオフセットで設定される場合、そのオフセットで(補間済みでない)ハード遷移が発生する。停止が追加される順序によって、このオフセットでの挙動が決められ、追加される最初の停止はそのオフセットの前の有効な色であり、設定される最後の停止はこの停止の後の有効な色であり、このオフセットでのいずれの追加の停止も無視される。
【0170】
このクラスは、他のリソースクラスと同様にChangeableである。
【0171】
【表33】

【0172】
SolidColorBrushと同様に、これはChangeablesをアニメーション集合内に入れ子にする。
【0173】
GradientSpreadMethod 列挙法は、指定されたベクトルまたは空間の外で勾配がどのように描画されるべきかを指定する。可能な値には、末端(最初および最後)の色を使用して残りの空間が塗りつぶされるPadと、停止を逆の順序で繰り返し再生して空間が塗りつぶされるReflectと、停止を順番に繰り返して空間が塗りつぶされるRepeatの、3つの値が含まれる。この型のプロパティのデフォルト値はPadである。
【0174】
【表34】

【0175】
図14および15は、いくつかのGradientSpreadMethodの例(たとえ色でなくグレースケールの場合であっても)を提供する。各形状が、白からグレーに移行する線形勾配を有する。実線が勾配ベクトルを表す。
【0176】
一般に、LinearGradientBrushを使用して領域を線形勾配で塗りつぶす。線形勾配とは、線分に沿って勾配を定義するものである。線形勾配のStartPointおよびEndPointプロパティによって、線分の末端が定義される。デフォルト時には、線形勾配のStartPointは(0,0)であって領域の左上コーナが塗りつぶされ、そのEndPointは(1,1)であって領域の右下コーナが塗りつぶされる。図15に示されるように、デフォルトの値を使用すると、結果として生じる勾配の色は斜めの軌跡に沿って補間される。本明細書では、勾配の補間軌跡をハイライト表示するために、勾配の始点および終点から形成された黒い線分が追加されている。
【0177】
ColorInterpolationMode列挙法は、勾配内の色に対して補間モードを定義する。PhysicallyLinearGamma10およびPerceptuallyLinearGamma22の2つのオプションがある。
【0178】
【表35】

【0179】
これは抽象基本クラスである。
【0180】
【表36】

【0181】
Changeablesの項で説明したように、GradientBrushはそのGradientStopsプロパティそれ自体がChangeablesを保持するので、Changeablesに関して複合型である。これは、GradientBrushが、保護されたメソッドMakeUnchangeableCore( )とPropagateEventHandler( )、ならびにChangeableサブクラスが実施するCloneCore( )とを実施する必要があることを意味する。たとえば集合を構成するGradientStopsの無効な組合せがある場合、ValidateObjectState( )を実施するように選択することもできる。
【0182】
LinearGradientは、ベクトルに沿って線形勾配ブラシを指定する。個々の停止は、そのベクトルに沿ってカラーストップを指定する。
【0183】
【表37−1】

【0184】
【表37−2】

【0185】
LinearGradient用のマークアップは、0および1のオフセットで2つのカラーストップを使用してLinearGradientを指定することが可能である。「LinearGradient」バージョンが使用される場合、それぞれ始点および終点が指定される。「HorizontalGradient」が使用される場合、始点は0,0に設定され、終点は1,0に設定される。「VerticalGradient」が使用される場合、始点は0,0に設定され、終点は0,1に設定される。これらの場合、RelativeToBoundingBoxというデフォルトのMappingModeが使用される。
【0186】
RadialGradientは、プログラミングモデルでは線形勾配と同様である。しかし、線形勾配は勾配ベクトルを定義するための始点および終点を有するのに対して、放射勾配は勾配の挙動を定義するための円ならびに焦点を有する。円は勾配の終点を定義しており、言い換えれば、1.0の勾配停止は円の周囲の色を定義する。焦点は勾配の中心を定義する。0.0の勾配停止は焦点の色を定義する。図16は、白からグレーへと(グレースケールで)進むRadialGradientを表す。外側の円は勾配円を表し、中実のドットは焦点を示す。この勾配は、SpreadMethodがPadに設定されている。
【0187】
【表38−1】

【0188】
【表38−2】

【0189】
RadialGradient用のマークアップは、それぞれ0および1のオフセットで2つのカラーストップを使用してRadialGradientを指定することが可能である。デフォルトの半径が0.5である場合、RelativeToBoundingBoxというデフォルトのMappingModeが使用される。
【0190】
【表39】

【0191】
TileBrushは、タイルを記述する論理とタイルが領域を塗りつぶす際に使用する手段とを含む抽象基本クラスである。TileBrushのサブクラスはコンテンツを含み、無限の平面を塗りつぶす方法を論理的に定義する。
【0192】
Stretch列挙法を使用して、ViewBox(ソース座標空間)をViewPort(宛先座標空間)にマッピングする方法を記述する。これはTileBrushで使用される。
【0193】
【表40】

【0194】
図18に、引伸ばし(stretch)の例を示す。これらの例では、コンテンツは左/上に位置合わせをされる。
【0195】
TileMode列挙法を使用して、Tileで空間を塗りつぶすのか、およびどの様に塗りつぶすのかを記述する。TileBrushは、基本Tileが(ViewPortによって指定される)場所を定義する。残りの空間はTileMode値に基づいて塗りつぶされる。
【0196】
【表41】

【0197】
図19は、TileModeの例を提供する。各例の一番左上のタイルが基本タイルである。これらの例は、None、Tile、FlipX、FlipY、およびFlipXYを表す。
【0198】
VerticalAlignment列挙法を使用して、コンテナ内でコンテンツを垂直に配置する方法を記述する。
【0199】
【表42】

【0200】
HorizontalAlignment列挙法を使用して、コンテナ内でコンテンツを水平に配置する方法を記述する。
【0201】
【表43】

【0202】
TileBrushプロパティは、タイル(ViewBox)となる無限の平面の矩形部分を選択し、塗りつぶされる領域内の基本タイルとなる宛先矩形(ViewPort)を記述する。残っている宛先領域は、TileModeプロパティに基づいて塗りつぶされることになり、これが残っている空間を塗りつぶすためにオリジナルタイルが複製されるのか、およびどの様に複製されるのかを制御する。
【0203】
【表44−1】

【0204】
【表44−2】

【0205】
TileBrushのコンテンツには固有の境界がなく、無限の平面を効果的に記述する。これらのコンテンツは、それ自身の座標空間内に存在し、TileBrushによって塗りつぶされている空間は適用時のローカル座標空間である。コンテンツ空間は、ViewBox、ViewPort、Alignment、およびStretchのプロパティに基づいてローカル空間にマッピングされる。ViewBoxはコンテンツ空間内に指定され、この矩形はViewPort矩形にマッピングされる。
【0206】
ViewPortは、コンテンツが最終的に描画される場所を定義し、このBrush用の基本タイルを作成する。ViewPortUnitsの値がAbsoluteである場合、ViewPortの値は適用時にローカル空間内にあるものとみなされる。代わりに、ViewPortUnitsの値がRelativeToBoundingBoxである場合、ViewPortの値は座標空間内にあるものとみなされ、0,0はペイントされているオブジェクトの境界ボックスの左/上コーナであり、1,1は同じボックスの右/下コーナである。たとえば、100,100から200,200まで描画されたRectangleGeometryが塗りつぶされていると考えてみる。次に、ViewPortUnitsがAbsoluteである場合、ViewPort(100,100,100,100)がコンテンツ領域全体を記述することになる。ViewPortUnitsがRelativeToBoundingBoxである場合、ViewPort(0,0,1,1)がコンテンツ領域全体を記述することになる。ViewPortのSizeが空であり、StretchがNoneでない場合、このBrushは何もレンダリングしない。
【0207】
ViewBoxは、コンテンツ空間内に指定される。この矩形は、AlignmentプロパティおよびStretchプロパティによって決定されたViewPort内に収まるように変形される。Stretchがnoneの場合、コンテンツには何の縮尺も適用されない。StretchがFillの場合、ViewBoxはViewPortと同じサイズになるようにXおよびYの両方で別個に縮尺される。StretchがUniformまたはUniformToFillの場合、論理は同じであるが、XおよびYの寸法は均一に縮尺され、コンテンツのアスペクト比を保持する。StretchがUniformの場合、ViewBoxは、ViewPortのサイズに等しい、より多くの制約付き寸法を有するように縮尺される。StretchがUniformToFillの場合、ViewBoxはViewPortのサイズに等しい、より少ない制約付き寸法を有するように縮尺される。別の見方をすると、UniformとUniformToFillはどちらもアスペクト比を保持するが、UniformはViewBox全体がViewPort内にあることを保証し(場合によっては、ViewPortの一部がViewBoxによって覆われない状態で残る)、UniformToFillはViewPort全体がViewBoxによって塗りつぶされることを保証する(場合によっては、ViewBoxの一部がViewPortの外にはみ出る)。ViewBoxの領域が空の場合、Stretchは適用されない。それでも位置合わせは発生することになり、「ポイント」ViewBoxを位置付けることになる。
【0208】
いったんViewPortが(ViewPortUnitsに基づいて)決定され、ViewBoxの宛先サイズが(Stretchに基づいて)決定されると、ViewBoxをViewPort内に位置付ける必要がある。ViewBoxがViewPortと同じサイズの場合(StretchがFillの場合、または他の3つのStretch値のうちの1つに偶然に生じただけの場合)、ViewBoxはViewPortと同じになるようにOriginに位置付けられる。そうでない場合、HorizontalAlignmentおよびVerticalAlignmentが考慮の対象となる。これらのプロパティに基づいて、ViewBoxにXおよびYの両方の寸法で位置合わせを行う。HorizontalAlignmentがLeftの場合、ViewBoxの枠の左側がViewPortの枠の左側に位置付けられることになる。これがCenterの場合、ViewBoxの中心がViewPortの中心に位置付けられることになり、Rightの場合、枠の右側が合致することになる。Y寸法についてもこのプロセスが繰り返される。
【0209】
ViewBoxがEmptyの場合は、未設定とみなされる。未設定の場合、ContentUnitsが考慮の対象となる。ContentUnitsがAbsoluteの場合、縮尺またはオフセットは発生せず、コンテンツは変形なしでViewPortに描画される。ContentUnitsがRelativeToBoundingBoxの場合、コンテンツの起点とViewPort Originとの位置合わせを行い、コンテンツはオブジェクトの境界ボックスの幅および高さによって縮尺される。
【0210】
空間がTileBrushで塗りつぶされる場合、コンテンツは上記のようにViewPortにマッピングされ、ViewPortにクリッピングされる。これによって塗りつぶし用の基本タイルが形成され、残りの空間のはBrushのTileModeに基づいて塗りつぶされる。設定が行われている場合、Brushの変形が適用されるが、これは他のマッピング、縮尺、オフセットなどの後に行われる。
【0211】
VisualBrushとは、Visualによってコンテンツが指定されるTileBrushである。このBrushを使用して複雑なパターンを作成でき、またはこれを使用してシーンの他の部分のコンテンツの追加のコピーを描画することができる。
【0212】
【表45】

【0213】
ImageBrushは、ImageDataによって指定されたコンテンツを有するTileBrushである。このBrushを使用して空間をImageで塗りつぶすことができる。
【0214】
【表46】

【0215】
VideoBrushは、VideoDataによって指定されたコンテンツを有するTileBrushである。このBrushを使用して空間をVideoで塗りつぶすことができる。
【0216】
【表47】

【0217】
NineGridBrushは、オブジェクトの境界ボックスを常にそのコンテンツ画像で塗りつぶすブラシであり、画像の引伸ばしは映像スケールを介してのみ実施されるものではない。Imageソースは4本の境界によって9つの矩形に分けられる(したがってNineGridと名付けられる)。これら9つの領域のそれぞれに存在する画像のコンテンツは、オブジェクト境界ボックスを塗りつぶすまで0、1、または2の寸法で縮尺される。各セクションが縮尺される寸法を図で見ることが可能であって、図17はNineGridの概念を表すものであり、第1のインスタンス1702から第2のインスタンス1704に拡大され、Top、Left、Bottom、およびRightの境界によって定義される9つのグリッドを示す4つの型がある。各グリッドスクエア内の矢印は、それらのコンテンツがViewPortサイズに合致するように引伸ばされる寸法を示している。
【0218】
上記の9つのグリッド領域に加えて、オプションの「10番目」のグリッドがある。これは、ViewPortの中心に位置する縮尺されない追加の画像の形を取る。これを使用して、ボタンなどの中心に形状を配置することができる。この「10番目のグリッド」はグリフと呼ばれ、GlyphImageDataプロパティによって公開される。
【0219】
【表48−1】

【0220】
【表48−2】

【0221】
境界のメンバは、画像の枠から画像ピクセル単位でカウントに入れることに留意されたい。
【0222】
Penは、空間/Geometryをストロークで描く方法を記述したBrushおよび他のパラメータを取るオブジェクトである。概念上、PenはGeometryからストローク領域を作成する方法を記述する。Geometryの枠、PenのThickness、PenLineJoin、PenLineCap、などに基づいて新しい領域が作成される。いったんこの領域が作成されると、Brushで塗りつぶされる。
【0223】
【表49−1】

【0224】
【表49−2】

【0225】
PenLineCapは、ストローク線分の端部を描画する方法を決定する。
【0226】
【表50】

【0227】
PenDashCapは、破線状のストローク線分における各ダッシュの端部を描画する方法を決定する。
【0228】
【表51】

【0229】
PenLineJoinは、線分をストロークで描く際にジョイントを描画する方法を決定する。
【0230】
【表52】

【0231】
DashArraysクラスは、一般的なよく知られた破線スタイルにアクセスする静的プロパティを備える。
【0232】
【表53】

【0233】
図13に示された他のBrushオブジェクトがVisualBrushオブジェクトである。VisualBrushとは、Visualによってコンテンツが指定されるTileBrushである。このBrushを使用して複雑なパターンを作成するか、またはこれを使用してシーンの他の部分のコンテンツの追加コピーを描画することができる。
【0234】
【表54】

【0235】
概念上、VisualBrushは、塗りつぶしとして繰り返されるタイル様式でVisualを描画する方法を提供する。これは、図12では、単一の円形状1220を指定するVisual(および任意の子Visual)を参照する映像ブラシによって表され、その円形状が矩形1222を塗りつぶしている。したがってVisualBrushオブジェクトは、そのブラシが描画されることになる方法を定義するためにVisualを参照することが可能であり、これは一種のVisualの複数使用を導入することになる。この方法では、プログラムは任意のグラフィックス「メタファイル」を使用して、ブラシまたはペンを介して領域を塗りつぶすことができる。これは任意のグラフィックスを格納および使用するための圧縮された形式であるため、グラフィックスリソースを提供する。
【0236】
一実施態様では、VisualBrushのコンテンツには固有の境界がなく、無限の平面を効果的に記述する。これらのコンテンツはそれら自体の座標空間内に存在し、VisualBrushが塗りつぶしている空間が適用時のローカル座標空間である。コンテンツ空間は、ViewBox、ViewPort、Alignments、およびStretchのプロパティに基づいてローカル空間にマッピングされる。ViewBoxはコンテンツ空間内に指定され、この矩形がViewPort(OriginおよびSizeプロパティを介して指定されたように)矩形にマッピングされる。
【0237】
ViewPortは、コンテンツが最終的に描画されることになる場所を定義し、このブラシ用の基本タイルを作成する。DestinationUnitsの値がUserSpaceOnUseである場合、OriginおよびSizeプロパティは適用時にローカル空間にあるものとみなされる。その代わりにDestinationUnitsの値がObjectBoundingBoxである場合、OriginおよびSizeは座標空間にあるものとみなされ、0,0はブラシ処理されているオブジェクトの境界ボックスの左/上コーナであり、1,1は同じボックスの右/下コーナである。たとえば、100,100から200,200まで描画されたRectangleGeometryを塗りつぶしていると考えてみる。こうした例では、DestinationUnitsがUserSpaceOnUseである場合、100,100のOriginおよび100,100のSizeがコンテンツ領域全体を記述することになる。DestinationUnitsがObjectBoundingBoxである場合、0,0のOriginおよび1,1のSizeがコンテンツ領域全体を記述することになる。Sizeが空の場合、このブラシは何もレンダリングしない。
【0238】
ViewBoxはコンテンツ空間内に指定される。この矩形が、AlignmentプロパティおよびStretchプロパティによって決められたViewPort内に収まるように変形される。Stretchがnoneの場合、コンテンツには縮尺が適用されない。StretchがFillの場合、ViewBoxはViewPortと同じサイズになるようにXおよびYで別々に縮尺される。StretchがUniformまたはUniformToFillの場合、論理は同様であるが、XおよびYの寸法が均一に縮尺されてコンテンツのアスペクト比が保持される。StretchがUniformの場合、ViewBoxは、ViewPortのサイズに等しい、より多くの制約付き寸法を有するように縮尺される。StretchがUniformToFillの場合、ViewBoxは、ViewPortのサイズに等しい、より少ない制約付き寸法を有するように縮尺される。言い換えれば、UniformおよびUniformToFillはどちらもアスペクト比を保持するが、UniformはViewBox全体がViewPort内にあることを保証し(場合によっては、ViewPortの一部がViewBoxによって覆われていない状態で残り)、UniformToFillはViewPort全体がViewBoxによって塗りつぶされることを保証する(場合によっては、ViewBoxの一部がViewPortの外にはみ出る)。ViewBoxが空の場合、Stretchは適用されない。それでも位置合わせは発生することになり、「ポイント」ViewBoxを位置付けることになることに留意されたい。
【0239】
図18は、様々な引伸ばし設定でレンダリングされたグラフィックスの単一タイル1800を示す図であり、引伸ばしが「none」に設定されたときのタイル1800が含まれている。タイル1802は引伸ばしが「Uniform」に設定された場合、タイル1804は引伸ばしが「UniformToFill」に設定された場合、およびタイル1806は引伸ばしが「Fill」に設定された場合を表す。
【0240】
いったんViewPortが(DestinationUnitsに基づいて)決定され、ViewBoxのサイズが(Stretchに基づいて)決定されると、ViewBoxをViewPort内に位置付ける必要がある。ViewBoxがViewPortと同じサイズの場合(StretchがFillであるか、または他の3つのStretch値のうちの1つに偶然に生じただけの場合)、ViewBoxはViewPortと同じになるようにOriginに位置付けられる。そうでない場合、HorizontalAlignmentおよびVerticalAlignmentが考慮の対象となる。これらのプロパティに基づいて、ViewBoxにXおよびYの両方の寸法で位置合わせを行う。HorizontalAlignmentがLeftの場合、ViewBoxの枠の左側がViewPortの枠の左側に位置付けられることになる。これがCenterの場合、ViewBoxの中心がViewPortの中心に位置付けられることになり、Rightの場合、枠の右側が合致することになる。Y寸法についてもこのプロセスが繰り返される。
【0241】
ViewBoxが(0,0,0,0)の場合は未設定とみなされ、これによってContentUnitsが考慮の対象となる。ContentUnitsがUserSpaceOnUseの場合、縮尺またはオフセットは発生せず、コンテンツは変形なしにViewPortに描画される。ContentUnitsがObjectBoundingBoxの場合、コンテンツの起点がViewPort Originと位置合わせされ、コンテンツはオブジェクトの境界ボックスの幅および高さによって縮尺される。
【0242】
空間をVisualBrushで塗りつぶす場合、コンテンツは上記のようにViewPortにマッピングされ、ViewPortにクリッピングされる。これによって塗りつぶし用の基本タイルが形成され、BrushのTileModeに基づいて残りの空間が塗りつぶされる。最後に、Brushの変形が設定されていればこれが適用されるが、これは他のすべてのマッピング、縮尺、オフセットなどの後に実行される。
【0243】
TileMode列挙法を使用して、空間がそのBrushによって塗りつぶされるかどうか、およびその方法を記述する。タイル処理が可能なBrushにはタイル矩形が定義されており、このタイルは塗りつぶされる空間内に基本位置を有する。残りの空間はTileMode値に基づいて塗りつぶされる。図19は、様々なTileMode設定のグラフィックス例を示した図であり、「None」1900、「Tile」1092、「FlipX」1904、「FlipY」1906、および「FlipXY」1908が含まれる。様々なグラフィックス例の中の一番左上のタイルが基本タイルを備えるものである。
【0244】
図20は、VisualBrush内のタイル用に定義されたVisualBrushグリッドを表す図である。第1の円は単純なグリッドであり、第2の円はX方向に47のSkewで変形されたものである。図21はこれを画像で塗りつぶした図である。
【0245】
図13に戻ると、タイルブラシから画像ブラシが導出され、タイル処理することができる。NineGridBrushは、画像がサイズに基づいて歪められることを除いて、ImageBrushと非常によく似ている。本質的には、NineGridBrushはStretchのカスタム型と考えられ、画像の一定部分は引伸ばされるが、他の部分(たとえば境界)は引伸ばされない。したがって、ImageBrushでは画像のサイズは単純な縮尺を実行し、NineGridBrushは所望のサイズまで不均一な縮尺を実行することになる。ブラシが適用される場合、縮尺されない領域に対する単位はユーザ単位であり、これはContentUnits(NineGridBrush用に存在する場合)がUserUnitsOnUseに設定されることになることを意味する。BrushのTransformプロパティを有効に使用することができる。境界のメンバは、画像の枠からカウントに入れることに留意されたい。
【0246】
上記で概説したように、本発明のグラフィックスオブジェクトモデルにはTransformオブジェクトモデルが含まれ、これは図7の階層でTransform基本クラスの下に表された変形の型を含むものである。変形を構成するこれらの異なる型のコンポーネントは、TransformList、TranslateTransform、RotateTransform、ScaleTransform、SkewTransform、およびMatrixTransformを含むことができる。個々のプロパティをアニメーション処理することが可能であり、たとえばプログラム開発者はRotateTransformのAngleプロパティをアニメーション処理することができる。
【0247】
2D計算用の行列が3×3行列として表される。変形が必要な場合、3×3行列すべてではなく6つの値のみが必要とされる。これらは以下のように命名され、および定義される。
【0248】
【表55】

【0249】
行列とポイントを掛け合わせると、そのポイントが新しい座標系から前の座標系に変形される。
【0250】
【表56】

【0251】
変形は何重にも入れ子にすることができる。新しい変形が適用される場合は必ず、現在の変形行列に後から掛け合わせたものと同じになる。
【0252】
【表57】

【0253】
API内のほとんどの場所は直接行列を取らないが、代わりにアニメーションをサポートするTransformクラスを使用する。
【0254】
【表58−1】

【0255】
【表58−2】

【0256】
【表58−3】

【0257】
(ベクトルグラフィックス用のマークアップ言語およびオブジェクトモデル)
本発明の一態様によれば、APIレイヤ212(図2)の詳細に関する特定の知識を必要とすることなく、ユーザプログラムおよびツールがシーングラフデータ構造216と対話できるようにするために、マークアップ言語および要素オブジェクトモデルが提供される。一般に、交換フォーマット、ならびに要素オブジェクトモデルを介してベクトルグラフィックスを表現するための単純なマークアップベースのオーサリングフォーマットを備えた、ベクトルグラフィックスマークアップ言語が提供される。この言語を介して、マークアップ(たとえばHTMLまたはXML型のコンテンツ)をプログラムすることができる。そこで、シーングラフを構築するため、前記で説明したように、マークアップは解析され、適切な映像APIレイヤオブジェクトに変換される。この高位のオペレーティングレベルで、かなりの複雑さを処理するために要素ツリー、プロパティシステム、およびレイアウトシステムが提供され、シーン設計者が複雑なシーンを簡単に設計できるようになっている。
【0258】
一般に、ベクトルグラフィックスシステムは、形状および他の要素の集合、一般的なプロパティシステムとの統合、グループ化および複合化システム、ならびに、ユーザが柔軟性および性能のニーズに合致する方法でプログラミング可能なような2層(要素レベルおよびリソースレベル)方式を提供する。ベクトルグラフィックスを処理するための要素オブジェクトモデルは、本発明の一態様を維持しながら、シーングラフオブジェクトモデルと相関関係にある。つまり、ベクトルグラフィックスシステムおよび映像APIレイヤは、要素オブジェクトモデルレベルでリソースの集合を共用するものであり、たとえば、映像APIで描画する際にはBrushオブジェクトが使用され、これはShapeでのFillプロパティ型でもある。したがってマークアップ言語は、シーングラフオブジェクトと相関する要素を有することに加えて、いくつかのプリミティブリソース(たとえばブラシ、変形など)を映像APIレイヤと共用する。さらにベクトルグラフィックスシステムは、レベル間で幅広く共用される映像APIレイヤのアニメーション機能も公開し、および拡張する。
【0259】
さらに以下で説明するように、ベクトルグラフィックスシステムは、要素レベルおよびリソースレベルを含む異なるプロファイルまたはレベルでプログラミングすることができる。要素レベルでは、それぞれの描画形状が、ページ/スクリーン内の残りのプログラム可能な要素と同じレベルの要素として表される。これは、形状が、レイアウトシステム、イベント、およびプロパティとフル方式で対話することを意味する。リソースレベルでは、ベクトルグラフィックスシステムは従来のグラフィックスメタファイルと同様に純粋なリソースフォーマットで動作する。リソースレベルは効率的であるが、カスケードプロパティ、イベンティング、および微細なプログラミングについてのサポートは限定的である。したがってシーン設計者は、必要に応じて効率性とプログラム可能性との釣り合いを取ることができる。
【0260】
リソースレベルのベクトルグラフィックスシステムは、本発明の一態様を維持しながら、一実施態様においてリソースレベルマークアップがVisualBrushとして表されるという点で、映像APIレイヤとも相関関係にある。リソースマークアップが解析される際に、映像オブジェクトが作成される。映像オブジェクトは、形状、コントロール、および他の要素が要素レベルで使用可能なVisualBrushに設定される。
【0261】
図22は、要素クラスの階層2200を示す図である。本発明のマークアップ言語オブジェクトモデルのクラスは影付きボックスで表され、形状クラス2502、画像クラス2504、ビデオクラス2206、およびキャンバスクラス2208が含まれる。形状クラスの要素には、矩形2210、線分群2212、多角形2214、軌跡2216、線分2218、および楕円2220が含まれる。一部の実施では、図22の破線ボックス2222で示されるような円要素が存在しない場合があるが、本明細書では様々な例を示す目的で円要素2222について説明する。各要素は、塗りつぶし(プロパティ)データ、ストロークデータ、クリッピングデータ、変形データ、フィルタ効果データ、およびマスクデータを含むか、またはこれらに関連付けられることができる。
【0262】
以下で説明するように、形状は、継承およびカスケードされた提示プロパティで描画されるジオメトリに対応する。提示プロパティは、形状を描画するために必要なペンおよびブラシを構築する際に使用される。一実施態様では、形状は他のコントロール要素と同様にフルプレゼンタ(full presenter)である。ただし他の実施では、キャンバスクラス2508を形状用のコンテナとして提供することが可能であり、形状はキャンバス要素内にある場合にのみ描画することができる。たとえば、形状を軽量に保つために、形状にプレゼンタを付加することができない場合がある。代わりに、キャンバスが付加プレゼンタを有し、形状を描画する。キャンバス要素については、以下でより詳細に説明する。
【0263】
後述するように、画像クラスは形状よりも特異であり、たとえば複雑な場合のある境界データを含むことができる。たとえば、境界は上側は1色、両側は異なる色を指定し、様々な厚さを指定することおよび他のプロパティを設定することができる。画像、あるいはテキストまたはビデオなどの同様のボックスで囲まれた要素に対して、位置、サイズ、回転、および縮尺を設定することができる。画像およびビデオ要素は、キャンバス要素の外側に存在し、および表示することが可能であり、たとえばその要素から背景、境界、およびパッドサポートを取得するために、BoxedElementから継承することもできることに留意されたい。
【0264】
ビデオ要素は、表示された要素の中でビデオ(または同様のマルチメディア)を再生させることができるものである。この方法では、ベクトルグラフィックスシステムは、テキスト、2Dグラフィックス、3Dグラフィックス、アニメーション、ビデオ、静止画像、および音声を含むマルチメディアを横切ってシームレスに一貫した、APIレイヤへのマークアップインターフェースを提供する。これによって設計者は、1つの媒体で作業を行い、他の媒体をアプリケーションおよび文書に容易に一体化させることを習得することができる。ベクトルグラフィックスシステムは、他の要素と同じ方法でマルチメディアをアニメーション化させることも可能であり、設計者はここでも、個々の媒体型の中核を成す固有性を失わせることなく他の要素と同様にマルチメディアを使用することが可能である。たとえば設計者は、回転、縮尺、アニメーション化、描画、合成、および他の効果に対して、異なる媒体型にまたがって同じ命名方式を使用することが可能であり、これによって設計者は、非常に豊富なアプリケーションを容易に作成すること、ならびに非常に効率的なレンダリングおよび合成の実施をその下に構築することができる。
【0265】
図23に、マークアップコード2302がパーサ/トランスレータ2304によって解釈される一実施態様を示す。一般に、パーサ/トランスレータ2304は、要素ツリー/プロパティシステム208(図2にも示される)に要素を追加し、それらの要素にプレゼンタを付加する。その後、レイアウトシステム210は付加されたプレゼンタと共に要素ツリー210を取得し、そのデータをオブジェクトおよび映像APIレイヤ212への呼出しに変換する。変換する必要があるのはすべての要素ではなく、プレゼンタが付加されたもののみであることに留意されたい。
【0266】
一般にマークアップはオブジェクトに分解され、通常、XAMLマークアップに関するXML方式がマークアップファイルの上位で以下のように宣言される。
【0267】
【表59】

【0268】
たとえば<Path>タグが使用される場合、パーサはこの方式を使用して関連する名前空間(たとえば、System.Windows.Shapes)を検索し、オブジェクトを分解および構築する。
【0269】
一般に、要素とは、プロパティシステム、イベンティング、およびレイアウト/提示システムに加わっている要素レイヤ内のオブジェクトのことである。パーサはタグを見つけ、それらのタグが要素またはリソースオブジェクトの定義に役立つかどうかを判別する。特別なVisualBrushの場合、それらのタグが現れる場所の状況に応じて、たとえば複雑なプロパティ構文内に現れるか否かに応じて、同じタグを要素として解釈するか、またはリソースオブジェクトとして解釈することもできる。
【0270】
本発明の一態様によれば、マークアップ言語は、単純な文字列フォーマットまたは複雑なオブジェクト表記法を含むリソースを記述する独特の方法を提供する。単純な文字列フォーマットの場合、パーサ/トランスレータ2304は、型変換器2308を使用して文字列を適切な映像APIオブジェクトに変換する。例を挙げると、型変換器2308を介して、以下のマークアップ行でFillプロパティ値をBrushオブジェクトに変換することができる。
【0271】
【表60】

【0272】
容易に理解できるように、こうした単純なパラメータの文字列を備えたタグベースのマークアップの線分の内側行をBrushオブジェクトに変換するのは簡単であり、形状およびその属性をシーンに追加する単純な方法をシーン設計者に提供する。
【0273】
しかしながら、Fill属性が複雑すぎて単一の文字列に入らない場合がある。こうした状況では、マークアップで線分の内側である可能性のある複雑なプロパティ構文を使用して、このプロパティを設定する。たとえば以下の複雑なプロパティ構文は、ソリッドカラーではなく勾配で円を塗りつぶすものであり、様々な勾配停止(0から1までの範囲が可能)で色を指定する。
【0274】
【表61】

【0275】
マークアップで線分の内側であることに加えて、リソースインスタンスはどこにでも(たとえば、ローカルであるか、またはリモートネットワーク上にあり適切にダウンロード可能な、マークアップまたはファイル内に)配置することが可能であり、名前(たとえば、テキスト名、参照または他の好適な識別子)で参照することができる。この方法の場合、シーン設計者は、複雑なプロパティ構文で記述された要素を含む要素ツリー内の要素を、シーン全体にわたって再使用することができる。
【0276】
パーサは、必要に応じて型変換器2308にアクセスすること、さらに指定されたパラメータをオブジェクトプロパティと付き合わせることによって、複雑なプロパティ構文内のマークアップを処理し、これによってシーンの設計が容易になる。したがってパーサは、オブジェクトをセットアップするだけではなく、オブジェクト上の属性も設定する。オブジェクトは不変であるため、パーサはオブジェクトを作成するために実際にビルダをインスタンス化することに留意されたい。
【0277】
同じレンダリングモデルが要素レベルとAPIレベルの間で共用されるため、多くのオブジェクトが本質的に同じである。これによって解析/変換がかなり効率的になり、様々な種類のプログラミング言語(たとえば、C#のような言語)が、マークアップからそれ自体の構文への変換およびその逆への変換を容易に実行できるようになる。図23に表されているように、こうした他のプログラミング言語2310は、要素ツリー208に要素を追加するか、または映像APIレイヤ212と直接インターフェースできることに留意されたい。
【0278】
図23にも示されているように、また本発明の一態様によれば、同じマークアップ2302を使用して、要素レベルおよびリソースレベルでプログラミングすることができる。前述のように要素レベルは、完全なプログラミングが可能であり、継承(たとえばスタイルシートのような機能)を提供するプロパティシステムの使用と、(たとえばそれによって要素が、ユーザの入力イベントに応答して外観、位置などを変更するためにコードを付加することができる)イベンティングとを、シーン設計者に与える。しかし本発明は、リソースレベルの機構も提供しており、シーン設計者はこれを使用して、本質的に要素ツリーをショートカットし、システムおよびプログラムを映像APIレイヤに直接レイアウトすることができる。要素レベルの機能を必要としない多くの型の静的形状、画像、および同様のものの場合、これによって、適切なオブジェクトを出力するためのより効率の良い軽量な方法が提供される。このためパーサは、「映像ブラシ」型の塗りつぶしが存在する場合を認識し、リソースレベルデータ2312を備えたAPIレイヤ212を直接呼び出して、オブジェクトを作成する。つまり、図22に示されるように、要素レベルのベクトルグラフィックスは作成済みの要素に解析され、これを後にオブジェクトに変換する必要がある一方で、リソースレベルのベクトルグラフィックスは解析された後、効率的な方法で直接格納される。
【0279】
例を挙げると、以下のマークアップはLinearGradientオブジェクト用のオブジェクトモデルから直接導出され、VisualBrushで外側の円を塗りつぶす。そのVisualBrushのコンテンツは内側のマークアップによって定義される。この構文は、一般に、様々なブラシ、変形、およびアニメーションを表すために使用されることに留意されたい。
【0280】
【表62】

【0281】
これらの映像ブラシ塗りつぶしオブジェクトが効率的に格納される一方で、図23に全体として示されるように、リソースレベルデータ(またはそれによって作成されたオブジェクト)は要素および要素ツリー208の一部によって参照できることに留意されたい。このため、これらの映像ブラシリソースは、複雑なプロパティ構文を介して記述された他のリソースと同様に、(たとえば名前、参照、または他の好適な識別子を使用して)命名および参照することができる。
【0282】
次にキャンバスについて説明すると、上記で代替の一実施態様で述べたように、形状は軽量に維持することが可能であるため、キャンバスに格納する必要がある場合がある。この代替実施では、コンテンツはレンダリングされる場合に、関連する座標系を有する装置に依存しない無限のキャンバス上にレンダリングされる。キャンバス要素は、絶対座標に従ってコンテンツを位置付けることができる。キャンバス要素は任意で、クリッピング、変形、好ましいアスペクト比、およびViewPortを親空間にマッピングする方法を指定するViewPortを定義することができる。確立されたViewPortがない場合、キャンバス要素は描画プリミティブのグループ化のみを指定し、変形、不透明度、および他の合成属性をセットアップすることができる。
【0283】
以下にキャンバスについてのマークアップ例を示す。
【0284】
【表63】

【0285】
一実施態様では、座標が単位なしで指定された場合、96分の1インチ(約0.026cm)の「論理ピクセル」とみなされ、上記の例では、線分の長さは200ピクセルとなることに留意されたい。他のプロパティには座標に加えて、幅、高さ、水平および垂直の位置合わせ、ならびにViewBox(Rect型、デフォルト値は未設定または(0,0,0,0)、すなわち調整されない、ならびに引伸ばしおよび位置合わせプロパティは無視される)が含まれる。図18〜20を参照しながら上記で概説したように、他のプロパティには引伸ばしが含まれ、これが指定されない場合、オリジナルサイズを保持するか、1)アスペクト比が保持されず、上/左/幅/高さによって確立された境界を塗りつぶすようにコンテンツが縮尺されるFillを指定する、2)上/左/幅/高さによって確立された境界に画像が収まるまでサイズを均一に縮尺するUniformを指定する、あるいは3)上/左/幅/高さによって確立された境界を塗りつぶすようにサイズを均一に縮尺し、必要に応じてクリッピングするUniformToFillを指定することができる。
【0286】
より低いレベルのオブジェクトモデルとさらに相関させるために、変形プロパティは要素の子に対して新しい座標フレームを確立するが、クリッププロパティは、キャンバス上にコンテンツを描画できる範囲を境界ボックスとして定義されたデフォルトのクリッピングする軌跡によって制約する。ZIndexプロパティを使用して、パネル内の入れ子にされたキャンバス要素のレンダリング順序を指定することができる。
【0287】
ViewBoxは、たとえばViewPortの範囲および起点を再定義することによって、コンテンツ用の新しい座標系を指定する。引伸ばしは、これらのコンテンツをViewPortにマッピングする方法を指定する際に役立つ。ViewBox属性の値は、たとえば空白および/またはカンマによって分けられた4つの「単位なし」数<min-x>、<min-y>、<width>、および<height>のリストであり、Rect型である。ViewBox rectは、ユーザ空間内に境界ボックスにマッピングする矩形を指定する。これは、scaleXおよびscaleYを挿入するのと同じ働きをする。引伸ばしプロパティ(オプションがNone以外の場合)は、グラフィックスのアスペクト比を保持するための追加の制御を提供する。指定された効果を達成するために、所与の要素の下位に対して追加の変形が適用される。
【0288】
上記の例では、各引伸ばし規則の下での上のマークアップサンプルでの矩形の効果的な結果は以下のようになる。
【0289】
【表64】

【0290】
キャンバス上で変形がある場合、本質的には上の(たとえばツリー内の)ViewBoxへのマッピングが適用される。このマッピングにより、形状だけでなくキャンバス内のいずれかの要素、たとえばボックス、テキストなどが引伸ばされることに留意されたい。さらに、ViewBoxが指定された場合、キャンバスはもはやそのコンテンツをサイズ変更せず、指定のサイズを有することにも留意されたい。y-widthおよびy-heightも指定された場合、ViewBoxは引伸ばし/位置合わせプロパティを使用して指定された幅および高さに合わせられる。
【0291】
オブジェクトモデル内の要素は、それぞれ「Clip」属性を適用することができる。一部の要素、特に形状では、これは一般的な言語ランタイムプロパティとして直接公開されるが、他の要素(たとえばほとんどのコントロール)では、このプロパティはDynamicPropertyを介して設定される。
【0292】
概略的に図24に示されるように、一般にクリッピングする軌跡は、コンテンツが描画できる領域を制限するものであり、この図では、クリッピングされていない形2402と、クリッピングする軌跡が指定された形2404(破線がクリッピングする軌跡を表す)でボタンが示されている。概念上は、現在アクティブなクリッピングする軌跡で境界付けられた領域の外部にある描画の部分は、いずれも描画されない。クリッピングする軌跡はマスクとみなすことが可能であり、クリッピングする軌跡の外にあるピクセルは黒であってアルファ値0を備え、クリッピングする軌跡の中にあるピクセルは白であってアルファ値1を備える(シルエットの枠に沿ったアンチエイリアス(anti−aliasing)は例外とする)。
【0293】
クリッピングする軌跡は、線分の内側またはより一般的にはリソースセクション内のいずれかで、Geometryオブジェクトによって定義される。クリッピングする軌跡は、以下の例に示されるように、要素上の「Clip」プロパティを用いて使用し、および/または参照される。
【0294】
【表65】

【0295】
クリップのアニメーション化は変形のアニメーション化と同様であることに留意されたい。
【0296】
【表66】

【0297】
軌跡は、「Geometry」データならびにFill、Stroke、およびStrokeWidthなどのレンダリングプロパティをPath要素上に指定することによって描画される。軌跡のマークアップの例は以下のように指定される。
【0298】
【表67】

【0299】
軌跡「Data」文字列はGeometry型である。描画される軌跡を指定するためのより冗長かつ完全な方法は、前述のように複雑なプロパティ構文を介することである。マークアップ(以下の例のような)は、前述のGeometryビルダクラスへ直接送られる。
【0300】
【表68】

【0301】
軌跡データ文字列用の文法を記述するための以下の表記法を使用して、軌跡データ文字列も記述される。
【0302】
【表69】

【0303】
この表記法で記述された軌跡データ文字列情報の例を、以下に示す(一実施態様では、要素レベルのプロパティの代わりにFillModeを指定できることに留意されたい)。
【0304】
【表70−1】

【0305】
【表70−2】

【0306】
【表70−3】

【0307】
【表70−4】

【0308】
【表70−5】

【0309】
【表70−6】

【0310】
画像要素(図25)は、完全なファイルのコンテンツが現在のユーザ座標系内の所与の矩形にレンダリングされることを示す。画像(画像タグで示される)は、以下の例で示すようにPNGまたはJPEGなどのラスタ画像ファイル、またはMIME型の「image/wvg」を備えたファイルを表示することができる。
【0311】
【表71】

【0312】
以下の表は、画像用のプロパティ例の一部に関する情報を提供するものである。
【0313】
【表72−1】

【0314】
【表72−2】

【0315】
前述のように、形状は、継承およびカスケードされた提示プロパティで描画された幾何学形状に対応する。以下の表は、前述の基本形状要素(Rectangle、Ellipse、Line、Polyline、Polygon)用の形状プロパティの例を示すものである。これらの基本形状は、ストロークプロパティ、塗りつぶしプロパティを有し、クリッピングする軌跡として使用され、継承特徴を有し、要素とリソースの両方のレベルに適用可能であることに留意されたい

【0316】
【表73−1】

【0317】
【表73−2】

【0318】
矩形用のマークアップ構文の例を以下に示す。
【0319】
【表74】

矩形とは、オブジェクトモデル内に以下のプロパティを有するものである(矩形は読取り/書込みされ、ゼロに等しいデフォルトの値を有し、継承をサポートし、要素とリソースの両方のレベルに適用されることに留意されたい)。
【0320】
【表75】

【0321】
円用のマークアップ構文の例を以下に示す。
【0322】
【表76】

【0323】
円とは、オブジェクトモデル内に以下のプロパティを有するものである(円は読取り/書込みされ、ゼロに等しいデフォルトの値を有し、継承をサポートし、要素とリソースの両方のレベルに適用されることに留意されたい)。
【0324】
【表77】

【0325】
楕円用のマークアップ構文の例を以下に示す。
【0326】
【表78】

【0327】
楕円とは、オブジェクトモデル内に以下のプロパティを有するものである(楕円は読取り/書込みされ、ゼロに等しいデフォルトの値を有し、継承をサポートし、要素とリソースの両方のレベルに適用されることに留意されたい)。
【0328】
【表79】

【0329】
線分用のマークアップ構文の例を以下に示す。
【0330】
【表80】

【0331】
線分とは、オブジェクトモデル内に以下のプロパティを有するものである(線分は読取り/書込みされ、ゼロに等しいデフォルトの値を有し、継承をサポートし、要素とリソースの両方のレベルに適用されることに留意されたい)。
【0332】
【表81】

【0333】
「Polyline」は接続された直線セグメントの集合を定義する。通常、「Polyline」は開いた形状を定義する。
【0334】
線分群用のマークアップ構文の例を以下に示す。
【0335】
【表82】

【0336】
線分群とは、オブジェクトモデル内に以下のプロパティを有するものである(線分は読取り/書込みされ、nullに等しいデフォルトの値を有し、継承をサポートし、要素とリソースの両方のレベルに適用されることに留意されたい)。
【0337】
【表83】

【0338】
Polygon要素は、接続された直線セグメントの集合を備えた閉じた形状を定義する。多角形用のマークアップ構文の例を以下に示す。
【0339】
【表84】

【0340】
多角形とは、オブジェクトモデル内に以下のプロパティを有するものである(線分は読取り/書込みされ、nullに等しいデフォルトの値を有し、継承をサポートし、要素とリソースの両方のレベルに適用されることに留意されたい)。
【0341】
【表85】

【0342】
「Polyline」および「Polygon」要素でポイントを指定するための文法は、以下の表記法で記述される。
【0343】
【表86】

【0344】
上記の表記法を使用した「Polyline」および「Polygon」要素でのポイントの指定について、以下に記載する。
【0345】
【表87−1】

【0346】
【表87−2】

【0347】
(結論)
前述の詳細な説明からわかるように、シーングラフとインターフェースするための様々な機構をプログラムコードに提供するシステム、方法、および要素/オブジェクトモデルが提供される。当該システム、方法、およびオブジェクトモデルは使用が簡単であり、さらに強力、柔軟、かつ拡張可能である。
【0348】
本発明には様々な修正および代替構造が可能であるが、図面にはその例示的実施形態が示されており、上記で詳細に説明してきた。しかし、開示された特定の形式に本発明を限定する意図はなく、逆に、本発明の精神および範囲内にあるすべての修正、代替構造、および等価物をカバーすることを意図するものであることを理解されたい。
【図面の簡単な説明】
【0349】
【図1】本発明を組み込むことが可能な例示的なコンピュータシステムを表すブロック図である。
【図2】本発明を組み込むことが可能なグラフィックレイヤアーキテクチャを全体として表すブロック図である。
【図3】本発明の一態様に従って、グラフィックスコマンドおよび他のデータを提供するために、シーングラフをトラバースすることなどによりシーングラフを処理するためのVisualおよび関連するコンポーネントのシーングラフを示す図である。
【図4】本発明の一態様に従って構築された、妥当性検査映像、描画映像、および関連する命令リストのシーングラフを示す図である。
【図5】本発明の一態様に従った、オブジェクトモデルの映像クラスを示す図である。
【図6】本発明の一態様に従った、オブジェクトモデルの様々な他のオブジェクトを示す図である。
【図7】本発明の一態様に従った、変形クラス階層を示す図である。
【図8】本発明の一態様に従った、ジオメトリスケールでの映像データの変形を示す図である。
【図9】本発明の一態様に従った、不均一スケールでの映像データの変形を示す図である。
【図10】本発明の一態様に従った、ジオメトリクラスのオブジェクトモデルを示す図である。
【図11】本発明の一態様に従った、PathGeometry構造を示す図である。
【図12】本発明の一態様に従った、プリミティブによって作成されたグラフィックスの例を示す映像および命令リストのシーングラフを示す図である。
【図13】本発明の一態様に従った、オブジェクトモデルのブラシクラスを示す図である。
【図14】本発明の一態様に従った、線形勾配ブラシオブジェクト内のデータから生じたレンダリングされたグラフィックスを示す図である。
【図15】本発明の一態様に従った、線形勾配ブラシオブジェクト内のデータから生じたレンダリングされたグラフィックスを示す図である。
【図16】本発明の一態様に従った、放射勾配ブラシオブジェクト内のデータから生じたレンダリングされたグラフィックスを示す図である。
【図17】本発明の一態様に従った、レンダリングされた9グリッドブラシオブジェクトを示す図である。
【図18】本発明の一態様に従った、様々な引伸ばし値を有することから生じたレンダリングされたグラフィックスを示す図である。
【図19】本発明の一態様に従った、様々なタイル値を有することから生じたレンダリングされたグラフィックスを示す図である。
【図20】本発明の一態様に従った、映像ブラシオブジェクト内のデータから生じたグリッドおよび変形グリッドを示す図である。
【図21】本発明の一態様に従った、映像から描画されたレンダリングされたグラフィックスを有するグリッドおよび変形グリッドを示す図である。
【図22】本発明の一態様に従った、要素オブジェクトモデルの要素クラスを示す図である。
【図23】本発明の一態様に従った、映像APIレイヤとインターフェースするためにマークアップ言語コードを解釈するためのコンポーネントを示す図である。
【図24】本発明の一態様に従った、ジオメトリ軌跡を介したクリッピングを示す図である。

【特許請求の範囲】
【請求項1】
コンピューティング環境において、
インターフェースを介してマークアップ言語データを備えた機能呼出しを受け取るステップと、
前記マークアップ言語データを解釈してシーングラフ内のデータを修正するステップと
を備えたことを特徴とする方法。
【請求項2】
前記シーングラフ内のデータを修正するステップは、映像クラスの新しいインスタンスを初期化するステップを含むことを特徴とする請求項1に記載の方法。
【請求項3】
前記シーングラフ内のデータを修正するステップは、前記シーングラフ内の映像オブジェクトと変形とを関連付けるコードを呼び出すステップを含むことを特徴とする請求項2に記載の方法。
【請求項4】
前記シーングラフデータ構造内のデータを修正するステップは、描画する映像を前記シーングラフ内に配置するコードを呼び出すステップを含むことを特徴とする請求項1に記載の方法。
【請求項5】
、前記描画する映像をレンダリングする機構を提供する描画コンテキストを返すステップをさらに備えたことを特徴とする請求項4に記載の方法。
【請求項6】
前記シーングラフ内のデータを修正するステップは、前記シーングラフ内の映像オブジェクトとブラシデータとを関連付けるコードを呼び出すステップを含むことを特徴とする請求項2に記載の方法。
【請求項7】
前記ブラシデータを関連付けるステップは、ソリッドカラーに対応するデータとして受け取るステップをさらに備えたことを特徴とする請求項6に記載の方法。
【請求項8】
前記ブラシデータを関連付けるステップは、線形勾配ブラシと少なくとも1つの停止を含む停止集合とに対応するデータを受け取るステップを含むことを特徴とする請求項6に記載の方法。
【請求項9】
前記ブラシデータを関連付けるステップは、放射勾配ブラシに対応するデータを受け取るステップを含むことを特徴とする請求項6に記載の方法。
【請求項10】
前記ブラシデータを関連付けるステップは、画像に対応するデータを受け取るステップを含むことを特徴とする請求項6に記載の方法。
【請求項11】
前記画像に適用する画像効果に対応するマークアップ言語データを受け取るステップをさらに備えたことを特徴とする請求項10に記載の方法。
【請求項12】
形状の輪郭を定義するペンデータに対応するマークアップ言語データを受け取るステップをさらに備えたことを特徴とする請求項1に記載の方法。
【請求項13】
前記マークアップ言語データは、矩形、線分群、多角形、軌跡、線分、および楕円の形状を含む集合のうちの少なくとも1つを含む形状クラスに対応することを特徴とする請求項1に記載の方法。
【請求項14】
前記シーングラフ内のデータを修正するステップは、前記シーングラフデータ構造内に矩形を表す幾何学形状関連機能を呼び出すステップを含むことを特徴とする請求項1に記載の方法。
【請求項15】
前記シーングラフ内のデータを修正するステップは、前記シーングラフデータ構造内に軌跡を表す幾何学形状関連機能を呼び出すステップを含むことを特徴とする請求項1に記載の方法。
【請求項16】
前記シーングラフ内のデータを修正するステップは、前記シーングラフデータ構造内に線分を表す幾何学形状関連機能を呼び出すステップを含むことを特徴とする請求項1に記載の方法。
【請求項17】
前記マークアップ言語データは、前記シーングラフデータ構造内の映像のヒットテストに関連することを特徴とする請求項1に記載の方法。
【請求項18】
前記シーングラフデータ構造内のデータを修正するステップは、前記シーングラフデータ構造内の映像の座標変形に関する機能を呼び出すステップを含むことを特徴とする請求項1に記載の方法。
【請求項19】
前記マークアップ言語データは、前記シーングラフデータ構造内の映像の境界ボックスの計算に関連することを特徴とする請求項1に記載の方法。
【請求項20】
前記シーングラフ内のデータを修正するステップは、前記シーングラフデータ構造内の映像オブジェクトへの共通インターフェースを介して機能を呼び出すステップを含むことを特徴とする請求項1に記載の方法。
【請求項21】
映像マネージャを呼び出し、レンダリング対象に少なくとも1つの映像オブジェクトのツリーをレンダリングするステップをさらに備えたことを特徴とする請求項1に記載の方法。
【請求項22】
前記シーングラフ内のデータを修正するステップは、前記シーングラフデータ構造内に少なくとも1つの映像オブジェクトを含むように構成されるコンテナオブジェクトを配置する機能を呼び出すステップを含むことを特徴とする請求項1に記載の方法。
【請求項23】
前記シーングラフ内のデータを修正するステップは、前記シーングラフデータ構造内に画像データを配置する機能を呼び出すステップを含むことを特徴とする請求項1に記載の方法。
【請求項24】
前記シーングラフ内のデータを修正するステップは、前記画像データに関連付けられた前記シーングラフデータ構造内に画像効果オブジェクトを配置する機能を呼び出すステップを含むことを特徴とする請求項23に記載の方法。
【請求項25】
前記シーングラフ内のデータを修正するステップは、前記シーングラフデータ構造内にテキストに対応するデータを配置する機能を呼び出すステップを含むことを特徴とする請求項1に記載の方法。
【請求項26】
前記シーングラフ内のデータを修正するステップは、前記機能呼出しに応答して描画コンテキストを提供する機能を呼び出すステップを含むことを特徴とする請求項1に記載の方法。
【請求項27】
前記機能呼出しは、保持された映像に対応し、コールバックを行って前記保持された映像の描画コンテキストを前記シーングラフデータ構造に戻すステップをさらに備えたことを特徴とする請求項26に記載の方法。
【請求項28】
前記シーングラフ内のデータを修正するステップは、前記シーングラフデータ構造内に3次元映像を配置する機能を呼び出すステップを含むことを特徴とする請求項1に記載の方法。
【請求項29】
前記シーングラフ内のデータを修正するステップは、前記3次元映像に2次元表面をマッピングするステップを含むことを特徴とする請求項28に記載の方法。
【請求項30】
前記シーングラフ内のデータを修正するステップは、前記シーングラフデータ構造内にアニメーションデータを配置する機能を呼び出すステップを含むことを特徴とする請求項1に記載の方法。
【請求項31】
前記アニメーションデータに対応するタイムライン情報を合成エンジンに送るステップをさらに備えたことを特徴とする請求項30に記載の方法。
【請求項32】
前記合成エンジンは、前記タイムライン情報に基づくグラフィックスデータを補間し、前記シーングラフデータ構造内のオブジェクトに対応する出力をアニメーション化することを特徴とする請求項31に記載の方法。
【請求項33】
前記合成エンジンは、前記シーングラフについて低いレベルであることを特徴とする請求項32に記載の方法。
【請求項34】
前記シーングラフ内のデータを修正するステップは、前記シーングラフデータ構造内に音声および/またはビデオデータに対応するオブジェクトを配置する機能を呼び出すステップを含むことを特徴とする請求項1に記載の方法。
【請求項35】
前記シーングラフ内のデータを修正するステップは、前記シーングラフデータ構造内のオブジェクトの可変値を変更するステップを含むことを特徴とする請求項1に記載の方法。
【請求項36】
コンピューティング環境において、
マークアップパーサと、
前記マークアップパーサをマークアップ言語データのソースに結合するインターフェースと、
オブジェクトモデルの映像情報用のコンテナと、
を備えたシステムであって、前記マークアップパーサは、前記インターフェースで受け取ったマークアップ言語データを前記オブジェクトモード内のオブジェクトのメソッド呼出しに変換し、前記映像情報用のコンテナ内のデータを修正することを特徴とするシステム。
【請求項37】
前記マークアップ言語データは、メソッド呼出しに変換され、映像オブジェクトのツリーをシーングラフデータ構造内に配置することを特徴とする請求項26に記載のシステム。
【請求項38】
前記マークアップ言語データは、少なくとも1つのメソッド呼出しに変換され、前記映像オブジェクトのツリーを前記シーングラフデータ構造内に配置構成することを特徴とする請求項37に記載のシステム。
【請求項39】
前記マークアップ言語データは、メソッド呼出しに変換され、前記映像オブジェクトを前記シーングラフデータ構造内に配置することを特徴とする請求項37に記載のシステム。
【請求項40】
前記マークアップ言語データは、メソッド呼出しに変換され、映像オブジェクトを前記シーングラフデータ構造内に配置することを特徴とする請求項36に記載のシステム。
【請求項41】
前記マークアップ言語データは、メソッド呼出しに変換され、前記映像オブジェクトにブラシを関連付けることを特徴とする請求項40に記載のシステム。
【請求項42】
前記マークアップ言語データは、メソッド呼出しに変換され、前記映像オブジェクトに幾何学形状を関連付けることを特徴とする請求項40に記載のシステム。
【請求項43】
前記幾何学形状は、楕円形状、矩形形状、線分形状、および軌跡形状を含む集合のうちの少なくとも1つを含むことを特徴とする請求項42に記載のシステム。
【請求項44】
前記マークアップ言語データは、メソッド呼出しに変換され、前記映像オブジェクトと変形とを関連付けることを特徴とする請求項40に記載のシステム。
【請求項45】
前記変形は、前記映像オブジェクトの知覚された角度を変更する回転変形を含むことを特徴とする請求項44に記載のシステム。
【請求項46】
前記変形は、前記映像オブジェクトの知覚されたサイズを変更する尺度変形を含むことを特徴とする請求項44に記載のシステム。
【請求項47】
前記変形は、前記映像オブジェクトの知覚された位置を変更する変換変形を含むことを特徴とする請求項44に記載のシステム。
【請求項48】
前記変形は、前記映像オブジェクトの知覚された歪みを変更する歪み変形を含むことを特徴とする請求項44に記載のシステム。
【請求項49】
前記マークアップ言語データは、前記変形に関連付けられたアニメーション情報を提供するものであって、前記アニメーション情報は、前記変形に関連付けられた変形データを経時的に変更し、それによって前記映像オブジェクトの前記変形を経時的にアニメーション化するものであることを特徴とする請求項44に記載のシステム。
【請求項50】
前記マークアップ言語データは、メソッド呼出しに変換され、前記映像オブジェクトに色を関連付けることを特徴とする請求項40に記載のシステム。
【請求項51】
前記マークアップ言語データは、メソッド呼出しに変換され、前記映像オブジェクトに勾配データを関連付けることを特徴とする請求項40に記載のシステム。
【請求項52】
前記マークアップ言語データは、メソッド呼出しに変換され、前記映像オブジェクトにタイルブラシを関連付けることを特徴とする請求項40に記載のシステム。
【請求項53】
前記マークアップ言語データは、メソッド呼出しに変換され、前記映像オブジェクトに画像を関連付けることを特徴とする請求項40に記載のシステム。
【請求項54】
前記マークアップ言語データは、メソッド呼出しに変換され、前記映像オブジェクトに描画プリミティブを備える描画を関連付けることを特徴とする請求項40に記載のシステム。
【請求項55】
前記マークアップ言語データは、メソッド呼出しに変換され、前記映像オブジェクトに音声および/またはビデオ媒体を関連付けるためにことを特徴とする請求項40に記載のシステム。
【請求項56】
前記マークアップ言語データは、メソッド呼出しに変換され、前記映像オブジェクトに画像効果を関連付けることを特徴とする請求項40に記載のシステム。
【請求項57】
前記マークアップ言語データは、形状の輪郭がどのようであるかを記述するために、メソッド呼出しに変換され、前記映像オブジェクトにペンを関連付けることを特徴とする請求項40に記載のシステム。
【請求項58】
前記マークアップ言語データは、メソッド呼出しに変換され、前記映像オブジェクトに関連付けられた描画コンテキストを取得することを特徴とする請求項40に記載のシステム。
【請求項59】
前記マークアップ言語データは、メソッド呼出しに変換され、前記映像オブジェクトにヒットテストデータを関連付けることを特徴とする請求項40に記載のシステム。
【請求項60】
前記マークアップ言語データは、メソッド呼出しに変換され、前記映像オブジェクトに矩形を関連付けることを特徴とする請求項40に記載のシステム。
【請求項61】
前記マークアップ言語データは、ソースの矩形をどのように引伸ばし、目的の矩形に合わせるべきかを記述するデータを含むことを特徴とする請求項60に記載のシステム。
【請求項62】
コンピューティング環境において、
マークアップ言語データを備えた機能呼出しを受け取るためのインターフェース手段と、
前記マークアップ言語データをグラフィックスデータのレンダリングに関連付けられたオブジェクトモデルに対応するデータに変換する解析手段と、
前記グラフィックスデータを出力するレンダリング手段と
を備えたことを特徴とするシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate


【公表番号】特表2007−509436(P2007−509436A)
【公表日】平成19年4月12日(2007.4.12)
【国際特許分類】
【出願番号】特願2006−536608(P2006−536608)
【出願日】平成16年7月28日(2004.7.28)
【国際出願番号】PCT/US2004/025723
【国際公開番号】WO2005/045800
【国際公開日】平成17年5月19日(2005.5.19)
【出願人】(500046438)マイクロソフト コーポレーション (3,165)
【Fターム(参考)】