1use super::mollweide::{
2 _plot_mollweide_pdf_impl, _plot_mollweide_png_impl_projected, ProjectionType,
3};
4use crate::params::HammerParams;
5use crate::params::MollweideParams;
6use std::path::Path;
7
8fn render_hammer_pixels(
9 params: crate::params::RenderMollweideParams,
10 layout: crate::layout::MollweideLayout,
11 sink: &mut dyn crate::PixelSink,
12 debug_overlay: Option<super::DebugOverlay>,
13) {
14 use crate::hammer::HammerProjection;
15 use crate::render::raster::RasterGrid;
16 let proj = HammerProjection::new();
17
18 let mut grid = RasterGrid::new(layout.map_w as u32, layout.map_h as u32);
19
20 if let Some(overlay) = debug_overlay
21 && overlay.show_background
22 {
23 super::fill_grid_background(&mut grid);
24 }
25
26 super::render_projection_to_grid(
27 crate::params::RenderGridParams {
28 map: params.map,
29 proj: &proj,
30 scale: params.scale,
31 cmap: params.cmap,
32 scale_type: params.scale_type,
33 neg_mode: params.neg_mode,
34 gamma: params.gamma,
35 bad_color: params.bad_color,
36 meta: params.meta,
37 hist_scale: params.hist_scale,
38 view: params.view,
39 mask: params.mask,
40 scale_cache: params.scale_cache,
41 },
42 &mut grid,
43 );
44
45 if let Some(overlay) = debug_overlay {
47 super::draw_debug_overlay_raster(&mut grid, overlay);
48 }
49
50 super::blit_grid_to_sink(&grid, sink, 0, 0);
51}
52
53pub fn plot_hammer_png(params: HammerParams) {
55 let mollweide_params = MollweideParams {
56 plot: params.plot,
57 scale: params.scale,
58 color: params.color,
59 display: params.display,
60 graticule: params.graticule,
61 meta: params.meta,
62 view: params.view,
63 };
64 _plot_mollweide_png_impl_projected(
65 mollweide_params,
66 render_hammer_pixels,
67 ProjectionType::Hammer,
68 );
69}
70
71pub fn plot_hammer_pdf(params: HammerParams) {
73 let mollweide_params = MollweideParams {
74 plot: params.plot,
75 scale: params.scale,
76 color: params.color,
77 display: params.display,
78 graticule: params.graticule,
79 meta: params.meta,
80 view: params.view,
81 };
82 _plot_mollweide_pdf_impl(mollweide_params, render_hammer_pixels);
83}
84
85pub fn plot_hammer_auto(params: HammerParams) {
87 let ext = Path::new(params.plot.filename.as_str())
88 .extension()
89 .and_then(|s| s.to_str())
90 .map(|s| s.to_lowercase())
91 .unwrap_or_default();
92
93 match ext.as_str() {
94 "png" => plot_hammer_png(params),
95 "pdf" => plot_hammer_pdf(params),
96 _ => {
97 panic!(
98 "Unsupported output format: .{} (expected .png or .pdf)",
99 ext
100 );
101 }
102 }
103}