JP2007509426A - 媒体統合レイヤ - Google Patents

媒体統合レイヤ Download PDF

Info

Publication number
JP2007509426A
JP2007509426A JP2006536594A JP2006536594A JP2007509426A JP 2007509426 A JP2007509426 A JP 2007509426A JP 2006536594 A JP2006536594 A JP 2006536594A JP 2006536594 A JP2006536594 A JP 2006536594A JP 2007509426 A JP2007509426 A JP 2007509426A
Authority
JP
Japan
Prior art keywords
visual
scene graph
data structure
data
graph data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2006536594A
Other languages
English (en)
Other versions
JP2007509426A5 (ja
Inventor
スブラマニアン スリラム
イー.ブランコ レオナルド
ビー.カーティス ドナルド
エス.ベダ ジョセフ
エー.シュナイダー ゲルハルト
ディー.シェクター グレッグ
エム.スミス アダム
エス.バンデンバーグ エリク
ダブリュ.カルキンス マシュー
ティー.ガロ ケビン
ストークス マイケル
ゴエル ラジャト
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2007509426A publication Critical patent/JP2007509426A/ja
Publication of JP2007509426A5 publication Critical patent/JP2007509426A5/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/005Tree description, e.g. octree, quadtree
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T13/00Animation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/14Digital output to display device ; Cooperation and interconnection of the display device with other functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/08Bandwidth reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/61Scene description
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2340/00Aspects of display data processing
    • G09G2340/04Changes in size, position or resolution of an image
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2340/00Aspects of display data processing
    • G09G2340/04Changes in size, position or resolution of an image
    • G09G2340/0407Resolution change, inclusive of the use of different resolutions for different screen areas
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2340/00Aspects of display data processing
    • G09G2340/04Changes in size, position or resolution of an image
    • G09G2340/0407Resolution change, inclusive of the use of different resolutions for different screen areas
    • G09G2340/0414Vertical resolution change
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2340/00Aspects of display data processing
    • G09G2340/04Changes in size, position or resolution of an image
    • G09G2340/0407Resolution change, inclusive of the use of different resolutions for different screen areas
    • G09G2340/0421Horizontal resolution change
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2340/00Aspects of display data processing
    • G09G2340/04Changes in size, position or resolution of an image
    • G09G2340/0407Resolution change, inclusive of the use of different resolutions for different screen areas
    • G09G2340/0428Gradation resolution change
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2340/00Aspects of display data processing
    • G09G2340/04Changes in size, position or resolution of an image
    • G09G2340/0464Positioning

Abstract

アプリケーションプログラミングインターフェース(API)およびオブジェクトモデルを含む媒体統合レイヤを用いると、プログラムコード開発者が、グラフィックスを出力するために、一貫性のある形でシーングラフデータ構造とインターフェースできるようになる。このインターフェースを介して、プログラムコードは、子ビジュアルを他のビジュアルに追加して、階層的シーングラフを構築し、形状データ、画像データ、アニメーションデータ、および他の出力用のデータなどの命令リストを書き込み、ビジュアルに対する変換プロパティ、クリッピングプロパティ、および不透明度プロパティを指定することができる。媒体統合レイヤおよびAPIは、プログラマが、簡単な形式においてアプリケーション内で合成効果を達成すると同時に、普通のアプリケーション実行に悪影響を及ぼさない形式においてグラフィックス処理装置を活用することを可能にする。複数レベルシステムに、異なる媒体型(2D、3D、ビデオ、音声、テキスト、および画像ングなど)を組み合わせ、それらを滑らかに継ぎ目なくアニメーションにする能力が含まれる。

Description

本発明は、一般的にはコンピュータシステムに関し、より詳細には、コンピュータシステム上で表示されるグラフィカル情報および他のビデオ情報の処理に関する。
1つには、メモリおよびバスの速度がメインプロセッサおよび/またはグラフィックスプロセッサの進歩に追いついていけていないことから、コンピュータシステムでグラフィックスにアクセスする従来の即時モードモデルが限界に達しようとしている。一般に、フレームを用意する現在の(例えばWM_PAINT)モデルは、複雑なグラフィックス効果が望まれるときに、ハードウェアリフレッシュに対応していくために非常に多くのデータ処理を必要とする。その結果、複雑なグラフィックス効果が従来のグラフィックスモデルを用いて試みられるとき、知覚される視覚的効果をもたらす変化を次のフレームに対して適時完了するのではなく、変化が、異なるフレームに亘って追加され、視覚的に顕著に望ましくない結果が引き起こされる場合がある。
グラフィックス出力を制御する新しいモデルが、本発明の譲受人に譲渡された、参照によって本明細書に組み込まれる、特許文献1、2、3、4、5、および6に記載されている。この新しいモデルは、グラフィックス処理テクノロジの複数の重要な改善を提供する。例えば、特許文献1は、全般的に、単純化されたデータ構造および/またはグラフィックスコマンドを下位レベルコンポーネントに渡すために、上位レベルコンポーネント(例えばオペレーティングシステムの)が、場面グラフ構築の計算集中的態様、アニメーションパラメータの更新、および場面グラフのデータ構造のトラバースを、比較的低い動作速度で実行する、複数レベルグラフィックス処理のシステムおよび方法を対象とする。上位レベル処理によって、データが大幅に単純化されるので、下位レベルコンポーネントは、グラフィックスサブシステムのフレームリフレッシュレートに対応するレートなどのより速いレート(上位レベルコンポーネントに対して)で演算して、データを、グラフィックスサブシステム用の一定の出力データに処理することができる。アニメーションが使用されるときに、変更を伴う場面全体を再描画する必要があるのではなく、下位レベル処理は、必要に応じてパラメータ間隔を補間して、レンダリングされるときに各フレームのわずかに変化した場面を提供する瞬間値を得ることができ、スムーズなアニメーションが提供される。
特許文献2には、グラフィックスの描画を求めるプログラムコード(アプリケーションプログラムまたはオペレーティングシステムコンポーネント)が他の態様を無変更のままにしながら場面グラフ記述のある態様を選択的に変更できるようにする、ミュータブル(mutable)(アニメーションにされた)値を提供するパラメータ化された場面グラフおよびパラメータ化されたグラフコンテナが記載されている。プログラムコードは、おそらくは異なるパラメータと共に、場面グラフの既に構築された部分を再利用することもできる。よく知られているように、パラメータ化を介して表示されたアイテムの外見を簡単に変更する能力および/または場面グラフの既存部分の再利用は、全体的なグラフィックス処理効率のかなりの向上をもたらす。
特許文献3には、全般的に、場面グラフ内のオブジェクトおよびデータを介してビジュアル情報を保管する、キャッシングデータ構造および関連する機構が記載されている。このデータ構造は、全般的に、それに含まれるビジュアル情報を取り込み、使用する形を知的に制御する機構に関連する。例えば、アプリケーションプログラムによって特に要求されない限り、このデータ構造に保管される情報のほとんどは、その情報への外部参照がなく、これによって、この情報を最適化するか、他の形で処理することが可能になる。よく知られているように、これによって、効率性およびリソースの節約がもたらされ、例えば、キャッシュデータ構造内のデータを異なるフォーマットに処理して、最もコンパクトな形にし、かつ/またはビットマップまたは他の後処理結果などの後続の繰り返される処理の必要性を減らすことができる。
米国特許仮出願第10/184795号 米国特許仮出願第10/184796号 米国特許仮出願第10/185775号 米国特許仮出願第10/401717号 米国特許仮出願第10/402322号 米国特許仮出願第10/402268号
上記の改良は、グラフィックス処理テクノロジでの多大な利益をもたらすが、プログラムが、この改善されたグラフィックスモデルおよび他の関連する改善を直接の形で効率的に使用する形であることが必要である。必要なものは、プログラムが、改善されたグラフィックスモデルによって提供される多数の特徴およびグラフィックス処理機能を利用し、これによって、複雑なグラフィックスデータおよび音声ビジュアルデータを効率的な形で出力するための、包括的だが単純なモデルである。
簡単に言えば、本発明は、プログラマが、普通のアプリケーション性能に悪影響を及ぼさない形でグラフィックス処理ユニットを活用しながら、単純な形でアプリケーション内で可能な複雑な合成効果を達成するAPIを提供する媒体統合レイヤ(media integration layer、MIL)を提供することである。1つの態様が、異なる媒体種(例えば、2D、3D、ビデオ、音声、テキスト、画像ングなど)を組み合わせ、これらを一緒に滑らか、かつ継ぎ目なくアニメーションにする能力を提供する。
MILは、マルチステージ合成のグラフィックスアーキテクチャと、プログラマチックなおよびスクリプト化されたインターフェースでの機能的パリティを可能にするプログラミングモデルを提供する。APIおよびスクリプトによって、レンダリングされるときに合成されるが、より即時モードの性質を有する領域を含む、保持される構造または場面の記述を作成できるようになる。
インターフェースを介して、MILは、ビジュアル情報を保管するデータ構造へのアクセスを提供し、その結果、アプリケーションが、コンピュータハードウェアによって提供されるグラフィックス機能を利用できるようになる。インターフェースは、要素オブジェクトモデルと、プログラムコード開発者がグラフィックスを作るために場面グラフデータ構造と一貫してインターフェースすることを可能にする形で、その要素オブジェクトモデルを使用するベクトルグラフィックスマークアップ言語とをサポートする。データ構造は、ビジュアル情報を直接にレンダリングするか「コンパイル」するのにも使用することができ、その結果、このデータ構造を、高速の合成およびアニメーションのために下位レベルグラフィックスシステムに供給できるようになる。
ベクトルグラフィックス要素オブジェクトモデルは、一般に、場面グラフの場面グラフオブジェクトモデルに相関する画像要素およびビデオ要素を含む、形状要素および他の要素に対応する。マークアップ要素を、場面グラフデータ構造のオブジェクトに変換される要素ツリー内の要素を含むデータに解析することができる。他のマークアップ要素を、場面グラフオブジェクトを作成するデータおよび呼出しに直接に変換することができる。マークアップ言語は、単純なストリングフォーマットまたは複合プロパティ構文を含む要素を記述する別個の形を提供し、この要素に名前を付けることができ、マークアップ要素内の他の位置での再利用が可能になる。
MILの一態様が、APIセットにまたがるアニメーションとタイミングの統合であり、これによって、固有のベースレベルの概念としてのアニメーションが提供される。スムーズなアニメーションを容易にするために、MILは、マルチレベルグラフィックス処理のシステムおよび方法(例えばオペレーティングシステムの)を提供する。そのようなマルチレベルグラフィックス処理システムの1つに、2つのコンポーネントすなわち、ティックオンデマンド(tick−on−demand)または低速ティック高レベルコンポーネントと、高速ティック(例えば、グラフィックスハードウェアのフレームリフレッシュレートでの)低レベルコンポーネントが含まれる。一般に、高レベルでより低周波数のコンポーネントは、低レベルコンポーネントに単純化されたデータ構造を渡すために、アニメーションパラメータ更新および場面データ構造トラバースという計算集中型の態様を実行する。低レベルコンポーネントは、グラフィックスサブシステムのフレームリフレッシュレートなどのより高い周波数で動作して、データ構造をグラフィックスサブシステムの一定の出力データに処理する。低レベル処理には、アニメーションのフレームごとの場面をレンダリングする瞬間値を得るのに必要な、すべてのパラメータ間隔の補間が含まれる。
最上位MILオブジェクトに、ビジュアルツリーが含まれ、このビジュアルツリーは、描画される主要な内容を含むオブジェクトである。コントロールが、ツリーのビジュアルから直接に導出される。ビジュアルは、装置独立であり、親コンテキスト独立である。レンダ対象は、ビジュアルが描画される装置である。このオブジェクト(例えば画面)は、それ自体のダーティ機構または無効化機構を有することができる。様々なレンダ対象に、ウィンドウ内の画面、Printer、Metafile、Surface、ストリーミング媒体ファイル(例えばDVD)、および、場面のうちで場面の残りと別々に描画される部分である「サブウィンドウ」が含まれる。他の描画関連オブジェクトに、レンダ対象でビジュアルツリーを描画するように構成されるオブジェクトを含むVisualRendererと、レンダ対象でビジュアルツリーを描画すべきときを知っているDisplay Schedulerオブジェクトが含まれる。Time Managerは、タイミングノード群のコンテキストオブジェクトであり、それに対してスケジューラがティックを呼び出すオブジェクトである。
Visual APIが提供され、これは、本質的に、媒体統合レイヤを介する描画の開始点であり、Visual Treeを媒体に接続するVisualManagerオブジェクトを含む複数の型のオブジェクトを含む。異なる型のVisualManager(例えば、Screen、Printer、およびSurface)が、その特定の媒体にVisual Treeをレンダリングする責任を負う。ビジュアルは、プログラマが描画する場所であり、ビジュアルツリー内のノードであり、プログラムが描画する場所を提供する。
DrawingContext APIは、VisualをImageDataに取り込むかレンダリングするビジュアル内容を構成する方法のコンテキストベースプログラミングモデルを提供する。DrawingContextクラスならびに、DrawingContextを獲得し、RetainedVisual/DrawingVisualでビジュアル内容を列挙するのに必要なクラスおよびエントリポイントが設けられる。
ミュータビリティ(mutability)を可能にするために、共通のChangeable基底クラスから派生する型の単一の集合が設けられる。ミュータビリティが所望の変化であるすべての型を、Changeableクラスから派生することができる。例えば、グラフィックスプログラミングで、オブジェクトモデルに、Brush、Pen、Geometry、FloatAnimation、GradientStop、Segmentなどが含まれる。IsChangeableプロパティは、変更可能なオブジェクトを、状態を定義するその現在値に応じて変更できるか否かを示す。
ブラシは、平面を塗り潰す方法を表すオブジェクトである。平面を絶対的な形で塗り潰すことができる他に、媒体統合レイヤのブラシは、塗り潰すオブジェクトのサイズに関して平面を塗り潰す方法を適合させることもできる。ブラシの型の例に、SolidColorBrush、VisualBrush(ベクトルグラフィックスリソース/Visualを参照することができる)、DrawingBrush、LinearGradient、RadialGradient、ImageBrush、およびNineGridBrushが含まれる。ある種のブラシオブジェクトは、使用されるときに、座標系にどのように関係するかを知っており、形状の境界ボックスが使用されるときに、それに関係する方法を知っている。このサイズは、ブラシが塗り潰すオブジェクトに基づく。ある型のブラシ(例えばVisualBrush)は、プログラマ定義のパターンを作成するためにタイリングすることもできる。Brush基底クラスは、トランスフォーム、全般的な不透明度、およびブレンドのモードを有する。Brush(ならびにVector GraphicsおよびMIL APIの他のオブジェクトリソース)オブジェクトは、変更可能であり、作成の後に書き込み可能であり、条件付きの使用(qualified use)に使用された後にどのように振る舞うかに関する全般的な変更可能なパターンに従う。
オブジェクトのGeometryクラスは、PenおよびBrushを用いる2Dベクトルベースデータのクリッピング、ヒットテスト(hit−testing)、およびレンダリングに使用することができる。派生されたGeometryクラスは、より具体的な構築および列挙のセマンティクスを提供する。複数の形状固有Geometry型、ならびにより複雑な形状のGeometryの明示的定義を可能にする一般化されたPathGeometryが、設けられる。Geometryは、抽象基底クラスである。GeometryCollectionは、定義された領域で特定のCombineMode演算を使用して組み合わされた複数のGeometryオブジェクトの集合である。このオブジェクトを用いると、PathGeometry内でのPathFigureオブジェクトを厳密に使用することが可能であるより簡単に、Geometryオブジェクトの視覚的組合せの構築が可能になる。
ImageSourceは、画像ングの基本構成要素を含む抽象クラスである。ImageSourceは、概念的に、特定のサイズおよび解像度におけるピクセルの単一で、一定の集合を表す。例えば、ImageSourceは、Decoderが提供できる画像ファイルの単一のフレームとすることができ、あるいは、それ自体のあるImageSourceに演算する変換の結果とすることができる。ImageSourceは、変更可能であるが、これは、それ自体のプロパティを変更できるからではなく、潜在的にそのサブクラスのプロパティを変更できるからである。
オブジェクトのTransformクラスは、ベクトルグラフィックスおよびラスタグラフィックスのスケーリング、回転、並進、および傾斜のために設けられる。派生されたTransformクラスは、扱い易い使用法および列挙のセマンティクスを提供する。
Effectsは、レンダリング中心の形で場面のビジュアル内容を変更する手段を提供する。例えば、ImageEffects(ラスタベースのビットマップ効果)は、場面の一部の画像に基づく完全に合成された表現を演算する。Effectsは、ImageEffects、BlendMode、およびVectorEffectsを含む様々な型に分解される。ImageEffectsは、サブグラフまたはElementに適用することによってリテインモードの場面で使用することができ、独立型の画像パイプラインで使用することができる。BlendModeは、画像に基づく効果の特定の形であり、全般的にImageEffectsと同一の形でリテインモードの場面に適用することができる。ブレンドモードは、ソースが合成されるときに、例えば乗算または加算など、ソースカラーと宛先カラーの組合せを実行する。
ヒットテストは、場面のビジュアルを選択するのに使用され、コントロールツリーの最上部から開始し、点または形状によってコントロールまたはコントロール群を返すことによって演算する。コントロールは、レンダリングされた形状、境界ボックス、アウトオブバンド形状(ヒット領域)、画像不透明度またはマスク、およびそれ自体の論理を含むサポートサービスを用いて、それがヒットするか否かを定義することができる。コントロールは、ヒットに関する特定のヒット関連データを返すことができる。ヒットテスト機構は、効率的な形でヒットテスト結果をフィルタリングすることができる。ヒットテストウォークは、ビジュアルツリーの深い右から左への探索であり、ヒットは、コールバックを介して、z順で上から下への形でレポートされる。下降するときに、ヒットテスタは、要素レベルの関係、例えば形状を有するキャンバスまたは内側キャンバスを有するドックパネルに関して、フィルタリングを見る。ヒットが発生するときに、ヒットテスタは、(存在する場合)さらなるヒットの処理を継続するか、または停止することができる。
タイミング制御エンジンとアニメーションオブジェクトとの集合からなるアニメーションシステムが設けられる。タイミングエンジンは、例えばアニメーションと音声またはビデオの媒体オブジェクトなど、時間依存性(time−varying)挙動を示すすべてのオブジェクトが使用できるサービスである。アニメーションオブジェクトは、タイムスパンを他のデータ型にマッピングする関数群を実装し、このデータ型は、その後、他の上位レベルオブジェクトへの入力として使用される。グラフィカルアニメーションが、アニメーション集合をレンダリング演算に関連付けることによって達成される。レンダリング動作で使用される各アニメーションは、「タイムライン」と称する別々のクロックに実行することができる。複数のタイムラインを、タイミングツリー内で編成して、階層的タイミングをサポートすることができる。アニメートされるプリミティブが描画され、アニメーションパラメータが指定されたならば、低レベルレンダリングシステムが、規則的な間隔で場面再描画を処理する。フレームがレンダリングされるたびに、その場面にかかわるアニメーションの現在値が、(ほとんどの場合にシステムクロックによって測定される)経過時間に基づいて計算され、その後、アニメーションにされるプリミティブが再描画される。
様々なプリミティブ型、カラー特徴、および媒体サポートも、MILを介して提供される。MediaDataを使用して、あらゆる音声/ビデオ内容を再生することができる。
他の利益および長所は、図面と共に解釈される次の詳細な説明から明白になる。
(例示的オペレーティング環境)
図1に、本発明を実施できる適切なコンピューティングシステム環境100の例を示す。コンピューティングシステム環境100は、適切なコンピューティング環境の一例にすぎず、本発明の使用または機能性の範囲に関する制限を提案することを意図されたものではない。コンピューティング環境100を、例示的オペレーティング環境100に示された構成要素のいずれかまたはその組合せに関する依存性または要件を有するものと解釈してもならない。
本発明は、多数の他の汎用または特殊目的のコンピューティングシステム環境またはコンピューティングシステム構成と共に動作する。本発明と共に使用するのに適する可能性がある周知のコンピューティングシステム、コンピューティング環境、および/またはコンピューティング構成の例に、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルド装置、ラップトップ装置、タブレット装置、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル民生用電子機器、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたは装置のいずれかを含む分散コンピューティング環境、および類似物が含まれるが、これに制限はされない。
本発明を、プログラムモジュールなど、コンピュータによって実行されるコンピュータ実行可能命令の全般的な文脈で説明することができる。一般に、プログラムモジュールには、特定のタスクを実行するか特定の抽象データ型を実施する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。本発明は、通信ネットワークを介してリンクされたリモート処理装置によってタスクが実行される分散コンピューティング環境で実践することもできる。分散コンピューティング環境では、プログラムモジュールを、メモリ記憶装置を含むローカルおよびリモートの両方のコンピュータ記憶媒体に配置することができる。
図1を参照すると、本発明を実施する例示的なシステムに、コンピュータ110の形の汎用コンピューティング装置が含まれる。コンピュータ110のコンポーネントに、処理ユニット120、システムメモリ130、およびシステムメモリを含む様々なシステムコンポーネントを処理ユニット120に結合するシステムバス121が含まれるが、これには制限はされない。システムバス121は、メモリバス、メモリコントローラ、周辺バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスを含む複数の種類のバス構造のいずれかとすることができる。制限ではなく例として、そのようなアーキテクチャに、ISA(Industry Standard Architecture)バス、MCA(マイクロチャネルアーキテクチャ)バス、EISA(Enhanced ISA)バス、VESA(Video Electronics Standards Association)ローカルバス、AGP(Accelerated Graphics Port)バス、およびメザニンバスとも呼ばれるPCI(Peripheral Component Interconnect)バスが含まれる。
コンピュータ110に、通常は、様々なコンピュータ読取り可能な媒体が含まれる。コンピュータ読取り可能な媒体は、コンピュータ110によってアクセスでき、揮発性および不揮発性、取外し可能および固定の両方を含む使用可能な媒体のいずれかとすることができる。限定ではなく例として、コンピュータ読取り可能な媒体に、コンピュータ記憶媒体および通信媒体を含めることができる。コンピュータ記憶媒体に、コンピュータ読取り可能な命令、データ構造、プログラムモジュール、または他のデータなどの情報を保管する任意の方法またはテクノロジで実施された、揮発性および不揮発性、取外し可能および固定の両方の媒体が含まれる。コンピュータ記憶媒体に、RAM、ROM、EEPROM、フラッシュメモリ、および他のメモリテクノロジ、CD−ROM、デジタル多用途ディスク(DVD)、または他の光学ディスク記憶、磁気カセット、磁気テープ、磁気ディスク記憶、または他の磁気記憶装置、あるいは所望の情報の保管に使用でき、コンピュータ110によってアクセスできる他のすべての媒体が含まれるが、これに限定されない。通信媒体によって、通常は、搬送波または他の移送機構などの変調されたデータ信号内のコンピュータ読取り可能な命令、データ構造、プログラムモジュール、または他のデータが実施され、通信媒体には、すべての情報配布媒体が含まれる。用語「変調されたデータ信号」は、信号内で情報をエンコードする形でその特性の1つまたは複数を設定または変更された信号を意味する。限定ではなく例として、通信媒体に、有線ネットワークまたは直接配線接続などの有線媒体と、音響、RF、赤外線、および他の無線媒体などの無線媒体が含まれる。上記のいずれかの組合せも、コンピュータ読取り可能な媒体の範囲に含まれるべきである。
システムメモリ130に、読取専用メモリ(ROM)131およびランダムアクセスメモリ(RAM)132などの揮発性メモリおよび/または不揮発性メモリの形のコンピュータ記憶媒体が含まれる。起動中などにコンピュータ110内の要素の間での情報の転送を助ける基本ルーチンを含む基本入出力システム133(BIOS)が、通常はROM 131に保管される。RAM 132には、通常は、処理ユニット120から即座にアクセス可能、かつ/または処理ユニット120によって現在操作中のデータおよび/またはプログラムモジュールが含まれる。制限ではなく例として、図1に、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136、およびプログラムデータ137を示す。
コンピュータ110に、他の取外し可能/固定の、揮発性/不揮発性のコンピュータ記憶媒体も含めることができる。例のみとして、図1に、固定の不揮発性磁気媒体から読み取るかこれに書き込むハードディスクドライブ141、取外し可能な不揮発性磁気ディスク152から読み取るかこれに書き込む磁気ディスクドライブ151、CD−ROMまたは他の光媒体などの取外し可能な不揮発性光ディスク156から読み取るかこれに書き込む光ディスクドライブ155を示す。例示的なオペレーティング環境で使用できる他の取外し可能/固定の、揮発性/不揮発性のコンピュータ記憶媒体に、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートRAM、ソリッドステートROM、および類似物が含まれるが、これに限定されない。ハードディスクドライブ141は、通常は、インターフェース140などの固定のメモリインターフェースを介してシステムバス121に接続され、磁気ディスクドライブ151および光ディスクドライブ155は、通常、インターフェース150などの取外し可能なメモリインターフェースによってシステムバス121に接続される。
上述の図1に示したドライブおよびそれに関連するコンピュータ記憶媒体は、コンピュータ110のコンピュータ読取り可能な命令、データ構造、プログラムモジュール、および他のデータの記憶を提供する。図1では、例えば、ハードドライブ141が、オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146、およびプログラムデータ147を保管するものとして図示されている。これらのコンポーネントを、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136、およびプログラムデータ137と同一のまたは異なるもののいずれともすることができることに留意されたい。オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146、およびプログラムデータ147は、少なくとも異なるコピーであることを示すために、異なる符号を与えられている。ユーザは、タブレット(電子ディジタイザ)164、マイクロホン163、キーボード162および、一般にマウス、トラックボール、またはタッチパッドと称するポインティングデバイス161などの入力装置を介してコンピュータ110にコマンドおよび情報を入力することができる。他の入力装置(図示せず)に、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナ、または類似物を含めることができる。上記および他の入力装置は、しばしば、システムバスに結合されたユーザ入力インターフェース160を介して処理ユニット120に接続されるが、パラレルポート、ゲームポート、またはUSB(universal serial bus)などの他のインターフェースおよびバス構造によって接続することができる。モニタ191または他のタイプのディスプレイ装置も、ビデオインターフェース190などのインターフェースを介してシステムバス121に接続される。モニタ191に、タッチスクリーンインターフェース192などのインターフェースを介してコンピュータシステム110に手書きなどのデジタル化された入力を入力できるタッチスクリーンパネル193または類似物と一体化することもできる。モニタおよび/またはタッチスクリーンパネルを、タブレット型パーソナルコンピュータのように、コンピューティング装置110が組み込まれるハウジングに物理的に結合することができ、この場合に、タッチスクリーンパネル193が、本質的にタブレット164として働くことに留意されたい。さらに、コンピューティング装置110などのコンピュータに、スピーカ195およびプリンタ196など、出力周辺インターフェース194または類似物を介して接続できる他の周辺出力装置も含めることができる。
コンピュータ110は、リモートコンピュータ180などの1つまたは複数のリモートコンピュータへの論理接続を使用して、ネットワーク化された環境で動作することができる。リモートコンピュータ180は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピア装置、または他の一般的なネットワークノードとすることができ、通常は、上でコンピュータ110に関して説明した要素の多くまたはすべてが含まれるが、図1には、メモリ記憶装置181だけを示した。図1に示された論理接続に、ローカルエリアネットワーク(LAN)171および広域ネットワーク(WAN)173が含まれるが、他のネットワークも含めることができる。そのようなネットワーキング環境は、オフィス、会社規模のコンピュータネットワーク、イントラネット、およびインターネットとして一般的である。
LANネットワーキング環境で使用されるときに、コンピュータ110は、ネットワークインターフェースまたはネットワークアダプタ170を介してLAN 171に接続される。WANネットワーキング環境で使用されるときに、コンピュータ110に、通常は、インターネットなどのWAN 173を介する通信を確立する、モデム172または他の手段が含まれる。モデム172は、内蔵または外付けとすることができるが、ユーザ入力インターフェース160または他の適当な手段を介してシステムバス121に接続することができる。ネットワーク化された環境では、コンピュータ110に関して図示されたプログラムモジュールまたはその一部を、リモートメモリ記憶装置に保管することができる。限定ではなく例として、図1に、メモリ装置181に常駐するものとしてリモートアプリケーションプログラム185を示す。図示のネットワーク接続が例示的であり、コンピュータの間の通信リンクを確立する他の手段を使用できることを理解されたい。
(媒体統合レイヤ(MIL))
本発明の一態様は、全般的に、媒体統合レイヤ(MIL)と称するアーキテクチャを対象とし、このMILには、即時モードグラフィックスアプリケーションプログラミングインターフェース(API)、描画命令のキャッシングでも役割を演ずる画面分割データ構造およびAPI、コントロールレベルオブジェクト群、ならびにマークアップ言語が含まれる。一般に、アーキテクチャは、アプリケーションまたはオペレーティングシステムコンポーネントなどのプログラムコードが、システムディスプレイにグラフィカル出力をレンダリングするために、描画命令および他の情報(例えば画像ビットマップ)をグラフィックスコンポーネントに通信できるようにする。本発明の態様は、例えばオブジェクトモデルに対するAPIの形の、データ構造、命令リスト(描画プリミティブ/コマンド)、および他のグラフィックス関連データをプログラムがシーングラフに取り込むことを可能にする、複数の定義された関数およびメソッドを提供する。処理されるときに、シーングラフは、画面に表示されるグラフィックスをもたらす。
本発明の態様によれば、MILは、レイヤで働く合成されたシステムである。合成される各アイテムは、概念上、完全なアルファチャネルを有するビットマップに描画される。そのアルファチャネルが、ビットマップをバックバッファに合成するときに使用される。個々のオブジェクトは、後ろから前の順で合成される。これが、概念モデルであるが、実際には、システムは、完全な中間ビットマップサーフェスが必要でないときを理解し、バックバッファまたは他のバッキングサーフェスに直接合成することに留意されたい。システムは、増分変更も理解し、最小限の再ペイントを行うことができる。
図2は、本発明を実施することができる全般的なレイヤアーキテクチャ(MIL)200を表す。図2に示すように、プログラムコード202(例えば、アプリケーションプログラム、オペレーティングシステムコンポーネント、または類似物)を開発して、イメージング204、ベクトルグラフィックス要素206、および/またはビジュアルアプリケーションプログラミングインターフェース(API)レイヤ212に対して直接に行われる関数呼出し/メソッド呼出しを介することを含む1つまたは複数の様々な形でグラフィックスデータを出力することができる。一般に、イメージング204は、例えばビットマップなどの画像を読み込み、編集し、保存する機構を有するプログラムコード202を提供する。下で説明するように、これらの画像を、システムの他の部分によって使用することができ、画像を直接に描画するためにプリミティブ描画コードを使用する形もある。ベクトルグラフィックス要素206は、オブジェクトモデルの残りとの一貫性のある、グラフィックスを描画するもう1つの形を提供する(下で説明する)。ベクトルグラフィックス要素206は、マークアップ言語によって作成することができ、このマークアップ言語を、要素/プロパティシステム208およびレイアウトシステム210が解釈して、ビジュアルAPIレイヤ212への適当な呼出しが行われる。ベクトルグラフィックス要素206は、要素/プロパティシステム208およびレイアウトシステム210と共に、前述の同時係属の特許文献4に記載されている。
したがって、MIL200には、イメージング204を含む、画像の読み込み、編集、および保存のためのパイプラインである、プログラマがプログラムできる異なる階層が含まれる。これらの画像は、望み通りにシステムの残りで使用することができる。さらに、プリミティブ描画コードを使用して画像を直接に描画する形もある。
もう1つの階層に、Visual API212が含まれ、ビジュアルAPI212は、主に、描画される項目を編成するためにデータ構造216へのアクセスを提供するAPIである。これらのアイテムの各々を、システムによってキャッシングできる描画命令を用いて読み込むことができる。このデータ構造および描画されるものを指定する様々な形があり、通常のMIL対応アプリケーションの内部では、このAPIを、レイアウトシステム210の中から使用することができる。
プログラミングの第3レベルに、ベクトルグラフィックス要素レベル206が含まれ、これは、コントロール/要素オブジェクトモデルの残りとの一貫性がある形でグラフィックスを記述し描画するマークアップ言語である。ベクトルグラフィックス要素によって、要素システムを介してグラフィックスシステムが公開される。これには、レンダリング用の要素群と、任意の要素に作用するプロパテ群が含まれる。一実施形態に、2つのサブセットがあり、これには、要素に解析され、要素を作成する要素レベルベクトルグラフィックスと、効率的な形で解析され、保管されるリソースレベルベクトルグラフィックスが含まれる。要素レベルオブジェクトモデルは、要素ツリーにプロパティシステムおよびレイアウトシステム210を持ち込む、上位レベルでのコントロールワールドで動作することを指す。解析に関して、要素レベルの多くの動的プロパティが、MIL型である。一般に、マークアップ要素は、オブジェクトに解決され、XAMLマークアップのXMLスキームが、通常は次のようにマークアップファイルの最上部で宣言される。
<Canvas xmlns="http://schemas.microsoft.com/2003/xaml"
xmlns:def="Definition"
def:Class="Surfin.ChannelBrowser"
def:CodeBehind="ChannelBrowser.xaml.cs"
ID="mainCanvas" Background="Black" Width="100%"
Height="100%"
Loaded="PageLoaded">
例えば<Path>タグが使用されるときに、パーサは、スキーマを使用して関連する名前空間(例えばSystem.Windows(登録商標).Shapes)を検索して、オブジェクトを解決し、構築する。前述の同時係属の特許文献4に全般的に記載されているように、パーサは、型コンバータに頼って、文字列からMILオブジェクトのインスタンスに変換する。複合構文を必要とする型のそれぞれが、任意選択のXML属性として公開される書込可能なCLR(common language runtime)プロパティを有し、このプロパティが、動的プロパティと同一の形で解析される。一部の型(特にBrush)は、単純な形と複雑な形のどちらでも解析することができる。
これらのレイヤのいずれかまたはこれらのクラスのいずれかに対する関数呼出しを、直接にまたは間接に処理できることに留意されたい。例えば、要求ハンドラに、あるオペレーティングシステムで受け取られる要求を別のオペレーティングシステムによって処理されるAPI呼出しに変換するミドルウェアコードを含めることができる。したがって、本明細書で使用される関数は、実際の処理がどこで行われるかにかかわらず、データ構造およびクラスがどこで提供されるかにかかわらず、要求された挙動を「行わせる」プログラムによって呼び出される。
理解されるように、また、図2に示すように、アニメーションシステム220は、API全体に広がる。本明細書で説明するように、アニメション値(animate values)を、要素プロパティレベル208、Visual API212の内部、および他のリソースのすべてを含む、実質的にどこにでも渡すことができる。タイミングシステムも、要素レベルとビジュアルレベルの両方で公開される。
一実施形態において、グラフィックスレイヤアーキテクチャ200に、高レベル合成アニメーションエンジン214が含まれ、高レベル合成アニメーションエンジン214は、キャッシングデータ構造216を含むか、他の形でこれに関連する。キャッシングデータ構造216には、後述するように、定義されたオブジェクトモデルに従って管理される階層的に配置されたオブジェクトを含むシーングラフが含まれる。一般に、ビジュアルAPIレイヤ212は、プログラムコード202(およびレイアウトシステム210)に、オブジェクトの作成、オブジェクトにデータを供給するためのオブジェクトのオープンおよびクローズなどの能力を含む、キャッシングデータ構造216へのインターフェースを提供する。言い換えると、高レベル合成アニメーションエンジン214は、統一された媒体APIレイヤ212を公開し、この媒体APIレイヤ212によって、開発者が、グラフィックス情報を表示するためにグラフィックスおよび媒体に関する意図を表現し、基礎になるプラットフォームがプログラムコードに関するハードウェアの使用を最適化できるように、そのプラットフォームに十分な情報を供給することができる。例えば、基礎になるプラットフォームは、キャッシング、リソースネゴシエーション、および媒体統合の責任を負う。
一実施形態において、高レベル合成アニメーションエンジン214は、命令ストリームおよび場合により他のデータ(例えば、ビットマップへのポインタ)を、高速な低レベル合成アニメーションエンジン218に渡す。一般に、低レベル合成アニメーションエンジン/レンダラ218は、実際の描画および画面への合成を管理するシステム群を提供する。本明細書で使用される用語「高レベル」および「低レベル」が、他のコンピューティングシナリオで使用されるものに類似し、一般に、上のコンポーネントに対してソフトウェアコンポーネントが低レベルであるほど、そのコンポーネントはハードウェアに近い。したがって、例えば、高レベル合成アニメーションエンジン214から送られるグラフィックス情報を、低レベル合成アニメーションエンジン218で受け取ることができ、その情報が、ハードウェア222を含むグラフィックスサブシステムにグラフィックスデータを送るのに使用される。本発明を、2層以上の多層合成に拡張できることに留意されたい。
さらに、解像度および装置から独立なユーザインターフェースを容易にするために、ピクセルの概念が、主APIの基本単位として公開されないことに留意されたい。そうではなく、最初の座標系は、その座標系の1単位が1/96インチ(約0.265mm)と等しくなるように設定される。一部のシステム(高解像度のモニタまたはプリンタなど)では、これがピクセルにマッピングされないが、これをdipまたはpxと呼ぶことができる。Lengthでは、dip単位が、1ユーザ単位に直接に変換される。他の物理単位(インチ、cm、ポイントなど)の間の乗数は、1/96インチ(約0.265mm)でロックされる。これは、スケール変換が使用される場合に、物理的問題に指定される場合であっても、その変換が描画されるすべてのものに影響することを意味する。1/96インチ(約0.265mm)という値は、デフォルトユーザ単位が、デフォルト設定を有する現在のディスプレイでの1ピクセルと等しくなるように選択されたものである。レイアウトシステムおよび他のユーザコードにヒントを供給し、その結果、これらを、レンダリング先の装置の出力解像度に合わせて最適化できるようにする機構を提供できることに留意されたい。
高レベル合成アニメーションエンジン214は、プログラムコード202とあいまって、プログラムコード202によって供給されるグラフィックス場面を表す場面グラフを構築する。例えば、描画される各アイテムを、描画命令を用いて読み込むことができ、この描画命令を、システムが場面グラフデータ構造216にキャッシングすることができる。後述するように、このデータ構造216および描画されるものを指定する複数の様々な形がある。さらに、高レベル合成アニメーションエンジン214は、タイミングアニメーションシステム220と一体化して、宣言的(または他の)アニメーションコントロール(例えばアニメーションインターバル)およびタイミングコントロールを提供する。アニメーションシステムを用いると、例えば要素プロパティレベル208、ビジュアルAPIレイヤ212の内部、および他のリソースのすべてを含む、システム内の本質的にすべての場所にアニメーション値を渡せるようになることに留意されたい。タイミングシステムは、要素レベルとビジュアルレベルで公開される。
低レベル合成アニメーションエンジン218は、グラフィックスサブシステム222によって提供される、場面の合成、アニメーション、およびレンダリングを管理する。低レベルエンジン218は、複数のスレッド(例えば1つまたは複数のアプリケーションからの)の場面のレンダリングを合成し、レンダリングコンポーネントと共に、画面へのグラフィックスの実際のレンダリングを実施する。しかし、時々、レンダリングの一部を上位レベルで行うことが必要かつ/または有利になる場合があることに留意されたい。例えば、下位レイヤは、複数のスレッドからの要求をサービスするが、上位レイヤは、スレッドごとの基礎でインスタンス化され、これによって、イメージング機構204を介して、時間がかかるがスレッド固有のレンダリングを上位レベルで実行し、ビットマップへの参照を下位レイヤに渡すことが可能になる。
MIL200は、Pen、Brush、Geometry、Transform、およびEffectsを含む、この階層化スタック全体を介して共有されるリソースおよびクラスの集合など、グラフィックスプログラミングおよび音声ビジュアルプログラミングの改良を提供するために統合される複数の概念を提供する。また、Points、Rectangleなどを含む単純なプリミティブ型が設けられる。PenおよびBrushは、これらの様々な階層でレンダリングにどのように影響するかを記述する複合型である。VisualBrushと称するBrushの特殊な型も設けられ、これによって、プログラマが、領域の塗潰しに任意のグラフィックス「メタファイル」を使用できるようになる(明示的にVisualBrushを介してまたはVisualBrushを参照するPenを介して)。これは、任意のグラフィックスを保管し、使用する圧縮形式なので、グラフィックスリソースの役割を演ずる。これらのオブジェクトを直接に作成するのに使用されるベクトルグラフィックスマークアップ構文の特定のプロファイルがある。全般的にVisualBrushに似ているが、DrawingBrushは、より圧縮され、要約されており、本質的にメタファイルブラシであるが、VisualBrushは場面グラフブラシである。
他のクラスに、Geometryが含まれ、これは、塗潰し、ストローキング、またはクリッピングに関して領域を定義するのに使用される複合型である。Transformは、座標空間をどのように変換するかを定義するもう1つの複合型階層である。Effectsは、内容のセクションに対する任意のフィルタ効果、例えばブラーをかけるためのシステムを記述する。これに、アドイン拡張性モデルも含まれることに留意されたい。
上記の型を使用して画面または他の対象へのビットを得るVisual APIが設けられる。これには、システムの残りへのベースレベルフックアップ(hWndまたは他の機構を介する)が、上で導入した画面分割データ構造と共に含まれる。Imagingを用いると、プログラマが、画像をMILベースシステムに与えるかそれから得ることができるようになる。Mediaは、音声およびビデオを含む媒体の他の形を使用する能力を提供する。一般に、Visual APIは、要素システムおよびレイアウトシステムの下位で動作するAPI群をさし、上位レベルではなくVisualを用いてプログラムし、Visualに対して直接にプログラムすることを指す。ビジュアルが、キャッシングデータ構造216の基本オブジェクトであり、画面上のビジュアルなものに関する保存されるデータ構造を含み、性能のためにInstruction Listおよび装置固有リソースをキャッシングすることに留意されたい。
図3および4に、それぞれVisualと称するベースオブジェクトを含む、例のシーングラフ300および400を示す。一般に、Visualには、ユーザへの仮想サーフェスを表し、ディスプレイのVisual表現を有するオブジェクトが含まれる。図5からわかるように、基底クラスVisualは、他のVisual型の基礎の機能性を提供する、すなわち、Visualクラスは、そこからVisual型が派生される抽象基底クラスである。
図3に示すように、トップレベル(またはルート)Visual302は、Visualマネージャオブジェクト304に接続され、Visualマネージャオブジェクト304は、グラフィックデータがプログラムコードのために出力されるウィンドウ(HWnd)306または類似するユニットとの関係(例えばハンドルを介する)も有する。VisualManager304は、そのウィンドウ306へのトップレベルVisual(およびそのVisualのすべての子)の描画を管理する。図6に、本明細書に記載のグラフィックスシステムのオブジェクトモデル内の他のオブジェクト620の集合の1つとしてVisualManagerを示す。
描画するために、VisualManager304は、前述の米国特許仮出願に全般的に記載されているように、ディスパッチャ308によってスケジューリングされるものとしてシーングラフを処理し(例えばトラバースするか送り)、グラフィックス命令および他のデータを、その対応するウィンドウ306の低レベルコンポーネント218(図2)に供給する。シーングラフ処理は、通常、低レベルコンポーネント218および/またはグラフィックスサブシステム222のリフレッシュレートより相対的に低いレートでディスパッチャ308によってスケジューリングされる。図3に、トップレベル(ルート)Visual302の下に階層的に配置された複数の子Visual 310から314を示すが、子Visualの一部は、例えばInstruction Listsおよび他のVisualを含む関連する命令リスト318および319に関連する描画コンテキスト316および317(その一時的な性質を表すために破線で図示)を介して取り込まれたものとして表されている。Visualに、他のプロパティ情報も含めることができる。一般に、図5に示されているように、基底ビジュアルクラスに対するアクセスのほとんどは、IVisualインターフェースを介し、ビジュアルは、DependencyObjectから派生する。Visual(付録でさらに説明する)に、次の例のVisualクラスに示されているように、他のプロパティ情報も含めることができる。
Figure 2007509426
Figure 2007509426
Visualは、グラフィカル内容および子の集合のコンテナである。Visualの様々なプロパティを使用して、Visualのレンダリング挙動を制御することができる。例えば、Visualでクリップを設定することによって、Visualの内容が、指定された形状にクリッピングされる。他のプロパティは、transform、blend mode、opacity、showなどである。これらのプロパティのすべてを、getプロパティおよびsetプロパティを介して制御することができる。
Showプロパティは、ビジュアルの表示/非表示に使用され、例えば、偽のときにビジュアルが不可視であり、そうでないときにビジュアルが可視になる。さらに、MILオブジェクト(Visual APIレイヤのVisualまたは要素レイヤの要素のいずれか)が、階層内に存在する。座標系は、この階層を介して下に継承される。この形で、親が、レンダリングパスを変更する座標変換をプッシュし、その親の子に適用させることができる。
ビジュアルの変換は、そのビジュアルへの接続に対するものである。言い換えると、変換は、親のVisualCollection Childrenプロパティに対する[Get|Set]ChildTransformを介して設定される。後で説明するVisualCollectionも参照されたい。
座標変換を、すべてのものに、それがビットマップ内にあるかのように均一な形で適用できることに留意されたい。これが、変換が必ずビットマップに適用され、レンダリングされるものが変換によって同等に影響を受けることを意味しないことに留意されたい。例えば、ユーザが、1インチ(25.4mm)幅のラウンドペンを用いて円を描画し、その円に、X方向で2のスケールを適用する場合に、ペンは、左右で2インチ(50.8mm)幅、上下で1インチ(25.4mm)幅になる。これを、時々、合成またはビットマップ変換と称する(形状だけに影響するスケルトンスケールまたは形状スケールではなく)。図8は、変換されていない画像800が左、不均一スケールを有する変換された画像802が右に示された、スケーリング変換を表す図である。図9は、変換されていない画像800が左、形状スケーリングを有する変換された画像904が右に示された、スケーリング変換を表す図である。
ビジュアルの座標変換に関して、TransformToDescendantは、基準ビジュアルから子孫ビジュアルに向かう座標空間変化を反映する変換を返す。この変換は、例えば、基準ビジュアルの座標空間から子孫ビジュアルの座標空間に点を変換するのに使用することができる。TransformFromDescendantは、同様に、子孫Visualから基準Visualに向かう座標空間変化を記述する変換を返す。この変換は、子孫ビジュアルの座標空間から基準ビジュアルの座標空間に点を変換するのに使用することができる。便宜上、Visual APIは、やはり各々の座標空間変化の変換を返すTransformToAncestor、TransformFromAncestor、TransformFromVisual、およびTransformToVisualを提供する。最後の2つのAPIで、Visualの間の関係が指定されないことに留意されたい。これらは、共通の祖先を共有する限り、Visualツリー内で対等とすることもできる。実施形態は、共通の祖先を見つけ、基準Visualから共通の祖先への座標変換を計算し、その後、共通の祖先から対象Visualへの座標変換を計算する。結果の変換は、例えば、指定されたVisualの間で点を変換するのに使用することができる。
Visualの内容の境界ボックスを判定するのに使用できる2getプロパティすなわち、子孫のすべてのグラフィカル内容の境界ボックスであるVisualDescendantBoundsと、内容の境界であるVisualContentBoundsがある。これらにUnionを適用することによって、Visualの全体的な境界が提供される。
clipプロパティは、ビジュアルのクリッピング領域を設定(および取得)する。すべてのGeometry(geometryクラスを、図10に示し、下のGeometryセクションで説明する)を、クリッピング領域として使用することができる。一実施形態で、クリッピング領域のデフォルト設定が、nullである、すなわち、クリッピングなしであり、これは、(−∞,−∞)から(+∞,+∞)までの無限に大きいクリッピング長方形と考えることができる。
Opacityプロパティは、ビジュアルの不透明度値を取得/設定し、ビジュアルの内容が、不透明度値および選択された混合モードに基づいて描画サーフェスで混合されるようにする。BlendModeプロパティは、使用される混合モードの設定(または取得)に使用することができる。例えば、不透明度(アルファ)値を、0.0と1.0の間で設定し、モードとして線形アルファ混合を設定することができ、例えば、色=アルファ×前景色+(1.0−アルファ)×背景色になる。特殊効果プロパティなどの他のサービス、例えばブラー、モノクロームなどを、ビジュアルに含めることができる。
Visualは、子のセットを管理するためのChildrenプロパティも有する。Visualは、Visualが子を有するか否かを検査するHasChildrenプロパティも備える。Childrenプロパティは、子の集合に対して追加、除去、挿入などの動作をユーザが実行できるようにするVisualCollectionを返す。次に、VisualCollectionの例を示す。
Figure 2007509426
VisualCollectionでのVisualの順序によって、Visualがレンダリングされる順序が決定される、すなわち、Visualは、後ろから前へ、最小のインデクスから最大のインデックスへ(ペイント順序)レンダリングされる。
Proxy Visualは、例えばコンテナビジュアルの下で、シーングラフに複数回追加できるビジュアルである。Proxy Visualによって参照されるすべてのビジュアルに、ルートから複数のパスによって達することができるので、読取サービス(TransformToDescendent、TransformFromDescendent、およびHitTest)は、 Proxy Visualを介しては動作しない。本質的に、すべてのビジュアルからビジュアルツリーのルートへの1つの正規パスがあり、そのパスには、Proxy Visualは含まれない。
図4に、ContainerVisualおよびDrawingVisualがシーングラフ内で関係し、Instruction Listの形の関連データを有する(例えば、対応する描画コンテキスト内)例のシーングラフ400を示す。ContainerVisualは、Visual基底クラスから派生した構造的内容だけを有するVisualである。Visualは、任意の形で互いにネストすることができる。具体的には、ContainerVisualをネストすることは、違反でない。ContainerVisualの主な目的は、IVsiualインターフェースを経由せずに便利にアクセスできる、Visualのコンテナを提供することである。したがって、ContainerVisualは、IVisualメソッドのすべてをpublicメソッドとして再実装する。ContainerVisualの子は、ContainerVisualのVisualCollection Childrenプロパティのメソッドを用いて操作することができる。
図5に戻ると、もう1つのビジュアルが、Win32子HWndを場面グラフ内で位置決めするHwndVisual 505である。具体的に言うと、レガシープログラムは、以前のグラフィックス技術に基づいて子HWnd(または類似物)に描画するWM_PAINTメソッド(または類似物)を介して演算する。そのようなプログラムを新しいグラフィックス処理モデルでサポートするために、HwndVisualは、Hwndをシーングラフに含め、親ビジュアルが再位置決めされるときに移動することを可能にする。2次元の世界と3次元の世界の間の接続を可能にする3次元(3D)ビジュアルなど、他の型のビジュアル506も可能であり、例えば、3次元の世界へのビューを有する2次元ビジュアルを介して、カメラのようなビューが可能になる。そのような3Dビジュアルを、後述する。
前述したように、ビジュアルに、Geometry、ImageSource、およびMediaDataを含む様々な描画プリミティブを描画コンテキストに取り込むことによって描画することができる。さらに、このスタック全体に関して共有されるリソースおよびクラス群がある。これには、Pen、Brush、Geometry、Transform、およびEffectが含まれる。DrawingContext抽象クラスは、DrawingVisual、RetainedVisual、ImageDataなどを取り込むのに使用できる描画演算およびコンテキスト状態演算群を公開する。言い換えると、描画コンテキスト抽象クラスは、描画演算およびプッシュ/ポップ演算の組を公開し、描画演算およびプッシュ演算ごとに、2つのメソッドすなわち、引数として定数を取るメソッドと引数としてアニメータを取るメソッドがある。プッシュ/ポップ演算の例が、PushTransform、PopTarnsform、PushClip、PopClip、PushOpacity、PopOpacityなどである。
(変換、不透明度、およびクリップを含む)様々なサービスを、描画コンテキストにプッシュし、ポップすることができ、プッシュ呼出しごとに適切なポップ呼出しがある限り、プッシュ/ポップ演算をネストすることができる。
PushTransformメソッドは、変換をプッシュする。後続の描画演算は、プッシュされた変換に関して実行される。ポップ呼出しは、一致するPushTransform呼出しによってプッシュされた変換をポップする。
void PushTransform(Transform transform);
void PushTransform(Matrix matrix);
void Pop();
同様に、PushOpacityメソッドは、不透明度値をプッシュする。後続の描画演算は、指定された不透明度値を用いて一時サーフェスにレンダリングされ、その後、場面に合成される。Pop()は、一致するPushOpacity呼出しによってプッシュされた不透明度値をポップする。
void PushOpacity(float opacity);
void PushOpacity(FloatAnimation opacity);
void Pop();
PushClipメソッドは、クリッピング形状をプッシュする。後続の描画演算は、その形状にクリッピングされる。クリッピングは、変換後の空間で適用される。Pop()は、一致するPushClip呼出しによってプッシュされたクリッピング領域をポップする。
void PushClip(Geometry clip);
void Pop();
ポップ動作がプッシュと一致する限り、プッシュ演算を任意にネストできることに留意されたい。例えば、次のコードが有効である。
Figure 2007509426
Geometryは、ストロークおよび塗潰しがない、ベクトルグラフィックススケルトンを定義するクラスの型(図10)である。各geometryオブジェクトは、単純な形状(LineGeometry、EllipseGeometry、RectangleGeometry)、複雑な単一の形状(PathGeometry)、またはコンバイン演算(例えば、和集合、交差など)を指定されたそのような形状のリストGeometryCollectionである。これらのオブジェクトが、図10に示されたクラス階層を形成する。
図11からわかるように、PathGeometryは、Figureオブジェクトの集合である。Figureオブジェクトのそれぞれは、figureの形状を実際に定義する1つまたは複数のSegmentオブジェクトからなる。Figureは、セグメント集合を定義する、Geometryのサブセクションである。このセグメント集合は、2次元Segmentオブジェクトの単一の連結されたシリーズである。Figureは、定義された領域を有する閉じた形状、または曲線を定義するが閉じた区域がないSegmentの接続されたシリーズのいずれかとすることができる。
図12からわかるように、形状(例えば長方形)が描かれるときに、ブラシまたはペンを、下で説明するように選択することができる。さらに、ペンオブジェクトは、ブラシオブジェクトを有することもできる。ブラシオブジェクトは、平面をグラフィカルに塗り潰す方法を定義し、ブラシオブジェクトのクラス階層がある。これは、図12では、塗り潰された長方形1202によって表され、この長方形は、長方形、ブラシ命令、およびパラメータを含むビジュアルが処理されるときにもたらされる。Penオブジェクトは、下で説明するように、Thickness、LineJoin、LineCap、EndCap、MiterLimit、DashArray、およびDashOffsetのプロパティと共にBrushを保持する。下で説明するように、いくつかの型のBrush(勾配およびナイングリッド(nine grid)など)は、それ自体のサイズを決定する。使用されるときに、これらのブラシのサイズは、境界ボックスから入手され、例えば、BrushのGradientUnits/DestinationUnitsにRelativeToBoundingBoxが設定されているときには、描画されるプリミティブの境界ボックスが使用される。これらのプロパティにAbsoluteが設定されている場合には、座標空間が使用される。
上で延べ、下でさらに説明するように、本発明のグラフィックスオブジェクトモデルには、Brushオブジェクトモデルが含まれ、このBrushオブジェクトモデルは、全般的に、ピクセルで平面を覆うという概念を対象とする。ブラシの型の例が、図13の階層に表されており、Brush基底クラスの下に、GradientBrush、NineGridBrush、SolidColorBrush、およびTileBrushが含まれる。GradientBrushには、LinearGradientオブジェクトおよびRadialGradientオブジェクトが含まれる。DrawingBrushおよびImageBrushは、TileBrushから派生する。クラスの代替配置が可能であり、例えば、TileBrushから、ImageBrush、VisualBrush、VideoBrush、NineGridBrush、およびDrawingBrushを派生することができる。Brushオブジェクトが、使用されるときに座標系と関係する方法を認識でき、かつ/またはそれに対して使用される形状の境界ボックスと関係する方法を認識できることに留意されたい。一般に、サイズなどの情報は、ブラシが描かれるオブジェクトから推論することができる。具体的に言うと、ブラシ型の多くが、パラメータの一部を指定するために座標系を使用する。この座標系は、ブラシが適用される形状の単純な境界ボックスに関して定義することができ、あるいは、ブラシが使用されるときにアクティブである座標空間に対するものとすることができる。これらを、それぞれ、RelativeToBoundingBoxモードおよびAbsoluteモードと称することが知られている。
(Visual API)
Visual APIは、媒体統合レイヤを介する描画の出発点であり、Visual Treeを媒体に接続するVisualManagerオブジェクトを含む複数の型のオブジェクトを含む。VisualManagerの異なる型(例えば、Screen、Printer、Surface)は、特定の媒体へのVisual Treeのレンダリングプロセスを管理する。VisualManagerは、「トップレベルMILオブジェクト」という題名のセクションでさらに説明する。
ビジュアルは、ユーザが描画を行う場所である。ビジュアルは、ビジュアルツリー内のノード(下で説明するように、場面の構造であるコンテナオブジェクト)であり、プログラムが描画する場所を提供する。それぞれが異なる用途に合わせて調整された、様々な型のビジュアルがある。ビジュアルは、Win32 hWndのビジュアル/出力側に似ている。
ビジュアルは、複数の機能を提供し、これには、親ビジュアルアクセス、子ビジュアル集合、任意の形状に基づくクリッピング、不透明度、ブレンドモード、ビジュアルおよびその子に影響する変換、ヒットテスト、座標変換サービス、境界ボックスサービス、および効果(ラスタおよびベクトル)が含まれる。
ビジュアル場面をレンダリングするために、ビジュアルツリーを、例えば上から下、左から右にトラバースし、まず内容をレンダリングし、次にVisualの子を左から右にトラバースする。ビジュアルの子のすべてが、そのビジュアル自体の内容の前に描画される。内容が、ユーザへのコールバックを必要とする場合には、そのコールバックは、レンダリング時中に同期式に行われる。Visualツリーを装置にレンダリングするためにシステムが行う(VisualRendererを介して)ことの擬似コードを示す。
Figure 2007509426
導出されたビジュアルは、RenderContents呼出し中にユーザにコールバックすることができる。
図13は、一実施形態のVisual Class Hierarchyを表す。レンダパスの一部として行われるコールバック中に(IRetainedVisual.RenderへのコールバックまたはPaintingVisual.RenderCoreへのコールバックを含む)、ビジュアルツリーが、実行理由のために「ロック」される。このロックは、コンテキスト全体に亘って行われ、ビジュアルがどのビジュアルツリーに属するかにかかわらずに、ロックされたときにコンテキストがツリーを変更できないことを意味する。ツリーがロックされているときに、Visualの子を変更することはできず、いかなる形でも(例えば、Open、ルート3Dモデルの設定など)別のビジュアルの内容を変更することはできず、Visualに対してTransform、Opacity、Clip、BlendMode、またはEffectを設定することはできず、ヒットテストは動作せず、境界情報のGet演算は働かない。
Visualの機能は、IVisualインターフェースを介して公開され、これによって、その機能がpublicになると同時に、オブジェクトモデルが保護される。次のリストは、1つの例示的な実施形態のIVisualインターフェースである。
Figure 2007509426
Visualには、レンダ内容および子の集合が含まれる。transform、clip、opacity、blend modeなどを含む複数のプロパティを使用して、Visualツリーの実際のレンダリングを制御することができる。Visualが、内容および子を同時に有する必要がないことに留意されたい。一実施形態で、レンダリング内容および子集合を、オンデマンドで作成して、メモリ使用を最適化することができる。Visual APIを用いると、そのユーザが、Visualから派生し、特殊化できるようになる。
子に対する変換は、型VisualCollectionのプロパティChildrenに対する変換を介して実行される。
Figure 2007509426
Transformation Read Serviceは、ユーザが、ある座標フレームから別の座標フレームへの集約変換を表すMatrixを得られるようにするメソッドを提供する。
Figure 2007509426
TransformToAncestorメソッドおよびTransformToDescendantメソッドは、より効率的であるが、呼出し側が2つのVisualの間の関係を知ることを必要とする。より一般的なTransformTo/FromVisualメソッドは、共通の祖先を見つけ、そのビジュアルまでの変換を計算する。これらが、キャッシュの更新と、任意のビジュアルに対するOnRenderの呼出しを引き起こす場合があることに留意されたい。ビジュアルが接続されてないか、縮重変換(degenerate transform)に出会う場合には、例外が送出される。
境界計算も提供される。
Figure 2007509426
VisualDescendantBoundsは、現在のビジュアルの子孫の、現在のビジュアルの内容を含まない内容境界ボックスの和集合を返す。VisualContentBoundsは、現在のビジュアルの内容の境界ボックスを返す。
Opacityプロパティ(例えばdouble)は、親と合成されるときにVisualに適用される任意選択のOpacity値を指定する。デフォルトで、この値は1.0であり、これによって、内容が完全に不透明に見えるようになる。この値は、サブグラフ内の他のOpacityデータと掛け合わされるので、1.0のOpacityによって何も変更されないことに留意されたい。0.0のOpacityによって、内容全体が透明になり、0.25の値によって、Opacityが公称値の25%になる。Opacityは、BlendModeの前に適用される。
BlendModeは、このVisualが合成されるときに、サブグラフの内容および宛先に任意選択のBlendModeを適用することを指定するプロパティである。デフォルトで、この値はBlendMode.Normalであり、これによって、宛先へのアルファチャネル対応合成が実行される。このプロパティに別の値を設定することによって、ソースとしてのVisualの内容と宛先としてのレンダ対象の内容の合成が実行される。これは、Opacityプロパティが適用された後に適用される。
基底ビジュアルクラスは、Visualが共通して有する特徴のインターフェースを提示する。
Figure 2007509426
Figure 2007509426
ContainerVisualは、visualクラスから直接に派生し、protectedプロパティをpublicに昇格させる。これは、ユーザが、新しいクラスを派生する必要なしにビジュアルコンテナシップを作成できるようにするためである。
Figure 2007509426
RetainedVisualは、描画に使用できる「保持された命令ストリーム」を導入するビジュアルである。
Figure 2007509426
Figure 2007509426
命令ストリームを、OnDemandモードで使用することができ、このモードでは、必要に応じて、レンダリングのためにユーザがコールバックされる。ユーザは、IRetainedRenderを実装する必要がある。命令ストリームを、Imperativeモードで使用することができ、このモードでは、ユーザが、RenderOpenを直接に呼び出し、描画コンテキストを得ることができる。一般に、ユーザは、一時にこのモードの1つを使用するが、これらを混合した形で使用することが可能である。
RenderOpenおよびRenderAppendは、現在のストリームに影響し、様々なシナリオで使用可能である。これらは、このVisualが現在Renderコールバック内である場合に送出される。RenderOpenは、RetainedVisual内にあった以前の内容のすべてをクリアし、RenderAppendは、ストリームの終りに新しい内容をつなぎ合わせる。ユーザが、ビジュアルに対するIRetainedRenderを実装している場合に、ユーザは、OnDemandモードも使用されなければならないことをシステムに知らせる。システムは、Render呼出しによって供給される内容の境界として、RenderBoundsプロパティに設定された値を使用する。IRetainedRenderが実施されているときに、システムは、場面を最適化すると決定し、いつでも内容を捨てることができる。RenderBoundsは、空の長方形がデフォルトであるが、Rect.Infiniteまたは未設定の値が可能な代替物である。コールバックによって暗示される仮想化性能の向上を得るために、ユーザは、適当な値を設定しなければならない。
場面をレンダリングするときに、システムは、概念では各ビジュアルを検査する(実際には、システムがほとんどのときにほとんどのビジュアルを無視できることに留意されたい)。そのビジュアルが、IsVisualInvalidに真を設定されており、RenderBoundsに基づいて、そのビジュアルの内容が必要である場合に、システムは、IRetainedVisual.Renderを呼び出して、そのビジュアルの内容を書き込む。これによって、既にあるすべての内容が置換される。ユーザは、Invalidateを呼び出すことによって、内容ストリームを捨てるようにシステムに手動で指示することができる。
IRetainedRenderが実装されていない場合には、IsVisualInvalidは、必ず偽を返す。Invalidateは何もしない。IRetainedRenderがそのように命名されている(例えばIRenderではなく)のは、これが、すべてのレンダリングコールバックの場合に使用するのに一般に十分でないからであることに留意されたい。例えば、PaintingVisualは、無効な長方形を用いてコールバックする。
DrawingVisualは、RetainedVisualに非常に似ているが、派生なしで使用されるように設計されている。protectedメソッドが、publicに「昇格」される。さらに、Renderコールバックはなく、IRetainedRenderインターフェースを実装する必要はない。この故に、RetainedVisualでIRetainedRenderが実装されないときに似て、内容が、必ず保持(リテイン)される。
Figure 2007509426
Figure 2007509426
PaintingVisualも提供される。
Figure 2007509426
Figure 2007509426
RetainedVisualは、保持された命令ストリームを追加するが、PaintingVisualは、本質的に、サーフェスによってバッキングされる。システムは、性能要件が満たされる限り、サーフェスを仮想化し、レンダリング命令を保つことができる。この故に、サーフェスは、ユーザによってアクセス可能でない。
RetainedVisualに対するPaintingVisualの相違の1つが、このメソッドが、アニメーションを許可しないStaticDrawingContextを提供することである。アニメートされる引数がどこかで使用される場合に、例外が送出される。もう1つの相違は、「Append」が、メモリコストに関してはるかに安価に命令ストリームを増大させることである。さらに、本質的にユーザに対してハードクリップを設定するPaintingBoundsが、要求され、必要である。これによって、このビジュアルの内容の境界が定められるが、Clipは、このビジュアルおよびその子のすべての内容をクリッピングするので、これがclipプロパティと異なることに留意されたい。RenderCore(IRetainedVisual.Renderに類似する)も、実装され、解像度が変化する場合またはシステムがなんらかの理由で内容の再レンダリングを必要とする場合に、ユーザが、この機構を提供する。
PaintingVisualは、サーフェスによるこのビジュアルの明示的バッキングがないので、潜在的にSurfaceVisualよりはるかに軽量である。その代わりに、これは、サーフェスによってバッキングされる、どこかより低い点にあるディスプレイツリー内のノードである。
SurfaceVisualを達成するために、ユーザは、RetainedVisualを作成し、DrawImageを呼び出し、その後、場面の背後で画像を変更しなければならない。その場合に、ユーザは、システムにコールバックさせるのではなく、ラスタ化を明示的に制御している。画像を直接に操作するための即時モードAPIがある。このAPIを用いると、ユーザが、画像を操作するStaticDrawingContextを得られるようになる。SurfaceVisualのAPIが、hWnd、DUser Gadget、またはTridentディスプレイツリーノードに似ていることに留意されたい。内容の「付加」(実際には、既にあるものに対して合成される小さいデルタの作成)は、安価な動作である。概して、RetainedVisualと異なって、内容の付加に関するメモリペナルティはなく、RenderAppendによって命令ストリームがどんどん長くなり、潜在的に指数関数的増大につながる。このビジュアルをバッキングできるサーフェスが、現れ、消える可能性があるので、ビジュアルは、「オンデマンド」RenderCore仮想を実装する必要がある。
PaintingVisualの主な使用シナリオは、主にWM_PAINTペインティングモデルを中心にして構成されたアプリケーションコードの移植である。これは、ほとんど変化せず、密である静的内容にも有用である。PaintingVisualを、メタファイルまたは真のサーフェスによってバッキングできることに留意されたい。システムは、例えばメモリおよび性能の懸念に基づいて、どれが適当であるかをランタイムに判断することができる。しかし、ある点を過ぎると、新しい内容の付加が、メモリの追加コストを引き起こさないことが保証される。システムは、必要に応じてメタファイルとサーフェス記憶の間で切り替えることができる。
(トップレベルMILオブジェクト)
すぐに理解されるように、通常のウィンドウありのシナリオでの演算のために、様々なオブジェクトが設けられる。これらが、必ずしも正式のクラスでない(例えば、明示的なスケジューラインターフェースまたはスケジューラオブジェクトがない)ことに留意されたい。
そのようなオブジェクトの1つに、ビジュアルツリーが含まれ、これは、描画される主要な内容を含むオブジェクトである。コントロールは、このツリーのビジュアルから直接に派生する。ビジュアルは、装置独立であり、コンテキスト独立である。
レンダ対象は、ビジュアルが描画される装置である。このオブジェクト(例えば画面)は、それ自体のダーティ機構または無効化機構を有することができ、この機構は、レガシhWndによるビジュアルシステムをバッキングするのに必要である。様々なレンダ対象に、ウィンドウ内の画面、Printer、Metafile、Surface、および、場面のうちで場面の残りと別に描画される部分である「サブウィンドウ」が含まれる。これは、クロススレッド描画を可能にする機構であり、下位レベルエンジンの合成可能オブジェクトと同等である。
他の描画関連オブジェクトに、レンダ対象にビジュアルツリーを描画するように構成されたオブジェクトを含むVisualRendererと、レンダ対象にビジュアルツリーをいつ描画すべきかを知っているDisplay Schedulerオブジェクトが含まれる。Time Managerは、タイミングノードの組のコンテキストオブジェクトであり、スケジューラがそれに対してティックを呼び出すオブジェクトである。
次は、画面に描画するコントロールの例のフローである。
1.ユーザが、ある形でUiContextを獲得し、Visual Treeの変更を開始する。これは、アプリケーションスタートアップ中か、多分UI入力イベントに応答するものとすることができる。
2.ダーティ通知が、Visualツリーを上に伝搬する。ルートビジュアルは、それに関連するビジュアルレンダラがどれであるかを知っており、このダーティ通知を転送する。この通知は、privateである。
3.ビジュアルレンダラが、publicイベントを介して、それが変更され、レンダ対象と同期していないことを報告する。
4.スケジューラが、この状況をいつどこで修正するかを判断し、描画を行わせる。通常、これは、ワークアイテムをディスパッチャにポストすることによって行われる。しかし、ユーザが、他のことを行うことができる。
5.ユーザが、UiContextを作り、Dispatcherに実行させる。
6.Dispatcherが、実行し、スケジューラが延期したワークアイテムを呼び出す(多分、単一コンテキストのすべての延期されたワークアイテムが、合体されている。また、スラッシングを減らすために、レイアウトシステムとのロックステップを実行する可能性が高い)
7.スケジューラが、その主更新ループを実行する
a.TimeManagerをティックする
b.とりわけ、レイアウトを実行する
c.ビジュアルレンダラに、レンダ対象に新しい変更をレンダリングするように命令する。レンダラは、
i.ダーティパーツVisual Treeをウォークし、内部でキャッシングされた境界ボックスを更新する。
ii.レンダリングされるすべての必要な「オンデマンド」ビジュアルを呼び出す(デフォルトで、「オンデマンド」ビジュアルは、その境界として空の長方形を有し、したがって、これらは、レイアウトが実行され、これらをセットアップするまでは呼び出されない)。
iii.ダーティパーツをもう一度探索し、必要なレンダリング更新を下位レベルグラフィックスシステムに送る。
ビジュアルシステムが、ディスパッチャについて何も知らないことに留意されたい。この詳細の処理をするのは、スケジューラオブジェクトの責任である。スケジューラは、適当な制御フローを行うことができる。
さらに、増分ビジュアルレンダラおよびスナップショットビジュアルレンダラという考えがある。ビジュアルが、一時に1つの増分ビジュアルレンダラだけに属することが望ましい場合がある。この制限は、ビジュアル自体に対するデータの効率的なキャッシングに必要である。しかし、レンダ対象へのビジュアルツリー全体の「スナップショットをとる」形を有することも道理に合っている。この場合に、ビジュアルツリーとレンダラの間の持続的な接続はない。これは、高解像度画面グラブを得るか、ビジュアルツリー(画面上の)を直接にプリンタに送るのに使用することができる。
Windowは、上のレンダ対象の役割を演ずる。Windowは、hWndの管理される置換物でもある。
Figure 2007509426
Figure 2007509426
ウィンドウマネージャコントロールは、このオブジェクトの外部にあるが、プロパティ(例えばSizeなど)読取/書込値を作り、位置、ウィンドウタイトルなどの追加プロパティを設けることによって、WindowContextと一体化することができる。Sizeが、物理的(1/96インチ(約0.265mm))単位でWindowのサイズを表すことに留意されたい。これは、ピクセルサイズではない。ウィンドウにレンダリングされるデータが、ビデオモード切り替えまたはローカルコンソールからリモートターミナルサーバセッションへの切り替えなど、なんらかの理由で失われる状況があることに留意されたい。
VisualRendererおよびVisualManagerは、他のオブジェクトであり、レンダ対象にVisualのツリーをレンダリングする責任を負う。VisualRendererは、媒体にレンダリングする単純な「ワンショット」モデルを提供し、VisualManagerは、ビジュアルのツリーと、それがレンダリングされる対象との間の保持された接続を確立する。VisualManagerは、媒体への「増分」レンダリングをサポートする。
次のコードは、一実施形態で基底VisualRendererがどのように見えるかの例である。
Figure 2007509426
Figure 2007509426
このクラスは、「デフォルト」媒体がないので、パブリックにインスタンス化することができない。VisualRendererは、ContextAffinityオブジェクトでもある。
BackgroundColorプロパティが設けられる。
Figure 2007509426
これは、ビジュアルマネージャのデフォルト背景色であり、VisualManagersのために透明をデフォルトにすることができる。しかし、一部の媒体(レガシHWndへのレンダリングなど)はピクセルごとの透明度をサポートできず、したがって、各VisualManagerが、このプロパティのそれ自体のデフォルトを定義することができる。ほとんどのアプリケーションは、このプロパティを無視し、例えば、システムウィンドウ背景色または透明を設定することができる。
RootVisualプロパティは、レンダリングに関するルートビジュアルを識別する。
Figure 2007509426
これは、nullがデフォルトである。RootVisualプロパティがnullであるときに、VisualManagerは、媒体に背景色を描画する。
RootSizeプロパティは、仮想単位で、レンダ対象のサイズを返す。例えば、ウィンドウによってバッキングされるVisualManagerでは、これがウィンドウのクライアントサイズになる。
Figure 2007509426
Resolution Informationも設けられる。
Figure 2007509426
すべての媒体が、ピクセルによってバッキングされない場合であっても、装置解像度を有することを要求される。例えば、印刷するときに、メタファイルにキャプチャする場合であっても、VisualManagerを介して解像度情報を使用可能にし、その結果、その解像度について内容を最適化できるようにすることが必要である。メタファイルキャプチャの場合に、比較的高いデフォルト解像度を使用することができるが、ユーザに解像度を直接に構成させることに留意されたい。
RootVisualの最初の「ワールドから装置へ」の変換セットアップは、そのビジュアルの1単位が装置上の1/96インチ(約0.265mm)と等しくなるようになされる。例えば、192dpiの装置によってバッキングされるScreenVisualManagerがある場合に、最初の変換は、RootVisualの座標フレームの1単位が、装置の2単位と等しくなるようにセットアップされなければならない。この場合に、ResoultionInformation.PixelSizeは、(0.5,0.5)を返して、各ピクセルが1側面で1/48インチ(約0.921mm)であることを示す。
VisualManagerは、ルートビジュアルおよびレンダ対象への長期接続を確立し、差を追跡する。
Figure 2007509426
Figure 2007509426
WindowVisualManagerは、画面に描画する主たる方法である。WindowVisualManagerは、WindowContextへのVisual Treeのレンダリングを管理する。
Figure 2007509426
(描画コンテキスト)
DrawingContext APIは、Visualを取り込むかImageDataにレンダリングされるビジュアル内容を構築する方法に関する、当業者の慣れた「コンテキストベース」プログラミングモデルを提示する。このセクションでは、DrawingContextクラスならびに、DrawingContextの獲得およびRetainedVisual/DrawingVisualでのビジュアルコンテキストの列挙に必要なクラスおよびエントリポイントを説明する。
アプリケーションは、DrawingContextを直接には構築せず、DrawingContextの公開されるバージョンは、抽象クラスである。ビジュアル内容を置くためにDrawingContextを獲得する方法は、複数ある。これには、RetainedVisual.RenderOpen()またはRetainedVisual.RenderAppend()が含まれ、これらは、それぞれ、命令が発行される先のDrawingContextを返す。他の方法に、IRetainedRender.Render()、DrawingVisual.RenderOpen()、DrawingVisual.RenderAppend()、およびPaintingVisual.PaintingOpen()またはPaintingVisual.PaintingAppend()が含まれる(ただし、PaintingVisualはアニメーションを処理しない)。ImageData(またはImageDataのサブクラス)は、固定解像度のビットマップサーフェスにレンダリングするためのDrawingContextを返す機構を有する。ImageDataも、アニメーションを処理しない。
次に、DrawingContext APIを示す。
Figure 2007509426
Figure 2007509426
Figure 2007509426
DrawingContextオブジェクトのメソッドのほとんどは、当業者には自明であるが、DrawingContextが、ContextAffinityObjectであり、単一のUIContextからのみ使用されなければならないことに留意されたい。DrawingContextオブジェクトは、IDisposableでもあり、C#での推奨されるパターンが、例えばRenderOpen/Appendから受け取られる場合に、「using」文節でこれらを使用することである。さらに、DrawArc、DrawPie、DrawBezier、およびDrawPolylineなどのメソッドがないことに留意されたい。これらは、関連するGeometryの構築およびDrawGeometryの使用を必要とする(下で説明する)。
さらに、Push*メソッドは複数あるが、Popメソッドは1つだけである。これは、オーバーラップする属性を設けられないことを暗示する。Push*()によって確立される属性は、それ相応に構成される。例えば、ClipはIntersection演算子を介して構成され、Opacityは乗算演算、TransformはComposeTransform演算を介して構成される。
ユーザは、例えば、nullのBrushまたはnullのPenを用いてDrawGeometryを呼び出すことができるので、BrushおよびPenの両方についてnullを用いてDrawGeometryを呼び出すことが有効であるが、何もレンダリングされず、ヒットテストも行われない。
非アニメート対象で使用されるとき(例えば、ラスタに直接にレンダリングするとき)に描画コンテキストに供給されるアニメーション特性は、時刻0になる(非アニメーション対象が、その代わりに時刻「現在」になることができるが)。これによって、動的DrawingContext用に記述されたコードを、アニメーションを処理しないDrawingContextの使用に、より簡単に移行できるようになる。
「保持された」Visualの内部の内容の列挙は、その内容を挿入したDrawingContextに密に関連する。Visualの内容の列挙および/または挿入ストリームの変更は、望まれる場合に、後述するようにChangeable機構を介して実行することができる。全般的な考えは、「プッシュモデル」列挙機構を提供することである。
DrawingContextクラス自体は、内容のプッシュモードウォークを登録するインターフェースすなわち、DrawingContextWalkerと称するDrawingContextのサブクラス(メソッドのほとんどが抽象メソッドのまま)を提供する。ユーザは、DrawingContextWalkerのサブクラスを作成し、インスタンスをVisualに渡して列挙を開始する。Visualは、適当なDrawingContextメソッドをコールバックして、それが有する内容を伝える。DrawingContextWalkerは、列挙の進行方法(すなわち、例えば即座に停止しなければならないか否か)を制御するために操作できる状態も提供する。
次のコードは、DrawingContextWalkerオブジェクトの例のコードである。
Figure 2007509426
WalkContentメソッドは、DrawingContextWalker基底クラスで提供される。
Figure 2007509426
Figure 2007509426
ユーザは、これのサブクラスを作り、すべての抽象メソッドを望み通りに実装する。ユーザは、オブジェクトのインスタンスを作成し、そのインスタンスのWalkContentを呼び出す。WalkContentは、Visualをウォークする際に、適当なメソッドをコールバックする。これらのメソッドの実装のどれであっても、望まれる場合に、protectedメソッドStopWalking()を呼び出すことによって、探索を停止させることができる。VisualのDrawingContextが、それにレンダリングするためにオープンされているときには、探索を開始することが不正であることに留意されたい。
オプションによって、探索を進める方法が決定される。
Figure 2007509426
IncludeAnimationsが設定されている場合には、ウォーカは、アニメーションコンテンツを用いて適当なメソッドを呼び出す。そうでない場合には、内容の瞬間的な値が、DrawingContextWalkerメソッドに供給される。
DrawingContextは、DrawingContextWalkerクラスを介して返される順序および構造で、Visualに内容の順序または構造を供給できるPreserveReadbackOrder Booleanを有する。これは、偽をデフォルトとするが、順序を保存することが重要であるときには、内容を挿入する前に真を設定することができる。例えば、前述したように、DrawGeometryに、nullのBrushおよびnullのPenを与えることができる。PreserveReadbackOrderが真である場合に、この命令が、Visualの状態で維持される必要がある。PreserveReadbackOrderが偽である場合に、実装は、この命令を破棄することができる。
このプッシュ手法に、他の型安全(type−safe)手法に対する多数の長所があり、この長所には、列挙の出力を反映する型の並列群の必要がないことと、コールバックインターフェースでのヒープ割り当ての必要が必ずしも存在しないことが含まれる。さらに、渡されるオブジェクトを作成せずにメソッドを直接に呼び出すことができ、DrawingContextインターフェースが既に存在し、ウォークを可能にするためにVisual自体の側の追加のAPIが不要である。
ビジュアル内容の変更が、もう1つの考慮事項である。VisualContentへの変更を表す形の1つが、リソース(Pen、Brushなど)を使用することであり、このリソースは、本明細書の説明では、Changeableのサブクラスであり、StatusOfNextUse==UseStatus.ChangeableReferenceである。これによって、DrawingContextに送られる管理される構造体に含まれるデータへの参照を、アプリケーションによって維持できるようになる。これは、変更を行えるようにする均一な形を表し、これらのオブジェクトが、明示的に設定された既知の状態であるので、実装は、どのオブジェクトが変更される可能性が高いかを知っている。例えば、命令の順序の変更、あるいは命令の追加または削除が可能でない(RenderAppend()が追加のために存在するが)ことに留意されたい。
(Drawing)
Drawingクラスには、描画コマンドの集合が含まれる。これは、DrawingVisualに保管される内容と正確に同等であり、DrawingContextによって構築される。Drawingは、ミュータブルでないときにコンテキストアフィニティがなく、したがって、これおよび関連するクラスDrawingBrushは、それ自体がミュータブルでないときに、コンテキストにまたがって、デフォルトプロパティシートで使用することができる。
Drawingは、子を反復するか親を見つける手段を備えないという点で階層を直接にはサポートしないが、DrawingContextを介して、Drawingを別のDrawingに描画することができる。Drawingを、DrawDrawing(Drawing)を介してDrawingContextに描画することができ、DrawingBrushの内容記述として使用することができる。
Drawingは、完全にアニメーション可能であり、RetainedVisualと同一の形でリードバック/反復をサポートする。
Figure 2007509426
(変更可能なパターン)
説明のために、本発明を、主に、グラフィックス場面内の例のオブジェクトが構築され、使用され、変更されるプログラミング環境に関して説明する。しかし、理解されるように、本発明は、グラフィックス関連プログラミング環境でかなりの利益を提供するが、本発明は、グラフィックス関連プログラミング環境に制限されるのではなく、より一般的に、多数の他の種類のプログラミング環境に適用される。
一実施形態で、本発明は、例えばSystem.Windows(登録商標).Changeableなど、共通の基底クラスから派生する型の単一の集合を提供する。Changeableクラスから派生し、これによって、Changeableが提供する値−型セマンティクスを得ることによって、すべてのクラスをミュータブルにすることができる。例えば、グラフィックスプログラミングでは、前述の特許文献6に全般的に記載されているように、オブジェクトモデルに、Brush、Pen、Geometry、FloatAnimation、GradientStop、Segmentなどが含まれる。例えば、描画ブラシの階層を、次のようなものにすることができる。
Object:Changeable:Animatable:Brush:TileBrush:DrawingBrush.
基本的な使用において、changeableオブジェクトに、次のプロパティおよびメソッドが含まれる。
Figure 2007509426
IsChangeableプロパティは、その現在値に応じて、changeableオブジェクトが変更可能であるか否かを指定する。例えば、brushの不透明度プロパティを設定する試みは、そのbrushオブジェクトのIsChangeableプロパティが真と等しい場合に限って成功する。そうでない場合には、例外が送出される。構築されるときに、changeableオブジェクトは、デフォルトでIsChangeableプロパティに真を設定され、したがって、即座に変更可能である。
図14に示すように、アプリケーションプログラムから発する関数呼出しを介するなど、changeableクラス1404に向けられた要求1402が、受け取られる。一般に、状態機械1408を含む要求ハンドラ1406は、後述するように、要求を処理し、現在のプロパティ状態に基づいて、適当なプロパティ状態と共にデータ構造をクローン化されたコピー1412にクローンを作成することによって、サポートするデータ構造1410を介して状態およびオブジェクトデータを維持する。現在のプロパティ状態からは許可されない推移を要求が求めるときなどに、例外1414を送出することができる。プロパティ状態は、下で図15から17を参照して説明する。
changeableクラスに向けられた関数呼出しを、直接にまたは間接に処理できることに留意されたい。例えば、図14の要求ハンドラ1406に、状態機械へのインターフェースを提供するAPI群を含めることができる。その代わりに、要求ハンドラ1406に、あるオペレーティングシステムで受け取られた要求を別のオペレーティングシステムによって処理されるAPI呼出しに変換するミドルウェアコードを含めることができる。したがって、本明細書で使用される要求は、要求ハンドラを介して、実際の状態機械処理がどこで行われ、データ構造およびクラスがどこで提供されるかにかかわらずに、要求された挙動が行われることを「引き起こす」。
この形で、(他の機構の中でも)、アプリケーションが、「new」要求を介してchangeableオブジェクトを構築し、それに値を設定し、それを使用し、値を設定することを継続し、使用を継続することができる。
次のコードは、アプリケーションがどのように単色のブラシ(scb)を作成し、単色(赤)を有するようにブラシを変更し、ブラシを使用してボタンの背景に赤の色を付けるかの例を示す。
Figure 2007509426
値を「使用する」と言う概念は、特定の意味を有する、すなわち、値は、ある条件の下でのみ使用について検討される。この条件に、値がProperty Systemプロパティに設定されるとき、値がより複雑なchangeable内のサブオブジェクトとして使用されるとき、および値がDrawingContextコマンドで使用されるときなどが含まれる。システムエクステンダが、「使用」として見なすオブジェクトの変更可能な状態を変更するchangeableオブジェクトの使用の他の例を簡単に定義できることに留意されたい。
値が、これらの種類の条件付きの使用の1つとして用いられるときに、ユーザ−モデルの展望から、値のクローンが作られ、そのクローンは、IsChangeableプロパティに偽を設定される。実際には、クローンが必ずしも作成されず、作成されるときには、必ずしも(後述するように、オブジェクト階層内で)深いコピーでないことに留意されたい。それにもかかわらず、モデルの展望からは、クローンが作られると考えることが適当であり、したがって、本明細書で使用される「クローン」の概念は、実際に作成されるクローン、部分的に作成されるクローン、および/または必ずしも作成されないがモデルの観点から論理的に作成されるクローンが含まれる。クローンは、実際に使用されるものであり、デフォルトで、クローンを変更することはできない。
上記で示したように、changeableオブジェクトには、Copy()およびMakeUnchangeable()を含むメソッドも含まれる。Copy()メソッドへの明示的な呼出しによって、そのchangeableのコピーが作成され、コピーのIsChangeableプロパティに真が設定される。この呼出しは、メソッドが呼び出されたオブジェクトを変更しない。MakeUnchangeable()メソッドは、どのchangeableに対しても呼び出すことができ、IsChangeableプロパティを変更して、偽にする(既に偽でない場合。偽の場合にはこの呼出しは何もしない)。
上の機構は、プロパティを置換するパターンを容易にする。changeableオブジェクトを変更するためには、IsChangeableプロパティ値を真にする必要がある。オブジェクトの条件付きの使用によって、changeableでないクローンが作成されるので、そのオブジェクトは、Copy()メソッドを介してコピーされ、変更され、使用される必要がある。これによって、効果的に、存在した最初のオブジェクトが、オリジナルの変更されたコピーである新しいオブジェクトに置換される。これの例を、下記で示す。使用中のchangeableが、使用されたchangeableであり、したがって、上の定義によれば、IsChangeableプロパティに使用時に偽が設定されるので、変更可能でないことに留意されたい。したがって、そのchangeableが変更されるのではなく、changeableが、コピーされ、置換される。changeableに関して、型の単一の集合だけがあり、これが、プログラミングの展望からははるかに望ましいことに留意されたい。さらに、真のミュータビリティは、後述するように追加のプロパティによって提供される。
前述したように、ブラシを作成し、変更し、使用することは、簡単である。描画動作での単純な使用の例を、下に示す。
Figure 2007509426
上の命令を実行すると、1つの赤い長方形と1つの緑の長方形が描画される。「scb」が、実際には使用のたびにクローンを作成されることに留意されたい。
色が、あるステップから別のステップに(例えば線形に)変化する、リニア勾配(linear gradient)ブラシ(lgb)を使用するより複雑な構成を、下に示す。
Figure 2007509426
この場合に、この処理は、値(GradientStop)を作り、より複雑な値の定義にそれらの値を使用している。
ボタン(Btn)背景の不透明度(0から1までの範囲とすることができる)を0.4に変更することを対象とするもう1つの例を検討されたい。この特定の使用では、Backgroundがオブジェクトにコピーされ、そのIsChangeableプロパティに真の値が設定され、背景が変更され、セットバックされる。
Figure 2007509426
最後の行の「Btn.Background」への割り当てが、あった可能性がある継承された値またはプロパティシート値を分離することに留意されたい。
オブジェクト階層内のより深い変更は、ユーザには、浅い変更と異ならないように見える。
Figure 2007509426
Copy()が、最上位レベルオブジェクトのみに対して呼び出される必要があり、個々のGradientStopに対して呼び出される必要がないことに留意されたい。これは、システムが、真のIsChangeableプロパティを有するオブジェクトのサブオブジェクト自体が、アクセスされるときにそのIsChangeableに真を設定されることの保証を処理するからである。
図15に、新規作成のときの、IsChangeableプロパティに真が設定された状態で始まる、changeableオブジェクトの基本的な使用の状態を表す状態図を示す。一般に、実線の矢印は、現在の状態から対象状態に推移するオブジェクトの状態を示し、破線の矢印は、オブジェクトを同一の状態にするが、対象状態の新しいオブジェクトを作成する演算を示す。この状態図には、2つの状態があり、推移は、Copy()またはMakeUnchangeable()のいずれかが呼び出されるときと、前述したように、使用と見なされる形でオブジェクトが使用されるときに発生する。どちらの状態からでもCopy()メソッドを呼び出すことによって、そのIsChangeableプロパティに真を設定された新しい値がもたらされ、MakeUnchangeable()を呼び出すことによって、IsChangeableに偽を設定された対象値がもたらされることに留意されたい。
上の説明は、2つの状態と、Copy()およびMakeUnchangeable()メソッドと、Changeable値の「使用」と言う概念を有する基本的な使用を説明する、単純で自己矛盾のないモデルを提示する。しかし、変更に関して、上の変更の例は、置換すなわち、既存アイテムをコピーし、その場で変更し、コピーバックするという概念に基づく。これは、ヒープ割り当て(行われる変更の深さと、浅いクローンに関するオブジェクト自体の広さに依存して、潜在的に大きくなる可能性がある)ならびに変更される属性へのパスを見つける機構を維持するためのプログラマに対する追加の重荷を暗示する。
本発明の態様によれば、値の真のミュータビリティという概念のサポートを追加するために、型UseStatusのStatusOfNextUseという名前のもう1つのプロパティを、モデルに追加する。単一プロパティモデルでミュータビリティを妨げる基本的な問題が、偽と等しいIsChangeableプロパティの結果の値を無条件にもたらす値の条件付きの使用であることに留意されたい。StatusOfNextUseプロパティによって、この問題が解決される。
Figure 2007509426
デフォルトで、StatusOfNextUseプロパティは、UseStatus.Unchangeableであるが、UseStatus.ChangeableCopyをセットすることができ、これによって、これが設定される値の使用が、IsChangeableプロパティに真を設定されたクローンオブジェクトの作成をもたらす。その結果、オブジェクト値を、追加のヒープ割り当てなしでその場で変更することができる。
さらに、このモデルでは、使用中の値を変更できるので、そのような変更が行われるときに、単純なchangedイベントを介する通知が提供される。さらに、オブジェクトは、もはや非ミュータブルでないので、UIContextメンバを介してコンテキストアフィニティが提供される。オブジェクトがミュータブルであるときに、これがnull値を有することに留意されたい。そうでない場合には、オブジェクトは、それを作成したUIContextに属する。結果のChangeableクラス定義は、次のようになる。
Figure 2007509426
単純で浅いミュータビリティの上の例によって、Brushの不透明度を変更する要件を説明したが、コードは、不透明度が変更されるたびに実行される必要があった。対照的に、StatusOfNextUseプロパティに基づくミュータビリティ機構では、まず、Btn.Background自体が、真のIsChangeableプロパティ値を有する。
Figure 2007509426
上記では、(条件付き使用において)UseStatus.ChangeableCopyのStatusOfNextUseを有する値が使用され、したがって、結果自体が変更可能になる。セットアップされたならば、プログラマは、次の例のように、望み通りに変更を行うことができる。
Figure 2007509426
プログラマは、望み通りに何度でもそのような変更を行うことができ、その変更は、後続設定でのオブジェクト割り当てなしに、直接に行われる。
上の例で、最初にBtn.Backgroundを作る方法が説明されず、したがって、そのコピーを、Copy()メソッドを介して作る必要があることに留意されたい。プログラマが、変更される背景を作成することを求める計画的なミュータビリティの状況では、次の例のように、これを直接に行うことがよりよい形である場合がある。
Figure 2007509426
ここで、ブラシが、当初にStatusOfNextUseがUseStatus.ChangeableCopyと等しいものとして作成されたので、プログラマは、望むときにいつでも不透明度を指定することができる(Btn.Background.Opacity=...)。
ミューテーションベースのモデルではなく置換ベースのモデルを使用することが、上の例を与えられれば特に困難でないことに留意されたい。これは、変更が、第1レベルで行われるからであり、ミューテーションではなく置換を必ず行うことが、禁止的に高価には見えない場合があるからである。実際に、限られたミュータビリティだけが望まれるとき、これは、有効な技法である。しかし、変更が、オブジェクトのより深い値に対して行われるときには、ミューテーションモデルが、明らかに優れている。
そのような深いミュータビリティの例として、プログラマが、第7ストップ(lgb.Stops[6])の色を変更することを繰り返して求める、LinearGradientBrush(lgb)を考慮されたい。プログラマは、上と同一の命令を使用して、ミュータブルバージョンをBtn.Backgroundにインストールすることができる。
Figure 2007509426
その後、プログラマは、所望の変更を繰り返して行うことができる。
Figure 2007509426
プログラマは、「lgb」変数に1回アクセスし、それを保管し、その後、繰り返してそれに設定することができ、これは非常に効率的である。
図16は、StatusOfNextUseプロパティによって表される追加の状態が追加された、図15の状態図の拡張である。モデルが、わずかに複雑になっていることに留意されたい。というのは、図16の基本状態図が、2つの状態と7つの推移を有するが、ミュータビリティ状態図が、3つの状態と11個の推移を有するからである。図15からわかるように、重要な追加は、(StatusOfNextUse==ChangeableCopy)状態と、その状態から出る「使用」推移であり、これは、IsChangeableプロパティ値に真を設定された新しいコピーをもたらす。
図15に示すように、Copy()メソッドの呼出しは、IsChangeableプロパティが真と等しい新しい値をもたらし、StatusOfNextUseプロパティにUnchangeableが設定される。同様に、MakeUnchangeable()メソッドの呼出しは、IsChangeableプロパティに偽が設定された対象値をもたらす。ミュータビリティを介して柔軟性が追加されているが、これらの定数が変更されていないことに留意されたい。
後続の変更が真に明確に定義されていないか、明示的に禁止されているので、ChangeableCopyと等しいStatusOfNextUseとしての使用が許容されない状況がある。この例に、共有されるデフォルトスタイルシートの値の変更、またはローカルでないプロパティエンジンのプロパティの設定の試みが含まれる。そのような状況で、そのような使用を禁止するサブシステムは、例外を送出することを選択するか、値そのものを変更不能にする。何が起きたかをプログラマに対してより明瞭に示し、これによって後の混乱が避けられるので、例外を送出することが推奨される。
さらに、changeableオブジェクトを変更不能にすることができない状況がある。その例には、基礎になるビジュアルを変更から制限できず、したがって、VisualBrushを「変更不能」と述べることは無意味であるVisualBrush(前述の特許文献6に記載のように)が含まれる。AnimationおよびVideoData(これらは時間に伴って変化するので)も、その例である。そのようなオブジェクトに対してMakeUnchangeable()を呼び出す試みは、例外を送出するか、さらに悪いことに、オブジェクトの一部が変更不能にされ、他の部分は変更不能にならないので、オブジェクトが不正な状態になる場合がある。この問題は、もう1つのプロパティCanMakeUnchangeableを介して回避することができる。このプロパティが「真」の値を返す場合には、MakeUnchangeable()が成功することが保証される(この2つの呼出しの間にオブジェクトに対する変更が行われないならば)。
StatusOfNextUseとCanMakeUnchangeableの間に時々発生する、セマンティクスの衝突がある。CanMakeUnchangeableが偽と等しい場合に、次の使用を変更不能にすることができないので、StatusOfNextUseのUseStatus.Unchangeableの値は、実際には意味をなさない。したがって、CanMakeUnchangeableが偽と等しいときにStatusOfNextUseが照会されるときには、StatusOfNextUseは絶対にUseStatus.Unchangeableを返さない。その代わりに、他の形で以前にUseStatus.Unchangeableを返したときに、StatusOfNextUseはUseStatus.ChangeableCopyを返す。
上記は、changeable(IsChangeableが真と等しい)オブジェクトのすべての(条件付きの)使用が、作られるオブジェクトのコピーをもたらし、StatusOfNextUseの値に応じて、その「使用」自体が変更可能であるかそうでないモデルを表す。上のモデルが提供しないものは、複数の場所での値の使用と、その値への共有される参照の維持である。例えば、上のモデルでは、プログラマは、LinearGradientBrushを作成し、2つのButtonコントロールで使用し、両方のコントロールに影響するために1度にLinearGradientBrushを変更することができない。そうではなく、プログラマは、これを2回使用し、コントロールからブラシを得、それぞれを独立に設定する必要がある。一般に、このモデルは、プログラマにとって、最も期待され、かつ/または最も驚かれないものになるが、追加の機能性が望ましいシナリオがある。
そのようなシナリオが、Animationにあり、この場合には、プログラマが、それぞれが同一のタイムラインに応答するn個の要素を有する場面を作成することを望む場合に、そのタイムラインのクローンをn回作成する必要があり、BeginIn()をn回実行することを要求される。性能および効率の観点の両方ならびにプログラミングモデルの利便性からのよりよい方法は、単一のタイムラインへの参照を共有し、それに対してBeginIn()を呼び出し、必要に応じて伝搬させることである。
このシナリオを可能にするために、第3の値ChangeableReferenceが、UseStatus列挙に設けられる。UseStatusは、次のようになる。
Figure 2007509426
StatusOfNextUseにUseStatus.ChangeableReferenceを設定されたchangeableオブジェクトが(条件付きの形で)使用されるとき、その値は、もはやコピーされない。そうではなく、既存の値への参照が渡され、その値(あるいはその前または後に渡される参照)に対する後続の変更が、使用の結果に影響する。言い換えると、changeable値が、潜在的に任意の数の使用によって共有される。
次のコードは、要素レベル使用の例である。
Figure 2007509426
上の例では、1つは赤、1つは青の2つの長方形を生成する単純な描画動作を説明した。
Figure 2007509426
これは、望まれた挙動である。しかし、プログラマが、その代わりにブラシの共有と、変更可能であることを望む場合には、次の命令を使用することができる。
Figure 2007509426
ここでは、両方の長方形が緑である。後に、色が変更され、例えばscb.Color=Colors.Yellowの場合に、両方の長方形が、黄色になる。ctx.DrawRectangle(...)が、即時モード描画コマンドに見えるが、実際には、保存され、後に表示されるディスプレイリスト/メタファイルを作成していることに留意されたい。
ユーザモデルの観点からは、ChangeableReferenceモードによって、changeableオブジェクトを使用する当事者が、その値のすべての変更について通知されることが保証される。これは、「Changed」イベントを介して行われ、このイベントは、他のイベントとして、マルチキャスト委任(multicast delegate)である。実装するためにシステムは、単一の通知シンクを有する複数の使用が、使用ごとにシンクに通知しないことを保証する必要がある。さらに、クリーンアップ機構は、シンクに接続された使用が除去されるときにそのシンクだけが除去されるように、アイテムを除去するときの要件を有する。これを行う手法の1つが、委任の参照カウントである。現在の実装は、privateデータ構造体、例えばRefCountedMulticastEventHandlerを介してこの要件を達成することができる。
図17は、図15および16に基づくが、ChangeableReference状態を(StatusOfNextUseプロパティのもう1つの設定を介して)追加された状態図である。本発明の態様に合わせて、ChangeableReference状態およびそのノードから出る使用推移で、コピーがつくられないことに留意されたい。そうではなく、条件付きの使用は、次の使用プロパティの状況が、変更可能な参照状態に留まることをもたらし、これによって、真のミュータビリティがもたらされる。さらに、図17は、図15および16より複雑であるが、Copy()メソッドおよびMakeUnchangeable()メソッドの挙動が、同一のままであり、Copy()メソッドが、真のIsChangeableプロパティおよびUnchangeableのStatusOfNextUseプロパティを有する新しい値オブジェクトをもたらし、MakeUnchangeable()メソッドが、偽のIsChangeableプロパティを有する対象値オブジェクトをもたらすことに留意されたい。
型の単一集合の利益と共に、本発明が、プログラマにかなりの柔軟性を提供することに留意されたい。例えば、ミュータブルでない値のほうがリソースの消費が少ないので、アプリケーションによって普通に構築される値のほとんどが、ミュータブルではない。しかし、上で説明したように、ミュータビリティが使用可能であり、プログラマに、値、特に深い値を高性能に変更する強力で直観的な形が与えられる。図17には示されていないが、新しい型が作成される状態(真のIsChangeableプロパティおよびUnchangeableのStatusOfNextUseプロパティ)が、1つの可能なデフォルト状態にすぎないことにも留意されたい。したがって、代替の実施形態で、型を、ミュータブルな値をデフォルトにするなど、作成の後に別の状態、例えば真のIsChangeableプロパティとChangeableReferenceのStatusOfNextUseプロパティ)にすることができる。
本発明の動作の説明に移ると、本発明は、ドットダウン(dotting−down)と称する、オブジェクトの深いプロパティを扱うとき、多大な利益を提供する。例えば、次のコードを検討されたい。
Figure 2007509426
形状オブジェクト「g」への深いアクセスが、ドットダウンと称するものの例である。プロパティへのアクセス(Geometries、[12]、Figures、[2]、Segments、[0]、およびPoints)が、呼出し側プロパティゲッタであってセッタでないことと、[17]が、セッタの呼び出しをもたらす唯一のプロパティアクセスであることに留意されたい。プログラミング言語は、一般に、より深くプロパティ値を設定するためのプロパティへのアクセスと、より深く値を読み取るためのアクセスを区別することができない。
変更不能オブジェクトからドットダウンが開始されるとき、ローカルメンバ変数がアクセスされる。その例に、「ChangeableValue」プロパティの使用を介して変更可能にされたことがない要素のアクセスが含まれる。
プロパティが、changeableオブジェクトから発生するときには、結果の値も変更可能であり、その結果、ミュータブルになる。このために、親のプロパティゲッタは、既に変更可能である場合にサブオブジェクトを直接に返すか、サブオブジェクトの浅いクローンを作り、それをローカルメンバに設定し、そのクローンを返す。この属性が、上のコードによって、最初に実行され、浅いクローンを割り振り、割り当てた後に、ヒープ割り当てを必要としないことに関して自由に作られることに留意されたい。
本発明の一態様は、オンデマンドの浅いクローン作成が、必要なときだけ実行されることである。これによって、共有が最大になり、ヒープ割り当てが最小になり、ヒープ割り当てなしの変更が可能になり、クローン作成の概念がユーザモデルに課されなくなる。これは、ツリーが深くなるにつれて、3次元で作業するときに重要になる。このために、Copy()メソッドは、深いコピーの錯覚を与えるが、実際には、まず、浅いコピーだけを行い、その後、必要に応じてレイジリーに深いコピーを行う。そのようなドットダウンによって、かなりの性能改善がもたらされる。
本発明の一態様によれば、changeableのもう1つのプロパティ(一般にアプリケーションには不可視)が、changeableが、changedイベント(型EventHandlerの)を有することである。Changeableのプロパティが変化するときに、そのchangeableのChanged委任が、変化したchangeableをセンダとして呼び出される。ドットダウンを介して浅いクローンを作る動作は、changedイベントハンドラを浅いクローンにプッシュする。これによって、後続の変更が深い要素で発生し、正しいイベントハンドラをセットアップさせることが可能になる。Changedイベントは、プロパティシステム以外のクライアントがこのシステムを使用でき、通知に関して登録できるようにするためにも存在することに留意されたい。
changedイベントハンドラに対する変更は、サブオブジェクトまで伝搬される。さらに、他のchangeableを伴うchangeable自体の変更(例えば、changeableオブジェクトへのchangeableサブオブジェクトの追加、除去など)は、包含するchangeableのイベントハンドラが、古いchangeableから除去され、新しいchangeableにプッシュされること(再帰的に)をもたらす。
図18から23に、この例の次のコードに基づいて、浅いクローニングとドットダウンがどのように働くかを示す。
Figure 2007509426
図18からわかるように、Button1およびButton2の両方が、同一のリニア勾配ブラシ1802を指し、このリニア勾配ブラシ1802は、階層的に下に配置された、stopsノード1804と、指定されたstopsのcolorプロパティおよびpositionプロパティを有する。次のコードを検討されたい。
Btn1.Background = Btn1.Background.Copy();
このコードを実行すると、図19に示されているように、リニア勾配ブラシ1802のコピー1902が作られ、Button1によって指し示される。
コード
LinearGradientBrush lgb = ((LinearGradientBrush)Btn1.Background);
lgb.Stops[1].Color = Colors.Orange;
を実行すると、ChangeableオブジェクトのChangeable値のプロパティへのアクセスがもたらされ、このプロパティは、IsChangeable==trueを有し、これは、取り出されるものが書き込み可能であることを意味する。図20から22に全般的に示されているように、このコードを実行すると、(1)もう1つのstopsノード2004が、階層に挿入され、個々のstopのそれぞれをポイントし(図20)、(2)第2のstopノード(stopノード[1]、図20および21で符号2010を付す。下記のように「blue」プロパティを有する)のコピー2110(図21)が作られ、このコピーの親である、前にコピーされたstopsノード2004が、その子としてこのコピー2110を有し(blueプロパティに関する元のstopノード2010ではなく)、(3)図20に示されているように、このノード2110のblueプロパティがorangeに変更される。Orangeが、図面で菱形によって示される値型であり、図23の色Redへの変更など、後続の変化が、割り当てをもたらさないことに留意されたい。
変更不能状態では、changeableオブジェクトを、任意のコンテキストから読み取り、任意のコンテキストに書き込むことができる。構築時の判定で変更可能状態である場合に、UiContextを、そのコンテキストからのアクセスだけを許可するようにchangeableオブジェクトに関連付けるのに使用することができる。その後、MakeUnchangeableが呼び出される場合に、そのコンテキストがnullになる。また、changeableのCopy()が行われるときに、いつでも、新しいコピーは、ソースのchangeableのコンテキストではなく、呼出し元からUIContextを得る。APIは、changeableのUIContext取得専用プロパティを提供し、これはミュータブルでないときにnullである。このプロパティは、publicであり、その結果、アプリケーションは、所与のオブジェクトがアクセス可能であるか否かを知ることができる。
コンストラクタにnullを渡して構築されるChangeableオブジェクトは、nullのUIContextを用いて定義される。changeableオブジェクトが、nullのUIContextを有し、IsChangeableプロパティに真が設定されている場合に、アプリケーションは、生じる可能性がある可能なスレッド競合問題のすべてを管理する必要がある。この場合に、システムは、複数のコンテキストからの同時アクセスを妨げない。
changeableオブジェクトが、別のchangeableオブジェクトを組み込もうとし(例えば、リニア勾配ブラシの勾配停止を設定するとき)、UIContextが一致しない状況が発生する場合がある。例えば、GradientStop gsが、BのUIContextとChangeableReferenceと等しいStatusOfNextUseの両方を有するときの、AのUIContextを有するLinearGradientBrush lgbを検討されたい。gsにlgbを設定しようとすると、例外が送出される。というのは、これが、UIContextを混合する試みであり、それが許可されないからである。
changeableオブジェクトに対して変更が行われるときに、Changedイベントが送出され、そのchangeableは、センダオブジェクトとしてイベントハンドラに供給される。しかし、実際に変更されたオブジェクトを送ることが望ましくなく、センダとして異なるオブジェクトを有することが役に立つ状況がある。これの例が、アニメーション(それ自体はchangeable)が、そのアニメーション挙動を記述するタイムライン(時々クロックと称する)を保持する、アニメーションにされるオブジェクトに関する場合である。Pause()などのイベントは、タイムラインで発生し、アニメーションでは発生しないが、一般に、アプリケーションは、アニメーションが一時停止したか否かを知ることを求める。
changeablesのチェーンを上にたどってchangedイベントを実行する(fire)など、様々な解決策が可能である。これは、停止する場所を判断すること、イベントを受け取っているかつ/または使用しているものがないときでも実行されるさらなる多数のイベントで多数の通知を行うこと、changeableが設計により親を知らないが、一般に変更のイベントを通知する先だけを知っていることを含む、複数の問題を表す。changeableが親を追跡した方式を有することは、追加の記憶およびブックキーピングを必要とする。それにもかかわらず、そのような解決策を実装することができる。
もう1つの解決策は、センダがchangeableオブジェクトであり、実際に変更される内側のchangeableではなくなるようにchangeableを実施することである。PropagateEventHandlerは、それが受け取るハンドラをプッシュするのではなく、そのハンドラを保管し、呼び出されたときに、保管されたハンドラを呼び出すがセンダ引数としてchangeableを用いる新しいローカルハンドラを作成するために実装される。新しいローカルハンドラは、changeableの子のPropagateEventHandlerにプッシュされる。この技法が、すべてのイベントハンドラを傍受し、「偽」(ハンドラが除去されるとき)を用いて呼び出されるときにPropagateEventHandlerが正しく処理されることを必要とし、したがってそのブックキーピングが実行されることを必要とすることに留意されたい。
この解決策が、明示的なBeginChange/EndChangeスコーピング機構を持たず、(関係するモーダリティがなく、予想されない例外によって渡されるスキップされ得るEndChange()がないので)より簡単になり、例外の場合に堅牢であることに留意されたい。しかし、Begin/EndChangeは、クローンが凍結され、システムが書き込みモードでなかったときに、オブジェクトの「ゲッタ」が、得る値の浅いクローンを作る必要がなくなるようにするために存在した。そうでない場合、書込モードにおいて、これらの凍結された値は、それらでできている浅いクローンを得る。その結果、ツリーが、Begin/EndChangeを用いる場合より頻繁に展開され、関係する設定が絶対になく、取得だけである場合にそれを行うことができる。それにもかかわらず、ゲッタが、まず変更不能な値について呼び出されている場合、ゲッタは、浅いクローンを作らない(これが、変更可能な値についてゲッタが呼び出され、「get」を介して得られる値が変更不能である場合と別個であり、その場合には、クローン演算が行われることに留意されたい)。
例えば、Btn.Background.Opacityにアクセスし、Btn.Backgroundが(例えばデフォルトとして)変更可能でない場合、コピーは行われない。その代わりに、コピーは、「Btn.Background=Btn.Background.ChangeableValue」または類似のものが発生するときに生じ、これは、コピーの出費が、使用される場合に限って発生することを意味する。言い換えると、値を変更する意図が表されない場合に、任意の「get」は、コピーの費用を負担しない。値が、「最後に作成されたクローン」と言う概念を維持する場合に、そのクローンが作成された後にオブジェクトが変更されていない限り(そのような変更は、キャッシングされたクローンの解放をもたらす)、そのクローンを、オブジェクトの使用時に処理できることに留意されたい。これによって、さらなる共有が可能になる。さらに、コントロールインプリメンタは、ユーザに有用なパターンに関するのと同様に、このパターンに参加することによって、不当に負担をさせられないことに留意されたい。同様に、型拡張性が提供される場合に、MediaTypeの記述が、過度に複雑になってはならない。
コントロールインプリメンタは、他のすべての値と同一の、Changeableを扱う同一のモデルを提示される。例えば、次のコードは、Gridコントロールに、型BrushのAlternateBrushプロパティを与える。
Figure 2007509426
Figure 2007509426
これが、このプロパティシステムに加わる一般的なプロパティと同一であることに留意されたい。というのは、WriteLocalが、Changeableクラスから派生する深いプロパティの特殊な処理を行うからである。
changeable型の実装側は、changeable(例えばプロパティ)を変更するものに関する1行のプリアンブルと1行のポストスクリプトを必要とする。また、changeableの状態にアクセスするオブジェクト(例えば、プロパティゲッタ)に関する1行のプリアンブルが必要である。必要なのは、CloneCore()、MakeUnchangeableCore()、PropagateEventHandlerCore()、PropagateEventHandlers()(最後の3つが、プロパティとして他のChangeableを有する型に限って必要であることに留意されたい)であり、Copy()の型安全ラッパーも必要である。
次の例は、(サブタイプのどれもがchangeableではないという点で単純化されている)単純なchangeable型であるGradientStopの(人工的な)例を含む、参照されたプロトタイプからのものである。実際には、アニメーション集合(それ自体がchangeable)を含むすべてのものが、これより複雑になるという点で、ごく少数のchangeableだけがここまで単純になることに留意されたい。
Figure 2007509426
Figure 2007509426
Figure 2007509426
次のコードは、(そのサブタイプの一部すなわちGradientStop自体がchangeableなので)より複雑なchangeable型であるLinearGradientBrushの例である。
Figure 2007509426
Figure 2007509426
Figure 2007509426
changeableオブジェクトモデルは、public部分と、エクステンダおよびホスタが見る部分に分割される。やはり、この型を使用するコンポーネント製作者にとって、物事が簡単であることに留意されたい。
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
Changeableの、そのStatusOfNextUseだけに頼る、条件付きの使用の動作が、すべての状況で正確に働くわけではないことに留意されたい。一般に、問題は、changeableオブジェクト(Brush、VideoDataなど)がElementプロパティ(VideoSourceなど)に割り当てられるときに、changeableが、条件付きの使用で「使用」されることである。(VideoDataなどだが、すべてのアニメーションも)アニメーションChangeableの場合、「使用する」動作によってクローンが作成されるが、これは、正しい期待される挙動である。次に、要素のOnRender()メソッドが呼び出されるときに、OnRender()実装は、通常、例えばDrawingContext.DrawVideo(videoData、...)を介して、値をDrawingContextにプッシュする。このDrawingContextへの呼び出しも、Changeable(この例ではvideoData)を「使用」し、もう1つのクローンが作られる結果となる。
changeableがこの形で「使用」されるときの両方の挙動は、分離して検討されるとき、正しく意味をなす。しかし、これらを組み合わせたときに、コントロールのインプリメンタが、OnRender()が呼び出されるたびの条件付きの使用を期待せず、(これがアプリケーションに公開されず、実際に、除去されなければならない純粋なオーバーヘッドなので)実際にそうすることに利益がないという点で問題が生じる。さらに、依存アニメーションおよび独立アニメーションが組み合わされるときに、OnRender()が、頻繁に呼び出され、アニメーションが、繰り返してコピーされるが、これは正しい挙動ではない。ChangeableReferenceと称する機構によって、「使用」が、実際にコピーするのではなく、使用される値への参照だけを得ることが可能になる。
解決策は、DrawingContextなどのエンティティとDependencyObjectのDependencyPropertyとの間の協力を有することである。具体的に言うと、コントロールのDependencyPropertyは、値を設定されているとき、それが後に使用する特定のコンテキストがChangeableをChangeableReferenceとして扱うことを望む場合に、そのように扱うことを「許容する」ことを示す必要がある。その場合、DrawingContextは、Changeable自体がChangeableをChangeableReferenceとして扱うことを許容するならば、それを「好む」ことを示す。
これを行うために、ChangeableHelper.UseChangeableで使用される、Changeable.AllowChangeableReferenceOverrideという名前のBooleanプロパティおよび列挙ChangeableUsageOverrideが設けられる。この実装では、UseChangeableは、ForceUnchangeable/NoOverrideへの真/偽マッピングを用いて、前と同様に働く。PreferChangeableReferenceを用いてUseChangeableが呼び出され、changeableがIsChangeable==trueを有し、changeableがAllowChangeableReferenceOverride==trueを有する場合に、そのChangeableの使用が、ChangeableReferenceとしての使用になる。
これは、DependencyObject.SetValue()に、それが保持した(変更可能であるときに)ChangeableにAllowChangeableReferenceOverrideを設定させ、DrawingContextメソッドに、UsageOverridePreferChangeableReferenceを用いてUseChangeableを呼び出させることによって使用される。
両方の条件が真ではないときに、Elt2.Prop=Elt1.Propが、条件付きの使用において期待されるプロパティを使用し、変更可能である場合、UseChangeableがPreferChangeableReferenceを用いて呼び出されないので、明示的にChangeableReferenceが設定されていないならばそれをコピーするという点で、正しい挙動が発生することに留意されたい。DrawingContextを直接に使用することも、必要に応じて機能する。というのは、それに送られるChangeableが、AllowChangeableReferenceOverrideを有しないからである。
サブオブジェクトがChangeableReferenceであるchangeableがあるとき、浅いクローンと深いクローンが作られることに留意されたい。CloneCoreメソッドが、新しい浅い「シェル」を作成し、子の上で割り当て、この中にそれ以上深く入らないので、浅いクローンは機能しなければならない。深いクローンについては、Unchangeableまでクローンを作成し、(CanMakeUnchangeableが真であると仮定して)そこまでの各クローン自体をUnchangeableにすることによって、ChangeableCopyおよびUnchangeableのツリーの場合、プロセスは簡単である。これは、最上位レベルがChangeableであり、その下のすべてのレベルがUnchangeableである、深いクローンをもたらす。ドットダウンによって、サブ要素がもう一度変更可能にされることに留意されたい。
しかし、ChangeableReferenceがあるときに、クローン演算は、効果的に実行される必要があるが、参照が、「Changeable」パスでChangeableReferenceまで維持される。これは、ChangeableReferenceから通知があるときに、ホスティングされるすべてのものについて正しいハンドラが呼び出されるようにするために必要である。
次の例を検討されたい。
Figure 2007509426
この例では、そのStops集合および単一のStopと同様に、LinearGradientBrushが作成され、ChangeableReferenceにされる。ブラシは、複数の場所で使用でき、ChangeableReference GradientStopへの変更は、両方のブラシに影響する必要がある。
(Changeableオブジェクトの使用の(有効および無効な)例)
次のセクションでは、ブラシ、ペン、アニメーションなどのオブジェクトが、プログラマによる制御に従ってミュータブルである、Changeableクラスから派生するオブジェクトの使用および操作の要約を示す。Changeableから派生するクラスは、条件付きの使用で使用されるときにそれ自体の非ミュータブルバージョンを自動的に構築することによって、ミュータビリティをシミュレートする。前述したように、Changeableは、オブジェクトにProperty Systemプロパティが設定されるときに条件付きの使用で使用され、複合Changeableオブジェクト内のサブオブジェクトとして使用され、またはDrawingContextコマンド内で使用されると考えられる。
そのようなオブジェクトを用いるアプリケーションを開発するときに、グラフィックスシステムオブジェクトおよび媒体システムオブジェクトは、一般に、作成され、設定され、使用され、一度も変更されない。例えば、Buttonの背景を設定するために、プログラマは、Changeableから派生したSolidColorBrushを使用することができるが、プログラマは、アプリケーションの進行中にボタンの背景を二度と変更しない場合がある。次がその例である。
Figure 2007509426
この形で使用されるとき、Changeableは、RectまたはColorなどの値型のように振る舞う。Changeableは、その宛先にコピーされ、オリジナルに対する変更は、使用される値への変更に影響しない。しかし、プログラマが、使用の後にそのようなオブジェクトを変更する必要がある場合がある。例えば、プログラマが、ユーザが前のコードのボタンをクリックした後で、そのボタンの背景を変更したがると仮定する。
上記などの様々な状況の必要を満たすChangeableパターンが存在する。一般に、Changeableは、IsChangeableプロパティの値によって表されるように、変更可能とすることも、そうしないこともできる値である。IsChangeableが偽のときに値の変更を試みると、例外が生じる。さらに、変更できるIsChangeableオブジェクトは、変化するときまたはそのメンバのいずれかが変更されるときに、Changedイベントを送出する。したがって、Changeableを扱うときに、Changeableが条件付きの使用で「使用される」場合を理解することが重要である。
デフォルトで、Changeableオブジェクトが条件付きの使用に使用されるときに、非ミュータブルコピーが作成され、そのコピーが実際に使用される。コピーは、偽のIsChangeable値を有する。次のコードは、ボタンの背景を設定するのに使用されたmyBrushの変更不能コピーの変更を試みるので、例外の送出を引き起こす。
Figure 2007509426
オリジナルのChangeableオブジェクトを変更しても、コピーは更新されない。
Figure 2007509426
Figure 2007509426
この例のボタンの背景を変更するために、プログラマは、変更されたブラシをボタンの背景プロパティに再割り当てする。
Figure 2007509426
Figure 2007509426
プログラマは、Copyメソッドを使用して、使用されたChangeableオブジェクトの変更可能なコピーを取り出すこともできる。取り出されたコピーは、効果を有するために、プロパティに再割り当てされる。
Figure 2007509426
例えば、Changeableの使用されたバージョン(ワーキングコピー)の変更を求めるプログラマを検討すると、これはすべての状況でのChangeableの理想的な挙動ではないので、Changeableクラスは、StatusOfNextUseプロパティを提供することによって使用される時のその挙動を、プログラマが指定できるようにする。
StatusOfNextUseは、使用時のChangeableの挙動の3つのオプションを提供する。
Unchangeable前のセクションの例に示された、デフォルト挙動である。Changeableオブジェクトが使用されるときに、そのオブジェクトは、それ自体の非ミュータブルコピーを作成し、このコピーが、オリジナルオブジェクトの代わりに使用される。プログラマは、オリジナルオブジェクトの変更を継続することができ、使用されるバージョン(作られたコピー)は、オリジナルオブジェクトへの変更によって影響されず、変更できない。使用されるバージョンを変更するためには、Copyメソッドを使用して変更可能バージョンを入手し、そのバージョンを更新し、新しいバージョンによって使用されたバージョンを置換する。
ChangeableCopy Changeableオブジェクトが使用されるとき、そのオブジェクトは、それ自体の変更可能なコピーを作成し、そのコピーが、オリジナルオブジェクトの代わりに使用される。プログラマは、オリジナルオブジェクトの変更を継続することができ、使用されるバージョン(作られたコピー)は、オリジナルオブジェクトへの変更によって影響されないが、変更可能である。使用されるバージョンは、UnchangeableのStatusOfNextUseを有する。
ChangeableReference Changeableオブジェクトが使用されるとき、そのオブジェクトは、それ自体への参照を提供する。プログラマは、オリジナルオブジェクトの変更を継続することができ、オリジナルオブジェクトへの変更は、使用されるバージョンに影響する(これらは同一のオブジェクトである)。
ChangeableCopyは、Changeableの挙動を変更し、その結果、使用時に、変更不能なコピー(デフォルト設定のUnchangeableの場合)ではなく、変更可能なコピーが作成されるようになる。次のコード(前に示した)は、myBrushのStatusOfNextUseプロパティがデフォルト設定のUnchangeableを有するので、例外を送出する。
Figure 2007509426
Figure 2007509426
しかし、ブラシのStatusOfNextUseにChangeableCopyが設定されている場合には、コードは意図されたように動作する。
Figure 2007509426
Figure 2007509426
ChangeableCopy設定は、主オブジェクトのサブオブジェクトも変更可能に保つ。次の例では、LinearGradientBrushに、ChangeableCopyのStatusOfNextUseが与えられる。その結果、LinearGradientBrushおよびそのサブオブジェクトは、使用された後に変更可能のままになり、プログラマは、この例のGradientStopなど、オブジェクトに含まれるChangeableオブジェクトのStatusOfNextUseプロパティを設定する必要がなくなる。
Figure 2007509426
Figure 2007509426
ChangeableCopyのStatusOfNextUseを有するChangeableオブジェクトを使用するとき、プログラマは、Changeableの使用されるバージョンへのハンドルを保持し、その参照を使用してオブジェクトを変更することもできる。次の例では、使用されるLinearGradientBrushへの参照が、取り出され、ボタンの背景の変更に使用される。
Figure 2007509426
Figure 2007509426
ChangeableReference設定は、Changeableの挙動を変更し、その結果、Changeableが、使用時にそれ自体への参照を提供するようになる。プログラマは、オリジナルのオブジェクトの変更を継続することができ、オリジナルオブジェクトへの変更は、これが使用されるバージョンと同一オブジェクトなので、使用されるバージョンに影響する。次がその例である。
Figure 2007509426
Figure 2007509426
(ブラシおよびペン)
ブラシは、平面を塗り潰す方法を表すオブジェクトである。絶対的な形で平面を塗り潰せる他に、媒体統合レイヤのブラシは、塗り潰すオブジェクトのサイズに対して平面を塗り潰す方法を適合させることもできる。ブラシの種類の例に、SolidColorBrush、(Visualを参照することができる)VisualBrush、(ベクトルグラフィックスリソースを参照することができる)DrawingBrush、LinearGradient、RadialGradient、ImageBrush、およびNineGridBrushが含まれる。ブラシプロパティのデフォルト値は、下記で指定するが、一般に、アクションをもたらさない値である。すなわち、色のデフォルトは、透明であり、他も同様である。また、アニメーション集合のデフォルトはnullである。
前述のように、あるブラシオブジェクトは、使用時に座標系にどのように関係するかを知っており、使用される形状の境界ボックスにどのように関係するかを知っている。サイズは、ブラシが塗り潰すオブジェクトに基づく。
Brush基底クラスは、Transform、全般的な不透明度、およびブレンドモードを有する。
Figure 2007509426
ブラシ(ならびにVector GraphicsおよびMIL APIの他のオブジェクトリソース)オブジェクトは、Changeableであり、作成の後に書き込み可能であり、条件付きの使用で使用された後の振る舞い方に関する全般的なChangeableパターンに従う。
ブラシ(VisualBrushおよびDrawingBrushを除く)は、マークアップ要素での使用に関する単純構文を有するが、この単純構文は、すべてのプロパティおよび挙動へのアクセスを可能にするのではない。プログラマは、単純構文が提供するもの以上のアクセスを必要とする場合に、複合構文を使用する必要がある。複合構文が他のCLRクラスと同一のパターンに従うので、冗長にならないように、本明細書では単純構文だけを文書化することに留意されたい。
次は、現在の実装でのマークアップ要素に関する単純構文を有するブラシ型である。
Figure 2007509426
ブラシ型の多くは、パラメータのいくつかを指定するのに座標系を使用する。この座標系は、ブラシが使用される形状の単純な境界ボックスに対する相対値と定義することができ、または、絶対値とし、ブラシが使用される時にアクティブである座標空間内で解釈することができる。これらを、それぞれRelativeToBoundingBoxモードおよびAbsoluteモードと称する。
Figure 2007509426
SolidColorBrushは、平面を単色で塗り潰す。色のアルファ成分がある場合には、Brushの対応する不透明度属性とかけ合わせる形で組み合わされる。
Figure 2007509426
これは単純な型なので(すなわち、そのプロパティのどれもがChangeableでない)、実装する必要がある唯一のprotectedメソッドは、CloneCore()である。また、このオブジェクトを無効にする値の組合せがないので、ValidateObjectState()メソッドを設ける必要はない。これらのメソッドおよび他の関連するメソッドは、添付の付録で説明する。
SolidColorBrushのマークアップ要素の単純構文を示す。
Figure 2007509426
Brushクラスには、公開されるSolidColorBrushインスタンスのstaticプロパティが含まれる。各々に、同一の名前の色の値が設定される。標準化されたブラシなので、これらは、偽を設定されたIsChangeableを有する(例えば、実装は、構築時にMakeUnchangeable()を呼び出す)ことに留意されたい。
次に、標準的な色の一部を示す。
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
勾配は、勾配停止の組を指定することによって描画される。これらの勾配停止は、ある種の進行に沿った色を指定する。現在サポートされている勾配には、線形および放射勾配の2種類がある。勾配は、指定された色空間で勾配停止の間の補間を行うことによって描かれる。
勾配は、勾配停止のリストからなる。これらの勾配停止のそれぞれに、(含まれるアルファ値を伴う)色および相対位置が含まれる。勾配停止が指定されない場合、ブラシは、透明として(ブラシが指定されていないかのように)描かれる。1つの勾配停止だけが指定されている場合に、ブラシは、指定された1色の単色として描かれる。0から1の範囲(0.0...1.0)の相対位置を有する勾配停止は、範囲(−∞...0.0]内の最大の停止位置と範囲[1.0...+∞)内の最小の停止位置を有すると考えられる。検討される停止位置の組に、0から1までの範囲の外の停止位置が含まれる場合に、暗黙の停止位置が、0(および/または1)で導出され、この停止位置は、この停止位置で発生する補間された色を表す。また、複数の停止位置が、同一の相対位置で設定される場合に、(補間ではなく)ハードトランジション(hard transition)が、その相対位置で発生する。停止位置が追加される順序が、この相対位置での挙動を決定し、最初に追加される停止位置が、その相対位置の前で有効な色であり、最後に設定される停止位置が、その停止位置の後の有効な色であり、この相対位置の追加のストップは、無視される。
このクラスは、他のリソースクラスと同様にChangeableである。
Figure 2007509426
SolidColorBrushに似て、これは、アニメーション集合のネストしたChangeableを有する。
GradientSpreadMethod列挙は、指定されたベクトルまたは空間の外で勾配を描く方法を指定する。3つの可能な値があり、これには、終りの色(最初と最後)が、残りの空間の塗り潰しに使用されるPadと、空間を塗り潰すために停止位置が逆の順序で繰り返し再生されるReflectと、空間が塗り潰されるまで順番に停止位置が繰り返されるRepeatが含まれる。この型のプロパティのデフォルト値は、Padである。
Figure 2007509426
Figure 2007509426
図24に、GradientSpreadMethodの例(カラーではなくグレイスケールであるが)を示す。各形状は、白から灰色になる連続勾配を有する。実線は、勾配ベクトルを表す。
ColorInterpolationMode列挙は、勾配内の色の補間モードを定義する。2つのオプションが、PhysicallyLinearGammaおよびPerceptuallyLinearGammaである。
Figure 2007509426
これは、抽象基底クラスである。
Figure 2007509426
Figure 2007509426
LinearGradientは、ベクトルに沿った連続勾配ブラシを指定する。個々の停止位置は、ベクトルに沿った色停止位置を指定する。
Figure 2007509426
Figure 2007509426
LinearGradientBrushのマークアップ要素の単純構文を示す。
linear−gradient−brush:
”HorizontalGradient” comma−wsp color comma−wsp color |
”VerticalGradient” comma−wsp color comma−wsp color |
”LinearGradient” comma−wsp coordinate−pair comma−wsp color comma−wsp color
LinearGradientのマークアップ要素を用いると、相対位置0および相対位置1の2つの色停止位置を有するLinearGradientの指定が可能になる。「LinearGradient」バージョンが使用される場合に、始点および終点が指定される。「HorizontalGradient」が使用される場合には、始点に0,0が設定され、終点に1,0が設定される。「VerticalGradient」が使用される場合には、始点に0,0が設定され、終点に0,1が設定される。これらの場合に、デフォルトのMappingModeが使用され、RelativeToBoundingBoxになる。
RadialGradientは、連続勾配のプログラミングモデルに類似する。しかし、連続勾配が、勾配ベクトルを定義する始点および終点を有するのに対して、放射勾配は、勾配挙動を指定する、円および焦点を有する。円は、勾配の終点を定義し、言い換えれば、1.0で停止する勾配は、円の円周の色を定義する。焦点は、勾配の中心を定義する。0.0で停止する勾配は、焦点の色を定義する。図25に、白から灰色に移る(グレイスケールの)RadialGradientを示す。外側の円は、勾配サークルを表し、黒い点は、焦点を表す。この勾配は、SpreadMethodにPadをセットされている。
Figure 2007509426
Figure 2007509426
RadialGradientのマークアップ要素を用いると、0および1の相対位置の2つの色停止位置を有するRadialGradientの指定が可能になる。デフォルトのMappingMode(RelativeToBoundingBox)が使用され、デフォルトの半径0.5が使用される。
Figure 2007509426
TileBrushは、抽象基底クラスであり、タイルと、タイルが領域を塗り潰す手段とを記述した論理を含む。TileBrushのサブクラスは、内容を含み、無限平面を塗り潰す形を論理的に定義する。
Stretch列挙が、ViewBox(ソース座標空間)をViewPort(宛先座標空間)にマッピングする方法を記述するのに使用される。これは、TileBrushで使用される。
Figure 2007509426
図26に、ストレッチの例を示す。この例では、内容が左上に位置合せされている。
TileMode列挙は、空間がTileによって塗り潰されるかどうかと、塗り潰し方を記述するのに使用される。TileBrushは、ベースTileの場所(ViewPortによって指定される)を定義する。残りの空間は、TileMode値に基づいて塗り潰される。
Figure 2007509426
Figure 2007509426
図27に、TileModeの例を示す。各例の左上のタイルが、ベースタイルである。この例は、None、Tile、FlipX、FlipY、およびFlipXYを表す。
VerticalAlignment列挙は、コンテナ内で内容を縦に位置決めする方法を記述するのに使用される。
Figure 2007509426
HorizontalAlignment列挙は、コンテナ内で内容を横に位置決めする方法を記述するのに使用される。
Figure 2007509426
TileBrushプロパティは、無限平面のタイリングされる長方形部分(ViewBox)を選択し、塗り潰される領域内のベースTileになる宛先長方形(ViewPort)を記述する。残りの宛先領域は、TileModeプロパティに基づいて塗り潰され、このプロパティは、残りの空間を塗り潰すためにオリジナルタイルを複製するか否かとその方法を制御する。
Figure 2007509426
Figure 2007509426
TileBrushの内容は、固有の境界がなく、事実上、無限平面が記述される。この内容は、それ自体の座標空間に存在し、TileBrushによって塗り潰される空間は、適用時のローカル座標空間である。内容空間は、ViewBoxプロパティ、ViewPortプロパティ、Alignmentプロパティ、およびStretchプロパティに基づいてローカル空間にマッピングされる。ViewBoxは、内容空間で指定され、この長方形が、ViewPort長方形にマッピングされる。
ViewPortは、内容が最終的に描かれる位置を定義し、このBrushのベースタイルを作成する。ViewPortUnitsの値がAbsoluteである場合には、ViewPortの値が、適用の時のローカル空間にあるとみなされる。そうではなく、ViewPortUnitsの値がRelativeToBoundingBoxである場合には、ViewPortの値は、0,0がペイントされるオブジェクトの境界ボックスの左上角、1,1が同一のボックスの右下角である座標空間にあるとみなされる。例えば、100,100から200,200まで描かれる、塗り潰されるRectangleGeometryを検討されたい。ViewPortUnitsがAbsoluteである場合に、(100,100,100,100)のViewPortは、内容領域全体を記述する。ViewPortUnitsがRelativeToBoundingBoxである場合に、(0,0,1,1)のViewPortが、内容領域全体を記述する。ViewPortのSizeが空であり、StretchがNone以外である場合に、Brushは何もレンダリングしない。
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のサイズと等しい、より大きいサイズを有するようにスケーリングされる。これを考えるもう1つの形は、UniformとUniformToFillの両方が、アスペクト比を保つが、Uniformは、ViewBox全体がViewPort内にある(潜在的に、ViewPortの一部がViewBoxに覆われずに残される)ことを保証し、UniformToFillは、ViewPort全体がViewBoxによって塗り潰される(潜在的に、ViewBoxの一部がViewPortの外になる)ことを保証するということである。ViewBoxの領域が空である場合に、Stretchは適用されない。それでも位置合わせは行われ、「点」ViewBoxが位置決めされる。
(ViewPortUnitsに基づいて)ViewPortが決定され、(Stretchに基づいて)ViewBoxの宛先サイズが決定されたならば、ViewBoxを、ViewPort内で位置決めする必要がある。ViewBoxが、ViewPortと同一のサイズである場合(StretchがFillの場合、または他の3つのStretch値の1つで偶然にそうなる場合)、ViewBoxは、ViewPortと同一になるように、Originに位置決めされる。そうでない場合には、HorizontalAlignmentとVerticalAlignmentが考慮される。これらのプロパティに基づいて、ViewBoxが、X次元およびY次元の両方で位置合せされる。HorizontalAlignmentがLeftである場合には、ViewBoxの左縁が、ViewPortの左縁に位置決めされる。HorizontalAlignmentがCenterである場合には、ViewBoxの中心が、ViewPortの中心に位置決めされ、Rightの場合には、右縁が一致する。この処理が、Y次元について繰り返される。
ViewBoxがEmptyの場合に、これは未設定とみなされる。未設定である場合には、ContentUnitsが考慮される。ContentUnitsがAbsoluteである場合に、スケーリングまたは相対位置は発生せず、内容は、変換なしでViewPort内に描かれる。ContentUnitsがRelativeToBoundingBoxである場合には、内容原点が、ViewPortのOriginに位置合せされ、内容が、オブジェクトの境界ボックスの幅および高さによってスケーリングされる。
空間をTileBrushで塗り潰すとき、内容は、上記のようにViewPortにマッピングされ、ViewPortにクリッピングされる。これが、塗潰しのベースタイルを形成し、空間の残りは、BrushのTileModeに基づいて塗り潰される。設定されている場合に、Brushの変換が適用され、この変換は、他のマッピング、スケーリング、相対位置などが行われた後に行われる。
VisualBrushは、その内容がVisualによって指定されるTileBrushである。このBrushは、複雑なパターンを作成するのに使用することができ、あるいは、場面の他の部分の内容の追加のコピーを描くのに使用することができる。
Figure 2007509426
前述のように、VisualBrushは、マークアップ要素の単純構文を有しないが、複合構文を介して記述することができる。
DrawingBrushは、その内容がDrawingによって指定されるTileBrushである。このBrushは、DrawingContextを介して作成された複雑なパターンを作成するのに使用することができる。
Figure 2007509426
Figure 2007509426
前述のように、DrawingBrushは、マークアップ要素の単純構文を有しないが、複合構文を介して記述することができる。
ImageBrushは、ImageSourceによって指定された内容を有するTileBrushである。このBrushは、空間を画像で塗り潰すのに使用することができる。
Figure 2007509426
ImageBrushのマークアップ要素の単純構文を示す。
image−brush:
”Image” image−uri
VideoBrushは、VideoDataによって指定された内容を有するTileBrushである。このBrushは、空間をVideoで塗り潰すのに使用することができる。
Figure 2007509426
VideoBrushのマークアップ要素の単純構文を示す。
video−brush:
”Video” video−uri
NineGridBrushは、必ず内容画像でオブジェクト境界ボックスを塗り潰すBrushであり、画像ストレッチは、純粋にビジュアルスケールを介して達成されるのではない。画像ソースが、4つの境界によって9つの長方形に分割される(したがってNineGridという名前になった)。この9つの領域のそれぞれの画像の内容が、オブジェクト境界ボックスを塗り潰すまで、0次元、1次元、または2次元でスケーリングされる。各セクションがスケーリングされる次元は、図28に示されており、図28は、上下左右の境界によって定義される9つのグリッドを示す、NineGridの概念を表す。各グリッド4角形の矢印は、これらの内容がViewPortサイズに合わせて引き延ばされる次元を示す。
上記で示した9つのグリッド領域の他に、任意選択の「第10」グリッドがある。これは、ViewPort内でセンタリングされ、スケーリングされない追加画像の形をとる。これを、ボタンなどの中央に形状を配置するのに用いることができる。この「第10グリッド」を、グリフと呼び、GlyphImageSourceプロパティによって表す。
Figure 2007509426
Figure 2007509426
境界メンバが、画像ピクセル単位で画像の縁から数えられることに留意されたい。
NineGridBrushのマークアップ要素の単純構文を示す。
nine−grid−brush:
”NineGrid” image−uri int int int int [glyph−image−uri]
4つの整数は、それぞれLeftBorder、RightBorder、TopBorder、およびBottomBorderの値である。第10グリッドまたはグリフの、最後のURIは、オプションである。
Penは、Brushと、空間/Geometryをストロークする方法を記述した他のパラメータとを取るオブジェクトである。概念上、Penは、Geometryからストローク領域を作成する方法を記述する。Geometryの縁、PenのThickness、PenLineJoin、PenLineCapなどに基づく新しい領域が作成される。この領域は、作成されたならば、Brushで塗り潰される。
Figure 2007509426
Figure 2007509426
Figure 2007509426
PenLineCapは、ストローク線の終りの描き方を決定する。
Figure 2007509426
PenDashCapは、破線のストローク線のそれぞれの終りの描き方を決定する。
Figure 2007509426
Figure 2007509426
PenLineJoinは、線をストロークするときの接続点の描き方を決定する。
Figure 2007509426
DashArraysクラスには、共通の周知の破線スタイルへのアクセスを提供する静的プロパティが含まれる。
Figure 2007509426
(Color)
カラーアーキテクチャは、Colorがコンテキストを必要とすることを含むいくつかの一般原理に基づいて作られ、したがって、カラー値は、明示的に割り当てられたコンテキストまたはワークフロー内のカラー不適合度を最小にするための暗黙の仮定されるデフォルトを有する。さらに、カラープラットフォーム設計は、セキュリティ、信頼性、保守性、将来の拡張、および性能に関する長い寿命を有する最小限のコードパスおよびAPIを必要とし、したがって、レンダリングコアを、主に、入ってくる内容ストリームがそれに変換され、出てゆくストリームがそれから変換されるscRGBコードパスに制限することができる(より低い品質を有する追加のsRGBレガシパスも許容される)。「scRGB」が、IEC 61966−2−2国際規格に基づく内部ベクトルグラフィックスデフォルト表現を指すことに留意されたい(「sc」が意味するものについて公式の定義は提供されないが、本明細書では、合成処理最適の空間であることを明瞭にするのを助けるために、「standard compositing(標準合成)」を使用する)。
性能は、リアルタイムレンダリングステージではなく、できる限りカラーオブジェクト定義/指定ステージの近くで複雑な処理を実行することを必要とする。これは、APIへのカラーパラメータが、指定の際にscRGBに(本質的に即座に)変換され、非scRGB定義のオブジェクトについて、そのscRGBカラー値が維持され、同期化されることを必要とする。使用のそれぞれが、最も一般的な開発者の事例が最初に公開されるが、最も高度な事例が明瞭だが最小限のAPIを有する階層化APIを必要とする。したがって、sRGB APIが設けられ(内部で即座にscRGBに変換されるが)、scRGB APIが設けられ、最小限のコンテキスト関連APIが設けられて、高度なCMYK(シアン−マゼンタ−イエロー−ブラック)、モノクローム、ヒューマンビジュアルシステム(human visual system)、およびマルチチャネルソリューションをサポートする。scRGBは、本質的に「無限」色域なので、追加の装置特性記述および域マッピングの解決策は、現実世界の装置に関してscRGBワークフローを「フックする」必要がある。
色は、ほとんどの場合、通常、外部の物理的感覚によって引き起こされる心理学的知覚である。これは、コンピュータベースの色が、装置にまたがり、ユーザの間で、知覚される色を効果的に伝えるために、物理コンテキストを必要とすることを意味する。歴史的に、様々なテクノロジは、色アーキテクチャ実施形態の穏当なコンテキスト的意味を提供する際に一貫性がなく、例えば、これが、「赤」が、ある装置またはユーザにとって「オレンジ」を意味し、別の装置またはユーザにとって「ピンク」を意味することをもたらし、この不一致を解決する実現可能な方法はほとんどない。
本アーキテクチャは、すべてのカラーオブジェクトに関する暗黙の(デフォルトを使用する)カラーコンテキストおよび明示的なカラーコンテキストの組合せを提供する。これは、コンテキスト的な意味を持たないカラーオブジェクトがないことを意味する。これは、不完全な技術であり、したがって、このアーキテクチャの態様は、技術が進歩するにつれて進化できる形で一貫性のあるカラーコンテキストを提供することである。ほとんどのコンピュータユーザ(およびほとんどの開発者)が、カラーマネジメントを扱うことを望まず、カラーが単に正しく働くことを好むことに留意されたい。
一般に、アーキテクチャは、内部コードパスを最小にすることを試み、これは、一方は品質および将来のハードウェアに関し、他方はレガシおよびメモリ/性能制約に関する、2つの基本コードパスを内部で使用可能にすることによって、ある程度達成される。MILコア内部レンダリング合成エンジンは、32bpp sRGBおよび128bpp浮動小数点scRGBをサポートする(64bpp scRGBも検討されており、64bppサポートの事例には、固定小数点で最もよく実装されるもの、浮動小数点、または整数で最もよく実装されるものがある)。
本アーキテクチャは、キャプチャからディスプレイ、編集、記憶、および印刷への128bpp scRGBパス(ディスプレイは、128bppバックバッファおよび10bpc以上のフロントバッファになる)を提供し、性能、メモリ、および/または帯域幅のために品質を犠牲にするレガシ32bpp sRGBパスを許容する。
本発明のカラーマネジメントは、装置およびアプリケーションに追加の柔軟性を提供することによって従来の短所を改善し、プロファイルベースカラーマネジメント解決策を提供する。最も一般的なシナリオは、scRGBおよびscRGBカラーオブジェクトに基づいて、共通のUI要素に関してカラー値の取得および設定をサポートし、ウェブ、マルチ媒体、およびコンピュータグラフィックスに関するほとんどの内容作成をサポートすることである。より一般的でないシナリオに、プロフェッショナル写真ワークフローに関する特定の作業空間プロファイルを用いるRGBカラーコンテキストの使用、印刷前およびグラフィクス設計作業に関するカラーオブジェクトを編集するためのCMYKカラー値の使用、ニッチな印刷シナリオをサポートし、未定義の将来のワークフローをサポートする柔軟性を提供するモノクロームおよびマルチチャネルのカラーワークフローが含まれる。HVSV(ヒューマンビジュアルシステムベースのスペース)ワークフローは、あるニッチなプロフェッショナル写真編集シナリオをサポートする。
品質およびビット深さにおいて進歩を続けるキャプチャセンサテクノロジと一致するために、イメージングは、現代のデジタルネイティブイニシアティブをサポートするために、すべての特徴/APIについて少なくとも64bppのフォーマットをサポートする。本発明が、ベクトルグラフィックスの新しいアーキテクチャを実施するので、ベクトルグラフィックスは、チャネルあたり32ビット浮動小数点のビット精度で実施される。この実施形態は、実際には、従来の8bpcカラーアクセスならびにグレイスケールインターフェースおよびHSVインターフェースを提供するために、「隠される」。
もう1つの型のカラーデータが、「CornflowerBlue」カラーまたは「Pantone」カラーなどのネームドカラー(named color)データである。伝統的なカラーマネジメントプロファイルを拡張することに基づくカラーコンテキストを提供することによって、非常に包括的で強力なカラーネーミングインターフェースが提供される。以前のAPIおよび一般的な形式とのレガシ互換性を維持するために、デフォルトコンストラクタは、sRGB入力に偏っている。
ベクトルグラフィックスの色空間サポートは、ネイティブscRGBサポート、明示的なカラーコンテキストを必要としないsRGBおよび類似する空間のプロパティサポート、明示的に関連するカラーコンテキストを必要としない、HSV(色相、彩度、値)などのsRGBまたはscRGBに密に関係する色空間のメソッドサポート、暗黙のまたは明示的のいずれかの関連するカラーコンテキストに基づくパレットおよびインデックス付き色空間などのネームドカラーならびに関連色空間のメソッドサポート、追加のカラーチャネル、CMYK、ハイファイカラー(CMYKと橙および緑)、CcMmYKインクジェット色空間、および潜在的に将来のスペクトル色サポートなどの明示的に関連するカラーコンテキストを必要とする色空間のメソッドサポートに分割される。
これらの色空間は、MILコアまたは合成エンジンでのレンダリングのためにscRGBまたはsRGBに変換されるが、これらを、プログラム設計言語としてベクトルグラフィックマークアップ言語を使用して、保管するかプリンタに送る(CMYKなど)ことができる。カラーマークアップ構文に、4つの基本指定機構すなわち、16進、既知のカラー、sRGBプロパティ、および高度なカラーコンテキストが含まれる。最初の3つでは、sRGB色空間カラーコンテキストが前提になる。
下の例では、この4つの機構を使用して勾配が作成される。
Figure 2007509426
Figure 2007509426
最初の背景色は、16進数(#ee7711)として指定されている。この16進表現は、.NET framework V1およびWinFormsでカラーを指定する形と同一である。これは柔軟であって、4つの異なる変形:#RGB、#ARGB、#RRGBBB、または#AARRGGBBを許容する。
2番目の背景色は、既知の色(CornFlowerBlue)として指定されている。この表現は、.NET framework V1およびWinFormsでカラーを指定する形と同一である。これは、ネームドカラー値に基づく。ネームドカラーソリューションによって、Pantone、Trumatch、および他のネームドカラーをカラーコンテキストでサポートできるようになる。これは、アルファチャネル設定もサポートする。
最初の勾配停止は、カラーコンテキスト(「sGray.icc 0.5」)を使用して指定されている。このテキストストリングは、カラーコンテキストファイル名を指定し、これは、URLまたはURIとすることができる。このサンプルは、プリントレンダリング時にRGB値をまずモノクローム値に変換することを必要としない、モノクローム印刷のクリーンなサポートを示すためのものである。
2番目の勾配停止は、sRGBプロパティ(A=「0.8」 R=「0.2」 G=「1」 B=「0.2」)を使用して指定されている。この表現は、.NET framework V1およびWinFormsでの色の指定方法と同一である。
3番目の勾配停止は、カラーコンテキスト(=“mswopintent8.icm 0.9 0.2 0.1 0.3”)を使用している。このテキストストリングは、URLまたはURIとすることができるカラーコンテキストファイル名を指定し、アルファチャネル設定をサポートすることができる。このサンプルでは、Publisherおよび他のそのようなアプリケーションに必要な、CMYKサポートが示されている。
これらの例は、一緒に、カラー要件をサポートする非常に堅牢で明瞭な構文を提供する。カラーコンテキストを、グローバルに指定することができ、例えば性能最適化のために、内部カラー参照がこのグローバルコンテキストに従うことを要求できることに留意されたい。
前述したように、カラーコンテキストは、ベクトルベースであれラスタベースであれ、カラーオブジェクトに必要である。粗いレベルでは、カラーコンテキストを、カラーオブジェクトの色空間と人間の視覚系との間の関係を規定するプロファイルとみなすことができる。カラーコンテキストは、ユーザの色空間とscRGB色空間(またはヒューマンビジュアルシステムカラー)の間の関係に関する情報を提供する。これは、以前に効果的な形で実現可能ではなかった、CMYKおよび他のカラー情報の「ラウンドトリップ」を可能にする。
実際問題として、現在、sRGB、scRGB、AdobeRGB、BruceRGB、AppleRGB、TomRGB、CorbisRGB、JoeRGB、HSV、HSB、XYZ、LAB、LUV、YUV、YCC、CMYK、CcMmYK、CMYKOG、ライトネスグレイスケール(lightness grayscale)、ルミナンスグレイスケール(luminance grayscale)、および多数の他の色空間など、文字どおり数百個の異なる色空間が存在する。これらの個々の色空間の多くを、ガンマ、原色、白色点、およびビット精度を含む定義するセマンティクスを有する、赤、緑、および青の視覚的知覚への近似を含む3つのチャネルによって主に定義されるRGB空間などの色空間のクラスに分割することができる。ビット精度が必要なのは、より低い精度(8ビット毎チャネルなど)が、適度なエンコーディング効率を達成するために、通常は広範囲の非線形補償を必要とするからである。
カラーコンテキストクラスを設けることによって、可能な色空間クラスの集合が、グレイスケール、RGB、HSV、CMYK、LAB、LCH、CcMmYK、CMYKOG、スペクトル色などのはるかに小さい集合と、芸術的効果に使用される二色網版空間、トライトーン(tritone)空間、およびクワッドトーン(quadtone)空間などの特殊効果空間に減らされる。同一の基礎になる意味を共有するが異なる座標系を提供する(直交幾何学と極幾何学に類似する)空間を組み合わせることによって、さらなる削減が可能である。これによって、HSVが、RGB色空間クラスの最上位のメソッドになり、LCHが、LAB色空間クラスの最上位のメソッドになる。
特殊効果色空間をスペクトル色と組み合わせ、CcMmYKおよびCMYKOGのサポートを含め、このコンテキストのカラー値を動的配列にすることが可能である。というのは、高度なユーザだけがこの特徴を使用するからである。色空間を、sRGB空間および他のRGB空間をサポートするscRGBと、カラーコンテキストを有するマルチチャネル色空間に減らすさらなる削減が可能である。これによって、scRGB空間およびマルチチャネル空間だけを含む、サポートすべき適度な数の基本色空間クラスが残される。
ColorContextは、ベクトルグラフィックスのColorクラスまたはImageDataオブジェクトのいずれかに関連する。もう1つの代替物が、Visualsを単一のColorContextに制限することである。これは、多くの状況で色変換および検証の量を最適化するのに役立ち、アプリケーション開発者にとってより自然になる可能性があり、例えば、個々のコントロールは、複数のカラーシステムからの色を使用する可能性が低い。動的変更を許容する機構を介して複数のカラーの種類を明示的に使用する高度なアプリケーションについて、カラープロファイルを変更することがまだ許容されることに留意されたい。ColorContextを用いると、2つの装置域の間のレンダリング意図または色域マッピングを指定でき、したがってカラーオブジェクトに関連付けられるようになる。ColorContextは、単一のカラーオブジェクトだけを扱うので、宛先域を仮想装置とすることができる。これによって、ColorContextに、色空間のオブジェクト記述ならびに色の主観的なレンダリング意図の両方を含められるようになる。
色名は、ColorContextの型と実際の色名に基づくカラー値の間のリンクを提供するカラーコンテキストに関連するプロファイルで実施される単純な検索テーブルである。これによって、カラーオブジェクトごとの異なるカラーネーミング辞書が可能になる。例えば、Trumatchなどの1タイプのネーミングシステムを、プロセスカラーオブジェクトに関連付け、Pantoneなどの別のタイプのネーミングシステムを、スポットカラーオブジェクトに関連付けることが可能になる。
publicのベクトルグラフィックスColor型は、下位レベルシステムと一致して、データをその下位レベルシステムに送るときの変換を最小にすることによって、性能を最適化する。浮動小数点値の別々の「ネイティブ」(すなわちCMYKまたは類似物)セットが、カラーコンテキストに保管され、変更が行われるときに同期化される。ネイティブColorContext colorValueは、グレイスケール、RGB、およびCMYKの色空間を透過的にサポートするための、floatの配列に基づく値型(構造体)である。ネイティブColorContext ColorValue配列は、動的であらねばならず、1つ、3つ、4つ、または8つのカラーチャネルに制限されない。これによって、この同一のアーキテクチャを有する、スペクトル色または縮約されたスペクトル色の処理解決策が可能になる。割り当ての費用が、時々部分的にのみ使用される5要素配列の費用に関してかなり高いが、これによって、将来の一貫性がありコヒーレントで柔軟な解決策が保証され、scRGBワークフローが使用されるときに、費用がかからないことに留意されたい。Alpha値は、異なる概念であり、ほとんどの使用で異なって扱われるので、ColorContext ColorValueと別である。
Figure 2007509426
Figure 2007509426
システムカラーUIオブジェクトのカラー値の入手が、他のより高度なタイプのテーマと同様に、他のコンテキストに依存する可能性があり、アプリケーションモデル/テーマAPIを用いて他のシステムメトリックスと共に収集されなければならないことに留意されたい。
Figure 2007509426
scRGB値が、拡張されたダイナミックレンジおよび域をサポートするために、0.0未満、1.0超の範囲となり得ることに留意されたい。
Colorオブジェクトの演算子オーバーライドは、色の混合および追加が色空間依存なので、コンテキスト固有である。例えば、ルミナンスRGB空間は、加算的で線形であり、したがって、通常の数学演算が、かなり直観的であるが、ライトネスRGB空間ならびにCMYK空間は、線形でも加法的でもなく、これによって、これらの演算が、異なる視覚的効果を有する。さらに、ほとんどのColor演算は、所望の域を超える値をもたらすことができ、したがって、域マッピング補償を必要とする。これは、低品質のクランピング程度の単純なものとするか、かなり洗練されたものとすることができる。
scRGBが、物理的な光に基づき、線形かつ加算的に混合されるので、具体的にscRGB ColorContextに制限される場合、一部のアニメーション演算子オーバーロードを提供することができる。CMYK、sRGB、および他の色空間は、非常に異なる混合モデルを有する。
Figure 2007509426
Multichannelカラーに使用されるものと類似するメソッドを使用して、sRGBまたはscRGBに密に関係する、HSB、YCC、YUV、および類似する色空間をサポートすることもできる。
Figure 2007509426
sRGBに基づくrgb形式およびargb形式のfloat値は、0.0から1.0までのスケールで指定される。定義により、これらの値は、絶対にこの範囲の外にはならず、そのようにクランピングされなければならない。逆に、scRGBベースの値は、0.0未満および1.0超でも有効である。これらの値は、宛先の装置が拡張された色域をサポートできない場合に限ってクリッピングされなければならない。これは、宛先粋に関連するプロファイルを照会することによって判定することができる。理想的には、ディスプレイについて、グラフィックハードウェアが、DXの域管理機能を使用してこの問題を処理することができる。
解析される文字列が無効である場合に、カラーは、ARGB=(0.0,0.0,0.0,0.0)に初期化される。
持続するときに、値は、色が既知の色として作成された場合には既知の色名として書き込まれる。そうでない場合に、アルファが1.0の場合にはrgb(float,float,float)形式が使用される。アルファが1.0でない場合には、argb(float,float,float,float)形式が使用される。
ラスタグラフィックスフォーマット、イメージングフォーマット、またはピクセルフォーマットは、上のベクトルグラフィックスソリューションと比較して異なる。単純に言えば、イメージング入力は、白黒からsRGB、scRGB、CMYKまでのサポートされる色空間の種類を有する、1bppから128bppまでのほとんどすべてとすることができる。したがって、ImageDataのカラーソリューションは、ImageDataフォーマットまたはピクセルフォーマットにColorContextを必要とする。これは、標準ファイルフォーマット内の組込みプロファイルまたは組込みガンマおよび色度情報から生成することができる。これによって、ガンマあるいは他の冗長なプロパティまたはフィールドをImageDataクラスで提供する必要がなくなる。
MILRenderコードは、32bpcカラー指定(scRGB)を理解する。入力色変換は、レンダリングコードの上位で行われなければならない(しかし、必ずしも管理されていないコードの外ではない)。
カラー値のアニメーションは、主に線形空間で行われなければならない。これは、線形化されたHSV空間またはscRGBとすることができるが、「バウンス(bounce)」および他のチャネルごとのアニメーションが意味をもつためには、線形である必要がある。
下記を含む3つのカラー精度(color fidelity)モードを説明する。
フル−システムを介する32bpc;128bppバックバッファ/10−bpc+フロントバッファ;フル32bpc合成
ハイブリッド−32bpcカラー仕様/補間;合成前の32bppまでのカラーのディザまたはクランプ
レガシ−32bpcカラー仕様−即座に32bppに変換される;32bpp合成/出力
これらのモードは、2つのバックバッファフォーマットすなわち、128bpp 1.0ガンマ(scRGB)および32bpp 2.2ガンマ(sRGB)を用いてサポートされる。より少ないビット深さ(16bppディスプレイおよび8bppディスプレイ)フロントバッファシナリオを処理するためのサポートも提供される。バックバッファは、合成での消失を防ぐためにPresentにおいてディザリングされる。
オブジェクトのGeometryクラスは、PenおよびBrushを用いる2Dベクトルベースデータのクリッピング、ヒットテスト、およびレンダリングに使用することができる。派生されるGeometryクラスは、より特定の構築および列挙のセマンティクスを提供する。複数の形状固有Geometry型が提供され、より複雑な形状のGeometryの明示的定義を可能にする一般化されたPathGeometryも提供される。GDI+に馴染んだ人にとって、これはGraphicsPathに最も似ている。
Figure 2007509426
Geometryは抽象基底クラスである。
Figure 2007509426
Figure 2007509426
geometryに適用される変換を設定するために、Transformプロパティを設定する。
GeometryCollectionは、定義された領域に対する特定のboolean演算を使用して組み合わされた複数のGeometryオブジェクトの集合である。このオブジェクトを用いると、PathGeometry内のPathFigureオブジェクトを厳密に使用することが可能であるよりも簡単に、Geometryオブジェクトの視覚的組合せを構築できるようになる。
組合せモード列挙によって、集合内の形状領域の組合せが指示される。Boolean演算子Union、XOR、およびIntersectは、交換可能であり、したがって、順序独立に形状に適用される。ComplementおよびExcludeは、交換可能ではなく、したがって、第1形状と個々の残りの形状の間で定義される。言い換えると、{g1,g2,g3}のexclude組合せは、((g1 exclude g2)および(g1 exclude g3)として適用される。Complementは、既存領域が新しい領域から除去された結果によって既存領域が置換されることを指定する。言い換えると、既存領域が、新しい領域から除外される。Excludeは、新しい領域が既存領域から除去された結果によって既存領域が置換されることを指定する。言い換えると、新しい領域が、既存領域から除外される。Intersectは、交差をとることによって領域を組み合わせることを指し、unionは、両方の和集合をとることによって領域を組み合わせることを指し、Xorは、一方または他方の領域に含まれ、両方には含まれない領域だけをとることによって領域を組み合わせることを指す。
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
GetOptimizedGeometry()は、可能な場合に形状の集合を縮小し、その結果は、必ずしもGeometryCollectionではない。これには、隣接する長方形形状の単一の長方形形状への組合せ、新しいパス形状を作成するための隣接するパス形状間のブール演算の実行、または同一の組合せモードを用いるGeometryCollectionのフラット化などの最適化を含めることができる。形状が多数の異なるコンテキストで使用される状況では、これによって、処理および記憶の性能改善がもたらされる。
次の例に、GeometryCollectionを使用するマークアップ要素を示す。
Figure 2007509426
PathGeometryは、PathFigureオブジェクトの集合である。PathFigureオブジェクトの各々は、実際にその形状を定義する1つまたは複数のPathSegmentオブジェクトからなる。PathGeometryの塗り潰される領域は、Filledプロパティに真を設定された、含まれるPathFigureをとり、FillRuleを適用して、囲まれる領域を判定することによって定義される。図13に、PathGeometryオブジェクトの関係を示す。
FillRule列挙は、Geometryに含まれるFigureオブジェクトの交差領域が、Geometryの結果の領域を形成するためにどのように組み合わされるかを指定する。
Figure 2007509426
Figure 2007509426
EvenOdd規則は、キャンバス上の点から任意の向きで無限遠まで射線を描き、形状のセグメントがその射線と交差する場所を調べることによって、点の「インサイドネス(insideness)」を判定する。0のカウントから開始して、セグメントが左から右へ射線と交差するたびに1を加算し、パスセグメントが右から左へ射線と交差するたびに1を減算する。交差を数えおわった後で、結果が0であるならば、その点はパスの外にある。そうでない場合には中にある。
NonZero規則は、キャンバス上の点から任意の向きで無限遠まで射線を描き、射線が横切る所与の形状からのパスセグメントの数を数えることによって、点の「インサイドネス」を判定する。この数が奇数である場合に、点は内側にあり、偶数の場合に、点は外側にある。
他の形状型を他の図に含めるためにパス形状に変換するには、AddGeometryメソッドを使用する。これによって、幾何学的に入力形状と一致する形状が追加される。アニメーションにされない形状について、一致は正確であり、アニメートされる形状は、変換においてロッシイになる可能性がある。ロッシイ変換の理由は、入力形状のアニメーションにされるパラメータが、セグメントがおさまる形と一致しないことである。
Figure 2007509426
結果のPathGeometryの列挙および構造体は、入力形状と正確に一致することが保証されない。
図の集合は、PathGeometryを定義する、PathFigureオブジェクトおよび主内容の集合である。
Figure 2007509426
Figure 2007509426
PathFigureは、セグメント集合を定義する、Geometryのサブセクションである。このセグメント集合は、2次元PathSegmentオブジェクトの単一の接続されたシリーズである。PathFigureは、定義領域を有する閉じた形状とするか、曲線を定義するが囲まれる領域がない接続された一連のSegmentとすることができる。PathFigureクラスには、PathSegmentオブジェクトを必要としない、明示的なArcTo/LineTo/(および他の)メソッド呼出しからのPathFigureのより単純な構築を可能にする複数の便利な関数が含まれる。明示的なAddSegment呼出しを使用して、構成されたSegmentを追加することができる。
Figure 2007509426
Figure 2007509426
Figure 2007509426
図は、各セグメントが最後に追加された点に関して連続性を維持するので、始点を必要とする。始点を指定するには、StartAt(pt)またはAdd(new StartSegment(pt))を呼び出す。セグメントを追加した後に、最後の点を始点に接続する、正しく閉じるセグメントを追加するために、CloseFigure()またはAdd(new CloseSegment())を使用する。開始セグメントと閉じるセグメントが、セグメント集合に現れる。
PathFigureが構築され、StartSegmentが集合の最初のセグメントでないか、存在する場合にCloseSegmentが集合の最後のセグメントでない場合に、例外が送出される。StartSegmentおよびCloseSegmentは、figure内の他の位置では有効でない。例外は、完全に空のセグメント集合である。
PathFigure.IsFilledプロパティは、閉じた図に含まれる領域が、ヒットテスト、レンダリング、およびクリッピングに使用されるか否かを明示的に制御する。このプロパティに偽が設定されている場合には、PathFigureの輪郭だけが使用され、それに含まれる領域は、PathGeometryの全体的な領域に寄与しない。このプロパティのデフォルト値は、真である。
PathFigureの内容を点として列挙するために、簡単な方法の1つが、figureをフラット化し、結果のPathSegmentCollectionを調べることである。フラット化のプロセスは、アニメーションおよび曲線セグメントパラメータに関してロッシイであるが、生の点データが、さらなる点処理のためにPolyLineSegmentを介して公開される。
PathSegmentCollectionは、PathSegmentオブジェクトと、PathFigureを定義する主要な内容の集合である。
Figure 2007509426
Figure 2007509426
Figure 2007509426
PathSegmentは、PathFigureの輪郭のセクションを表す。単純な直線のセグメント、楕円弧のセグメント、3次ベジエセグメント、2次ベジエセグメントを一緒に組み合わせて、PathFigureを形成することができる。
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
PathFigureに追加されるPathSegmentオブジェクトのそれぞれは、PathSegment.IsStrokedプロパティを有する。PathSegmentが、このプロパティに真を設定されている場合には、その特定のPathSegmentは、Penを用いてレンダリングされるときにPathGeometryのストロークされる領域に寄与する。これは、ヒットテストおよびPathGeometryの明示的Widenにも適用される。PathFigureの、ストロークされるPathSegmentセクションとストロークされないPathSegmentセクションの間で切り替えるときの特定の挙動は、適当なダッシュキャップ(dash cap)がPathSegmentの両端に適用されるという点で、破線を指定されたPenの場合と同一である。
次のサンプルに、PathGeometry、PathFigure、およびPathSegmentを使用するマークアップ要素を示す。
Figure 2007509426
Figure 2007509426
RectangleGeometryは、長方形または角丸長方形geometryオブジェクトを定義する。radiusXおよびradiusYは、丸められた角の軸に位置合せされた半径の長さを指す。
Figure 2007509426
Figure 2007509426
次のサンプルに、RectangleGeometryを使用するマークアップ要素を示す。
Figure 2007509426
Figure 2007509426
EllipseGeometryは、軸に位置合せされたX軸およびY軸の長さを与えられた楕円形領域を定義する。
Figure 2007509426
Figure 2007509426
次のサンプルは、EllipseGeometryを使用するマークアップ要素を示す。
Figure 2007509426
LineGeometryは、2つの点の間の線分を定義し、したがって、塗潰し領域を含まない。
Figure 2007509426
Figure 2007509426
次のサンプルは、LineGeometryを使用するマークアップ要素を示す。
Figure 2007509426
(イメージング)
ImageSourceは、イメージングパイプラインの基本構成要素を含む抽象クラスである。ImageSourceは、概念上、あるサイズおよび解像度のピクセルの単一で一定の集合を表す。例えば、ImageSourceは、Decoderが供給できる画像ファイルの単一フレームとすることができ、あるいは、それ自体のあるImageSourceを操作する変換の結果とすることができる。ImageSourceは、マルチフレームでもアニメーション作成でもない。ImageSourceは、変更可能であるが、これは、それ自体のプロパティを変更できるからではなく、そのサブクラスのプロパティを潜在的に変更できるからである。
性能上の理由から、ImageSourcesは、IMILBitmapSourceインターフェースを使用する、画像への管理されないアクセスの提供をサポートする。ImageSourceのサブクラスがこれを提供しない場合には、ImageSource基底クラスがそれを行う(ラッパークラスを使用して)。
Figure 2007509426
Figure 2007509426
Figure 2007509426
ImageDataは、ImageSourceのサブクラスである。ImageDataは、複数の異なる画像のソースのImageSourceを実装する。
Figure 2007509426
Figure 2007509426
ImageDataは、デコードされた画像のシステムメモリでのキャッシング、指定されたソース長方形へ(キャッシュへ)の画像のクロッピング、および指定されたデコード幅および高さへ(キャッシュへ)の画像のサイズ変更を含むサービスを提供する。画像デコーディングシナリオについて、ImageDataは、入力ストリームおよびmime型に基づく、どのデコーダを使用するかまたは自動コーデックディスカバリの指定を可能にする。ImageDataは、URIから直接の画像の読み込みをサポートしない。ローダを使用して、ImageDataを構築するのに使用できるストリームにURIをマッピングしなければならない。ImageDataが構築されたならば、その変更可能なプロパティは、それに埋め込まれたサムネイル、メタデータ、およびピクセルデータだけである。他のプロパティは、非ミュータブルとみなされる。
ImageDataのピクセルデータは、(1)ImageDataのDrawingContextを入手し、DrawingContextを介して画像に描画するコマンドを発行すること、または(2)VisualManagerの宛先(RenderTarget)としてImageDataを使用し、ImageDataにビジュアルツリー(場面)をレンダリングするコマンドを発行すること、という2つの形の1つを含めて、変更することができる。どちらの場合でも、描画は、メモリ内の画像に対して行われ、これは、ピクセルデータを、まずデコードし、メモリ内でキャッシングする必要があることを意味する。キャッシングされたメモリ画像だけが、変更され、画像ファイル自体は、(後にImageEncoderを使用してImageDataを画像ファイルにエンコードしない限り)影響を受けない。
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
ImageDecoderは、デコーダの基底クラスを提供する抽象クラスである。ImageDecoderは、画像内のフレーム数を判定し、フレームを列挙(または索引付け)する形を提供する。上で述べたように、画像フレームは、それぞれがImageSourceである。組込みコーデックが、各要求されたフレームのImageDataオブジェクトを作成する。アドインコーデックは、異なるサブクラスを使用して、フレームごとのImageSourceを返すことができる。ImageDecoderは、ImageSource自体ではなく、1つまたは複数のImageSourceのコンテナである。画像の各フレームが、潜在的に異なる属性(異なるサイズ、異なる解像度など)を有することができることに留意されたい。
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
ImageDecoderBmp.cs、ImageDecoderGif.cs、ImageDecoderIcon.cs、ImageDecoderJpeg.cs、ImageDecoderPng.cs、ImageDecoderTiff.cs、およびImageDecoderWmp.csを含む複数の組込みデコーダが、MILと共に提供される。各デコーダが、ImageDecoderと、次の例のように、デコーダを初期化するのにSystem.IO.Streamを使用する単一のコンストラクタを実装する。
Figure 2007509426
ImageEncoderは、それぞれが潜在的にそれ自体のメタデータおよびサムネイルを有するImageSource(画像フレーム)の集合である。フレームの集合全体に関連するグローバルサムネイルおよびメタデータも設けることができる。コーデックは、画像をエンコードする方法を決定するのに使用されるエンコーディングプロパティをサポートすることを選択することもできる。フレームの集合を、任意の個数の指定されたストリーム(一時に1つ)に保存(エンコード)することができる。集合を、消去し、その後、異なる集合を書き込み、もう一度保存することができる。
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
ImageEncoderBmp.cs、ImageEncoderGif.cs、ImageEncoderJpeg.cs、ImageEncoderPng.cs、ImageEncoderTiff.cs、およびImageEncoderWmp.csを含む複数の組込みエンコーダが、MILと共に提供される。
ImageSizeOptionsは、サムネイルのサイズおよびキャッシングされる画像のサイズを指定するのに使用される。オプションには、幅、高さ、オリジナル画像のアスペクト比を保存するか否か、および回転角度(90°の倍数)が含まれる。
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
次に、画像およびピクセルベースサーフェスのPixelFormat定義を示す。
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
各コーデック(ImageEncoderおよびImageDecoder)は、CodecInfoを供給する必要があり、このCodecInfoは、コーデックに関する情報を与え、関連するデコーダ/エンコーダのインスタンス作成メソッドを提供し、このコーデックが、供給されるCodecFilterと一致するか否かを判定するメソッドを提供する。
Figure 2007509426
Figure 2007509426
CodecInfoBmp.cs、CodecInfoGif.cs、CodecInfoIcon.cs、CodecInfoJpeg.cs、CodecInfoPng.cs、CodecInfoTiff.cs、およびCodecInfoWmp.csを含む組込みCodecInfoオブジェクトが、MILと共に提供される。
CodecFilterは、コーデックエミュレータによって、指定された判断基準に基づいてコーデックを列挙するのに使用される。指定されない判断基準は、一致するコーデックを探すとき、無視される。例えば、MimeTypeが設定されない場合、すべてのmime型を有するコーデックが検討される。
Figure 2007509426
Figure 2007509426
Figure 2007509426
エミュレータは、構築される(そのctorは内部ctorである)とき、CodecFilterを与えられる。そのフィルタは、列挙するコーデックを判定するのに使用される。フィルタ(ある場合に)に一致するコーデックだけが列挙される。
Figure 2007509426
ImageEffectは、ラスタベースイメージング効果の基底クラスである。ImageEffectは、0個以上の入力および0個以上の出力の集合とみなすことができる。ImageEffectへの入力および出力のすべてが、ImageSource型である。ImageEffectは、通常は、その入力およびプロパティを用いて初期化され、その後、その出力が、場面の一部を描画するのに使用されるか、ImageEncoderのフレームとして使用される。組込み効果に、ImageEffectBlur、ImageEffectFlipRotate、ImageEffectGammaCorrect、ImageEffectGlow、ImageEffectGrayscale、ImageEffectNegate、ImageEffectSharpen、およびImageEffectTintが含まれる(これに限定されない)。
(Transform)
図7に示すオブジェクトのTransformクラスは、ベクトルグラフィックスおよびラスタグラフィックスのスケーリング、回転、変換、および傾斜に使用することができる。派生されるTransformクラスは、フレンドリな使用法および列挙のセマンティクスを提供する。transformクラス階層は、クラスであり、アニメーションおよび列挙のセマンティクスをサポートすることによって、Matrix構造体と異なる。
TransformCollection (enumerating semantics, etc.)
TransformCollection.AddScale(...)
Animate MatrixTransform
Transformは、抽象基底クラスである。
Figure 2007509426
Figure 2007509426
TransformCollectionは、その値が個々のTransform値の行列積である、Transformオブジェクトの集合である。値は、左から右へ、集合の最初のアイテムと最後のアイテムに一致して構成される。
Figure 2007509426
Figure 2007509426
Figure 2007509426
RotateTransformは、特定の中心点(デフォルトは0,0である)の回りのある角度の回転を定義する。角度は、度単位で指定される。点x,yの回りの回転角度のstatic行列表現を次に示す。
Figure 2007509426
Figure 2007509426
TranslateTransformは、x方向およびy方向の軸に位置合せされた並行移動を定義する。相対位置dx,dyだけの並行移動のstatic行列表現を次に示す。
Figure 2007509426
Figure 2007509426
ScaleTransformは、中心点(デフォルトは0,0)の回りのx方向およびy方向のスケールを定義する。点x,yに関するスケールsx,syのstatic行列表現を次に示す。
Figure 2007509426
Figure 2007509426
Figure 2007509426
SkewTransformは、x方向およびy方向に沿ったある角度の傾斜を定義する。傾斜角度は、度単位である。ある角度の傾斜のstatic行列表現を次に示す。
Figure 2007509426
Figure 2007509426
Figure 2007509426
MatrixTransformは、その数学的表現を介する変換を定義する。
Figure 2007509426
Figure 2007509426
Transform型のプロパティがマークアップ要素で指定されるとき、プロパティシステムは、Transform型コンバータを使用して、ストリング表現を適当なTransform派生オブジェクトに変換する。現在、この構文を使用してアニメーションにされるプロパティを記述する方法はない。
その構文は、ベクトルグラフィックスであり、対応するTransform構成は、次のように要約されるが、「<>」によって示されるパラメータは、オプションのパラメータを表す。
・matrix(m11 m12 m21 m22 offsetX offsetY)
・AddMatrix(m11, m12, m21, m22, offsetX, offsetY)
・translate(tx <ty>)
・AddTranslate(tx, ty).
・tyが指定されない場合、0であると仮定される。
・scale(sx <sy>)
・AddScale(sx, sy).
・syが指定されない場合、sxと同一であると仮定される。
・rotate(angle <cx> <cy>)
・AddRotate(angle, Point(cx, cy)).
・cx,cyが指定されない場合、0,0であると仮定される。
・skewX(angle)
・AddSkew(angle, 0)
・skewY(angle)
・AddSkew(0, angle)
Figure 2007509426
Figure 2007509426
Figure 2007509426
(Effects)
Effectsは、レンダリング中心の形で場面のビジュアル内容を変更する手段を提供する。例えば、ImageEffects(ラスタに基づくビットマップ効果)は、場面の一部の画像に基づく、完全に合成された表現を操作する。Effectsは、ImageEffects、BlendMode、およびVectorEffectを含む様々な型に分解される。
ImageEffectsは、サブグラフまたはElementに適用することによってリテインモード場面で使用することができ、独立型の画像パイプラインで使用することができる。一般に、ImageEffectは、0個以上の入力および0個以上の出力を有し、この入力および出力は、ImageSource型である。即時モード画像パイプラインでは、ImageEffectが、その入力の属性を記述する他のプロパティの表面を処理できるので、出力がある必要はない。例えば、ImageEffectは、カラーヒストグラム情報または面検出情報を発することができる。リテインモード場面では、効果が適用されるサブグラフのレンダリングされた内容へのアクセスを提供する追加のメタ入力がある。
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
BlendModesは、画像に基づく効果の特定の形である。BlendModesは、全般的にImageEffectsと同一の形でリテインモード場面に適用することができる。したがって、VisualのElementプロパティ(「BlendMode」)ならびにBlendModeプロパティ、IDrawingContextのPushBlendModeメソッド、およびBrushのBlendModeプロパティがある。ブレンドモードは、ソースが合成されるとき、ソースカラーと宛先カラーの組合せを実行する。ブレンドモードの例に、Multiply、Addなどが含まれる。VectorEffectsが、もう一種類の効果である。概要で説明したように、BlendModesは、画像が別の画像または場面に合成される形を制御する演算を記述する。BlendModesは、場面およびBrushに適用することができる。各BlendModeは、ソースピクセルと宛先ピクセルを組み合わせる形を記述し、合成されるすべてのピクセルに適用される。BlendModesは、ソースがスケーリングまたは他の形で変換され、すべての効果(Opacityを含む)が適用された後に適用される。BlendMode演算が適用されるとき、ソースおよびデスティネーションが、事前に乗算されたアルファフォーマット(pre−multiplied alpha format)であることに留意されたい。BlendModeを指定するには、プログラマは、BlendModes staticクラスで指定されるBlendModeの1つを使用するか、ソース乗数および宛先乗数を明示的に設定することができる。一実施形態で、乗数が拡張可能でなく、パラメータを有しないので、乗数は、列挙型によって表される。
Figure 2007509426
Figure 2007509426
Figure 2007509426
(ヒットテスト)
ヒットテストは、場面のビジュアルを選択するのに使用される。ある上位レベルシナリオに、なげ縄(lasso)選択とゴム紐(rubber band)選択、(フォーカスを切り替える次の要素を選択するのに使用される)キーボードナビゲーション、要素ツリー内のマウスフォーカスの判定、透明度を有する重複する要素の選択(画像など)、「ソートバブル(thought bubble)」ヒットテスト、ならびにテキスト内のキャラクタヒットの選択が含まれる。
一般に、ヒットテストは、Core、Framework、およびControlsの間の一貫性をもたらし、コントロールツリーの最上部から始め、点または形状によって1つのコントロールまたはコントロール群を返すことによって動作する。コントロールは、レンダリング形状、境界ボックス、アウトオブバンド形状(ヒット領域)、画像不透明度またはマスク、およびそれ自体のロジックを含むサポートサービスを用いて、ヒットされたか否かを定義することができる。コントロールは、ヒットに関する特定のヒット関連データ(例えば、直線、キャラクタ位置など)を返すことができる。
ヒットテスト機構は、効率的な形でヒットテスト結果をフィルタリングすることができる。さらに、ヒットテスト機構は、他のタイプのVisualに拡張し、Visual内のサブプリミティブまで解決する柔軟性を提供し、例えば、Retained3DVisualがその一例である。
ヒットテストウォークは、ビジュアルツリーの深い右から左へのウォークである。3つの参加者すなわち、ヒットテスタ、ウォーカ、およびコントロール/ビジュアルがある。ヒットテスタは、2つのコールバックすなわち、ウォーカを導くコールバックと、あるヒットビジュアルで探索を早期終了させるコールバックを実装する。コントロールは、ヒットするものを定義する仮想メソッドを実装する。ウォーカは、システムの固定された部分であり、コールバック挙動に基づいて、本質的にコントロールがヒットしたかどうかを各コントロールに尋ねて、ビジュアルツリーを探索する。ヒットは、z順で、上から下の形でコールバックを介して報告される。
したがって、内部的に、ヒットテストにビジュアルツリーの探索が含まれる。下降するときに、ヒットテスタは、例えば形状を有するキャンバス、または内側キャンバスを有するドックパネルなど、要素レベル関係に関してフィルタリングを見る。ヒットが発生するときに、ヒットテスタは、さらなるヒットの処理(存在する場合に)を継続するか、停止することができる。
ヒットウォーカの展望からの制御フロー論理を、次の擬似コードに示す。
Figure 2007509426
ヒットテスタは、publicメソッドを使用して、ヒットテストを開始し、挙動を制御する委任を提供する。デフォルト挙動は、すべてのビジュアルをテストし、最初のヒットを返すことである。結果の委任が与えられない場合には、例外を送出する。
コントロールは、点および形状のHitTestCoreをオーバーライドすることによって、ヒットテスト論理を判断する。ヒットテストが開始されるとき、内部ビジュアルツリーウォーカが、HitTestCoreを呼び出し、効果的にヒットされたか否かをコントロールに尋ねる。HitTestBoundsは、ヒット領域の閉じた境界を反映し、探索を最適化するのに使用される。デフォルトビジュアル挙動は、レンダコンテキスト境界ボックスに対するテストである。デフォルトヒット境界は、レンダコンテキスト境界ボックスである。
Figure 2007509426
Figure 2007509426
ヒットテスタは、ヒット点または形状と追加パラメータをHitTestParametersで渡すことによってヒットテストを開始する。このクラスは、主に、設計を単純にし、拡張性を進行できるようにするために提供される。特殊なヒットテスト要求をこのクラスから派生させて、関係するコントロールに追加情報を渡すことができる。各コントロールは、点および形状に対する特定のHitTestCoreを実装する。コントロールは、そのHitTestCoreロジックを実装するとき、ヒットテストパラメータを尊重することが期待される。
Figure 2007509426
Figure 2007509426
Figure 2007509426
コントロールは、HitTestResultから派生することによって特定のデータを返す。例えば、テキストコントロールは、キャラクタ位置ヒットを返すことを望む場合がある。PointHitTestResultに、ローカル座標空間の点が含まれる。GeometryHitTestResultに、(オリジナルヒットテストの)ローカル座標空間の形状が含まれる。ビジュアル変換関数は、ヒット位置を先祖空間にマッピングすることができる。
Figure 2007509426
Figure 2007509426
委任の使用を例示するために、まず匿名委任を使用して最初の一番上のヒットを求めるヒットテスタを検討されたい。
Figure 2007509426
もう1つの例が、ヒットしたビジュアルのすべてを返すことを求めるヒットテスタである。
Figure 2007509426
Figure 2007509426
ヒットテスタは、列挙を使用して、ヒットテストフィルタリングおよび結果の挙動を制御する。
Figure 2007509426
HitTestFilterBehavior列挙は、SkipChildrenを指定することによって、子ビジュアルではなくこのビジュアルがヒットテストされるという点で、フィルタリング挙動を制御する。SkipVisualAndChildrenは、ビジュアルまたは子ビジュアルをヒットテストしないことを指定する。SkipVisualは、ビジュアルをヒットテストするのではなく、すべての子ビジュアルをヒットテストすることを指定する。Continueは、このビジュアルおよびその子ビジュアルをヒットテストすることを指定する。Stopは、ビジュアルツリーのビジュアルをヒットテストせず、呼出し元に返すことを指定する。
HitTestResultBehavior列挙は、ヒットテスタ挙動を制御する。
Figure 2007509426
Stopは、ヒットテストエントリに返し、さらなるフィルタ演算またはヒットテスト演算をスキップすることを指定する。Continueは、次のビジュアルに対してヒットテストを実行することを指定する。
ヒットテスト識別子を、肯定のヒット識別に関して特定の内容をマークするのに使用することができる。しかし、そのようなモデルは、レンダストリームを分解し、ウォークオーバーヘッドに追加され、ヒットテストのときに管理が難しいため、性能が低かった。要素とビジュアルを統一された型に組み合わせることによって、粒度の基礎レベルが、ビジュアル自体になり、コントロールが、望みの粒度のレベルを得るためにそれ自体を構成できるようになる。
コントロール作成者は、HitTestCoreをオーバーライドし、それ自体の計算を行い、かつ/または下で説明するサービスを使用することによって、論理を記述する。
次は、これらのサービスの能力を示す例である。
第1の例では、コントロールのヒットセンシティブ領域を表すpublicのHitRegionプロパティを有するコントロールを示す。ヒット領域が、レンダリングされる内容と一致する必要がなく、応用例によって最適化できることに留意されたい。ヒット領域が設定されない(_hitRegion==null)場合、コントロールは、ヒットを判定するために基底実装サービスを延期する。
Figure 2007509426
Figure 2007509426
IsHit挙動をオーバーライドするには、追加のサポートサービスを使用する。
Geometryクラスは、その内側領域に対してヒットテストを実行する。
Figure 2007509426
ビジュアルは、レンダリングされる内容(それ自体の)に対するヒットテストのためのprotected関数を提供する。ビジュアルが保持される場合、これによって、内容検証がトリガされる。このヘルパは、ビジュアルに保管された描画命令ストリームを一時に1命令ずつ検査し、レンダリングされる形状に関して各命令の点または形状をヒットテストする。
Figure 2007509426
コードは、点の画像ピクセルがアルファ閾値を超える場合にリターンする。その点は、ビジュアル空間内にあり、変換は、ピクセルベーステストが行われる装置空間への変換である。
public class ImageData: ImageSource
Figure 2007509426
(アニメーション)
アニメーションシステムは、コンポーネントの2つの主要な集合すなわち、タイミングコントロールエンジンと、アニメーションオブジェクトの集合からなる。タイミングエンジンは、時間依存性挙動を示すすべてのオブジェクトによって使用することができるサービスであり、主な例は、アニメーションオブジェクトおよび音声媒体オブジェクトまたはビデオ媒体オブジェクトである。アニメーションオブジェクトは、タイムスパンを他のデータ型にマッピングする関数の組を実装し、このデータ型は、他の上位レベルオブジェクトへの入力として使用される。
グラフィカルアニメーションは、アニメーション集合をレンダリング動作に関連付けることによって達成される。例えば、IDrawingContext.DrawLineメソッドは、ペンと2つの端点をとる。端点の1つを、PointAnimationオブジェクトの集合に関連付けることができ、この場合に、線が経時的に移動する。同様に、ペンは、ColorAnimationオブジェクトの関連する集合を有することができる。その場合に、レンダリング動作で使用される各アニメーションが、時々「タイムライン」と称する、別々のクロックで動作することができる。アニメーションにされるプリミティブが描画されたならば、レンダリングシステムは、定期的な間隔で場面の再描画を処理する。フレームがレンダリングされるたびに、場面に含まれるアニメーションの現在値が、(ほとんどの場合にシステムクロックによって測定される)経過時間に基づいて計算され、アニメーションにされるプリミティブが再描画される。
アニメーションのプログラミングは、システムによって提供されるアニメーションオブジェクトならびにこれらのアニメーションを駆動するタイミングエンジンの両方の理解を必要とする。次の用語が、このセクションの複数の場所で使用される。
時間指定されたオブジェクト(timed object)が階層タイミングシステムに参加し、この階層タイミングシステムで、個々のタイムラインが、その親タイムラインに関するまたはトップレベルタイムラインの場合にルート「文書」(または「ページ」または「フレーム」)タイムラインに関する挙動を定義する属性を有するタイミングモデルが提供される。タイミング属性は、オブジェクトの時間挙動を定義するパラメータ群である。タイミング属性は、排他的に記述的であり、ランタイム状態を有しない。さらに、タイミング属性は、非ミュータブルである。
タイムラインは、タイミング属性群に従ってランタイム状態を維持するタイミングエンティティのインスタンスである。タイムラインは、時間指定されたオブジェクトの「現在」と言う概念を定義する。タイミングツリーは、階層的な形で配置されたタイムラインの組を含むデータ構造である。タイムラインの間の関係は、継承規則群と、各タイムラインに関連するタイミング属性によって定義される。
時間指定されたオブジェクトは、時間依存性挙動を示すオブジェクトである。時間指定されたオブジェクトの時間挙動の記述は、タイミング属性群によって指定され、そのランタイムタイミング状態は、1つまたは複数のタイムラインによって維持される。アニメーション関数は、入力として特定のデータ型のベース値をとり、出力として同一の型の値を作る関数である。アニメーション関数は、Timelineの現在時刻値など、他の暗黙のまたは明示的な入力パラメータをとってもとらなくてもよい。それに関して、アニメーション関数は、同一の入力が異なるときに異なる出力を作る場合があるという点で、一定でないものとすることができる。
修飾子は、アニメーション関数を実施するオブジェクトであり、Elementまたは他の複合オブジェクトのプロパティの値またはレンダリング呼出しへのパラメータを変更するのに使用される。時間指定された修飾子は、Timelineに関連する修飾子であり、そのアニメーション関数は、そのTimelineのランタイム状態に明示的に依存する。アニメーションは、アニメーション関数のある既知の集合を実装する時間指定された修飾子である。
アニメーション集合は、同一のデータ型を処理する修飾子の集合である。アニメーション集合は、ある修飾子の出力を別の修飾子の入力に連鎖し、変更するパイプラインを作成する。集合全体が、1つの入力を取り、1つの出力を作るので、集合自体が、1つの修飾子として振る舞う。
タイムラインは、ビデオクリップまたはアニメーションの再生などの時間依存性プロセスを制御するストップウォッチと考えることができる。タイムラインの属性で指定される時間は、何かに対する相対的な時間である。ほとんどの場合に、この時間は、親タイムラインに関するが、ツリーのルートのタイムラインに関しては、値が、「文書時間」に関し、文書時間は、アプリケーションが起動されるときあるいはページまたはフレームが誘導されるときに開始される暗黙のタイムラインである。タイムラインのクロックは、2つの形すなわち、開始点からの相対位置として、または0と1の間のプログレス比として公開される。後者は、単に、持続時間に対する現在時刻の比率である。
最も単純なタイムラインは、開始時刻と持続時間である。例えば、3秒の開始時刻と5秒の持続時間を有するタイムラインは、基準t=0時(デフォルトで、アプリケーションがロードされる瞬間)の3秒後に「始まり」、その5秒後に「終了する」。この5秒間の間、タイムラインが「オン」であると言う。このタイムラインがアニメーションを制御する場合に、このアニメーションは、その時間の間は変化している(例えば移動している)が、その前と後は静的である。図29に、3のBegin時刻および5のDurationを有するタイムラインを示す。
タイムラインは、その挙動を繰り返すようにプログラムすることもできる。この繰り返しは、反復カウントまたは反復持続時間として指定することができる。タイムラインは、要求されたカウントまたは持続時間を満たすために、必要なだけ先頭から終りまで繰り返される。反復カウントが整数値でない場合には、最後の反復が、途中で中断される。図30に、(アニメーションが、開始時刻の17秒後または20秒まで、5秒ごとに繰り返されることを意味する)Begin=3、Duration=5、およびRepeatDuration=17のタイムラインを示す。
タイムラインの開始時刻は、通常は、その親タイムライン(または文書時刻)に関するが、開始時刻を、別のタイムラインの先頭または終りに関して指定することもできる。その場合に、ソースタイムラインのすべての先頭(または終り)が、対象タイムラインの対応する始まりのスケジューリングを引き起こす。図31に、別のタイムラインの3秒後に開始されるタイムラインを示す。
タイムラインは、終点に達するとき、即座に「オフ」にされる。そのとき、そのタイムラインが制御する時間指定されたオブジェクトが、プレゼンテーションに対する影響を有しなくなる。例えば、時間指定されたオブジェクトが、アニメーションである場合に、制御するタイムラインが終点に達するとき、アニメーションが除去される、すなわち、ベース値に戻される。しかし、アニメーションの最終的な定常状態を最後の値で凍結することが望ましい場合がある。言い換えると、このタイムラインは、始点と終点の間で0から1まで進行するが、終点の後に、1のプログレスで「オン」のままになる。これを、「フィル」挙動と呼ぶ。図32に、Begin=3、Duration=5、およびFill=Freezeのタイムラインを示す。
時間は、タイムラインの観点からは、0のプログレス値から1のプログレス値まで線形に流れる。しかし、タイムラインの内部の時間の経過とその親の内部の時間の経過との間の関係は、タイムラインで時間を逆転し、その結果、逆に流れるように見せることができ、時間が経過する速度を乗算係数によって加速または減速でき、かつ/またはプログレス曲線を変形し、その結果、0から1に線形に進行するのではなく、始点での静止状態から最高のプログレス速度まで加速し、その後、終点での静止状態に向かって減速することができるという点で変更することができる。これによって、このタイムラインによって制御されるアニメーションの「イーズイン、イーズアウト(ease−in,ease−out)」効果が作られる。
具体的に言うと、プログレス/時間曲線は、デフォルトでは線形である。この線形曲線があるアニメーションの制御に使用されるとき、ユーザは、アニメーションが突然始まり、突然終わるので、始点と終点で「急に動く」効果を感じる。この場合に、タイムラインをプログラムして、滑らかな加速曲線を使用して、時間の経過を静止から最大速度まで加速するようにプログラムすることができる。同様に、時間をプログラムして、終点近くで0に向かって減速することができる。加速効果および減速効果は、加速フェーズまたは減速フェーズで費やされる持続時間の比率として指定される。この2つの値は、正であり、その合計は1を超えない。図33に、Begin=3、Duration=10、Acceleration=0.2、およびDeceleration=0.4のタイムラインを示す。
1つの簡単な時間操作に、0から1のプログレス値に進み、0に戻るタイムラインのプログラミングが含まれる。その場合に、タイムラインは、指定された持続時間の2倍、一方は「順方向」部分、他方は「逆方向」部分の間、アクティブになる。図34に、Begin=3、Duration=5、およびAutoReverse=Trueのタイムラインを示す。
タイムラインに関する明白な時間の経過は、その親に関して、定数係数だけ高速または低速とすることができる。デフォルトで、この係数は1であり、タイムラインの時間と親の時間が同じ速度で進むことを意味する。その代わりに、この値が1より大きい場合には、タイムラインの時間は、親より速い速度で進む。例えば、3の係数によって、タイムラインが、始点と終点の間において、指定された持続時間より3倍速く進む。逆に、係数が0と1の間であるとき、時間はより遅い速度で進む。係数が負である場合には、タイムラインの時間は、必ずその親に対して逆に進むように見える。開始時刻自体が、親タイムラインの基準のフレーム内の相対位置であることに留意されたい。その結果、タイムラインの持続時間は速度係数によって影響されるが、開始時刻は影響されない。図35に、Begin=3、Duration=5、およびSpeed=0.5のタイムラインを示す。
タイムラインを、ツリー構造で編成することができる。すべての文書、フレーム、またはウィンドウは、ある暗黙の「ルート」タイムラインを有し、これは、実世界の壁掛時計の時間を表すと考えることができる。しかし、ルートタイムラインの時刻t=0は、そのタイムラインが作成された時刻すなわち、文書がロードされたか、フレームが誘導されたか、ウィンドウが開かれた時刻である。
タイミングシステムの階層的な性質を与えられて、時間の経過を、基準の3つのフレームの1つにおける発生と呼ぶことに意味が生じる。基準の単純フレームは、個々のタイムラインによって経験される基準のフレームである。基準のこのフレームでは、タイムラインのプログレス値が、必ずt=0で0、t=dで1であり、dは、タイムラインの単純な持続時間である。タイムラインの持続時間は、必ず、基準の単純フレームで指定される。親タイムラインの基準のフレームは、所与のタイムラインの親のタイムラインに関する基準の単純フレームである。例えば、あるタイムラインのBegin時刻は、必ず、親タイムラインの基準のフレームで指定される。基準のグローバルフレームは、ルートタイムラインの基準の単純フレームである。基準のそのフレームでは、時刻t=5sが、タイムラインが作製されてから5秒後に発生し、10sの持続時間が、正確に実世界の10秒だけ続く。
さらに、タイムラインがアクティブである場合に、その親タイムラインもアクティブである必要があることを含む、様々なタイミング制御規則がタイミングサブツリーに適用される。逆に、タイムラインがアクティブでない場合に、その子のどれもがアクティブであってはならず、開始することができない。タイムラインが明示的に一時停止される(ITimingControl.Pauseメソッドへの呼び出しを介して)場合に、その子も、暗黙のうちに一時停止される。そのタイムラインが再開されるとき、明示的に一時停止されたのでないすべての子も再開される。(繰り返し点を超えることを含む様々な理由のいずれかで)タイムラインが開始される場合に、子は初期化される。
タイムラインは、別のタイムラインを明示的に親とすることができ、この場合に、タイムラインツリーの形状は、明示的かつ明瞭である。しかし、多くの場合、あるデフォルトのタイミング親に基づいて、システムに自動的にタイムラインを親に指定させることが有用である。明示的に親に指定されないタイムラインを、オートペアレンティグされている(auto−parented)と言い、その有効な親タイムラインは、そのタイムラインの使われ方に依存する。2種類のオートペアレンティングすなわち、ビジュアルの親へのペアレンティングまたはルートへのペアレンティングがサポートされる。
タイムラインのビジュアルの親は、タイムラインの使われ方によって暗黙のうちに決定される。例えば、タイムラインがカラーアニメーションを制御し、そのアニメーションが、あるビジュアルVの背景として使用されるブラシをアニメーションにする場合に、Vが、そのタイムラインの「ビジュアルの親」である。そのVisualが、関連するデフォルトタイムラインを有する場合に、そのタイムラインが、この例のオリジナルのタイムラインの親である。そうでない場合に、Visualの親は、再帰的に調べられる。Visualツリーのルートは、必ず、ルートタイムラインに暗黙に関連し、したがって、Visualが、そのVisualツリーに含まれる場合に、そのツリー内の任意のオートペアレンティングされたタイムラインが、タイミングツリー内のどこかで親とされていることが保証される。しかし、VisualがまだVisualツリーに含まれない場合には、そのタイムラインは、Visualがツリーに挿入されるなどのときまで、タイミングツリーの外部に留まる。
デフォルトの「ルート」タイムラインは、ビジュアルの親子関係によって定義されるが、これは、その場合に、タイムラインを有する最も近いVisualの親が必ずしも使用されないことを除く。そうではなく、ルートの親子関係では、タイムラインが、必ずツリー内で最上位のVisualに関連する(これは、FrameオブジェクトまたはWindowオブジェクトであるか、VisualManagerに関連するルートVisualになる場合がある)。
タイムラインが自動的にペアレンティングされたならば、暗黙のデフォルト親タイムラインを変更することが起きた場合、再ペアレンティングの必要が生じる場合がある。例えば、タイムラインの直接のビジュアルの親が、当初はそれ自体のデフォルトタイムラインを有しなかったが、後に設定された場合、タイムラインを再ペアレンティングする必要がある。この再ペアレンティングは、自動的に行われる。オートペアレンティングと再ペアレンティングは、後述するIAnimatableインターフェースによって実施される。
タイムラインオブジェクトおよび時間指定されたオブジェクトは、複数の共通の挙動を共有する。例えば、アニメーションを、一時停止または再開することができ、アニメーションのリストを、アクティブまたは非アクティブにすることができる。一貫性を保つために、時間指定されたオブジェクトは、タイミングメソッドおよびタイミングプロパティへのアクセスを可能にする1つまたは複数のインターフェースを実装する。
ITimingControlインターフェースは、ランタイムに制御できる時間指定されたオブジェクトによって実装される。
Figure 2007509426
Figure 2007509426
Figure 2007509426
次の表に、ITimingControlインターフェースのセマンティクスを要約する。
メソッド、プロパティ、またはイベント 意味
Acceleration 時間加速フェーズで費やされる単純
持続時間の分数を表す、0と1の間
の値。この属性とDecelera
tion属性の合計が、1を超えて
はならない。
AutoReverse この属性が「True」である場合
に、タイムラインは、始めから終り
まで進行し、即座に終りから始めに
逆に進行する。その場合に、タイム
ラインは、Duration属性に
よって指定される時間の2倍だけア
クティブになる。
Begin このタイムラインが開始される時刻
。デフォルトで、この時刻は親タイ
ムラインの開始時刻であるが、他の
タイムラインの開始または終了に対
する相対位置を指定することもでき
る。後者の場合に、他のタイムライ
ンは、これと同一のタイムラインに
ペアレンティングされる。
BeginIn 将来または過去の指定された時点で
のインタラクティブな開始をトリガ
する。パラメータは、このタイムラ
インの親タイムラインの基準のフレ
ームで指定される。親タイムライン
がアクティブでない場合には、この
メソッドは効果がない。
Begun オブジェクトが、内部状態が継続的
に変更される期間に入るときに必ず
送出される。
Changed 修飾子の内部状態が変化するとき、
必ず修飾子によって送出される。
Ended オブジェクトが、内部状態が継続的
に変更される期間から出るとき、必
ず送出される。
CurrentRepeat タイムラインが繰り返される場合の
、タイムラインの現在の反復。最初
の反復は、反復1である。IsOv
erridingBaseValu
eが偽の場合には、このプロパティ
は0を返す。
CurrentTime このタイムラインにローカルな現在
時刻。IsOverridingB
aseValueが偽の場合には、
このプロパティはTime.Uns
pecifiedを返す。
Deceleration 時間減速フェーズで費やされる単純
持続時間の分数を表す、0と1の間
の値。この属性とAccelera
tion属性の合計が1を超えては
ならない。
Disable このタイムラインを使用不能にし、
効果的にタイミングツリーから除去
する。
Duration 始めから終りまでの単一期間の持続
時間。
Enable このタイムラインを有効にし、効果
的にタイミングツリーに挿入する。
このメソッドは、これがオートペア
レンテッドタイムラインであり、デ
フォルト親が指定されていない場合
には効果がない。
End このタイムラインの最大終了時間。
この値が、Beginプロパティと
Durationプロパティの合計
より小さい場合には、アクティブ化
期間が、この属性によって短く切ら
れる。さらに、この属性によって指
定される時刻の後の(スケジューリ
ングされたものまたはインタラクテ
ィブな)すべての開始は、無視され
る。
EndIn 将来または過去の指定された点での
インタラクティブな終了をトリガす
る。パラメータは、このタイムライ
ンの親タイムラインの基準のフレー
ムで指定される。親タイムラインが
アクティブでない場合には、このメ
ソッドは効果がない。
EndSync この属性は、タイムラインの暗黙の
持続時間を定義するのに使用され、
この持続時間は、Duration
属性が明示的に指定されない場合に
使用される。タイムラインの暗黙の
持続時間は、それが制御する時間指
定されたオブジェクトによって、ま
たはそれを親とすることができる他
のタイムラインによって、定義する
ことができる。
Fill 終了時刻が過ぎた後のタイムライン
の挙動。デフォルトで、タイムライ
ンは、始めから終りまでのみ「オン
」であるが、この属性に「Free
ze」が設定されている場合には、
タイムラインは、終了時刻を過ぎて
もオンのままになる。その場合、終
了時刻の後のプログレス値は、終了
時刻の時の値になる。可能な値は、
Remove(グローバルデフォル
ト)、Freeze、Hold、T
ransition、およびAut
oである。
FillDefault Fill属性のデフォルト値。Fi
ll属性が指定されない場合に、こ
の属性が、フィル挙動を決定するの
に使用される。さらに、(それ自体
のFillDefault属性がセ
ットされない場合)このデフォルト
は、これを親とするタイムラインに
よって継承される。可能な値は、F
ill属性と同一である。
IsChanging タイムラインがアクティブである場
合に真、そうでない場合に偽になる
IsEnabled タイムラインがタイミングサブツリ
ーの一部である場合に真、そうでな
い場合に偽になる。このプロパティ
が真である場合に、このタイムライ
ンがその一部であるサブツリー自体
が有効にされていることは、保証さ
れない。
IsForwardProgressing このタイムラインの進みが、壁掛時
計の時刻と比較して0から1に移動
する場合に真。このプロパティでは
、潜在的に逆のタイムラインでネス
トされることの効果が考慮される。
IsOverridingBase
Valueが偽の場合に、このプロ
パティは、このタイムラインの親タ
イムラインが返すのと同一の値を返
す。
IsOverridingBaseValue このタイムラインがアクティブであ
るか、フィル期間である場合に真。
IsPaused タイムラインが、アクティブである
が一時停止状態である場合に真。
IsReversed タイムラインが、タイムライン自体
の基準のローカルフレームからみて
逆転された期間である場合に真。こ
のプロパティは、潜在的に逆のタイ
ムラインでネストされることの効果
を考慮しない。IsOverrid
ingBaseValueが偽の場
合に、このプロパティは偽を返す。
ParentTimeline このタイムラインのタイミング親で
あるタイムライン。これは、他のタ
イムラインへの参照であるか、2つ
の特殊な参照値すなわち、Time
line.VisualParen
tまたはTimeline.Roo
tTimelineの1つになる可
能性がある。このプロパティに、T
imeline.VisualPa
rentが設定される場合に、この
タイムラインは、それが使用される
Visualに関連するタイムライ
ンに使用時にオートペアレンティン
グされる(Visualが関連する
DefaultTimelineを
有しない場合には、親Visual
が再帰的に調べられる)。Time
line.RootTimelin
eが設定される場合には、このタイ
ムラインは、タイミングツリーの「
ルート」に使用時にオートペアレン
ティングされる。
Pause このタイムラインおよびその子タイ
ムラインのすべてを一時停止する。
このタイムラインがアクティブでな
い場合には、このメソッドは効果が
ない。
Paused タイムラインまたはその子孫の1つ
が一時停止されるとき、必ず、その
タイムラインによって送出される。
Progress タイムラインの現在のプログレス値
。IsOverridingBas
eValueが偽の場合に、このプ
ロパティは0を返す。どの場合でも
、このプロパティの戻り値は、両端
を含んで0と1の間の値である。
RepeatCount 始めから終りまでの期間を繰り返さ
なければならない回数。これは、分
数値とすることができ、タイムライ
ンを永久に繰り返さなければならな
いことを示すための特殊な値flo
at.PositiveInfin
ityにすることができる。この属
性およびRepeatDurati
on属性の両方が指定される場合に
は、有効な持続時間は、この2つの
うちの短い方になる。
RepeatDuration 始めから終りまでの期間を繰り返さ
なければならない時間の長さ。これ
は、分数の反復カウントを暗示する
ことができ、あるいは、タイムライ
ンを永遠に繰り返さなければならな
いことを示す特殊な値Time.I
ndefiniteにすることがで
きる。この属性およびRepeat
Count属性の両方が指定される
場合には、有効な持続時間は、この
2つのうちの短い方になる。
Repeated タイムラインが単純持続期間を繰り
返すとき、必ずタイムラインによっ
て送出される。
Restart 第2の(またはその後の)開始時刻
に達した時のタイムラインの挙動。
デフォルトで、開始時刻は、すべて
のアクティブ期間を中断させ、タイ
ムラインの時刻t=0に戻るが、こ
の属性にWhenNotActiv
eが設定されている場合、開始時刻
は、アクティブ期間に割り込まず、
無視される。可能な値は、Alwa
ys、WhenNotActive
、およびNeverである。
RestartDefault Restart属性のデフォルト値
。Restart属性が指定されな
い場合には、再開始挙動を決定する
のにこの属性が使用される。さらに
、このデフォルトは、(そのタイム
ラインがそれ自体のRestart
Defaultを設定しない場合に
)これを親とするタイムラインによ
って継承される。可能な値は、Re
start属性と同一である。
Resume このタイムラインおよびその子タイ
ムラインを再開する。このタイムラ
インがアクティブでなく、一時停止
されている場合には、このメソッド
は効果がない。
Resumed 再開されるときに必ずタイムライン
によって送出される。
Reversed 時刻の方向が変更されるときに必ず
タイムラインによって送出される。
Seek (すべての子タイムラインに影響す
る可能性がある)このタイムライン
の現在時刻を変更する。このタイム
ラインがアクティブでない場合、こ
のメソッドは効果がない。
Seeked シーク動作の結果として時刻が変更
されるとき、必ずタイムラインによ
って送出される。
Speed 親タイムラインと比較した、このタ
イムラインについて時間が経過する
相対速度。例えば、1の値は普通の
速度を意味し、2の値は、時間が2
倍速く経過することを意味する(し
たがって、知覚される持続時間は、
Duration属性によって指定
された時間の半分で終了する)。こ
の値は、負にすることができ、その
場合に、時間は、親タイムラインが
反転されたかのように、このタイム
ラインで逆方向に、終りから始めに
流れる。
グラフィックス場面は、あるレンダリング動作に対してアニメーションにされるパラメータを指定することによるか、ある要素プロパティにアニメーションを追加することによってアニメーションにすることができる。アニメーションは、入力のある任意の集合(一般にそのうちの少なくとも1つが、タイムラインである)をとり、レンダリング演算に渡される正しい型の出力を作る関数である。例えば、PointAnimationは、タイムラインプログレス値をPoint値型に変換する。それと同時に、パラメータとして1つまたは複数のPoint値をとる様々なレンダリング演算も、PointではなくPointAnimationを受け取ることができ、この場合に、アニメーション関数が、各フレームで評価されて、そのフレームで使用されるPointが計算される。
アニメーションは、集合にグループ化される。アニメーション集合は、パイプラインとして働き、入力としてプロパティのベース値をとり、その出力として、そのプロパティに使用されなければならない現在値を作る。集合は、0個以上のアニメーションオブジェクトを連鎖し、このオブジェクトのそれぞれは、入力値をとり、類似する型の出力を作ると言う類似するセマンティクスをサポートする。パイプラインが、規則的な間隔で評価され、出力がレンダリング演算で使用され、アニメーションの効果が作られる。
アニメーションにできる値は、様々な型を有するので、様々な異なる型のアニメーションもある。しかし、すべてのアニメーションが、共通のパターンに従い、すべてが、共通のインターフェース群を実装する。Animationオブジェクトは、クラスの3つのグループすなわち、修飾子、時間指定された修飾子、およびアニメーションに編成される。
簡単なアニメーションでは、始点と終点の間で値を補間する。始点と終点の両方が指定されるとき、ベース値は、アニメーションが「オン」である時間に対して無視される。アニメーションが「オフ」であるときには、プロパティの値を、ベース値に戻すことができる。アニメーションは、それに関連するタイムラインが「オン」である限り「オン」であることに留意されたい。したがって、from−toアニメーションは、Fillタイミング属性に「Freeze」を設定することによって、ベース値を永久にオーバーライドするようにすることができる。図36に、From=10およびTo=70の、yでアニメーションが作成される点を示す。
始点または終点の、両方ではなく一方だけが指定される場合、プロパティのベース値が、他方の点の値に使用される。これは、前の例では冗長に思えるが、この例では、ベース値が無視されるのではなく、アニメーションに構成されるという点で、重要な相違がある。これによって、(プロパティが別のプロセスによって変更されるので)ベース値が変化する場合、またはアニメーションが別のアニメーションに連鎖される場合、興味深い効果を作ることができる。
アニメーション機能を指定するもう1つの形が、ベース値からのデルタを指定することである。これは、概念上、ベース値からベース値+デルタまで補間するfrom−toアニメーションに似ている。しかし、この場合に、始点と終点の両方が、ベース値を用いて構成される。
アニメーションに関連するタイムラインが、繰り返されるように設定されている場合に、アニメーションは、始めから終りまで複数回実行される。図37に、From=10、By=60、およびRepeatCount=2のyでアニメーションが作成される点を示す。反復ごとに同一の軌道を繰り返すのではなく、本質的にそれ自体と合成することによって、各反復の効果を累積するようにアニメーションをプログラムすることができる。図38に、From=10、By=60、RepeatCount=2、およびIsAccumulating=Trueのyでアニメーションが作成される点を示す。
from−toアニメーションのデフォルト挙動は、アニメーションが作成されるプロパティのベース値を無視することであるが、この挙動を、加算的な挙動に変更することができ、その場合に、from値およびto値の両方が、ベース値からのデルタになる。
次の表に、基本的なアニメーション型を要約する。
型 出力値
From t=0の「From」値とt=1のベース値。
To t=0のベース値とt=1の「To」値。
From−To t=0の「From」値とt=1の「To」値。
By t=0のベース値と、t=1のベース値と「By」値の合計。
From−By t=0の「From」値と、t=1の「From」値と「By」値
の合計。
基本的なアニメーションでは、始点と終点の出力値が指定され、間の値の計算に線形補間が使用される。複雑なアニメーション機能について、その代わりに値のリストを指定することができる。各値は、キーフレームに対応する。単純な場合に、これらのキーフレームが、規則的な間隔で現れる。アニメーションは、キーフレームの間のペースを決められた間隔(paced spacing)を使用するようにプログラムすることもできる。ペースを決められた補間方法では、キーフレームの各対の間の間隔が、アニメーションが及ぶ「総距離」に対する2つのキー値の間の「距離」の比に比例する。これは、例えばfloatアニメーションまたはpointアニメーションなど、「距離」という意味のある概念を有する型のアニメーションについて可能である。その場合に、キーフレームの間の補間は、線形になる。第3のオプションは、まったく補間しないことであり、この場合に、出力値関数は、離散関数である。図39に、KeyValues=10,90,70および様々な補間方法を用いてyでアニメーションにされる点を示す。
追加の制御のために、各キーフレームの時刻を、明示的に指定することができる。キーフレームの間の補間は、線形または離散とすることができる。キー時刻は、総アニメーション持続時間の比率として指定され、期間全体を含めなければならない。言い換えると、最初のキー時刻は0であり、線形補間の場合に、最後のキー時刻は1である。図40に、KeyValues=10,90,50およびKeyTimes=0,.2,1の、yでアニメーションにされる点を示す。
補間に関するさらなる制御のために、3次ベジエ曲線群を使用して、アニメーションに使用される時間曲線を記述することができる。これを、画面にレンダリングされるベジエ曲線と混同してはならない。この曲線は、タイミング曲線の形状を変更するのに使用され、キーフレーム値は、プログレス値に対して線形に補間される。このスプライン補間方法では、アニメーションに関連するタイムラインによって与えられる線形の0−1プログレス値を、非線形の0−1プログレス曲線に変換するフィルタが追加される。
次の表に、アニメーション固有の属性とその意味のリストを含める。このリストは、すべてのアニメーションオブジェクトが従うテンプレートである。属性の型が「<ValueType>」である場合に、実際のオブジェクトは、アニメーション型と一致する型を有する属性を公開する。例えば、ColorAnimationオブジェクトは、この属性の型が「Color」である。下にリストされた属性の他に、アニメーションオブジェクトは、ITimingAttributesインターフェースで指定される属性をサポートする。
Figure 2007509426
Animatableクラスは、Changeableクラスから派生する。これは、媒体ソースなど、アニメーションにできるかアニメーションにされた値を含むことができるオブジェクトまたはオブジェクト集合によって、基底クラスとして使用される。Modifier、TimedModifier、およびAnimationは、個々のプロパティがアニメーション可能でないので、皮肉なことにAnimatableではなくChangeableから派生する。
Figure 2007509426
メソッド、プロパティ、またはイベント 意味
HasAnimations オブジェクトが経時的に変化できる
場合に真。一般に、オブジェクトが
アニメーション集合を保持する場合
に、このプロパティが真になる。
IsAnimating オブジェクトのアニメーションのい
ずれかが変化しつつある場合に真(
Modifier.IsChang
ingを参照されたい)。
IsOverridingBaseValue オブジェクトのアニメーションのい
ずれかが変化しつつあるか、fil
l状態であり、したがって現在アク
ティブであり、オブジェクトを変更
している場合に真。
GetCurrentValue このオブジェクトの瞬間値と同一の
値を有するが、経時的に変化しない
オブジェクトを返す。DoesCh
angeプロパティが偽の場合に、
CurrentValueプロパテ
ィは、新しいコピーではなくオブジ
ェクト自体を返すことができる。
SetDefaultParentTimeline
オートペアレンテッドタイムライン
の親であるタイムライン。このプロ
パティが設定される場合に、すべて
のオートペアレンティングされたタ
イムラインが、再ペアレンティグさ
れるが、タイムラインまたはオブジ
ェクトに関して、新しいクローンは
作成されない。
Modifierクラス、したがってTimedModifierおよびAnimationは、個々のプロパティがアニメーションにされてはならないので、AnimatableではなくChangeableから派生する。これによって、プログラマが、アニメーションのFromプロパティがアニメーションにされてはならないという事実が課される。
Modifierクラスは、UnchangeableのStatusOfNextUseプロパティ値を有することができない。ModifierのStatusOfNextUseのデフォルト値は、ChangeableCopyであるが、ユーザがModifierの再利用を望む場合に、ChangeableReferenceを設定することもできる。ユーザがStatusOfNextUseにChangeableReferenceを設定する場合に、アタッチされたModifierがParentTimelineプロパティを設定されていなければ、例外が送出される。これによって、衝突する継承された親タイムラインを有する状況が回避される。アニメーションにされず、変更可能でないAnimatableの枝は、UnchangeableのStatusOfNextUse値を有することができ、使用時に変更不能にすることができる。From、To、またはByなどのModifierクラスのプロパティは、そのModifierの寿命全体を通じて変更可能のままになる。
Modifierは、その寿命全体を通じて変更可能であり、したがって、MakeUnchangeableは、これらのクラスに対して例外を送出する。現在アニメーションを含むAnimatableについて、MakeUnchangeableは例外を送出する。
ユーザが、AnimatableクラスのChanged通知に登録する場合に、ユーザは、プロパティ変更によるかアニメーションの性質を介するのいずれかで引き起こされた変更について通知を受ける。すなわち、ユーザは、Animatableによって使用されるアニメーションに関連するTimelineが、提示される各フレームでシークされるか順方向に移動されるとき、変更通知を受け取る。
独立にアニメーションにされるプロパティ(例えばOpacity)またはAnimatable(例えばSolidColorBrush)の場合、ハンドラを供給したすべてのユーザに送られるChanged通知は、コンポジタフレームレートではなく、UIスレッドフレームレートで発生する。この場合のアニメーションの正確な値は、値が近くならなければならないが、画面にあるものと正確に同一である保証はない。
アニメーションが、依存またはMIL依存である場合に、画面にあるものと一致する値を得ることは可能であるが、どの通知がレンダリングパスに対応するかを知ることは、現在不可能であり、したがって、どの通知が、表示されようとしている値を反映するかを知ることはできない。しばしば発生するように、レンダリングパス中にタイミングツリーが変更される場合には、ユーザが、複数の通知を受け取る可能性があり、したがって、どの通知が画面の結果的な値に対応するかをユーザが知る可能性は、さらに低くなる。
修飾子は、ある型の、「ベース値」と称するオブジェクトを入力としてとり、入力と同一の型の別のオブジェクトを返す、GetValueメソッドを実装するオブジェクトである。出力の値は、入力と修飾子の内部状態の両方に依存する。具体的に言うと、これは、同一の入力を用いてGetValueを複数回呼び出すことによって、同一の出力が返される保証がないことを意味する。グラフィカルアニメーションは、フレームごとに1回修飾子のGetValueメソッドが呼び出され、各フレームの新しい値が作られるときに行われる。
一般に、GetValueメソッドの戻り値に関する保証はなく、このメソッドは、呼び出されるたびに、異なる値を返す可能性がある。修飾子を消費するオブジェクトは、こうであることを仮定し、次の例のように修飾子を繰り返して呼び出すことができる。
Figure 2007509426
しかし、実際には、修飾子が、その内部状態に応じて、同一の入力を与えられて同一の出力を作ると期待されるときがありえる。修飾子が「変化している」といわれるのは、GetValueの戻り値が呼び出しのたびに異なる可能性がある期間中である。GetValueの戻り値が各呼び出しで同一であるときには、「変化していない」。修飾子が「変化していない」場合に、その修飾子のユーザは、次の例のように、GetValueメソッドの戻り値を安全にキャッシングすることができ、多分、GetValueメソッドを繰り返して不必要に評価することを回避できる。
Figure 2007509426
Figure 2007509426
抽象Modifierクラスが実装され、修飾子は、このクラスから継承する必要がある。このクラスは、GetValueメソッドおよびGetUniqueInstanceメソッド以外のすべてのデフォルト実装を提供する。
Figure 2007509426
Figure 2007509426
次の表に、Modifierクラスのセマンティクスを要約する。
メソッド、プロパティ、またはイベント 意味
Changed 内部状態が変化したとき、必ずモデ
ィファイヤによって送出される。
ParentTimeline この修飾子のオートペアレンティン
グされたタイムラインの親であるタ
イムライン。このプロパティが設定
される場合に、この修飾子のすべて
のオートペアレンティングされたタ
イムラインが、新しい親タイムライ
ンに再ペアレンティングされる。
GetUniqueInstance 他のインスタンスと別々にそれ自体
のランタイム状態を維持できる、こ
の修飾子のインスタンスを返す。こ
の修飾子にオートペアレンティング
されたタイムラインが含まれる場合
、返されるインスタンスは、パラメ
ータとして渡されたタイムラインに
ペアレンティングされたタイムライ
ンを有する。
GetValue 引数として渡されたベース値と修飾
子の内部状態に基づいて、この修飾
子の現在の出力値を計算する。Is
OverridingBaseVa
lueプロパティが偽である場合に
、この関数は、ベース値を返すこと
が保証される。
IsChanging 修飾子が現在変化しつつある場合に
真、非変化期間中である場合に偽。
このフラグは、ChangeBeg
unイベントおよびChangeE
ndedイベントと共に最もよく使
用される。このフラグが真である場
合、IsOverridingBa
seValueも真になる必要があ
る。
IsOverridingBaseValue GetValueメソッドの戻り値
が、修飾子によって現在影響されつ
つある場合に真。この値が偽のとき
、GetValueは、引数として
渡されたものと同一のオブジェクト
を返すことが保証される。修飾子が
、ベース値をオーバーライドしてい
るが変更していない場合があること
に留意されたい。
UsesBaseValue GetValueの戻り値がベース
値に依存する場合に真。このプロパ
ティが偽である場合、それは、修飾
子がベース値を完全に無視すること
を意味する。修飾子がリストに含ま
れる場合、このプロパティは、いく
つかの場合に修飾子のサブセットだ
けを評価する必要がある場合の最適
化を可能にする。
さらに、Modifierから継承するが、インターフェースメソッドの型安全バージョンを公開する、型固有クラスの集合が実装される。次の例に、FloatModifierクラスを示す。
Figure 2007509426
時間指定された修飾子は、少なくとも部分的にTimelineオブジェクトによって挙動が制御される修飾子である。前述の修飾子規則が適用されるが、さらに、時間指定された修飾子は、その修飾子のタイムラインの制御を公開するためにITimingControlインターフェースを実装する。抽象TimeModifierクラスはない。その代わりに、型固有クラスは、型固有のModifierクラスから継承する。次の例に、FloatTimedModifierクラスを示す。
Figure 2007509426
Figure 2007509426
ModifierおよびITimingControlインターフェースが、類似するメソッド、プロパティ、およびイベントを有することに留意されたい。TimedModifierは、これらに関する単一の実装を公開する。TimedModifierは、そうする必要はないが、制御するTimelineにすべての呼出しを転送することによって、ITimingControlを実装することができる。型固有TimedModifier実装によって提供されるITimingControlのデフォルト実装は、制御するTimelineに呼出しを転送する。
アニメーションは、特定のアニメーション関数を実装する時間指定された修飾子である。
Figure 2007509426
Figure 2007509426
アニメーション集合は、アニメーションオブジェクト(<Type>Modifierから継承する)のリストであり、第1のオブジェクトからのGetValueメソッドの出力が、第2のオブジェクトのGetValueメソッドのベース値パラメータとして使用され、以下同様である。柔軟性のために、アニメーション集合に含まれるオブジェクトは、実際には、型を指定されたModifierの型である。集合は、全体として、IModifier.GetValueに似て見えるGetValueメソッドをサポートする。実際に、アニメーション集合は、IModifierインターフェースのほとんどをサポートするが、「UsesBaseValue」プロパティをサポートしない(このプロパティは、集合全体として「真」であると必ず仮定される)ので、実際にはIModifierを実装しない。
Figure 2007509426
Figure 2007509426
アニメーション集合から実行されたイベントは、合体される。
パスアニメーションは、TimedMatrixModifierの特殊化である。MatrixModifierを、MatrixTransformと共に使用することができる。MatrixTransformは、MatrixプロパティおよびMatrixAnimationsプロパティを有し、 PathAnimationは、MatrixModifierなので、MatrixAnimationとして使用することができる。
Figure 2007509426
メソッド、プロパティ、またはイベント 意味
Geometry これは、任意の形状とすることがで
きる。楕円に関して、プログレス0
の適当な始点が選択される。形状が
、多数の下位形状を有する場合に、
それらのパスのそれぞれを、形状内
で定義される順番で移動することが
できる。
DoesRotateWithTangent このプロパティに偽が設定されてい
る場合に、オブジェクトは、回転な
しで形状パスに沿って移動する。真
が設定されている場合、オブジェク
トは、所与の位置でパスのタンジェ
ントに一致するように回転する。
マークアップ要素の使用法。
Figure 2007509426
アニメーションにできるすべてのリソース、メソッド、またはオブジェクトは、Animatableインターフェースを実装することを含む、複数の規則に従う。型「Bar」の「Foo」という名前のアニメーション可能プロパティ(またはパラメータ)のすべてについて、型「BarAnimationCollection」の「FooAnimations」という名前のもう1つのプロパティ(またはパラメータ)がある。アニメーションが望まれる場合に、必ず、アニメーション集合が使用される。基本的なModifierオブジェクトまたはAnimationオブジェクトは、アニメーション合成が除外されているので、直接には使用されない。
リソースを、個々のプロパティにアニメーション集合を追加することによってアニメーションにすることができる。次の例に、アニメーションカラーを有するSolidColorBrushを作成する方法を示す。
Figure 2007509426
アニメーションにするリソースは、レンダリング演算で、またはElementプロパティの値として使用することができる。
レンダリング演算は、コンテキスト描画メソッド呼出しにアニメーション集合を追加するか、アニメーションにするリソースを使用することによってアニメーションにすることができる。次の例に、アニメーションにされた不透明値を描画コンテキストにプッシュする方法を示す。
Figure 2007509426
Elementは、Elementプロパティにアニメーション集合を追加することによってアニメーションにすることができる。次の例に、C#でボタンの幅をアニメーションにする方法を示す。
Figure 2007509426
Figure 2007509426
次に、XAMLの同一の例を示す。
Figure 2007509426
アニメーション(またはアニメーションにされたリソース)が使用されるとき、必ず、アニメーション(またはリソース)が、クローンを作成され(浅い効率的な形で)て、一意の独立に制御可能なタイムラインを有する宛先が提供される。この挙動の副作用は、オリジナルのアニメーションが、ビジュアル場面の一部でなく、したがって、ITimingControlインターフェースを介する制御呼出しに応答しないことである。この効果を達成するために、呼出し側のコードは、まずアニメーションを使用し、次にアニメーションを読み戻す。読み戻される値をキャッシングし、タイミング制御に使用することができる。次の例に、アニメーションを制御する予定のコードが従うことのできるパターンを示す。
Figure 2007509426
Figure 2007509426
ユーザは、基底クラスとしてAnimationEffectを使用して新しいクラスを作成して、AnimationEffectを実装する。ユーザは、自分のAnimationEffectのビルダも作成する必要がある。
Figure 2007509426
メソッド、プロパティ、またはイベント 意味
Invalidate ユーザは、自分のAnimatio
nEffectを次のRender
QueueItem中に処理される
AnimationEffectの
リストに置き、RenderQue
ueItemが確実にスケジューリ
ングされるようにしたいとき、これ
を呼び出す。無効なアニメーション
のリストは、RenderQueu
eItemの始めに初期化される
InvalidatePassive ユーザは、自分のAnimatio
nEffectを次のRender
QueueItem中に処理される
AnimationEffectの
リストに置きたいが、Render
QueueItemをスケジューリ
ングさせたくないとき、これを呼び
出す。
IsInvalid アニメーションが、現在、次のRe
nderQueueItem中に処
理されるAnimationEff
ectのリストに含まれる場合に真
を返す。Invalidateが呼
び出されたので真になる可能性があ
る。
Element これは、AnimationEff
ectが付加されるElement
である。AnimationEff
ectがElementに付加され
た場合には、例外が送出される。ユ
ーザは、OnAttachが呼び出
されるまで設定を行ってはならない
AttachImpl AnimationEffectは
、要素に付加されるとき、自動的に
そのAnimationEffec
tのクローンが作成され、新しいク
ローンが、要素のAnimatio
nEffectの集合に追加され、
OnAttachが呼び出される。
この時点で、AnimationE
ffectのprotected
Elementプロパティが設定さ
れる。ユーザが、集合にAnima
tionEffectを追加した場
合に、新しいAnimationE
ffectのOnAttachだけ
が呼び出される。OnAttach
が呼び出されるとき、Elemen
tが、そのマークアッププロパティ
を設定されているか、Elemen
tの子のすべてがあることは保証さ
れない。AnimationEff
ectのクローンが作成される。E
lementを、すべての機能を呼
び出すときにAnimationE
ffectに渡すことができるが、
AnimationEffectが
Elementを最も必要とする場
合の他の要素からのイベントのイベ
ントハンドラにElementを渡
すことはできない。Animati
onEffectは、他の要素のイ
ベントハンドラを設定することがで
き、なおかつ、それがこのElem
entに割り当てられていることを
知る必要がある。
DetachImpl これは、AnimationEff
ectがElementから切り離
されるときにAnimationE
ffectに対して呼び出される。
PreLayoutReadImpl これは、RenderQueueI
temでレイアウトを実行する前に
、AnimationEffect
がダーティである場合、Anima
tionEffectに対して呼び
出される。これは、Animati
onEffectが必要な値を読み
取るべき時である。読取と書込が別
々である理由は、読取が、レイアウ
トを即座に実行させ、すべてのAn
imationEffectが、読
取と書込をこの順番で行うと、処理
全体が低速になるからである。
PreLayoutWriteImpl これは、RenderQueueI
temでレイアウトを実行する前に
、AnimationEffect
がダーティである場合、Anima
tionEffectに対して呼び
出される。AnimationEf
fectが処理される順番は保証さ
れないが、すべてのダーティAni
mationEffectが、呼び
出される前にOnPreLayou
tReadを呼び出されることは保
証される。
PostLayoutReadImpl これは、RenderQueueI
temでレイアウトを実行した後に
、AnimationEffect
がダーティである場合、Anima
tionEffectに対して呼び
出される。IsAlwaysDir
tyフラグがセットされていない場
合には、このAnimationE
ffectのダーティフラグに偽が
設定されており、次のRender
QueueItem中に処理される
AnimationEffectの
リストから除去される。Anima
tionEffectがこのメソッ
ドでSetDirtyを呼び出す場
合に、次のRenderQueue
Item中の処理について、Ani
mationEffectが効果的
にダーティに保たれる。Anima
tionEffectがダーティの
ままでいることを望む場合に、Is
AlwaysDirtyフラグを設
定する方がはるかに効率的である。
(プリミティブ型)
MILの基礎の長さ単位は、doubleであり、これによって、他のプリミティブ型およびAPIは、doubleに基づく。一般に、これらのdoubleは、当初に1/96インチ(約0.265mm)と等しいユーザ単位として評価される。カラーに関して、カラーチャネルの各々が、doubleではなくfloatによって表される。角度測定値に関して、double値は度単位である。floatまたはdoubleが時間測定値として評価されるときには、秒であると仮定される。
Time構造体は、特定の時点または時間のスパンを表す。さらに、「Indefinite」と称する特殊な時間値が、無限に将来の時点または無限に長い時間のスパンのいずれかを表す。時間値はプロパティシステムで使用されるように設計されており、したがって、「Unspecified」と称する特殊な値を使用して、プロパティを消去するか、プロパティが設定されていないことを明示的に示すことができる。時間値は、内部では整数カウントとして保管される。
Figure 2007509426
上記の文法の他に、「分」および「秒」を、有効とみなされるために「00」から「59」までの範囲で指定する必要があることに留意されたい。また、「timecount−value」フォーマットが無単位で使用される場合に、その値は、秒単位と仮定される。次は、Time値とその意味の例である。
Time 値
02:30:03 2時間30分3秒
50:00:10.25 50時間10秒250ミリ秒
02:33 2分33秒
00:10.5 10秒500ミリ秒
3.2h 3時間12分
45min 45分
30s 30秒
5.45ms 5.45ミリ秒
12.467 12秒467ミリ秒
1d 1日
Time構造体は、単一のTime値を保管するのに使用される。
Figure 2007509426
Figure 2007509426
他の基本型を下に示すが、次の表記が使用される。
・*:0個以上
・+:1個以上
・?:0個または1個
・{n}:n回
・():グループ化
・|:代替物を区切る
・二重引用符はリテラルを囲む
Figure 2007509426
Figure 2007509426
色のマークアップ構文
Figure 2007509426
Colorsオブジェクトには、RedおよびBlueなどの周知の多数の色を含む静的メンバが含まれる。
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
point構造体を下に示す。
Figure 2007509426
Figure 2007509426
pointオブジェクトのマークアップ構文。
Figure 2007509426
Vectorオブジェクトを下に示す。
Figure 2007509426
Figure 2007509426
Figure 2007509426
Vectorオブジェクトのマークアップ構文。
Figure 2007509426
sizeが、Vectorではなく、したがって、加算、減算、または変換を行えないことに留意されたい。また、sizeは、負の幅または負の高さを有することができない。それを設定する試みが行われた場合には、ArgumentExceptionが送出される。
長方形に関して、Rectangle要素と衝突しないように、Rectangleではなく名前Rectが使用される。負の幅および高さを指定することは可能であるが、長方形を正規化する標準的な形はなく、長方形に対する多数の演算が、非直観的な結果を与える可能性がある。RectのWidthおよびHeightに非負の値を設定することはできない。そのような値がコンストラクタに渡された場合には、結果が正規化される。WidthまたはHeightに負の値が設定された場合には、ArgumentExceptionがもたらされる。
Rectには、その内側の点ならびにその辺にあるすべての点が含まれる。したがって、Rectの辺は、包含的である。その結果、0 Widthまたは0 HeightのRectは、Rectによって表される1次元の線分の点の集合が含まれるので、空ではない。WidthとHeightの両方が0である場合には、Rectに、そのLocationにある1つのPointが含まれる。これは、真に空のRectが、特殊な値であり、static EmptyRectプロパティを介してアクセスできることを意味する。空のRectのWidthプロパティおよびHeightプロパティは、負の無限大(この両方が負になり得る唯一の場合)を返し、XプロパティおよびYプロパティは、正の無限大を返し、これらのプロパティのどれもが、変更不能になる。これは、「空」の幅と通常の高さ、またはその逆を有することがなくなることを保証するためである。
Figure 2007509426
Figure 2007509426
Figure 2007509426
リストに示すように、rectは、複数のメソッドを備える。IsEmptyは、インスタンスが空のRectと等しい場合に真を返す。FromLTRBメソッドは、本質的に、(左、上、左右、上下)を用いて初期化された長方形を返す。Containsメソッドは、Rectが空でなく、p.x≧r.x、p.x≦r.x+r.width、p.y≧r.y、かつp.y≦r.y+r.heightである場合に真を返す。これは、長方形が負の幅または負の高さを有する場合に、このメソッドが偽を返すことを意味する。
IntersectsWithは、両方のRectが空でなく、r1.x≦r2.x+r2.width、r2.x≦r1.x+r1.width、r1.y≦r2.y+r2.height、かつr2.y≦r1.y+r1.heightである場合に真を返す。2つの長方形の交差は、left寸法およびtop寸法の最大値と、right寸法およびbottom寸法の最小値をとることによって計算される。どちらかのRectが空の場合には、EmptyRectが返される。
2つの長方形の和集合は、left寸法およびtop寸法の最小値と、right寸法およびbottom寸法の最大値をとることによって計算される。どちらかのRectが空の場合には、他方のRectが返される。
Offsetメソッドについて、相対位置は、長方形の位置に単純に加算される。このメソッドは、Rectが空の場合には効果がない。
Inflateについて、膨張量は、すべての側面に同等に適用される。r.x=r.x−s.width;r.y=r.y−s.height;r.width=r.width+2*s.width;およびr.height=r.height+2*s.heightを含む調整が行われる。空のRectは位置を有しないので、このメソッドは、Rectが空の場合には効果がない。
次のマークアップ構文では、x、y、width、およびheightを指定する。これが、System.Drawing.Rectangleの型コンバータが行うことと同等であることに留意されたい。
Figure 2007509426
2D計算の行列は、3×3行列として表される。MILは、行ベクトル構文を使用する。milは、アフィン変換だけが可能であり、したがって、3×3行列全体ではなく、6つの値だけが必要である。これらは、次のように命名され、定義される。
Figure 2007509426
行列が、点と掛け合わされるときに、その点が、新しい座標系から前の座標系に変換される。
Figure 2007509426
変換を、任意のレベルまでネストすることができる。新しい変換が適用される場合、その適用は、必ず、現在の変換行列に前からかけることと同一である。
Figure 2007509426
APIのほとんどの場所で、Matrixが直接には受け取られない。そうではなく、Transformクラスが、深い形でアニメーションをサポートする。
Figure 2007509426
Figure 2007509426
Figure 2007509426
マークアップ構文について、順序は、M11、M12、M21、M22、OffsetX、およびOffsetYである。
Figure 2007509426
(3次元ビジュアルおよび3次元要素)
このセクションは、主に、アプリケーションが使用する媒体統合レイヤを介して簡単な3次元効果を提供する3次元効果を対象とする。そのような効果は、リモーティング、印刷、デスクトップの合成を統合し、ならびにMILアーキテクチャおよび要素モデル、およびMILにまたがる媒体の合成可能性においてきれいに加わる。例えば、ビジネスビジュアライゼーションは、3次元プレゼンテーションおよび対話性のある要件を有する。これは、数千個または数万個のオブジェクトへのヒットテスト分解能を必要とする可能性があり、図41に示された画像のように見える可能性があるインタラクティブビジュアライゼーションをもたらす。
本明細書で説明する特徴は、一般に、モデリングツールを介して提供される機能性ではなく、ランタイムのレンダリングおよび対話を対象とする。提供されるモデリング機能性は、アニメーションまたはランタイム構築がランタイムに公開される必要がある状況を対象とする。例えば、実際にはモデリング機能であるが、3Dテキスト押出しを提供することができる。というのは、アプリケーションが、テキストをデータバインドすることを望み、したがって、これがランタイム機能であることを要求するからである。
上で説明したように、MILシステムのVisualは、最終的にレンダリングされるものの2D合成ツリーを表す。UiElementおよびControlsが、Visualであることに留意されたい。さらに、Visualは、Visual自体の内容の(ペインタのアルゴリズムに関して)前にレンダリングされる子Visualの集合を有する。前述したように、RetainedVisual、SurfaceVisual、HwndVisualなどを含む、具象Visualサブクラスの種類がある。RetainedVisualは、ユーザがVisualに直接に作成するか、レイアウトシステムからOnRender()コールバックを受け取った結果として作成するかのいずれかである、2D描画命令群を表す。
理解されるように、3Dは、2Dビジュアルの世界に自然におさまる。このために、2Dの対応物と同様に、描画コンテキストをオープンし、描画コンテキストにレンダリングすることによって強制的に塗り潰される描画命令のリストを表すRetained3DVisualが提供される。これは、効果的に、シーングラフまたはメタファイル、あるいはVisual自体への命令リストを構築する。
Retained3DVisualは、本質的に、光、場面の2D投影を定義するカメラ、投影をマッピングするためのローカル座標空間内の長方形の2次元ビューポート、ならびにアンチエイリアススイッチ、フォグスイッチ、およびその類似物などの他の環境パラメータを含む、3次元(レンダリング命令/シーングラフ/メタファイル)データの集合である。
オンデマンドのOnRender()機能が、Retained3DVisualについて提供されないことに留意されたい。この機能性は、2Dの世界で描かれるデータの量を管理するのを助けるために、2Dについて存在する。2Dと同様に、レンダリングは、DrawingContextを介して行われ、「即時モードフィーリング」呼出しが行われる。例えば、2Dで、次のコードを描画コンテキストに含めることができる。
Figure 2007509426
Figure 2007509426
2Dとの一貫性を保つために、次のような類似するモデルが、3Dで提供される。
Figure 2007509426
レンダリングのこのモデルが、(「命令」が単純に保存される)リテインモード3Dビジュアルおよび(レンダリングが直接に行われわれ、カメラが前もって確立される必要がある)即時モード3Dビジュアルの両方で良好に働くことに留意されたい。実際に、リテインモードの場合に、内部的に行われることは、3Dモデリング階層が構築され、保持されることである。その代わりに、即時モードの場合には、そのようなことが行われず、命令が直接に発行されており、コンテキストスタック(例えば変換用)が維持されている。
次のコードは、3D Visual APIを用いるプログラミングを示す例である。この例では、Retained3DVisualを作成し、レンダリングされる描画コンテキストを入手し、プリミティブおよびライトをレンダリングし、カメラを設定し、コントロールの仮想子にビジュアルを追加する。
Figure 2007509426
Figure 2007509426
3Dへの2Dの統合は、重要な特徴であり、これによって、2D UIに、3Dの世界で対話させ、3Dサーフェスにマッピングするなど、非常に興味深いシナリオが可能になる。2Dは、別々の形で3Dに統合される。1つの形が、3Dプリミティブへのテクスチャとしての統合である。すべてのAvalon 2D Brush(ならびにより複雑なマテリアル指定)を使用して、3Dにテクスチャリングすることができる。これの特殊な場合が、任意のVisual(したがって、ControlsまたはアプリケーションUI全体)をホスティングできるVisualBrushである。ヒットテストを解決し、それを行うことを望むアプリケーションのビジュアルへのさらなるヒットテストを行う機構が設けられ、ある場合に、ヒットテスト分解能が、Visualがライブになり得るものである。Visual自体はビットマップではないので、Visual内の2D形状をとり、それを3Dにし、したがってテクスチャとして2Dビットマップではなく3Dベクトルグラフィックスを使用するなど、より洗練された技法を介して、Visualテクスチャリングを実施することができることに留意されたい。
2Dを3Dに統合するもう1つの形が、3Dコンテキストに対するレンダリング命令としての統合である。遠近法の効果なしで、特定のz深さ、例えば球面、2Dビジュアル、および立方体へ、画面に位置合せされ、スケーリングされない2Dビジュアルを単純にレンダリングでき、なおかつ、それらが同一のzバッファを共有でき、したがって、例えば、球面が1つの2D UIを通過できるようにすることも望ましい。これは、Drawing3DContextの「DrawVisual」命令によって公開される。
本明細書で説明するように、Animationは、直観的に動作しなければならず、2Dアニメーション技法は、直接に3Dに変換可能である。例外は、タイムラインの有理化である。
上記では、描画命令がコンテキストに発行される、使用法の強制的レンダリングスタイルを示した。これは、宣言的な使用法ではなく、したがって、この強制的手法は、宣言的マークアップ要素に適当ではない。
上記の機構には、外部で明示的に構築される3Dモデルがないので(内部的にある場合であっても)、プログラマは、3Dモデルをアドレッシングできず、その内容を列挙することができない。その結果、入力としてモデルを取り、新しいモデルを生成する「効果」を記述する場所がない。
3D「リソース」を作り、2Dと同様にBrush、Pen、Geometry、Pathなどを用いて使用する宣言的な形を提供するために、3D命令ストリームに入るものをユーザが構築できるようにする複数の型が設けられ、構築されるオブジェクトを、コンテキストを使用するのではなく、Retained3DVisualに設定することができる。
例えば、上のDrawing3DContextに基づくサンプルコードを、次のように書きなおすことができる。
Figure 2007509426
Figure 2007509426
この場合に、モデルが、作成されており、その後、Retained3DVisualに割り当てられる。PushTransform/Pop対が、それ自体が変換とその下のModelを有するModel3DCollectionの構成に置換されている。モデリング手法と強制的コンテキストに基づく手法との両方を提供することによって、ビジュアル内容の要素レベル宣言的マークアップ、ビジュアル列挙、場面グラフ効果、および変更可能性が提供され、これらの手法は、アーキテクチャとして実行可能な形で行われる。
モデリングクラスツリーのルートは、Model3Dであり、これは、Retained3DVisualに付加できる3次元モデルを表す。最終的に、ライト、メッシュ、.Xファイルストリーム(したがって、これは、ファイル、リソース、メモリなどから与えることができる)、モデルのグループ、および3D位置決めされた2Dビジュアルのすべてが、モデルである。したがって、次の階層がある。
Figure 2007509426
Model3Dクラス自体は、3D境界ボックスの取得、Model3DのTransformの取得および設定、シェーディングモードなどの他の「ノード」レベルプロパティの取得および設定、ならびにhitTestObjectの取得および設定を含む、複数の演算をサポートする。明示的な3D開始のヒットテストが、3D場面内で公開されていないことに留意されたい。言い換えると、任意の指向性射線を3D場面に投影して、何がヒットするかを調べるAPIがない。ヒットテスト機能性は、Retained3DVisual内の2D投影に対してヒットテストを実行することによってアクセスされる。
3Dの組込みは、3D座標系を用いる2D座標系の有理化について課題を提示する。2Dでは、座標系が左上に原点を有し、+xが右、+yが下である。
3D座標系は、右手系とすることができ、この場合に、+zは画面から手前に向かい、+xは右(2Dと同一)、+yは上(2Dと異なる)である。これは、3Dグラフィックスコンテキストの左手座標系が、多数の不要なプログラミングエラーを作る傾向があるからである。現代のハードウェアが、頂点シェーダをダウンロードする能力を有し、したがって、望みのすべての座標系変換を使用することが可能にされることに留意されたい。
座標系有理化のもう1つの態様が、テクスチャが存在するu,v空間である。u,v空間に関する特定のデフォルト変換はないが、「+vが下」のモデルは、「+vが上」(テクスチャが上下反対に見える)を有するモデルよりも多数の、テクスチャリングを介する2D UIの直接マッピングが可能である。テクスチャリングされるモデルが正しい方位のu,vグリッドを有しない場合、MaterialのBrushのTransformプロパティを使用して打ち消すことができる。
テキストが3Dで魅力的に見える最も実行可能な形を調べるために、多数の実験が実行された(これが、必ずしも幅、高さ、および奥行きを有する「3Dテキスト」を意味しないことに留意されたい)。このために、アプリケーションは、3Dで使用されるテキスト(および他の任意の2D要素)を保持する2D Visualを構築し、そのVisualがオーバーサンプリングされる(例えば4倍から8倍)ようにし、プレーンまたは任意の3DオブジェクトへのMaterialとしてこのVisualを使用することができる。結果のテクスチャリングが異方性の場合に、その結果が、魅力的なテキストである。
このセクションで指定する宣言型(例えば、ベクトル、点、ライト、メッシュ、マテリアル、プリミティブ、変換など)のすべてが、標準XAML CLRクラス型宣言機構を使用して、XAMLに基づくマークアップ要素を介して簡単に記述可能であることに留意されたい。型は、TypeConverterを有することができるが、そうでない場合に、型は、XAMLが提供する、標準の単純プロパティ記述機構および複合プロパティ記述機構を介してマークアップ要素で指定可能である。TypeConverter指定が、XAMLに現れる型の純粋に文字列に基づく表現を解釈するためのものであることに留意されたい。したがって、例えば、ScaleTransform3Dで使用されるVector3Dについて、XAMLマークアップは、次のようになる。
Figure 2007509426
「ScaleTransform3D」および「scaleVector」が、汎用XAMLパーサによって解析され、理解されるが、「1,2,8」が、Vector3DのTypeConverterに供給され、(それが、ScaleTransform3Dの「ScaleVector」プロパティの型なので)Vector3Dを生成すると期待されることに留意されたい。さらに、型ごとに明示的にリストされはしないが、これらの型が、下記のメソッドを有することに留意されたい(ここではVector3Dについて示すが、他の型にも適用可能である)。
Figure 2007509426
Changeableから(直接にまたは間接に)派生するすべての型が、「public new MyType Copy()」メソッドを有する必要がある。これらのプリミティブ型は、単に、このセクションで説明する他の型をサポートするために存在する。これらのプリミティブ型は、可能な場合には必ず、2Dで使用されるプリミティブ型の鏡像になり、この類似性が、これらの型の設計目標である。
Point3Dオブジェクトは、2DのPoint型System.Windows(登録商標).Pointの直接の類似物である。
Figure 2007509426
Figure 2007509426
Vector3Dは、2D Vector型System.Windows(登録商標).Vectorの直接の類似物である。
Figure 2007509426
Figure 2007509426
Figure 2007509426
Point4Dは、3D点に第4のw成分を追加し、非アフィンMatrix3Dを介する変換に使用される。1の「w」成分がPoint3Dに変換され、0の「w」成分がVector3Dに変換されるので、Vector4Dはない。
Figure 2007509426
Figure 2007509426
Figure 2007509426
Quaternion(4元数)は、3次元の回転を表す別個の3Dエンティティである。その能力は、4元数の間で補間して(したがってアニメーションにして)滑らかな信頼性のある補間を達成できることに由来する。特定の補間機構を、球面線形補間と称する。
Quaternionは、その成分(x,y,z,w)の直接指定から、または軸/角度表現として構築することができる。第1の表現は、正規化されていない4元数をもたらし、これに関して、ある種の演算は意味をなさない(例えば、軸と角度の抽出)。
Quaternionの構成要素は、Quaternionが構築されたならば設定することができない。というのは、それを行うことに潜在的な曖昧さがあるからであり、例えば、正規化されないQuaternionのAngleを設定することには意味がない。
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
Matrix3Dは、System.Windows(登録商標).Matrixの3D類似物である。Matrixと同様に、ほとんどのAPIが、Matrix3DではなくTransform3Dをとり、Transform3Dは、深い形のアニメーションをサポートする。3D計算の行列は、4×4行列として表される。MILでは、行ベクトル構文を使用する。
Figure 2007509426
行列が点とかけあわされるとき、その点が、新しい座標系から以前の座標系に変換される。
変換は、任意のレベルまでネストすることができる。新しい変換が適用されるとき、その適用は、必ず、現在の変換行列に前からかけることと同一である。
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
Transform3Dは、2DのTransformに似て、3D変換の特定の型を表す具象サブクラスを有する抽象基底クラスである。Transform3Dの特定のサブクラスは、アニメーションが送られる場所でもある。
一実施形態での、Transform3Dの階層全体を下に示す。
Figure 2007509426
ルートのTransform3Dは、Transformの特定のクラスを構築する静的メソッドを有する(このTransformはより広義とすることができるので、Matrix3D表現を公開しないことに留意されたい)。
Figure 2007509426
Figure 2007509426
Point3D/Vector3DをとるTransform()メソッドは、変換がアフィン変換でない場合に例外を送出することに留意されたい。
Transform3DCollectionは、TransformCollectionを模倣し、上でCreate*メソッドが変更されたのと同じ形でAdd*メソッドが変更される。
Figure 2007509426
AffineTransform3Dは、具象アフィン3D変換(変換、傾斜、回転、スケーリング)が派生される基底クラスであり、Matrix3Dへの読取アクセスを公開する。
Figure 2007509426
TranslateTransform3D:
Figure 2007509426
ScaleTransform3D:
Figure 2007509426
Figure 2007509426
RotateTransform3Dは、回転の軸という概念(従って4元数の使用)の導入に起因して、2D回転からの単純なマッピング以上のものである。
Figure 2007509426
Figure 2007509426
Quaterionプロパティだけがアニメーション可能であることに留意されたい。一般に、軸/角度のアニメーションは、うまく働かない傾向がある。4元数をアニメーションにする方がよく、4元数のベース値から軸および角度を抽出することができる。固定軸に対する角度を単純にアニメーションにしたい場合に、これを指定する簡単な方法は、この位置を表す2つの4元数を構築し、その間でアニメーションにすることである。
MatrixTransform3Dは、Matrix3Dから直接にTransform3Dを構築することができる。
Figure 2007509426
Transform3D型プロパティが、マークアップ要素で指定されるとき、プロパティシステムは、Transform型コンバータを使用して、ストリング表現を適当なTransform派生オブジェクトに変換する。アニメーションにされるプロパティは、この構文を使用しては記述されないが、複合プロパティ構文を、アニメーション記述に使用することができる。
構文は、2DのTransformをモデルとし、「<>」は、オプションパラメータを表す。
Figure 2007509426
次が、例の文法である。
Figure 2007509426
Figure 2007509426
Retained3DVisualは、Visualから派生し、その際に、不透明度、2Dの幾何学的クリッピング、2DのBlendMode、ヒットテストAPI、2Dの境界照会、およびVisualツリーへの参加を含むプロパティを得る。不透明度、クリップ、ブレンドモード、および境界が、3D場面の2D投影に適用されることに留意されたい。
Figure 2007509426
ViewPortボックスは、Camera/Model組合せによって決定される投影が2Dローカル座標空間にマッピングされる場所を確立する。Retained3DVisualにBounds3Dメソッドがないことに留意されたい。これは、Models.Boundsとして使用可能である。
Drawing3DContextは、2DのDrawingContextに非常によく類似し、Retained3DVisualのModel3DCollectionからRenderOpen/RenderAppendを介してアクセス可能である。これは、命令を内部で保持するが、即時モードレンダリングコンテキストに似ている。
Figure 2007509426
これらのDrawing3DContext演算のセマンティックスの特定の詳細を、Drawing3DContextが便利であるModeling APIに関して下記で説明する。例えば、DrawImportedPrimitive(ImportedPrimitive3DSource primitiveSource,objectHitTestToken)は、ImportedPrimitive3Dを作成し、現在累積されているModel3D(コンテキストに対するPush/Popメソッドによって操作される)に追加する。
DrawModel()が、Model3Dをコンテキストに「描画」できるようにする、「コンテキスト」の世界と「モデリング」の世界の間のもう1つの分かれ目の点である。Drawing3DContextからの明示的な「リードバック」はない。というのは、Drawing3DContextが、Model3DCollectionにバッキングさせ、その集合を必要に応じて列挙できるからである。
モデリングAPIは、(継承したメンバを示さない)これらのクラスのpublicかつprotectedなAPIであり、Model3Dは、それからすべてが構築される抽象モデルである。
Figure 2007509426
Model3DCollectionは、モデルの組合せが構築される場であり、単位として扱われ、任意選択として、それらのモデルに変換または他の属性を適用する。
Figure 2007509426
Figure 2007509426
Model3DCollectionが、RenderOpen/Appendも有し、このRenderOpen/AppendがDrawing3DContextを返すことに留意されたい。このコンテキストを使用することによって、ModelCollection自体が変更される。RenderOpen()とRenderAppend()の間の相違は、RenderOpen()がまず集合を消去することである。さらに、この実装で、一時に1つのDrawing3DContextだけを、Model3DCollectionでオープンすることができ、オープンされるときに、アプリケーションが、そのModel3DCollectionの内容に直接にアクセス(読取または書込)することはできない。
Lightは、Model3Dである。これには、Ambient、Positional、Directional、およびSpotのライトが含まれる。Lightは、モデリング階層の一部であるという追加のプロパティを有し、したがって、座標空間変換の対象である。ライトの環境色、拡散色、およびスペキュラ色が提供される。階層的にスコープを指定されるか、スコープを特定のボリュームに指定されるライトはないことに留意されたい。適切なライト階層を下に示す。
Figure 2007509426
基底lightクラスは抽象クラスである。
Figure 2007509426
環境ライトは、形状にかかわらずにオブジェクトを均一に照らす。
Figure 2007509426
指向性ライトは、空間内の位置を持たず、それを定義するベクトルによって指定される特定の方向に光を射す。
Figure 2007509426
Figure 2007509426
方向は、正規化の必要はないが、非0の大きさを有する必要がある。
位置ライトは、空間内の位置を有し、すべての方向に光を射す。ライトのフォールオフは、減衰プロパティおよび範囲プロパティによって制御される。
Figure 2007509426
Figure 2007509426
PointLightが、それからSpotLightを派生できるようにするが、サードパーティが派生できなくするために、strongname継承確認要求を有する必要があることに留意されたい。
SpotLightは、位置、範囲、および減衰を有するので、PointLightから派生するが、方向およびライトの「円錐」を制御するパラメータも追加されている。「円錐」を制御するために、outerConeAngle(その外は照らされない)およびinnerConeAngle(その中のすべてのものが完全に照らされる)を指定する必要がある。内側の円錐の外と外側の円錐との間の照明は、線形に減少する(内側の円錐の縁と外側の円錐の縁との間の「角度」減少があり、光の位置に関する距離での減少が、減衰および範囲によって影響されることに留意されたい)。
Figure 2007509426
Figure 2007509426
MIL APIのすべてのものと同様に、角度が度単位で指定されることに留意されたい。
Primitive3Dは、ツリー内のレンダリングをもたらすリーフノードである。具象クラスは、明示的に指定されたメッシュならびに読み込まれたプリミティブ(.xファイル)を持ち込む。コンストラクタは内部コンストラクタである(拡張性は、MeshPrimitive3Dを介して使用可能である)。
Figure 2007509426
MeshPrimitive3Dは、メッシュおよびマテリアルを用いるモデリング用である。
Figure 2007509426
MeshPrimitive3Dが、リーフ形状であり、それ自体ではなくMeshが含まれることに留意されたい。これは、1つのMeshを、メッシュデータを複製せずに、異なるヒットテストの対象になる異なるマテリアルを有する複数のMeshPrimitive3Dの間で共有できることを意味する。
ImportedPrimitive3Dは、持ち込まれ、適当な内部形式に変換される(潜在的にマテリアルおよびアニメーションを有する)外部から獲得されたプリミティブを表す。これは、固定モデルとして扱われる。この正規の例が、.Xファイルであり、明示的にXFileを読み込む、ImportedPrimitive3DSourceのサブクラスがある。
Figure 2007509426
.xファイルは、場面に共通して含まれると期待されるので、次のように、これを表す単純なTypeConverterフォーマットがサポートされる。
Figure 2007509426
VisualModel3Dは、すべてのVisual(定義により2D)をとり、場面に配置する。レンダリングされるとき、VisualModel3Dは、画面に位置合せされ、サイズは影響を受けないが、カメラから特定のz平面にある。Visualは、インタラクティブなままである。
Figure 2007509426
VisualModel3Dのレンダリングでは、まず、CenterPointがワールド座標に変換される。次に、Visualを、スクリーンに位置合せされた形でピクセルバッファにレンダリングし、変換されたCenterPointのzは、ビジュアルの中心が配置される場所になる。カメラが動く場合に、VisualModel3Dは、画面上で同一の面積を占め、表向きであり、ライトまたは類似物によって影響されない。場面の残りに対するビジュアルのこのカメラ移動中の固定点は、配置がビジュアルの中心に基づいて行われるので、ビジュアルの中心である。
提供されるVisualは、完全にインタラクティブであり、効果的に、それを含むRetained3DVisualに「ペアレンティング」され、これは、Visualが単一の親だけを有することができるのと同様に、所与のVisualを任意のVisualModel3Dで1回だけ使用できることを意味する。これが、インタラクティブVisualを3Dに組み込む2つの機構の1つであることに留意されたい。他方の機構は、VisualMaterialを使用し、プリミティブに対してこれを使用することである。
DrawMeshおよびDrawVisualの両方が、hitTestToken「オブジェクト」をとる。これは、3D Visualがヒットしたとき、IVisual.HitTest()によって返される。これは、その後、3Dでヒットしたものの曖昧さをなくすのに使用される。ここで、各DrawMeshが、同一のメッシュを得る場合であっても、各DrawMeshに異なる「hitTestToken」を与えることができるので、「ピックパス」が必要でないことに留意されたい。
一実施形態で、HitTestingは、Direct3D RayIntersectユーティリティを介して実施され、このユーティリティは、ヒットまでの距離、ヒットポイントのu,v座標を提供し、初期ヒットオブジェクトの先のヒットテストを可能にする。ヒットテスト結果が、ヒットされたプリミティブのu,v座標を与えるのに十分な情報を有して、どのテクスチャにラップされていてもヒットテスト照会への変換が可能になることに留意されたい。さらに、VisualModel3Dについて、ならびにVisualMaterialの使用について、ヒットテストは、正しいマッピング点にある2Dビジュアルに進行する。ヒットテストコンテキストが外側の2D環境から来ることを可能にすることによるこの結果は、3D環境を介して継続され、ネストした2D環境でもう一度選択され、潜在的に永久に継続する。これの最終結果は、このパススルーを提供するとき、生の、テクスチャマッピングされたAvalon 2Dコントロールへのユーザインタラクションが正しく動作することである。
本発明は、外部ソースからの3Dプリミティブの読み込みという一般的な概念をサポートする。v1でのこれの一実施形態は、.xファイルフォーマットに由来する。
Figure 2007509426
.Xファイルは、XFile3DSourceとしてこのシステムに入り、ImportedPrimitive3Dの構築に使用される。.Xファイルは、別々のデータ型に分離され、その結果、複数のImportedPrimitive3Dで使用でき、共有できるようになる。.xファイルの適当な変換および処理は、これの構築時に行うか、延期することができる。.xファイルが、1単位として読み込まれ、その内部のどれもが、別々にアドレッシング可能でないことに留意されたい。
Figure 2007509426
Mesh3Dプリミティブは、プログラムによって構築できる(インデックス付き指定とインデックスなし指定の両方が可能である)単純な三角形プリミティブである。これが、プリミティブの最も一般的な使用法と期待されるもの(すなわち、位置、法線、色、およびテクスチャの情報であり、後の3つはオプション)をサポートすることに留意されたい。メッシュは、三角形、直線、または点のいずれとして表示されるかの選択も可能である。メッシュは、解釈するインデックスの3つのトポロジすなわち、三角形リスト、三角形ストリップ、および三角形ファンもサポートする。
Mesh3Dによって直接にサポートされない頂点フォーマットおよび他のプリミティブ構成について、.xファイルを構築し、読み込むことができる。
Figure 2007509426
Figure 2007509426
MeshPrimitiveTypeは次のように定義される。
Figure 2007509426
Mesh3Dの頂点ごとのデータは、Positions、Normals、Colors、およびTextureCoordinatesに分割される。このうちで、Positionsだけが必須である。他のいずれかが提供される場合、それらは、Positions集合と正確に同一の長さを有する必要があり、そうでない場合には例外が送出される。
Normalは、提供される場合に、正規化されていると仮定される。システムは、トポロジ/近接に基づいて法線を計算することを試みず、その代わりに、法線が望まれる場合に、法線を供給する必要があることに留意されたい。
TriangleIndices集合は、メッシュを構成する三角形の頂点ごとの情報を判定するために頂点データに索引付けするメンバを有する。この集合は、MeshPrimitiveTypeの設定に基づいて解釈される。TriangleListについて、TriangleIndices集合の3つの要素のすべてが、新しい三角形を定義する。TriangleFanについて、インデックス0、1、2が、第1の三角形を決定し、各後続のインデックスiが、頂点0,i,i−1によって与えられる新しい三角形を決定する。TriangleStripについて、インデックス0、1、2が、第1の三角形を決定し、各後続のインデックスiが、頂点i−2,i−1,iによって与えられる新しい三角形を決定する。LineList、LineStrip、およびPointListは、類似する補間を有するが、レンダリングは、三角形ではなく直線および点に関する。
TriangleIndicesがnullの場合に、Meshは索引なしのプリミティブとして実施され、これは、長さnのPositions集合の値0、1、...、n−2、n−1を保持するTriangleIndicesと同等である。
Meshの構築時に、この実装は、このメッシュを表す最適のD3D構造を作成する。ここで、実際のCollectionデータ構造体を、Mesh実装によって放棄して、データの重複を防ぐことができる。ある他の機構(例えばRetained3DVisualモデル階層のトラバース)を介してアクセスされる場合のメッシュの後続のリードバックは、オリジナルデータを保持するのではなく、保持されるD3D情報からデータを再構築する可能性が高い。
メッシュは、Changeableから(Animatableを介して)派生し、したがって、変更可能である。実装では、頂点および索引データへの設定をトラップし、これらの変更をD3Dデータ構造に伝搬させる必要がある。メッシュ内の頂点またはインデックスデータの宣言的アニメーションの明示的サポートはない。言い換えると、例えばPoint3DAnimationCollectionsはない。これは、例えば2Dポリラインパスとの一貫性を有する。
他の型に似て、XAML複合プロパティ構文を使用して、Mesh3Dを定義する集合を指定することができる。しかし、これは、非実際的で冗長になる可能性があり、したがって、指定をより簡潔にするために、TypeConverterが提供される。
メッシュで定義される各集合は、解析され集合の作成に使用される数の単一の文字列をとることができる。例えば、位置と色だけを有するインデックス付き三角形ストリップを表すMeshを、次のように指定することができる。
Figure 2007509426
もちろん、これらのどれであっても、複合プロパティ構文ではるかに冗長に表すことができる。
Primitive3Dを構築するメソッドは、外見を定義するMaterialをとる。Materialは、3つの具象サブクラス、BrushMaterial、VisualMaterial、およびAdvancedMaterialを有する抽象基底クラスである。BrushMaterialおよびVisualMaterialの両方が、もう1つのBasicMaterialと称する抽象クラスのサブクラスである。したがって
Figure 2007509426
BrushMaterialメソッドは、単一のBrushをとるが、透明の達成(ピクセルごとまたはスカラのいずれか)、テクスチャ変換を有すること(アニメートされるものであっても)、ビデオテクスチャの使用、暗黙の自動生成されるミップマップなどを含む広範囲の効果に使用することができる。具体的に言うと、単色、画像、勾配、または別のVisualのテクスチャリングについて、SolidColorBrush、ImageBrush、GradientBrush、またはVisualBrushが、BrushMaterialの作成に使用される。
VisualMaterialメソッドは、Visualからマテリアルを構築するように設計されている。このマテリアルは、入力が、それが組み込まれる3DワールドからVisualに渡されるという意味でインタラクティブである。これとVisualBrushを有するBrushMaterialの間の相違は、BrushMaterialがインタラクティブでないことである。
AdvancedMaterialクラスは、BrushMaterialまたはVisualMaterialを単純に使用するよりかなり複雑であるが、さらなる柔軟性を提供する。
Figure 2007509426
Figure 2007509426
マテリアルは、Brushに基づくことによって、柔軟性および「概念の経済」を得る。例えば、ビデオテクスチャ、勾配テクスチャなどを反映する別々のTexture階層は不要である。というのは、これらのすべてがBrushとして指定可能であるからである。Brushは、すでに、アルファマスクとスカラ不透明値の両方をカプセル化しており、その結果、この両方が、テクスチャリングに使用可能になる。Brushは、すでに2D Transformを関連付けられており、これは、テクスチャリングの場合に、テクスチャにマッピングするためにメッシュ内のuv座標を変換するテクスチャ変換と解釈される。Brushは、木目シェーダなどのストック手続きシェーダを置くのによい場所である。これは、フィルまたはペンとして2Dで使用可能であり、テクスチャとして3Dで使用可能である。手続きシェーダのために3D空間で特定のAPIサポートを与える必要はない。
ピクセルシェーダおよび頂点シェーダは、「ストック」シェーダとして提供でき、その多くがパラメータ化されることに留意されたい。APIでこれらをアクセス可能にする形は、2Dの世界で意味をなすシェーダについて、それらをBrushの具象サブクラスとして公開し、そのパラメータ化を、クラスのコンストラクタを介してまたはクラスのプロパティとして表現することである。これらを、2Dオブジェクトに適用することができる。3Dでのみ意味をなすシェーダは、Materialの具象サブクラスとして(多分BasicMaterialのサブクラスとして)公開され、これらは、コンストラクタを介してパラメータ化することもできる。この公開によって、シェーダを3D(および適当な場合に2D)メッシュに適用できるようになる。
上で説明したように、BrushMaterialは、Brushをカプセル化する。Primitive3Dに適用されるBrushMaterialは、テクスチャとして扱われる。テクスチャは、直接にマッピングされる、すなわち、マッピングされるプリミティブの2Dのu,v座標が、テクスチャ変換によって変更されたTextureの対応するx,y座標に直接に索引付けされる。他の2Dと同様に、テクスチャの座標系が、左上の(0,0)から走り、正のyが下を指すことに留意されたい。
Brushに使用されるVisualBrushは、入力を受け入れないが、それに対するアニメーションおよびそれに対して行われる構造的変更に従って更新される。MaterialとしてVisualを使用し、なおかつ入力を受け取るためには、本明細書で説明するように、VisualMaterialを使用する。
Figure 2007509426
上で説明したように、VisualMaterialは、インタラクティブVisualをカプセル化する。これは、Visualがテクスチャリングされた形で生きているという点で、Visualと共に使用されるBrushMaterialと異なる。マッピングが、プリミティブに関連するu,vグリッドに基づくので、ユーザ入力がその2D対応物に対する完全な忠実度を有しない状況があることに留意されたい。例えば、2Dコントロールがマウスをキャプチャする(例えばスクロールバー挙動を実施するため)マウスキャプチャシナリオを検討されたい。このシナリオでは、マウスは、スクロールバーから離れることが許されるが、システムは、例えばマウスがスクロールバーに関してどのy位置にあるかを計算し、正しく演算することができる。コントロールが、u,vグリッドを有するプリミティブにテクスチャリングされ、マウスがプリミティブから離れる状況では、一般に、この判定を行う方法がない。これの解消を加えながら行えることがあるが、これは、一般に、2D空間へのマッピングの制限になる。Visualが、効果的に、ルートRetained3DVisualに何らかの形でペアレンティングされることに留意されたい。一実施形態で、フレームワークがコントロールの単一のペアレンティグに基づくという事実に起因して、複数のMaterialで単一のUiElementを使用することが不正であり、複数の場所でVisualMaterialを使用することも不正である。
Figure 2007509426
BrushMaterial/VisualMaterialおよびBumpMapは、AdvancedMaterialを定義するのに使用される。
Figure 2007509426
Figure 2007509426
EnvironmentMapが、キューブマッピングを可能にする特定のフォーマットであると期待されるテクスチャであることに留意されたい。具体的に言うと、立方体マップの6つの面を、(Brushの3×2グリッドに似た形で)Textureに関連するBrushのセクションで表す必要がある。Ambientプロパティ、Diffuseプロパティ、およびSpecularプロパティが、AdvancedMaterial自体として指定することを許容されないので、一般的なMaterialではなくBasicMaterialをとることに留意されたい。さらに、VisualMaterialが提供する対話性が、環境マップについて意味をなさないので、環境マップは、専らBrushMaterialであることに留意されたい。
バンプマップは、テクスチャに似て、プリミティブのテクスチャ座標を介して3Dプリミティブにマッピングされるグリッドである。しかし、補間されたデータは、表面の法線に対する動揺として解釈され、プリミティブの「でこぼこの」外見をもたらす。これを達成するために、バンプマップは、法線の動揺および潜在的に他の情報などの情報を運び、色情報または透明度情報は運ばない。このゆえに、バンプマップとしてBrushを使用することは不適切である。したがって、特定のピクセルフォーマットのImageSourceとして、新しいBumpMapクラスを設けることができる。
Materialは、Brushの文字列指定を自動的にBrushMaterialに昇格させることができる単純なTypeConverterを提供する。
Figure 2007509426
これによって、次のような指定が可能になる。
Figure 2007509426
形状階層内の任意のレベルに組込み可能でないモデルの環境パラメータを設けることができる。例えば、フォグは、Retained3DVisualでFogプロパティを設定することによって場面に追加することができ、例えば、使用可能なFogは「ピクセルフォグ」である。Fogは、下に示すように、抽象クラスおよび階層として表される。
Figure 2007509426
Figure 2007509426
fogDensityは、0から1までの範囲であり、フォグの密度の正規化表現である。fogStartおよびfogEndには、装置空間[0,1]で指定されるz深さが含まれ、フォグが始まる場所および終わる場所を表す。
Cameraは、3Dモデルを2Dビジュアルに投影する機構である。Camera自体は抽象型であり、2つの具象サブ型ProjectionCameraおよびMatrixCameraがある。ProjectionCameraは、Position、LookAtPoint、およびFieldOfViewなどのよく理解されたパラメータをとって、Cameraを構築する。MatrixCameraは、World−To−Device変換を定義するのに使用されるMatrix3Dをとる。
Figure 2007509426
Figure 2007509426
Retained3DVisualでは、Cameraは、Model3Dへのビューを提供するのに使用され、結果の投影が、Retained3DVisualで確立された2D ViewPortにマッピングされる。Retained3DVisualの2D境界ボックスが、単純に3Dモデルの3D境界ボックスに投影され、凸の、軸を位置合せされた外被によってラップされ、ビジュアルで確立されたクリップまでクリッピングされることに留意されたい。
ProjectionCameraは、Position、LookAtPoint、およびFieldOfViewなどのパラメータからカメラを構築する手段である。ProjectionCameraは、透視投影と正投影との両方をカプセル化する。図42に、ビューイングおよび位置を示すProjectionCameraの関連する態様のよい表示を示す(FieldOfViewは水平方向でなければならない)。
Figure 2007509426
Figure 2007509426
FieldOfViewが、水平の視野を表し、度単位で指定される(他のMIL角度と同様に)ことに留意されたい。NearおよびFarのPlaneDistanceは、LookDirectionベクトルに沿ったカメラのPositionからの3Dワールド座標での距離を表す。NearPlaneDistanceは、0をデフォルトとし、FarPlaneDistanceは、無限大をデフォルトとする。
実際の投影の際に、NearPlaneDistanceおよびFarPlaneDistanceがまだ0および無限大である場合に、モデルが検査され、その境界ボリュームが、カメラ投影に従って投影される。結果の境界ボリュームが、検査され、その結果、ニアプレーン距離に、カメラ位置に最も近いLookDirectionに垂直な、境界ボリュームの平面が設定される。これは、最も遠い平面が使用される以外は、ファープレーンについても同一である。これは、zバッファ分解能の最適利用をもたらすと同時に、モデル全体が表示される。IsOrthographicが真である場合には、正投影が使用され、FieldOfViewは無視される。
ProjectionCameraのパラメータによって定義される「投影面」が、Retained3DVisualのViewPort長方形にマッピングされ、それが、3−空間から2−空間への最終的な推移を表すことに留意されたい。
CameraのMatrixCameraサブクラスは、投影変換としてMatrixを直接に指定する手段を提供する。これは、それ自体の投影行列計算機構を有するアプリケーションに有用である。
Figure 2007509426
MinimumZ値およびMaximumZ値によって、zバッファ範囲が直接に制御されることに留意されたい。これらは、投影行列としてのMatrixの適用の後に検討される。
結果の投影は、Retained3DVisualのViewPort長方形にマッピングされ、3空間から2空間への最終的な推移を表す。
次は、XAMLでのModel3D階層全体の指定を示す、より完全なマークアップ要素である。構文の一部を変更できることに留意されたい。
次の例では、2つの読み込まれる.xファイルおよびその一方の回転変換(z軸回りで45°)と、0,1,0の、上にある単一の白い点光源を有するModelとを単純に作成する。
Figure 2007509426
このマークアップ要素は、ファイル、ストリーム、リソース、または適当なエンティティにあるものとすることができる。クライアントプログラムは、そのXAMLのロードを呼び出し、それによって、完全なModel3DCollectionが作成されて、望み通りにアプリケーションによって使用される。
次の例は、複合プロパティXAML構文の使用を介する、明示的に宣言されたMeshPrimitive3Dを提供する。メッシュは、黄色から赤へのLinearGradientを用いてテクスチャリングされる。この場面にはライトもある。
Figure 2007509426
Figure 2007509426
この例では、第1の.xファイルをとり、XAML指定のアニメーションに追加する。この特定の例では、5秒間で.xファイルを1倍から2.5倍にスケーリングし、逆転する均一なスケールを追加し、これを無限に繰り返す。この例では、スケールのスローイン/スローアウトのために加速/減速も使用している。
Figure 2007509426
Figure 2007509426
この例では、.xファイルを読み込み、マテリアルとして生のUIに適用する。
Figure 2007509426
XAMLは、リソースを参照する構文をサポートする。この文脈での「リソース」は、広義の用語であり、XAMLファイルの「リソース」セクションならびに管理されるアセンブリの管理されるリソース「フォーク」からの読み込みの両方を意味する。両方の機構がサポートされ、リソースを共有するために、複数の場所からリソースを参照することができる。ネイティブWin32リソースを直接に読み込む機構は現在ないが、IResourceLoaderインターフェースの実装によってそれが可能になる。
これは、XAMLには直接に関連しないが、メッシュおよびマテリアルなどを共有するアプリケーションを構成する方法に関連する。3D「モデリング」オブジェクト(Light、Model3DCollection、MeshPrimitive3D、Material、Mesh3D、Brushなど)が、型Changeableであることに留意されたい。前述のように、変更可能な値は、概念上深いコピーを作るが、実際にはオンデマンドの浅いクローン作成を行うCopy()メソッドを提供する。このCopy()メソッドを使用することによって、オブジェクトのサブパーツを変更できるようにしながらの、オブジェクトの最適の共有がもたらされる。
Rectangle、Polygon、Ellipseなどの2次元「形状」は、それ自体がUiElementであるShapeクラスを介してWindows(登録商標)Presentation Frameworkに導入される。Rectangleなどの形状は、Canvasに置くことができ、Canvas自体は、形状のコンテナとしての使用を意図されたUiElementである。次が、1つの例である。
Figure 2007509426
この例では、CanvasがUiElementであり、RectangleおよびLineのそれぞれが、UiElementである。この例では、Canvasに含まれるすべてのものが、UiElementである。
しかし、次の例に示された、マークアップ要素でのPathの組合せを検討されたい。
Figure 2007509426
この例では、CircleGeometry、RectangleGeometry(すなわち、Path.Dataの中にあるもの)自体はUiElementではないが、PathコンテナはUiElementである。
要素レベル「3D Shape」は、Retained3DVisualの3D特性が、Visual自体を超えないという問題を提示する。すなわち、2つのVisualの内容は、絶対にz方向に浸透しあわない(例えば、リンゴのビジュアルを貫通する矢印のビジュアルを有することはできない)。ControlおよびShapeはVisualから派生するので、これは、互いに浸透しあうControlまたはShapeを有することのサポートがないことも意味する。これらは、必ず、その内容の2D投影である。
Elementレベルで互いに浸透しあう3D「オブジェクト」を有するため、およびそれをマークアップ要素で表現するために、必要な相互浸透を有する複雑な3Dモデルを含めることができるViewPort3D要素が提供される。しかし、これは、他のViewPort3Dとz方向で相互作用するのではない(3D空間への2Dビューポートなので、ViewPort3Dと呼ばれる)。
ViewPort3Dは、Shapeが派生するのと同一のクラス(FrameworkElementまたはControl)から派生する。Shapeが、Fill、Strokeなど、3Dでは意味をなさないプロパティを有するので、ViewPort3DをShapeから派生させてはならないことに留意されたい。したがって、ViewPort3D、Shape、およびImageは、兄弟である。ViewPort3Dは、Shapeに存在するプロパティの一部(Top、Left、Width、Height、Transform、およびClip)を含む、設定できる複数のプロパティを有する。これらのプロパティは、3Dでは関係しないが、3Dの2D投影では意味をなし、これは、ViewPort3Dであり、このViewPort3Dは、UiElementである。
ViewPort3Dは、それに関連付けられたCamera(および適当なデフォルトが供給される)ならびにフォグなどの3D場面全体のプロパティ(すなわち、Retained3DVisualにもあるプロパティ)も有する。ViewPort3Dは、形状を介して提示される3Dオブジェクトの集合を表す、Model3DCollection値のプロパティ(それ自体がModel3Dである)も有する。このモデルには、ライトも含まれる。アプリケーションがzで相互作用できるようにすることを望むものは、どれでも、単一のViewPort3Dに関するこの単一のModel3DCollectionに置かれる。
カメラが指定されない場合には、Top、Left、Width、およびHeightによって決定されるViewPort3D境界がモデルによって満たされ、ニア/ファークリップ平面がモデルの直前と直後に設定され、カメラがz軸を向いており、yが上になるよう投影を提供するデフォルトカメラが使用される。ライトが指定されない場合には、y軸の下を指す白の指向性ライトが、暗黙のうちに使用される。
ViewPort3Dのマークアップ要素は、上で示したPathのマークアップ要素に似ている。というのは、上のマークアップ要素が、非UiElementがPathマークアップ要素の中で指定される例であるからである。次が、ViewPort3Dマークアップ要素の例である。
Figure 2007509426
Figure 2007509426
<Viewport3D>タグ内に、Model3DCollection値のメンバが、個々のマークアップ要素で指定されたModel3Dから取り込まれている。この例のタグとModel3Dのサブクラスの間の1対1マッピングがあることに留意されたい。例えば、この例の2番目のMeshは、マークアップ要素で指定されたコントロール(この例ではButton)を含むVisualマテリアルを有する。このコントロールは、完全にインタラクティブであり、OnClickなどを指定することができる。
ViewPort3Dの直接の子ノードは、「デフォルト」集合がModels集合なので、Model3Dである。この構文は、一般に、複合プロパティ構文で<ViewPort3D.Model>の指定を必要とするように変更することができる。このマークアップ要素は、通常の2Dマークアップが従うのと同一のリソースのパスに従って、例えば、Materialを定義し、複数の場所でそれを使用する。その機能性は、一般的なリソース機構によって提供される。
一般に、ヒットテストは、UiElementまたはControlのレベルで行われる。しかし、ヒットテストは、全体としてViewPort3Dに制限され、さもなければ、ヒットテストは、複数のViewPort3Dへのモデルの分割とそれらに対するヒットテストを必要とする。しかし、複数のViewPort3Dに分割されるや否や、モデルは、同一の3D環境の一部ではなくなる。これは、マークアップ要素またはコードでModel3Dの個々のメンバに対してイベントハンドラを指定できるようにすることならびに「id」によって解決される。ヒットテストを解決するときに、適当なメソッドが呼び出され(センダは、まだ全体としてViewPort3Dである)、識別子が、EventArgsの一部として渡される。アプリケーションは、異なるイベントハンドラで、または「id」の切り替えによってのいずれかで、論理を分離することができなければならない。
VisualMaterialの使用は、ヒットテストが組み込まれた要素に進行しなければならないことのシステムへの指示である。システムは、それが実際に行われることを保証する。したがって、ヒットテスト動作は、2Dから3Dに推移し、2Dに戻る。次は、ViewPort3DのAPI仕様である。
Figure 2007509426
Figure 2007509426
3Dで正しく透明性を行うために、プリミティブ(および、限度内で、個々の三角形)が、後ろから前にソートされ、これによって、zバッファが参加しなくなる。これは、正しい混合を保証するのに必要である。
EmbeddingHostVisualも提供される。これは、外部当事者が構築できないVisualのサブクラスであり、内部的に構築することだけができる。EmbeddingHostVisualには、指定されたVisualが、親子以外のあるVisual対Visual関係の「組み込みホスト」として使用されていることを表すVisualが含まれる。3D場面に組み込まれた2D Visualが、これのもう1つの例である。Effectsを、Visualの間の非親子関係のもう1つの例とすることができる。
定義を次に示す。
Figure 2007509426
EmbeddingHostVisual「親」に対する関係は、通常の親子関係にならないように定義されるので、これは、均一のマッピングがないので、Visualの間のTransformの抽出などの読取サービスが意味をなさないことを意味する。これらの動作は、3Dサブシステム自体によって処理されるが、その機構が、Retained3DVisualに特有であることに留意されたい。
(媒体)
MediaDataは、添付の付録にも記載されているが、次のオブジェクトを介する音声/ビデオ内容の再生に使用することができる。
Figure 2007509426
Figure 2007509426
Figure 2007509426
AudioDataオブジェクトは、音声データのために提供される。
Figure 2007509426
Figure 2007509426
Figure 2007509426
Figure 2007509426
VideoDataオブジェクトは、ビデオデータのために提供される。
Figure 2007509426
Figure 2007509426
要素レベルのVideoオブジェクトも提供される。
Figure 2007509426
Figure 2007509426
要素レベルのAudioオブジェクトも提供される。
Figure 2007509426
(結論)
前述の詳細な説明のように、プログラムコードにシーングラフとインターフェースする能力を与えるインターフェースおよびオブジェクトモデルを含む媒体統合レイヤが提供される。このシステム、方法、およびオブジェクトモデルは、使用が簡単でありながら、強力、柔軟、かつ拡張可能である。
本発明は、様々な修正構成および代替構成を許すが、そのある例の実施形態を、図面に示し、上記で詳細に説明した。しかし、本発明を、開示された特定の形態に限定することは意図されておらず、逆に、その意図が、本発明の趣旨および範囲に含まれるすべての修正形態、代替構成、および同等物を含むことであることを理解されたい。
本発明を組み込むことができる例示的なコンピュータシステムを示すブロック図である。 本発明を組み込むことができるグラフィックスレイヤアーキテクチャを全般的に示すブロック図である。 本発明の態様による、ビジュアルのシーングラフと、グラフィックスコマンドおよび他のデータを供給するためにシーングラフをトラバースすることによるなどのシーングラフを処理する関連コンポーネントを示す図である。 本発明の態様に従って構成された、バリデーションビジュアル、ドローイングビジュアル、および関連するInstruction Listのシーングラフを示す図である。 本発明の態様による、オブジェクトモデルのビジュアルクラスを示す図である。 本発明の態様による、オブジェクトモデルの様々な他のオブジェクトを示す図である。 本発明の態様による、変換クラス階層を示す図である。 本発明の態様による、形状スケールでのビジュアルのデータの変換を表す図である。 本発明の態様による、不均一スケールでのビジュアルのデータの変換を表す図である。 本発明の態様による、オブジェクトモデルの形状クラスを示す図である。 本発明の態様による、PathGeometry構造体を示す図である。 本発明の態様による、プリミティブによって作られる例のグラフィックスを示す、ビジュアルおよびInstruction Listのシーングラフを示す図である。 本発明の態様による、オブジェクトモデルのブラシクラスを示す図である。 本発明の態様による、型のミュータビリティを制御するために要求が状態機械によって処理される変更可能アーキテクチャを全般的に示すブロック図である。 本発明の態様による、プロパティ状態がミュータブルな型の挙動をどのように制御するかを示す状態図である。 本発明の態様による、プロパティ状態がミュータブルな型の挙動をどのように制御するかを示す状態図である。 本発明の態様による、プロパティ状態がミュータブルな型の挙動をどのように制御するかを示す状態図である。 本発明の態様による、プロパティが例のコードの状態推移およびクローン作成挙動をどのように制御するかを示す、例のシーングラフのオブジェクトの階層表現を示す図である。 本発明の態様による、プロパティが例のコードの状態推移およびクローン作成挙動をどのように制御するかを示す、例のシーングラフのオブジェクトの階層表現を示す図である。 本発明の態様による、プロパティが例のコードの状態推移およびクローン作成挙動をどのように制御するかを示す、例のシーングラフのオブジェクトの階層表現を示す図である。 本発明の態様による、プロパティが例のコードの状態推移およびクローン作成挙動をどのように制御するかを示す、例のシーングラフのオブジェクトの階層表現を示す図である。 本発明の態様による、プロパティが例のコードの状態推移およびクローン作成挙動をどのように制御するかを示す、例のシーングラフのオブジェクトの階層表現を示す図である。 本発明の態様による、プロパティが例のコードの状態推移およびクローン作成挙動をどのように制御するかを示す、例のシーングラフのオブジェクトの階層表現を示す図である。 本発明の態様による、リニア勾配ブラシオブジェクトのデータから生じるレンダリングされたグラフィックを示す図である。 本発明の態様による、ラジアル勾配ブラシオブジェクトのデータから生じるレンダリングされたグラフィックを示す図である。 本発明の態様による、様々なストレッチ値を有することから生じるレンダリングされたグラフィックを示す図である。 本発明の態様による、様々なタイル値を有することから生じるレンダリングされたグラフィックを示す図である。 本発明の態様による、レンダリングされたナイングリッドブラシオブジェクトを示す図である。 本発明の態様による、アニメーションに使用される例のタイムラインのグラフィカル表現を示す図である。 本発明の態様による、アニメーションに使用される例のタイムラインのグラフィカル表現を示す図である。 本発明の態様による、アニメーションに使用される例のタイムラインのグラフィカル表現を示す図である。 本発明の態様による、アニメーションに使用される例のタイムラインのグラフィカル表現を示す図である。 本発明の態様による、アニメーションに使用される例のタイムラインのグラフィカル表現を示す図である。 本発明の態様による、アニメーションに使用される例のタイムラインのグラフィカル表現を示す図である。 本発明の態様による、アニメーションに使用される例のタイムラインのグラフィカル表現を示す図である。 本発明の態様による、アニメーションに使用される例のタイムラインのグラフィカル表現を示す図である。 本発明の態様による、アニメーションに使用される例のタイムラインのグラフィカル表現を示す図である。 本発明の態様による、アニメーションに使用される例のタイムラインのグラフィカル表現を示す図である。 本発明の態様による、アニメーションに使用される例のタイムラインのグラフィカル表現を示す図である。 本発明の態様による、アニメーションに使用される例のタイムラインのグラフィカル表現を示す図である。 本発明の態様による、3次元ビジュアルを介して構築される例の3次元画像を示す図である。 本発明の態様による、3次元サポートを提供する3次元概念を示す図である。

Claims (67)

  1. 媒体統合レイヤのインターフェースを介して、グラフィックス関連データに対応する関数呼出しを受け取るステップと、
    前記関数呼出しに基づいて、シーングラフデータ構造内のデータを変更させるステップと
    を備えたことを特徴とする出力への処理のためにコンピュータグラフィックスデータを配置する方法。
  2. 前記シーングラフデータ構造内のデータを変更させるステップは、ビジュアルクラスの新しいインスタンスを初期化する関数を呼び出すステップを含むことを特徴とする請求項1に記載の方法。
  3. 前記ビジュアルに関連する変換に対応するインターフェースを介して、関数呼び出しを受け取るステップをさらに備えたことを特徴とする請求項2に記載の方法。
  4. 前記シーングラフデータ構造内のデータを変更させるステップは、描画ビジュアルクラスの新しいインスタンスを初期化する関数を呼び出すステップを含むことを特徴とする請求項1に記載の方法。
  5. インターフェースを介して関数呼び出しを受け取り、レンダリングのために描画ビジュアルインスタンスをオープンするステップと、それに応答して、前記描画ビジュアルへのレンダリングの機構を提供する描画コンテキストを返させるステップとをさらに備えたことを特徴とする請求項4に記載の方法。
  6. 前記関数呼出しに関連するブラシデータを受け取るステップをさらに備え、前記シーングラフデータ構造内のデータを変更させるステップは、フレームが前記シーングラフからレンダリングされる時、領域が前記ブラシデータに対応する可視データを用いて塗り潰されるように、ブラシ関数を呼び出して、前記シーングラフデータ構造内のデータ構造を変更するステップを含むことを特徴とする請求項1に記載の方法。
  7. 前記ブラシデータを受け取るステップは、単色に対応するデータを受け取るステップを含むことを特徴とする請求項6に記載の方法。
  8. 前記ブラシデータを受け取るステップは、リニア勾配ブラシおよび少なくとも1つのストップを含むストップ集合に対応するデータを受け取るステップを含むことを特徴とする請求項6に記載の方法。
  9. 前記ブラシデータを受け取るステップは、ラジアル勾配ブラシに対応するデータを受け取るステップを含むことを特徴とする請求項6に記載の方法。
  10. 前記ブラシデータを受け取るステップは、画像に対応するデータを受け取るステップを含むことを特徴とする請求項6に記載の方法。
  11. 画像効果に対応するインターフェースを介する関数呼び出しを受け取り、前記画像を適用するステップをさらに備えたことを特徴とする請求項10に記載の方法。
  12. 前記関数呼出しに関連するペンデータを受け取るステップをさらに備え、前記シーングラフデータ構造内のデータを変更させるステップは、形状の輪郭を定義するペン関数を呼び出すステップを含むことを特徴とする請求項1に記載の方法。
  13. 前記シーングラフデータ構造内のデータを変更させるステップは、前記シーングラフデータ構造内の楕円を表す形状関連関数を呼び出すステップを含むことを特徴とする請求項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. 前記シーングラフデータ構造内のデータを変更させるステップは、2次元サーフェスを3次元ビジュアルにマッピングするステップを含むことを特徴とする請求項28に記載の方法。
  30. 前記シーングラフデータ構造内のデータを変更させるステップは、前記シーングラフデータ構造内にアニメーションデータを配置する関数を呼び出すステップを含むことを特徴とする請求項1に記載の方法。
  31. 前記アニメーションデータに対応するタイムライン情報を、前記媒体統合レイヤの別のレイヤにある合成エンジンに通信するステップをさらに備えたことを特徴とする請求項30に記載の方法。
  32. 前記合成エンジンは、前記タイムラインに基づいてグラフィックスデータを補間し、前記シーングラフデータ構造内のオブジェクトに対応する出力をアニメーションにするステップを特徴とする請求項31に記載の方法。
  33. 前記媒体統合レイヤのインターフェースを介して関数呼び出しを受け取るステップは、マークアップ要素を受け取るステップを含み、前記シーングラフデータ構造内のデータを変更させるステップは、オブジェクトのインターフェースへの呼出し内の前記マークアップ要素を解析するステップを含むことを特徴とする請求項1に記載の方法。
  34. 前記シーングラフデータ構造内のデータを変更させるステップは、音声および/またはビデオデータに対応するオブジェクトを前記シーングラフデータ構造内に配置する関数を呼び出すステップを含むことを特徴とする請求項1に記載の方法。
  35. 前記シーングラフデータ構造内のデータを変更させるステップは、前記シーングラフデータ構造内のオブジェクトのミュータブル値を変更するステップを含むことを特徴とする請求項1に記載の方法。
  36. コンピューティング環境において、
    可視の次の統合された出力用の出力にレンダリングできるデータを含むレイヤードシステムのシーングラフデータ構造と、
    前記シーングラフデータ構造に含まれることができるオブジェクトおよび他のデータを含むオブジェクトモデルであって、前記オブジェクトモデルのオブジェクトの少なくとも一部が、前記シーングラフデータ構造の内容を変更する関数を呼び出すインターフェースを有するオブジェクトモデルと
    を備えたことを特徴とするシステム。
  37. 少なくとも1つの前記関数は、ビジュアルオブジェクトのツリーを前記シーングラフデータ構造に置くために呼び出されることを特徴とする請求項26に記載のシステム。
  38. 呼び出されたとき、レンダリング対象に前記ビジュアルオブジェクトのツリーをレンダリングするビジュアルマネージャをさらに備えたことを特徴とする請求項37に記載のシステム。
  39. 前記ビジュアルオブジェクトのツリーは、ビジュアル集合オブジェクトに含まれることを特徴とする請求項37に記載のシステム。
  40. 少なくとも1つの前記関数は、前記シーングラフデータ構造にビジュアルオブジェクトを置くために呼び出されることを特徴とする請求項26に記載のシステム。
  41. 少なくとも1つの前記関数は、前記ビジュアルオブジェクトにブラシを関連付けるために呼び出されることを特徴とする請求項40に記載のシステム。
  42. 少なくとも1つの前記関数は、前記ビジュアルオブジェクトに形状を関連付けるために呼び出されることを特徴とする請求項40に記載のシステム。
  43. 前記形状は、楕円形状、長方形形状、線形状、およびパス形状を含む集合の少なくとも1つを含むことを特徴とする請求項42に記載のシステム。
  44. 少なくとも1つの前記関数は、前記ビジュアルオブジェクトに変換を関連付けるために呼び出されることを特徴とする請求項40に記載のシステム。
  45. 前記変換は、前記ビジュアルオブジェクトの知覚される角度を変更する回転変換を含むことを特徴とする請求項44に記載のシステム。
  46. 前記変換は、前記ビジュアルオブジェクトの知覚されるサイズを変更するスケール変換を含むことを特徴とする請求項44に記載のシステム。
  47. 前記変換は、前記ビジュアルオブジェクトの知覚される位置を変更する並進変換を含むことを特徴とする請求項44に記載のシステム。
  48. 前記変換は、前記ビジュアルオブジェクトの知覚される傾斜を変更する傾斜変換を含むことを特徴とする請求項44に記載のシステム。
  49. 前記変換に関連するアニメーション情報をさらに備え、前記アニメーション情報は、前記変換に関連する変換データを経時的に変化させ、これによって、前記ビジュアルオブジェクトの前記変換を経時的にアニメーションにすることを特徴とする請求項44に記載のシステム。
  50. 少なくとも1つの前記関数は、前記ビジュアルオブジェクトにカラーを関連付けるために呼び出されることを特徴とする請求項40に記載のシステム。
  51. 少なくとも1つの前記関数は、前記ビジュアルオブジェクトに勾配データを関連付けるために呼び出されることを特徴とする請求項40に記載のシステム。
  52. 少なくとも1つの前記関数は、前記ビジュアルオブジェクトにタイルブラシを関連付けるために呼び出されることを特徴とする請求項40に記載のシステム。
  53. 少なくとも1つの前記関数は、前記ビジュアルオブジェクトに画像を関連付けるために呼び出されることを特徴とする請求項40に記載のシステム。
  54. 少なくとも1つの前記関数は、前記ビジュアルオブジェクトに3次元データを関連付けるために呼び出されることを特徴とする請求項40に記載のシステム。
  55. 少なくとも1つの前記関数は、前記ビジュアルオブジェクトに描画プリミティブを含む描画を関連付けるために呼び出されることを特徴とする請求項40に記載のシステム。
  56. 少なくとも1つの前記関数は、前記ビジュアルオブジェクトに音声媒体および/またはビデオ媒体を関連付けるために呼び出されることを特徴とする請求項40に記載のシステム。
  57. 少なくとも1つの前記関数は、前記ビジュアルオブジェクトに画像効果を関連付けるために呼び出されることを特徴とする請求項40に記載のシステム。
  58. 少なくとも1つの前記関数は、形状の輪郭を描く方法を記述するために、前記ビジュアルオブジェクトにペンを関連付けるために呼び出されることを特徴とする請求項40に記載のシステム。
  59. 少なくとも1つの前記関数は、前記ビジュアルオブジェクトに関連する描画コンテキストを得るために呼び出されることを特徴とする請求項40に記載のシステム。
  60. 少なくとも1つの前記関数は、前記ビジュアルオブジェクトにヒットテストデータを関連付けるために呼び出されることを特徴とする請求項40に記載のシステム。
  61. 少なくとも1つの前記関数は、前記ビジュアルオブジェクトに長方形を関連付けるために呼び出されることを特徴とする請求項40に記載のシステム。
  62. 少なくとも1つの前記関数は、前記ビジュアルオブジェクトに対応する宛先長方形に収まるようにソース長方形を引き延ばす方法を記述するために呼び出されることを特徴とする請求項61に記載のシステム。
  63. 少なくとも1つの前記関数は、前記ビジュアルオブジェクトに対応するコンテナ内で内容を垂直に位置決めする方法を記述するために呼び出されることを特徴とする請求項61に記載のシステム。
  64. 少なくとも1つの前記関数は、前記ビジュアルオブジェクトに対応するコンテナ内で内容を水平に位置決めする方法を記述するために呼び出されることを特徴とする請求項61に記載のシステム。
  65. コンピューティング環境において、
    関数呼び出しを受け取るインターフェース手段と、
    前記インターフェース手段を介して受け取られるグラフィックス関連データおよび/または媒体関連データをシーングラフに統合する高レベル合成手段と、
    前記シーングラフを送出または表示されることができる出力に変換するレンダリング手段と
    を備えたことを特徴とするシステム。
  66. 前記レンダリング手段は、前記高レベル合成エンジンから受け取られるデータに基づく表示のためにフレームを構成する低レベル合成手段を含むことを特徴とする請求項65に記載のシステム。
  67. アニメーション手段をさらに備え、前記高レベル合成エンジンは、少なくとも2つのフレームにまたがる前記可視データの外見を補間するために前記低レベル合成手段にタイムラインデータを供給して、可視データを経時的にアニメーションにすることを特徴とする請求項65に記載のシステム。
JP2006536594A 2003-10-23 2004-07-28 媒体統合レイヤ Pending JP2007509426A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/693,630 US7511718B2 (en) 2003-10-23 2003-10-23 Media integration layer
PCT/US2004/024570 WO2005045584A2 (en) 2003-10-23 2004-07-28 Media integration layer

Publications (2)

Publication Number Publication Date
JP2007509426A true JP2007509426A (ja) 2007-04-12
JP2007509426A5 JP2007509426A5 (ja) 2007-09-20

Family

ID=34573199

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006536594A Pending JP2007509426A (ja) 2003-10-23 2004-07-28 媒体統合レイヤ

Country Status (14)

Country Link
US (1) US7511718B2 (ja)
EP (1) EP1623406A4 (ja)
JP (1) JP2007509426A (ja)
KR (1) KR20070028202A (ja)
CN (1) CN1989543A (ja)
AU (1) AU2004279199A1 (ja)
BR (1) BRPI0406378A (ja)
CA (1) CA2501452A1 (ja)
NO (1) NO20052269L (ja)
NZ (1) NZ540116A (ja)
RU (1) RU2360275C2 (ja)
TW (1) TW200515304A (ja)
WO (1) WO2005045584A2 (ja)
ZA (1) ZA200503159B (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009066926A (ja) * 2007-09-13 2009-04-02 Kyocera Mita Corp 画像処理装置及び画像形成システム
JP2011022673A (ja) * 2009-07-13 2011-02-03 Canon Inc 情報処理装置、情報処理方法及びプログラム
JP2019075119A (ja) * 2017-10-13 2019-05-16 ダッソー システムズDassault Systemes 3次元オブジェクトの設計プロセスを要約するアニメーションを作成する方法

Families Citing this family (177)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7330186B2 (en) * 1999-08-03 2008-02-12 Sony Corporation Methods and systems for scoring multiple time-based assets and events
US7456845B2 (en) * 2000-10-30 2008-11-25 Microsoft Corporation Efficient perceptual/physical color space conversion
US6954214B2 (en) * 2000-10-30 2005-10-11 Microsoft Corporation Efficient perceptual/physical color space conversion
US20030128214A1 (en) * 2001-09-14 2003-07-10 Honeywell International Inc. Framework for domain-independent archetype modeling
US7161599B2 (en) * 2001-10-18 2007-01-09 Microsoft Corporation Multiple-level graphics processing system and method
US7619633B2 (en) 2002-06-27 2009-11-17 Microsoft Corporation Intelligent caching data structure for immediate mode graphics
US7612776B2 (en) * 2002-09-14 2009-11-03 Microsoft Corporation Functions acting on arbitrary geometric paths
US20080195925A1 (en) * 2003-06-26 2008-08-14 Donna Marie Auguste Compressed Media Files with Intrinsic Supplementary Content
US7219340B2 (en) * 2003-10-23 2007-05-15 Microsoft Corporation Changeable class and pattern to provide selective mutability in computer programming environments
US7068284B2 (en) * 2003-11-10 2006-06-27 Microsoft Corporation Color management system that supports legacy and advanced color management applications
US7454696B2 (en) * 2004-04-09 2008-11-18 International Business Machines Corporation Method and apparatus for stream based markup language post-processing
KR100601952B1 (ko) * 2004-04-20 2006-07-14 삼성전자주식회사 3차원 그래픽 데이터의 재구성장치 및 방법
US20050243085A1 (en) * 2004-05-03 2005-11-03 Microsoft Corporation Model 3D construction application program interface
US8031190B2 (en) * 2004-05-03 2011-10-04 Microsoft Corporation Translating two-dimensional user input on three-dimensional scene
US7145562B2 (en) * 2004-05-03 2006-12-05 Microsoft Corporation Integration of three dimensional scene hierarchy into two dimensional compositing system
US8130237B2 (en) * 2004-06-24 2012-03-06 Apple Inc. Resolution independent user interface design
US8068103B2 (en) 2004-06-24 2011-11-29 Apple Inc. User-interface design
US7719523B2 (en) 2004-08-06 2010-05-18 Touchtable, Inc. Bounding box gesture recognition on a touch detecting interactive display
US20090019084A1 (en) * 2004-10-04 2009-01-15 T. Rad Co., Ltd. Method and system for preloading
US7603624B2 (en) * 2004-10-21 2009-10-13 Microsoft Corporation System and method for styling content in a graphical user interface control
EP1681656A1 (en) * 2005-01-18 2006-07-19 Oculus Info Inc. System and method for processing map data
US7154503B2 (en) * 2005-03-31 2006-12-26 Microsoft Corporation Methods and systems for brush composition
US7561159B2 (en) * 2005-05-31 2009-07-14 Magnifi Group Inc. Control of animation timeline
US8108787B2 (en) * 2005-07-01 2012-01-31 Microsoft Corporation Distributing input events to multiple applications in an interactive media environment
US20070006062A1 (en) * 2005-07-01 2007-01-04 Microsoft Corporation Synchronization aspects of interactive multimedia presentation management
US20070006079A1 (en) * 2005-07-01 2007-01-04 Microsoft Corporation State-based timing for interactive multimedia presentations
US8020084B2 (en) * 2005-07-01 2011-09-13 Microsoft Corporation Synchronization aspects of interactive multimedia presentation management
US8799757B2 (en) * 2005-07-01 2014-08-05 Microsoft Corporation Synchronization aspects of interactive multimedia presentation management
US20070006078A1 (en) * 2005-07-01 2007-01-04 Microsoft Corporation Declaratively responding to state changes in an interactive multimedia environment
US20070006238A1 (en) * 2005-07-01 2007-01-04 Microsoft Corporation Managing application states in an interactive media environment
US8305398B2 (en) * 2005-07-01 2012-11-06 Microsoft Corporation Rendering and compositing multiple applications in an interactive media environment
US7941522B2 (en) * 2005-07-01 2011-05-10 Microsoft Corporation Application security in an interactive media environment
US8656268B2 (en) * 2005-07-01 2014-02-18 Microsoft Corporation Queueing events in an interactive media environment
JP4864432B2 (ja) * 2005-11-29 2012-02-01 京セラ株式会社 イベント駆動型アプリケーションにおけるイベント配送方法
US7737996B2 (en) * 2005-12-01 2010-06-15 Microsoft Corporation Techniques for automated animation
US8077174B2 (en) * 2005-12-16 2011-12-13 Nvidia Corporation Hierarchical processor array
US7898542B1 (en) * 2006-03-01 2011-03-01 Adobe Systems Incorporated Creating animation effects
JP4881048B2 (ja) * 2006-04-03 2012-02-22 キヤノン株式会社 情報処理装置および情報処理方法および情報処理プログラム
KR100783679B1 (ko) * 2006-05-11 2007-12-07 한국과학기술원 데이터 스트림에 기반하는 서비스의 개발, 배치, 제공을용이하게 하는 미들웨어 시스템
US7868879B2 (en) * 2006-05-12 2011-01-11 Doremi Labs, Inc. Method and apparatus for serving audiovisual content
US7890533B2 (en) * 2006-05-17 2011-02-15 Noblis, Inc. Method and system for information extraction and modeling
US20070268304A1 (en) * 2006-05-22 2007-11-22 Microsoft Corporation Gradient Brush and Stroke
US7825937B1 (en) * 2006-06-16 2010-11-02 Nvidia Corporation Multi-pass cylindrical cube map blur
US8860752B2 (en) * 2006-07-13 2014-10-14 Apple Inc. Multimedia scripting
US9019300B2 (en) 2006-08-04 2015-04-28 Apple Inc. Framework for graphics animation and compositing operations
US8130226B2 (en) * 2006-08-04 2012-03-06 Apple Inc. Framework for graphics animation and compositing operations
US20080055315A1 (en) * 2006-09-05 2008-03-06 Dale Ducharme Method and System to Establish and Animate a Coordinate System for Content on a Display
US20080084416A1 (en) * 2006-10-06 2008-04-10 Microsoft Corporation User-pluggable rendering engine
US8782277B2 (en) * 2006-10-12 2014-07-15 Siemens Product Lifecycle Management Software Inc. System and method for time-sensitive URI mapping
WO2008055034A2 (en) 2006-10-30 2008-05-08 Noblis, Inc. Method and system for personal information extraction and modeling with fully generalized extraction contexts
US8234392B2 (en) 2006-11-17 2012-07-31 Apple Inc. Methods and apparatuses for providing a hardware accelerated web engine
US20080130987A1 (en) * 2006-11-30 2008-06-05 Microsoft Corporation Color Management of RAW Content from Digital Capture Devices
US20080158254A1 (en) * 2006-12-29 2008-07-03 Hong Jiang Using supplementary information of bounding boxes in multi-layer video composition
WO2008087912A1 (ja) * 2007-01-15 2008-07-24 Panasonic Corporation 表示処理装置、表示処理方法および表示処理プログラム
US8074227B2 (en) * 2007-02-08 2011-12-06 Microsoft Corporation Utilizing a first managed process to host at least a second managed process
US9519997B1 (en) * 2007-03-09 2016-12-13 Pixar Perfect bounding for optimized evaluation of procedurally-generated scene data
US20080244511A1 (en) * 2007-03-30 2008-10-02 Microsoft Corporation Developing a writing system analyzer using syntax-directed translation
US8108799B2 (en) * 2007-03-30 2012-01-31 Microsoft Corporation Remoting of windows presentation framework based applications in a non-composed desktop
US20080250424A1 (en) * 2007-04-04 2008-10-09 Ms1 - Microsoft Corporation Seamless Window Implementation for Windows Presentation Foundation based Applications
US20130342433A9 (en) * 2007-04-14 2013-12-26 Ananth Sankar Dynamic backlight control for video displays
US8134556B2 (en) * 2007-05-30 2012-03-13 Elsberg Nathan Method and apparatus for real-time 3D viewer with ray trace on demand
US20090021513A1 (en) * 2007-07-18 2009-01-22 Pixblitz Studios Inc. Method of Customizing 3D Computer-Generated Scenes
US8884981B2 (en) * 2007-09-04 2014-11-11 Apple Inc. Dynamically reconfigurable graphics layer system and method
US7941758B2 (en) * 2007-09-04 2011-05-10 Apple Inc. Animation of graphical objects
US8126826B2 (en) 2007-09-21 2012-02-28 Noblis, Inc. Method and system for active learning screening process with dynamic information modeling
US8661096B2 (en) * 2007-11-05 2014-02-25 Cyberlink Corp. Collaborative editing in a video editing system
JP2009129127A (ja) * 2007-11-22 2009-06-11 Fujitsu Ltd プログラムの不変物抽出処理プログラム,処理装置,および処理方法,ならびに該プログラムを記憶する記憶媒体
US8397207B2 (en) * 2007-11-26 2013-03-12 Microsoft Corporation Logical structure design surface
US8009921B2 (en) * 2008-02-19 2011-08-30 Xerox Corporation Context dependent intelligent thumbnail images
US8482568B2 (en) * 2008-03-03 2013-07-09 Pixar Systems and methods for specifying arbitrary animation controls for model objects
US9251548B1 (en) 2008-03-31 2016-02-02 The Mathworks, Inc. Object transformation for object trees utilized with multiprocessor systems
US8300060B1 (en) * 2008-03-31 2012-10-30 The Mathworks, Inc. Object transformation for object trees utilized with multiprocessor systems
US8760472B2 (en) * 2008-04-01 2014-06-24 Apple Inc. Pixel transforms
EP2109304A1 (en) * 2008-04-07 2009-10-14 Océ-Technologies B.V. Color management method, module, and program product, and printer ussing said method
US9052924B2 (en) * 2008-04-15 2015-06-09 Microsoft Technology Licensing, Llc Light-weight managed composite control hosting
US9589381B2 (en) * 2008-06-12 2017-03-07 Microsoft Technology Licensing, Llc Copying of animation effects from a source object to at least one target object
US8290971B2 (en) * 2008-09-09 2012-10-16 Applied Systems, Inc. Method and apparatus for remotely displaying a list by determining a quantity of data to send based on the list size and the display control size
US8645822B2 (en) * 2008-09-25 2014-02-04 Microsoft Corporation Multi-platform presentation system
US20100079474A1 (en) * 2008-09-30 2010-04-01 Microsoft Corporation Methods for rendering source content of a file for display on a destination figure
US8508537B2 (en) * 2008-11-17 2013-08-13 Disney Enterprises, Inc. System and method for dependency graph evaluation for animation
US8587610B2 (en) * 2008-12-12 2013-11-19 Microsoft Corporation Rendering source content for display
KR101194605B1 (ko) * 2008-12-22 2012-10-25 한국전자통신연구원 시간 연속적 텍스쳐 합성 장치 및 방법
US8174541B2 (en) * 2009-01-19 2012-05-08 International Business Machines Corporation Dividing three-dimensional space into location based virtual packets
US8477136B2 (en) * 2009-02-13 2013-07-02 Mobitv, Inc. Functional presentation layer in a lightweight client architecture
US8819570B2 (en) * 2009-03-27 2014-08-26 Zumobi, Inc Systems, methods, and computer program products displaying interactive elements on a canvas
US9142044B2 (en) * 2009-05-26 2015-09-22 Oracle International Corporation Apparatus, systems and methods for layout of scene graphs using node bounding areas
US8471858B2 (en) * 2009-06-02 2013-06-25 Qualcomm Incorporated Displaying a visual representation of performance metrics for rendered graphics elements
US20100310193A1 (en) * 2009-06-08 2010-12-09 Castleman Mark Methods and apparatus for selecting and/or displaying images of perspective views of an object at a communication device
US20100312813A1 (en) * 2009-06-08 2010-12-09 Castleman Mark Methods and apparatus for distributing, storing, and replaying directives within a network
US20100313249A1 (en) * 2009-06-08 2010-12-09 Castleman Mark Methods and apparatus for distributing, storing, and replaying directives within a network
US20100311393A1 (en) * 2009-06-08 2010-12-09 Castleman Mark Methods and apparatus for distributing, storing, and replaying directives within a network
US8286084B2 (en) * 2009-06-08 2012-10-09 Swakker Llc Methods and apparatus for remote interaction using a partitioned display
US20100309196A1 (en) * 2009-06-08 2010-12-09 Castleman Mark Methods and apparatus for processing related images of an object based on directives
WO2010144429A1 (en) * 2009-06-08 2010-12-16 Swakker Llc Methods and apparatus for processing related images of an object based on directives
US20100313244A1 (en) * 2009-06-08 2010-12-09 Castleman Mark Methods and apparatus for distributing, storing, and replaying directives within a network
US20110022978A1 (en) * 2009-07-23 2011-01-27 Rockwell Automation Technologies, Inc. Intelligent device framework
KR101277274B1 (ko) * 2009-11-27 2013-06-20 한국전자통신연구원 자원 간의 물리적/논리적 관계를 맵핑하는 방법 및 장치
US9021390B1 (en) * 2010-05-05 2015-04-28 Zynga Inc. Methods and apparatus for optimized pausing of an embedded application to render pop-up window
US8719774B2 (en) * 2010-07-30 2014-05-06 National Instruments Corporation Developing programs for hardware implementation in a graphical specification and constraint language Via iterative estimation of performance or resource utilization
JP2012060280A (ja) * 2010-09-07 2012-03-22 Sony Corp 情報処理装置、情報処理方法、およびプログラム
US9396001B2 (en) 2010-11-08 2016-07-19 Sony Corporation Window management for an embedded system
CN101986307B (zh) * 2010-11-11 2013-08-14 东莞宇龙通信科技有限公司 一种mime类型插件的生成方法、系统及浏览器
US8689123B2 (en) 2010-12-23 2014-04-01 Microsoft Corporation Application reporting in an application-selectable user interface
US9176742B2 (en) * 2010-12-27 2015-11-03 Microsoft Technology Licensing, Llc Converting desktop applications to web applications
US8836699B2 (en) * 2011-02-04 2014-09-16 Chiung Yu Chen Generation of landmark architecture and sculpture based on chinese characters
US8982132B2 (en) * 2011-02-28 2015-03-17 Adobe Systems Incorporated Value templates in animation timelines
US20130127849A1 (en) * 2011-05-26 2013-05-23 Sebastian Marketsmueller Common Rendering Framework and Common Event Model for Video, 2D, and 3D Content
EP2549389A1 (en) * 2011-07-20 2013-01-23 Axel Springer Digital TV Guide GmbH Easy 2D navigation in a video database
US9563971B2 (en) 2011-09-09 2017-02-07 Microsoft Technology Licensing, Llc Composition system thread
US8687018B1 (en) 2011-09-23 2014-04-01 Google Inc. Collection and confirmation of place metadata and graphic representations of fixed objects displayed in a mapping system
US8954475B2 (en) 2011-11-10 2015-02-10 Microsoft Technology Licensing, Llc Deep cloning of objects using binary format
US9384711B2 (en) 2012-02-15 2016-07-05 Microsoft Technology Licensing, Llc Speculative render ahead and caching in multiple passes
US9373049B1 (en) * 2012-04-05 2016-06-21 Amazon Technologies, Inc. Straight line gesture recognition and rendering
US9098186B1 (en) 2012-04-05 2015-08-04 Amazon Technologies, Inc. Straight line gesture recognition and rendering
US20130278607A1 (en) * 2012-04-20 2013-10-24 A Thinking Ape Technologies Systems and Methods for Displaying Animations on a Mobile Device
RU2485593C1 (ru) * 2012-05-10 2013-06-20 Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования "Сибирская государственная геодезическая академия" (ФГБОУ ВПО "СГГА") Способ построения перспективных карт местности (варианты)
KR101997129B1 (ko) * 2012-05-17 2019-10-01 엘지전자 주식회사 사이니지 콘텐츠 생성 방법
US9235925B2 (en) * 2012-05-31 2016-01-12 Microsoft Technology Licensing, Llc Virtual surface rendering
US9286122B2 (en) 2012-05-31 2016-03-15 Microsoft Technology Licensing, Llc Display techniques using virtual surface allocation
US9177533B2 (en) 2012-05-31 2015-11-03 Microsoft Technology Licensing, Llc Virtual surface compaction
US9230517B2 (en) 2012-05-31 2016-01-05 Microsoft Technology Licensing, Llc Virtual surface gutters
US9021437B2 (en) * 2012-07-13 2015-04-28 Microsoft Technology Licensing, Llc Declarative style rules for default touch behaviors
US10824680B2 (en) 2012-10-02 2020-11-03 The Boeing Company Panoptic visualization document access control
US9659237B2 (en) * 2012-10-05 2017-05-23 Micro Usa, Inc. Imaging through aerosol obscurants
US9075618B2 (en) * 2012-11-02 2015-07-07 Microsoft Technology Licensing, Llc Cross-platform data visualizations using common descriptions
WO2014091385A1 (en) * 2012-12-10 2014-06-19 Koninklijke Philips N.V. Method and system for making multisite performance measure anonymous and for controlling actions and re-identification of anonymous data
US20150379906A1 (en) * 2012-12-21 2015-12-31 3M Innovative Properties Company Systems and methods for rule-based animated content optimization
US9098269B2 (en) * 2013-01-04 2015-08-04 Microsoft Technology Licensing, Llc System and method to ensure resource access safety with immutable object types
CN103198471B (zh) * 2013-02-28 2016-06-08 天脉聚源(北京)传媒科技有限公司 一种视频的裁切方法及装置
GB201304321D0 (en) * 2013-03-11 2013-04-24 Creative Edge Software Llc Apparatus and method for applying a two-dimensional image on a three-dimensional model
US9171401B2 (en) 2013-03-14 2015-10-27 Dreamworks Animation Llc Conservative partitioning for rendering a computer-generated animation
US9224239B2 (en) 2013-03-14 2015-12-29 Dreamworks Animation Llc Look-based selection for rendering a computer-generated animation
US9659398B2 (en) 2013-03-15 2017-05-23 Dreamworks Animation Llc Multiple visual representations of lighting effects in a computer animation scene
US9811936B2 (en) 2013-03-15 2017-11-07 Dreamworks Animation L.L.C. Level-based data sharing for digital content production
US9626787B2 (en) 2013-03-15 2017-04-18 Dreamworks Animation Llc For node in render setup graph
US9218785B2 (en) 2013-03-15 2015-12-22 Dreamworks Animation Llc Lighting correction filters
US9589382B2 (en) * 2013-03-15 2017-03-07 Dreamworks Animation Llc Render setup graph
US9208597B2 (en) 2013-03-15 2015-12-08 Dreamworks Animation Llc Generalized instancing for three-dimensional scene data
US9230294B2 (en) 2013-03-15 2016-01-05 Dreamworks Animation Llc Preserving and reusing intermediate data
US9514562B2 (en) 2013-03-15 2016-12-06 Dreamworks Animation Llc Procedural partitioning of a scene
US9307007B2 (en) 2013-06-14 2016-04-05 Microsoft Technology Licensing, Llc Content pre-render and pre-fetch techniques
US9177413B2 (en) * 2013-06-26 2015-11-03 Nvidia Corporation Unique primitive identifier generation
US9942622B2 (en) * 2014-01-24 2018-04-10 Hiperwall, Inc. Methods and systems for synchronizing media stream presentations
US9477998B2 (en) * 2014-06-01 2016-10-25 Apple Inc. Performance control for concurrent animations
KR20160030701A (ko) * 2014-09-11 2016-03-21 삼성전자주식회사 인쇄 데이터를 프린터로 전송하는 호스트 디바이스 및 호스트 디바이스가 인쇄 데이터를 렌더링하는 방법
CN110677656A (zh) 2014-10-06 2020-01-10 Vid拓展公司 执行调色板解码的方法及解码设备
US20160104307A1 (en) * 2014-10-14 2016-04-14 Microsoft Technology Licensing, Llc. Data visualization extensibility architecture
US10102664B1 (en) * 2014-12-03 2018-10-16 Charles Schwab & Co., Inc. System and method for causing graphical information to be rendered
US9767122B2 (en) 2015-01-27 2017-09-19 Splunk Inc. Efficient point-in-polygon indexing technique to facilitate displaying geographic data
US9607414B2 (en) * 2015-01-27 2017-03-28 Splunk Inc. Three-dimensional point-in-polygon operation to facilitate displaying three-dimensional structures
US9916326B2 (en) 2015-01-27 2018-03-13 Splunk, Inc. Efficient point-in-polygon indexing technique for facilitating geofencing operations
US9836874B2 (en) * 2015-01-27 2017-12-05 Splunk Inc. Efficient polygon-clipping technique to reduce data transfer requirements for a viewport
US10026204B2 (en) 2015-01-27 2018-07-17 Splunk Inc. Efficient point-in-polygon indexing technique for processing queries over geographic data sets
US9733823B2 (en) 2015-04-01 2017-08-15 Microsoft Technology Licensing, Llc View activation via hit testing in an asynchronous windowing system
US9786081B1 (en) * 2015-05-14 2017-10-10 Domo, Inc. Transitioning between visual representations
US10037592B2 (en) 2015-06-05 2018-07-31 Mindaptiv LLC Digital quaternion logarithm signal processing system and method for images and other data types
US11373272B2 (en) 2015-06-05 2022-06-28 MindAptiv, LLC Digital gradient signal processing system and method for signals comprising at least three dimensions
US10672417B2 (en) * 2015-10-29 2020-06-02 True Image Interactive, Inc. Systems and methods for machine-generated avatars
KR102077146B1 (ko) * 2016-03-15 2020-02-13 (주)넥셀 그래픽 처리 방법 및 장치
US9733999B1 (en) 2016-03-24 2017-08-15 Wells Fargo Bank, N.A. Dynamic optimization of application workflows
WO2017213234A1 (en) * 2016-06-10 2017-12-14 Sharp Kabushiki Kaisha Systems and methods for signaling of information associated with a visual language presentation
CN106658145B (zh) * 2016-12-27 2020-07-03 北京奇虎科技有限公司 一种直播数据处理方法和装置
WO2019037558A1 (zh) 2017-08-22 2019-02-28 优酷网络技术(北京)有限公司 图像处理方法和装置
WO2019046323A1 (en) 2017-08-28 2019-03-07 Oxide Interactive, LLC LAMINATE, SPACE, PROGRAMMABLE AND ASYNCHRONOUS SURFACE GENERATION SYSTEM
US11417044B2 (en) * 2018-05-20 2022-08-16 Thomas Charley Long Advanced delay analysis mechanism
US11880422B2 (en) 2019-02-04 2024-01-23 Cloudflare, Inc. Theft prevention for sensitive information
US10558824B1 (en) 2019-02-04 2020-02-11 S2 Systems Corporation Application remoting using network vector rendering
US10552639B1 (en) 2019-02-04 2020-02-04 S2 Systems Corporation Local isolator application with cohesive application-isolation interface
US10452868B1 (en) 2019-02-04 2019-10-22 S2 Systems Corporation Web browser remoting using network vector rendering
CN110297657B (zh) * 2019-06-11 2023-07-21 东南大学 一种基于层次上下文的api推荐方法
CN112348748A (zh) * 2019-08-09 2021-02-09 北京字节跳动网络技术有限公司 图像特效处理方法、装置、电子设备和计算机可读存储介质
CN110764757B (zh) * 2019-10-22 2023-06-09 成都九洲电子信息系统股份有限公司 一种基于html5的交互式图形绘制引擎
US11488338B2 (en) * 2020-04-17 2022-11-01 Raytheon Company Efficient three-dimensional, interactive image rendering
US20220134222A1 (en) * 2020-11-03 2022-05-05 Nvidia Corporation Delta propagation in cloud-centric platforms for collaboration and connectivity
CN112597266A (zh) * 2020-12-16 2021-04-02 深圳中清龙图网络技术有限公司 用于处理游戏模板数据的编辑器生成方法和处理方法
CN113192211B (zh) * 2021-03-23 2023-04-07 北京师范大学 一种基于3d模型的唐三彩虚拟上色系统及方法
CN113326031B (zh) * 2021-05-28 2023-08-22 网易(杭州)网络有限公司 属性获取方法和装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003069965A (ja) * 2001-04-24 2003-03-07 Koninkl Philips Electronics Nv Bifsテキストフォーマットをbifsバイナリフォーマットに変換するための装置
JP2003162733A (ja) * 2001-10-18 2003-06-06 Microsoft Corp シーングラフのための汎用パラメータ設定

Family Cites Families (84)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4209852A (en) * 1974-11-11 1980-06-24 Hyatt Gilbert P Signal processing and memory arrangement
AU647086B2 (en) 1990-01-30 1994-03-17 Johnson Service Company Networked facilities management system
US5509115A (en) 1990-08-08 1996-04-16 Peerless Systems Corporation Method and apparatus for displaying a page with graphics information on a continuous synchronous raster output device
US5261041A (en) * 1990-12-28 1993-11-09 Apple Computer, Inc. Computer controlled animation system based on definitional animated objects and methods of manipulating same
US5852449A (en) * 1992-01-27 1998-12-22 Scientific And Engineering Software Apparatus for and method of displaying running of modeled system designs
AU4279893A (en) 1992-04-10 1993-11-18 Avid Technology, Inc. A method and apparatus for representing and editing multimedia compositions
US5987627A (en) 1992-05-13 1999-11-16 Rawlings, Iii; Joseph H. Methods and apparatus for high-speed mass storage access in a computer system
US5500933A (en) * 1993-04-28 1996-03-19 Canon Information Systems, Inc. Display system which displays motion video objects combined with other visual objects
EP0695446B1 (en) * 1993-05-10 1997-09-03 Taligent, Inc. Multimedia synchronization system
US5555368A (en) * 1993-12-30 1996-09-10 Taligent Object-oriented multi-tasking view framework
US5912666A (en) * 1994-08-23 1999-06-15 Object Technology Licensing Corp. Object-oriented global cursor tool
US5745761A (en) 1994-12-15 1998-04-28 International Business Machines Corporation Advanced graphics driver architecture with extension capability
US5986667A (en) * 1994-12-22 1999-11-16 Apple Computer, Inc. Mechanism for rendering scenes using an object drawing subsystem
US5732198A (en) 1995-02-09 1998-03-24 Oki America, Inc. Host based printing system for printing a document having at least one page
US5727141A (en) 1995-05-05 1998-03-10 Apple Computer, Inc. Method and apparatus for identifying user-selectable regions within multiple display frames
US5790130A (en) 1995-06-08 1998-08-04 Hewlett-Packard Company Texel cache interrupt daemon for virtual memory management of texture maps
US5930810A (en) * 1995-08-09 1999-07-27 Taylor Corporation Printing system with pre-defined user modifiable forms and local and remote printing
US5986675A (en) * 1996-05-24 1999-11-16 Microsoft Corporation System and method for animating an object in three-dimensional space using a two-dimensional input device
US5936632A (en) 1996-07-26 1999-08-10 Hewlett-Packard Co. Method for fast downloading of textures to accelerated graphics hardware and the elimination of extra software copies of texels
US6275857B1 (en) * 1996-10-30 2001-08-14 Microsoft Corporation System and method for freeing shared resources in a computer system
US5920325A (en) * 1996-11-20 1999-07-06 International Business Machines Corporation Prioritization of background display during animation
US6137499A (en) * 1997-03-07 2000-10-24 Silicon Graphics, Inc. Method, system, and computer program product for visualizing data using partial hierarchies
US6195694B1 (en) * 1997-03-13 2001-02-27 International Business Machines Corporation Server for reconfiguring control of a subset of devices on one or more kiosks
US6160907A (en) 1997-04-07 2000-12-12 Synapix, Inc. Iterative three-dimensional process for creating finished media content
WO1998046006A2 (en) * 1997-04-07 1998-10-15 At & T Corp. System and method for interfacing mpeg-coded audiovisual objects permitting adaptive control
US6215495B1 (en) * 1997-05-30 2001-04-10 Silicon Graphics, Inc. Platform independent application program interface for interactive 3D scene management
US5924098A (en) 1997-06-30 1999-07-13 Sun Microsystems, Inc. Method and apparatus for managing a linked-list data structure
US6377263B1 (en) * 1997-07-07 2002-04-23 Aesthetic Solutions Intelligent software components for virtual worlds
US6314470B1 (en) * 1997-07-25 2001-11-06 Hewlett Packard Company System and method for asynchronously accessing a graphics system for graphics application evaluation and control
US6154215A (en) * 1997-08-01 2000-11-28 Silicon Graphics, Inc. Method and apparatus for maintaining multiple representations of a same scene in computer generated graphics
US6654931B1 (en) 1998-01-27 2003-11-25 At&T Corp. Systems and methods for playing, browsing and interacting with MPEG-4 coded audio-visual objects
US6243856B1 (en) * 1998-02-03 2001-06-05 Amazing Media, Inc. System and method for encoding a scene graph
US6272650B1 (en) * 1998-02-03 2001-08-07 Amazing Media, Inc. System and method for disambiguating scene graph loads
US6075532A (en) * 1998-03-23 2000-06-13 Microsoft Corporation Efficient redrawing of animated windows
US6266053B1 (en) * 1998-04-03 2001-07-24 Synapix, Inc. Time inheritance scene graph for representation of media content
US6570578B1 (en) 1998-04-03 2003-05-27 Avid Technology, Inc. System for automatic generation of selective partial renderings of complex scenes
US6237092B1 (en) * 1998-05-05 2001-05-22 International Business Machines Corp. Client-server system with central application management allowing an administrator to configure user and group contexts during application configuration without relaunching the application
US6631403B1 (en) 1998-05-11 2003-10-07 At&T Corp. Architecture and application programming interfaces for Java-enabled MPEG-4 (MPEG-J) systems
JP2002519954A (ja) * 1998-06-26 2002-07-02 ジェネラル・インスツルメント・コーポレイション Mpeg−4ビデオプログラムを構成しかつ提示するためのターミナル
US6731314B1 (en) * 1998-08-17 2004-05-04 Muse Corporation Network-based three-dimensional multiple-user shared environment apparatus and method
US6487565B1 (en) * 1998-12-29 2002-11-26 Microsoft Corporation Updating animated images represented by scene graphs
US6411297B1 (en) * 1999-03-03 2002-06-25 Discreet Logic Inc. Generating image data
US6714201B1 (en) * 1999-04-14 2004-03-30 3D Open Motion, Llc Apparatuses, methods, computer programming, and propagated signals for modeling motion in computer applications
US6986101B2 (en) * 1999-05-06 2006-01-10 International Business Machines Corporation Method and apparatus for converting programs and source code files written in a programming language to equivalent markup language files
US6707456B1 (en) * 1999-08-03 2004-03-16 Sony Corporation Declarative markup for scoring multiple time-based assets and events within a scene composition system
US7184038B2 (en) * 1999-09-24 2007-02-27 Sun Microsystems, Inc. Using render bin parallelism for rendering scene graph based graphics data
US6765571B2 (en) * 1999-09-24 2004-07-20 Sun Microsystems, Inc. Using a master controller to manage threads and resources for scene-based rendering
US6538656B1 (en) * 1999-11-09 2003-03-25 Broadcom Corporation Video and graphics system with a data transport processor
WO2001040933A2 (en) * 1999-12-06 2001-06-07 Axiomatic Design Software, Inc. Method and apparatus for producing software using axiomatic design
US7102651B1 (en) * 1999-12-22 2006-09-05 Adobe Systems Incorporated Hierarchical 2-D color compositing with blending mode and opacity controls at all levels
US7103581B1 (en) 2000-01-13 2006-09-05 Hewlett-Packard Development Company, L.P. System and method for pricing print jobs
US6833840B2 (en) 2000-02-14 2004-12-21 Optibase Ltd PROTO implementation in MPEG-4
JP2001273520A (ja) * 2000-03-23 2001-10-05 Famotik Ltd マルチメディアドキュメント統合表示システム
US6751655B1 (en) * 2000-04-18 2004-06-15 Sun Microsystems, Inc. Method and apparatus for transport of scenegraph information across a network
US6717599B1 (en) * 2000-06-29 2004-04-06 Microsoft Corporation Method, system, and computer program product for implementing derivative operators with graphics hardware
US20020019844A1 (en) 2000-07-06 2002-02-14 Kurowski Scott J. Method and system for network-distributed computing
WO2002013002A2 (en) * 2000-08-04 2002-02-14 Intrinsic Graphics, Inc. Development of graphics hardware and software
US6675230B1 (en) * 2000-08-22 2004-01-06 International Business Machines Corporation Method, system, and program for embedding a user interface object in another user interface object
US7143339B2 (en) * 2000-09-20 2006-11-28 Sap Aktiengesellschaft Method and apparatus for dynamically formatting and displaying tabular data in real time
US6732109B2 (en) * 2001-01-31 2004-05-04 The Eon Company Method and system for transferring information between a user interface and a database over a global information network
US7069503B2 (en) * 2001-06-04 2006-06-27 Murata Kikai Kabushiki Kaisha Device and program for structured document generation data structure of structural document
US7305011B2 (en) * 2001-06-14 2007-12-04 International Business Machines Corporation Periodic broadcast and location of evolving media content with application to seminar and stroke media
US7161599B2 (en) * 2001-10-18 2007-01-09 Microsoft Corporation Multiple-level graphics processing system and method
US7064766B2 (en) * 2001-10-18 2006-06-20 Microsoft Corporation Intelligent caching data structure for immediate mode graphics
CA2465104A1 (en) 2001-10-23 2003-05-01 Samsung Electronics Co., Ltd. Information storage medium including markup document and av data, recording method, reproducing method, and reproducing apparatus therefor
US6626211B2 (en) 2001-11-27 2003-09-30 Toyoda Gosei Co., Ltd. Brake hose
US7055092B2 (en) * 2001-12-05 2006-05-30 Canon Kabushiki Kaisha Directory for multi-page SVG document
US20030110297A1 (en) * 2001-12-12 2003-06-12 Tabatabai Ali J. Transforming multimedia data for delivery to multiple heterogeneous devices
US20040110490A1 (en) * 2001-12-20 2004-06-10 Steele Jay D. Method and apparatus for providing content to media devices
KR100453225B1 (ko) * 2001-12-26 2004-10-15 한국전자통신연구원 3차원 가상 현실 구현을 위한 클라이언트 시스템과 이를이용한 가상 현실 구현 방법
US7076332B2 (en) * 2002-01-18 2006-07-11 National Instruments Corporation System and method for invoking execution of a sequence of operations that includes motion control, machine vision, and data acquisition (DAQ) functionality
EP1472620A2 (en) * 2002-02-04 2004-11-03 Mobileaware Technologies Limited Document transformation
US20030210267A1 (en) 2002-05-13 2003-11-13 Kylberg Robert Lee Systems and methods for providing asynchronous client rendering in a graphical user interface (GUI) environment
AU2003249168A1 (en) * 2002-07-11 2004-02-02 Raytheon Company System and method for asynchronous storage and playback of a system state
WO2004008303A2 (en) * 2002-07-12 2004-01-22 Raytheon Company Scene graph based display for desktop applications
US20040216139A1 (en) * 2002-08-21 2004-10-28 Rhoda Merlin A. System controlling test/measurement devices on a network using markup language documents and methods thereof
US7240346B2 (en) * 2002-11-13 2007-07-03 Microsoft Corporation Method and system for accessing drawing resources
US7126606B2 (en) * 2003-03-27 2006-10-24 Microsoft Corporation Visual and scene graph interfaces
US7088374B2 (en) * 2003-03-27 2006-08-08 Microsoft Corporation System and method for managing visual structure, timing, and animation in a graphics processing system
US7466315B2 (en) * 2003-03-27 2008-12-16 Microsoft Corporation Visual and scene graph interfaces
US7486294B2 (en) * 2003-03-27 2009-02-03 Microsoft Corporation Vector graphics element-based model, application programming interface, and markup language
US7412455B2 (en) * 2003-04-30 2008-08-12 Dillon David M Software framework that facilitates design and implementation of database applications
US8051389B2 (en) * 2003-08-26 2011-11-01 Hewlett-Packard Development Company, L.P. Methods of displaying resources of overlapping but separate hierarchies
US7012606B2 (en) * 2003-10-23 2006-03-14 Microsoft Corporation System and method for a unified composition engine in a graphics processing system

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003069965A (ja) * 2001-04-24 2003-03-07 Koninkl Philips Electronics Nv Bifsテキストフォーマットをbifsバイナリフォーマットに変換するための装置
JP2003162733A (ja) * 2001-10-18 2003-06-06 Microsoft Corp シーングラフのための汎用パラメータ設定

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009066926A (ja) * 2007-09-13 2009-04-02 Kyocera Mita Corp 画像処理装置及び画像形成システム
JP2011022673A (ja) * 2009-07-13 2011-02-03 Canon Inc 情報処理装置、情報処理方法及びプログラム
JP2019075119A (ja) * 2017-10-13 2019-05-16 ダッソー システムズDassault Systemes 3次元オブジェクトの設計プロセスを要約するアニメーションを作成する方法

Also Published As

Publication number Publication date
NO20052269L (no) 2005-11-24
WO2005045584A3 (en) 2005-12-15
BRPI0406378A (pt) 2005-08-09
EP1623406A4 (en) 2009-11-11
ZA200503159B (en) 2006-10-25
CN1989543A (zh) 2007-06-27
NO20052269D0 (no) 2005-05-10
NZ540116A (en) 2007-09-28
RU2005120391A (ru) 2006-01-20
CA2501452A1 (en) 2005-04-23
RU2360275C2 (ru) 2009-06-27
EP1623406A2 (en) 2006-02-08
KR20070028202A (ko) 2007-03-12
WO2005045584A2 (en) 2005-05-19
AU2004279199A1 (en) 2005-06-23
US20050140694A1 (en) 2005-06-30
TW200515304A (en) 2005-05-01
AU2004279199A8 (en) 2008-10-02
US7511718B2 (en) 2009-03-31

Similar Documents

Publication Publication Date Title
JP2007509426A (ja) 媒体統合レイヤ
JP5101648B2 (ja) ビジュアルおよびシーングラフインタフェース
RU2321892C2 (ru) Язык разметки и объектная модель для векторной графики
JP4796499B2 (ja) 映像およびシーングラフインターフェイス
KR101087427B1 (ko) 3차원 장면 계층구조를 2차원 합성 시스템으로 통합하기 위한 컴퓨터로 구현된 방법 및 컴퓨터 판독가능 기록 매체
Yang Implementation of 3D graphic editor

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070727

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070727

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100316

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100810