Как установить ширину для примитива SimplePolylineGeometry в CesiumJS

У меня есть этот код, который добавляет в сцену примитив полилинии.

function createPolyline(startPosition, endPosition) {
        Cesium.SimplePolylineGeometry({
            positions : [startPosition, endPosition]
        });

        var geometry = Cesium.SimplePolylineGeometry.createGeometry(polyline);
        return scene.primitives.add(new Cesium.Primitive({
            geometryInstances : new Cesium.GeometryInstance({
                geometry   : geometry,
                attributes : {
                    color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.SPRINGGREEN)
                }
            }),
            appearance        : new Cesium.PerInstanceColorAppearance()
        }));
    }

Как установить ширину этой ломаной линии?


person ma2s    schedule 02.05.2015    source источник


Ответы (2)


Рекомендуемый способ добавления полилинии - Entity API, вот так

var greenLine = viewer.entities.add({
    polyline : {
        positions : [startPosition, endPosition],
        width : 5,
        material : Cesium.Color.SPRINGGREEN
    }
});

Но если вы хотите пропустить слой Entity и напрямую использовать слой Primitive Graphics, вы тоже можете это сделать. В приведенном выше примере кода есть некоторые проблемы. Во-первых, вы вызываете конструктор Cesium.SimplePolylineGeometry без ключевого слова new и без сохранения результата, и это неправильный шаблон использования для такого типа кода. Во-вторых, сам класс SimplePolylineGeometry не поддерживает ширину линий, превышающую ту, которую поддерживает реализация WebGL, которая на машинах Windows, работающих под управлением ANGLE, имеет ширину всего 1 пиксель. Чтобы обойти это ограничение, используйте обычные (непростые) полилинии, например:

var polylines = scene.primitives.add(new Cesium.PolylineCollection());
var polyline = polylines.add({
    positions : Cesium.PolylinePipeline.generateCartesianArc({
        positions : [startPosition, endPosition]
    }),
    material : Cesium.Material.fromType('Color', {
        color : Cesium.Color.SPRINGGREEN
    }),
    width: 5
});
person emackey    schedule 04.05.2015

SimplePolylineGeometry не поддерживает ширину линии. Вместо этого вам нужно использовать PolylineGeometry и передать конструктору параметры «ширины». Кроме того, вы должны использовать PolylineColorAppearance в качестве appearance, а не PerInstanceColorAppearance.

person Matthew Amato    schedule 04.05.2015