2

Cesium API によると、アセットのビルボード (またはラベル) の可視性を切り替えるには、単純に billboard.show プロパティを false に割り当てます。これを行おうとすると、セシウムはエラーになります

An error occurred while rendering.  Rendering has stopped.
TypeError: undefined is not a function
...

cesium-dev Google グループからのこのディスカッションには、ビルボードの表示のオン/オフを切り替えるサンプル コードが含まれています。CZML のエンティティで show = false を試行しても、同じコードは機能しません (この例では CZML を使用していません)。

これが私が試したものです

var asset = loadedCZML.entities.getById(id);
asset.billboard.show = false; //Error!

(loadedCZML はCesium.CzmlDataSource)

4

1 に答える 1

1

API docshowには、エンティティのプロパティが常に単純なブール値のプロパティであるとは限らないことについては言及されていません (API で説明されているように)。

a を操作する場合、プロパティは a と見なされます(少なくとも私の CZML ではそうでした) CzmlDataSourceentityshowTimeIntervalCollectionProperty

Cesium のすべてのプロパティはgetValue関数を実装する必要があり、 を設定しようとするとshow = false、プロパティのセッターは false を a に適用できずTimeIntervalCollectionProperty、代わりにプロパティ全体を単純な値 に置き換えますfalse

このエラーは、プロパティundefined is not a functionで getValue() を呼び出そうとする cesium render 呼び出しの結果です。showとにかく、修正は簡単です:

これの代わりに:

asset.billboard.show = false; //error

これを行う:

asset.billboard.show = new Cesium.ConstantProperty(false);

PS: これは他のセシウム プロパティにも当てはまります。次の例を参照してください。

entity.billboard.image = pinBuilder.fromColor(Cesium.Color.CRIMSON, 48); //error

//do this instead
entity.billboard.image = new Cesium.ConstantProperty(pinBuilder.fromColor(Cesium.Color.CRIMSON, 48).toDataURL());
于 2014-11-20T20:35:49.887 に答える