|
|
|
@ -1695,12 +1695,6 @@ export default { |
|
|
|
msaaSamples: 8 |
|
|
|
}) |
|
|
|
this.viewer.cesiumWidget.creditContainer.style.display = "none" |
|
|
|
// 启用 FXAA 后处理,进一步减轻线条锯齿感 |
|
|
|
try { |
|
|
|
if (this.viewer.scene.postProcessStages && this.viewer.scene.postProcessStages.fxaa) { |
|
|
|
this.viewer.scene.postProcessStages.fxaa.enabled = true |
|
|
|
} |
|
|
|
} catch (e) { /* 部分 Cesium 版本可能无此 API */ } |
|
|
|
// 根据浏览器缩放比例提高渲染分辨率,减轻 80% 等缩放下线条锯齿 |
|
|
|
this.applyResolutionScale() |
|
|
|
this._resolutionScaleCleanup = this.setupResolutionScaleListener() |
|
|
|
@ -3216,8 +3210,8 @@ export default { |
|
|
|
// 5. 重置状态,保持绘制状态以继续绘制 |
|
|
|
this.drawingPoints = []; |
|
|
|
}, |
|
|
|
// 生成圆形的点,用于绘制边框线(提高分段数以减轻锯齿) |
|
|
|
generateCirclePositions(center, radius, numPoints = 256) { |
|
|
|
// 生成圆形的点,用于绘制边框线 |
|
|
|
generateCirclePositions(center, radius, numPoints = 192) { |
|
|
|
const positions = []; |
|
|
|
const ellipsoid = this.viewer.scene.globe.ellipsoid; |
|
|
|
|
|
|
|
@ -3293,8 +3287,8 @@ export default { |
|
|
|
} |
|
|
|
// 确保角度差不为零 |
|
|
|
angleDiff = Math.max(0.01, angleDiff); |
|
|
|
// 计算扇形的顶点数(根据角度差确定,确保平滑;提高分段数以减轻锯齿) |
|
|
|
const numPoints = Math.max(64, Math.ceil(angleDiff * 180 / Math.PI / 2)); |
|
|
|
// 计算扇形的顶点数(根据角度差确定,确保平滑) |
|
|
|
const numPoints = Math.max(16, Math.ceil(angleDiff * 180 / Math.PI / 3)); |
|
|
|
const angleStep = angleDiff / (numPoints - 1); |
|
|
|
// 生成扇形的顶点(顺时针方向) |
|
|
|
for (let i = 0; i < numPoints; i++) { |
|
|
|
@ -3808,8 +3802,8 @@ export default { |
|
|
|
if (!this.viewer || !this.viewer.cesiumWidget) return |
|
|
|
const vv = window.visualViewport |
|
|
|
const scale = (vv && typeof vv.scale === 'number') ? vv.scale : 1 |
|
|
|
// 始终使用至少 2.2 倍超采样,80% 缩放下再按比例提高(上限 2.5),显著减轻线条锯齿 |
|
|
|
let resolutionScale = 2.2 |
|
|
|
// 始终使用至少 2.0 倍超采样,80% 缩放下再按比例提高(上限 2.5),显著减轻锯齿 |
|
|
|
let resolutionScale = 2.0 |
|
|
|
if (scale > 0 && scale < 1) { |
|
|
|
resolutionScale = Math.min(2.5, 1 / scale) |
|
|
|
if (resolutionScale < 2.0) resolutionScale = 2.0 |
|
|
|
@ -3840,8 +3834,8 @@ export default { |
|
|
|
window.removeEventListener('resize', onResize) |
|
|
|
} |
|
|
|
}, |
|
|
|
/** 按等经度/等纬度采样矩形边框,使在 2D 地图缩小时仍显示为直线(避免测地线弯弧);分段数提高以减轻锯齿 */ |
|
|
|
getRectangleBorderPositions(rect, segmentsPerEdge = 64) { |
|
|
|
/** 按等经度/等纬度采样矩形边框,使在 2D 地图缩小时仍显示为直线(避免测地线弯弧) */ |
|
|
|
getRectangleBorderPositions(rect, segmentsPerEdge = 48) { |
|
|
|
const west = rect.west |
|
|
|
const south = rect.south |
|
|
|
const east = rect.east |
|
|
|
@ -3866,8 +3860,8 @@ export default { |
|
|
|
} |
|
|
|
return positions |
|
|
|
}, |
|
|
|
/** 在 2D 墨卡托下将一段线采样为“直线”(避免测地线弯弧);返回 Cartesian3 数组含起点到终点;分段数提高以减轻锯齿 */ |
|
|
|
sampleSegmentStraightIn2D(cartesianA, cartesianB, numSegments = 64) { |
|
|
|
/** 在 2D 墨卡托下将一段线采样为“直线”(避免测地线弯弧);返回 Cartesian3 数组含起点到终点 */ |
|
|
|
sampleSegmentStraightIn2D(cartesianA, cartesianB, numSegments = 32) { |
|
|
|
const cgA = Cesium.Cartographic.fromCartesian(cartesianA) |
|
|
|
const cgB = Cesium.Cartographic.fromCartesian(cartesianB) |
|
|
|
const lonA = cgA.longitude |
|
|
|
@ -3887,8 +3881,8 @@ export default { |
|
|
|
} |
|
|
|
return positions |
|
|
|
}, |
|
|
|
/** 将折线/多边形顶点按 2D 墨卡托“直线”采样,使缩放小时仍显示为直;closed 为 true 表示多边形闭合;分段数提高以减轻锯齿 */ |
|
|
|
getPolylinePositionsStraightIn2D(positions, closed = false, segmentsPerEdge = 64) { |
|
|
|
/** 将折线/多边形顶点按 2D 墨卡托“直线”采样,使缩放小时仍显示为直;closed 为 true 表示多边形闭合 */ |
|
|
|
getPolylinePositionsStraightIn2D(positions, closed = false, segmentsPerEdge = 32) { |
|
|
|
if (!positions || positions.length < 2) return positions |
|
|
|
const n = positions.length |
|
|
|
const result = [] |
|
|
|
|