diff --git a/src/Map/Cesium_Map.tsx b/src/Map/Cesium_Map.tsx index 60b9889..862bdfc 100644 --- a/src/Map/Cesium_Map.tsx +++ b/src/Map/Cesium_Map.tsx @@ -114,6 +114,8 @@ const base_station_range_segment_count = 96; const base_station_range_boundary_sample_count = 72; const base_station_range_ground_clearance = 2; const default_camera_rectangle = Cesium.Rectangle.fromDegrees(119.98, 36.42, 122.56, 38.40); +const base_station_model_bottom_y = 0.19261999428272247; +const device_model_bottom_y = 4.06771041452885; export class Cesium_Map extends enhance.Base { viewer: Cesium.Viewer | null = null; container_id = "cesium-map"; @@ -834,6 +836,7 @@ export class Cesium_Map extends enhance.Base { uri: this.model_config.deviceModel.url, minimumPixelSize: this.device_display_size(ds), maximumScale: 500, + nodeTransformations: this.device_node_transformations(), enableVerticalExaggeration: false }, label: { @@ -941,6 +944,7 @@ export class Cesium_Map extends enhance.Base { record.device.model.minimumPixelSize = new Cesium.ConstantProperty(0); record.device.model.maximumScale = new Cesium.ConstantProperty(500); } + record.device.model.nodeTransformations = new Cesium.PropertyBag(this.device_node_transformations()); this.keep_model_original_color(record.device.model); record.device.model.enableVerticalExaggeration = new Cesium.ConstantProperty(false); } @@ -1163,7 +1167,12 @@ export class Cesium_Map extends enhance.Base { base_station_node_transformations(ds: Data_Source): {[key: string]: Cesium.TranslationRotationScale} { const horizontal_scale = Math.max(0.000001, ds.map3d_style().base_station_scale || 1); return { - Node: new Cesium.TranslationRotationScale(Cesium.Cartesian3.ZERO, Cesium.Quaternion.IDENTITY, new Cesium.Cartesian3(horizontal_scale, 1, horizontal_scale)) + Node: new Cesium.TranslationRotationScale(new Cesium.Cartesian3(0, -base_station_model_bottom_y, 0), Cesium.Quaternion.IDENTITY, new Cesium.Cartesian3(horizontal_scale, 1, horizontal_scale)) + }; + } + device_node_transformations(): {[key: string]: Cesium.TranslationRotationScale} { + return { + RootNode: new Cesium.TranslationRotationScale(new Cesium.Cartesian3(0, -device_model_bottom_y, 0), Cesium.Quaternion.IDENTITY, new Cesium.Cartesian3(1, 1, 1)) }; } device_display_size(ds: Data_Source): number {