1

我有这段代码,它将折线原语添加到场景中。

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()
        }));
    }

如何设置这条折线的宽度?

4

2 回答 2

2

添加折线的推荐方法是使用实​​体 API,如下所示

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

但是,如果您想跳过实体层并直接使用原始图形层,您也可以这样做。您上面的示例代码有一些问题。首先,您在Cesium.SimplePolylineGeometry没有关键字的情况下调用构造函数new,并且没有保存结果,这不是此类代码的正确使用模式。其次,SimplePolylineGeometry该类本身不支持大于 WebGL 实现所支持的线宽,在运行 ANGLE 的 Windows 机器上,它只有 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
});
于 2015-05-04T14:34:30.270 回答
0

SimplePolylineGeometry不支持线宽。您需要PolylineGeometry改用并将“宽度”选项传递给构造函数。此外,您应该使用PolylineColorAppearanceas your appearance,而不是PerInstanceColorAppearance.

于 2015-05-04T14:25:50.450 回答