私はもともと日記を書きたかったが、現実的ではありません。
ソースのダウンロード
ソースコードは、ソースパッケージと配布パッケージのソースディレクトリから入手可能です。
1.63バージョンからセシウムモジュラーメカニズムは、元RequireJsはES6なります。しかし、質問のカップルは、もともと内部はまだES5の実装で設計さがあるかもしれません。
エントランス:ビューアをインスタンス化するとき、最後に何が起こりました
セシウムプログラムを書くとき、私はこの文を書かれています:
let viewer = new Cesium.Viewer(dom)
またはSO
let viewer = new Cesium.Viewer(dom, {
terrainProvider: Cesium.createWorldTerrain()
})
これは当時何が起こったかを正確でしたか?
Viewer.js
次のように線302、ビューアのコンストラクタを配置します:
function Viewer(container, options) {
...
}
このコンストラクタから最大で、それの400行のルックスに!
// 304~309行
if (!defined(container)) {
throw new DeveloperError('container is required.');
}
container = getElement(container);
このステップは、DOM要素が存在するかどうかを確認することで、使用getElementモジュールはdomID決定またはDOM要素は変数、及びリターンします。
ツールモジュール:はdefaultValue
// 310行
options = defaultValue(options, defaultValue.EMPTY_OBJECT);
このステップは、空の場合は、空の目標設定値(オプションに渡されたオブジェクトが空であるかどうかを決定することですdefaultValue.EMPTY_OBJECT)
)。、どこdefaultValue
未定義でない場合は、重要なモジュールである、それは最初のパラメータが定義されていない場合、その戻り値として二番目のパラメータを入れて決定し、それが自身を返します。
ツールモジュール:定義されました
// 312~313行
var createBaseLayerPicker = (!defined(options.globe) || options.globe !== false) &&
(!defined(options.baseLayerPicker) || options.baseLayerPicker !== false);
このステップでは、パラメータオプションで定義されたモジュール構造は、ベースマップピッカーコントロールを作成するかどうかを判断するための属性グローブ、baseLayerPickerプロパティを持っているかどうかを決定します。エフェクトモジュールが定義され、それは入力値が真の定義されたリターンを定義するかどうかを判定する。
その変数に割り当てられた329行ビューアこの変数の例。
344行の331は、ビューアのビューの下に作成したdivのDOM要素スペースの束です。
ライン362から346、およびモジュールは、モジュールはdefaultValueを使用して定義しました
-
デフォルトが存在しない場合、パラメータ割り付けするかどうかscene3DOnlyで入ってくるパラメータオプションを判断することは唯一の3Dシーンの手段を使用するかどうか、である、偽です。
-
入来クロックモデルを使用するかどうかを決定するオプションの存在下または非存在下での入力クロックモデルパラメータclockViewModel特性を分析、またはシステム・クロックのモデルを用いて、
-
入ってくるパラメータオプションは、意志のクロックに定義されている場合は、同じ値に同じ名前の属性セットをshouldAnimateプロパティを定義しているかどうかを確認します。
最初のステップ:CesiumWidgetを作成
// Cesium.js 364~388行
var cesiumWidget = new CesiumWidget(cesiumWidgetContainer, {
imageryProvider: createBaseLayerPicker || defined(options.imageryProvider) ? false : undefined,
clock : clock,
skyBox : options.skyBox,
skyAtmosphere : options.skyAtmosphere,
sceneMode : options.sceneMode,
mapProjection : options.mapProjection,
globe : options.globe,
// ... 太长了不贴了
});
この手順と同様にビューアを作成するが、それはデータキャリアステップに近いです。
ユニット、CesiumWidgetと再びの整合性を確保するために、例。事前に開示する:HFのAPI、シーン、imageryProvider、グローブなどは、このステップで作成され続けています。
その他の初期化
390行615に、ビューアーの他のインターフェイス、タイムライン、および他のコントロール上のボタン初期公開されている特性、ならびに全体的な管理の初期化イベント(EventHelperモジュール)の初期化の一部であり、初期重要DataSourceCollection /のDataSourceDisplay 。
ビューアの後ろのノートセクションでは、コントロールを初期化するに関して、詳細に展開していきます。
範囲に属するノートDataSourceCollection / DataSourceDisplayデータは、ビューアの部分を含みません。
最後に、上記の目的は、現在のすべてのビューアインスタンスのプロパティとして登録され、いくつかは、そのようなdataSourceCollectionを一括プロトタイプビューアに登録されたイベントなどのオブジェクト登録、初期化されます。
上記初期化に加えて、セシウムはまた、初期化の完了を容易にエンティティをクリックしてシーンを拾うことができた後、ダブルクリックイベントをクリックしてデフォルト画面cesiumWidget操作イベントとして登録される(シーンのシーン、エンティティエンティティデータ範囲を、詳細には説明しません) cesiumWidget.screenSpaceEventHandler.setInputActionメソッドを使用して、これらの2件のイベントが登録します。これらの2つのイベントは689〜708行のコンストラクタに位置しています。
プロトタイプ定義
ツール方法:Object.defineProperties
これは、ほぼすべてのセシウムモジュールは、オブジェクトのプロパティ与えられ、Object.definePropertiesを使用して、一歩を行いますされています。
このメソッドの前に何のJSがCesium.definePropertiesを使用しないときに新しいバージョンが使用可能になったObject.definePropertiesであるといわれています。
Viewer.jsモジュール711 1292へのラインは、複数のオブジェクトの初期化を含む性質の多数のプロトタイプビューア公式の定義は、また、各初期化の上に作成されたいくつかのオブジェクトを含み、上記などのイベントを、上述しましたアクセスは、ビューアのインスタンス上で直接他のモジュールに属性を迅速に接続属性、。
たとえば、あなたが唯一のビューワーカメラに乗ることができない、カメラだけでも、ビューアのカメラの最初の訪問シーンベールに戻り、シーンモジュールで取得することができます。
その後、1294のに行と1523 1724 1858ライン、それはAPIドキュメントの一般的な方法の束は、ビューアのプロトタイプとして見ることができます定義します。1525 1703 1863 2056ビューアの動作のプロトタイプは、プライベートメソッドの束を定義しました。
エクスポートビューアモジュール
最後に、2066ライン、エクスポートビューアのコンストラクタES6構文を使用します。
無断複写・転載を禁じます。再印刷がほとんど/小さなコラムを知っている/、B局にご連絡下さい/秋@パーク/ CSDNをブログ寒いです
https://www.cnblogs.com/onsummer/p/12571971.html