Skip to main content

map2fig/
params.rs

1//! Parameter bundling structs for plot functions.
2//!
3//! This module organizes the many individual parameters of plotting functions
4//! into logical, reusable structs. This improves code readability, maintainability,
5//! and makes it easier to extend functionality without modifying function signatures.
6
7use crate::NegMode;
8use crate::colormap::Colormap;
9use crate::healpix::HealpixMeta;
10use crate::rotation::CoordSystem;
11use crate::scale::Scale;
12use image::Rgba;
13
14/// Core plot data: map, dimensions, and output location.
15pub struct PlotData {
16    pub map: Vec<f64>,
17    pub width: u32,
18    pub filename: String,
19    pub pdf_backend: String,
20}
21
22/// Scale and color transformation parameters.
23pub struct ScaleParams {
24    pub minv: Option<f64>,
25    pub maxv: Option<f64>,
26    pub gamma: f64,
27    pub scale: Scale,
28    pub neg_mode: NegMode,
29}
30
31/// Color mapping parameters.
32pub struct ColorParams<'a> {
33    pub cmap: &'a Colormap,
34    pub bad_color: Rgba<u8>,
35    pub bg_color: Rgba<u8>,
36}
37
38/// Display and layout parameters.
39pub struct DisplayParams {
40    pub show_colorbar: bool,
41    pub transparent: bool,
42    pub draw_border: bool,
43    pub latex_rendering: bool,
44    pub units: Option<String>,
45    pub extend: crate::cli::Extend,
46    pub tick_direction: crate::cli::TickDirection,
47    pub tick_font_size: Option<f32>,
48    pub units_font_size: Option<f32>,
49    pub rlabel: Option<String>,
50    pub llabel: Option<String>,
51    pub label_font_size: Option<f32>,
52    pub mask: Option<crate::mask::PixelMask>,
53    pub title: Option<String>,
54    pub show_title: bool,
55    pub scale_text: bool,
56}
57
58/// Graticule overlay parameters.
59pub struct GraticuleParams {
60    pub show_graticule: bool,
61    pub grat_coord: Option<CoordSystem>,
62    pub grat_overlay: Option<CoordSystem>,
63    pub overlay_color: Rgba<u8>,
64    pub show_labels: bool,
65    pub dpar_deg: f64,
66    pub dmer_deg: f64,
67}
68
69/// Mollweide projection parameters bundling all related data.
70pub struct MollweideParams<'a> {
71    pub plot: PlotData,
72    pub scale: ScaleParams,
73    pub color: ColorParams<'a>,
74    pub display: DisplayParams,
75    pub graticule: GraticuleParams,
76    pub meta: HealpixMeta,
77    pub view: &'a crate::rotation::ViewTransform,
78}
79
80/// Hammer projection parameters bundling all related data.
81pub struct HammerParams<'a> {
82    pub plot: PlotData,
83    pub scale: ScaleParams,
84    pub color: ColorParams<'a>,
85    pub display: DisplayParams,
86    pub graticule: GraticuleParams,
87    pub meta: HealpixMeta,
88    pub view: &'a crate::rotation::ViewTransform,
89}
90
91/// Gnomonic projection parameters bundling all related data.
92pub struct GnomonicParams<'a> {
93    pub plot: PlotData,
94    pub scale: ScaleParams,
95    pub color: ColorParams<'a>,
96    pub display: DisplayParams,
97    pub graticule: GraticuleParams,
98    pub meta: HealpixMeta,
99    pub view: &'a crate::rotation::ViewTransform,
100    pub lon_deg: f64,
101    pub lat_deg: f64,
102    pub fov_arcmin: f64,
103    pub resolution_arcmin: f64,
104    pub roll_deg: f64,
105    pub grat_line_width: u32,
106    pub show_gnomonic_text: bool,
107}
108
109/// Pixel rendering parameters for mollweide projection.
110pub struct RenderMollweideParams<'a> {
111    pub map: &'a [f64],
112    pub scale: &'a crate::plot::MollweideScale,
113    pub cmap: &'a Colormap,
114    pub gamma: f64,
115    pub scale_type: Scale,
116    pub neg_mode: NegMode,
117    pub bad_color: Rgba<u8>,
118    pub meta: HealpixMeta,
119    pub hist_scale: Option<&'a crate::scale::HistogramScale>,
120    pub view: &'a crate::rotation::ViewTransform,
121    pub mask: Option<&'a crate::mask::PixelMask>,
122    pub scale_cache: Option<&'a crate::scale::ScaleCache>,
123}
124
125/// Grid rendering parameters for projection sampling.
126/// Generic over the projection type to enable Send+Sync trait bounds for parallelization.
127pub struct RenderGridParams<'a, P: crate::projection::Projection> {
128    pub map: &'a [f64],
129    pub proj: &'a P,
130    pub scale: &'a crate::plot::MollweideScale,
131    pub cmap: &'a Colormap,
132    pub scale_type: Scale,
133    pub neg_mode: NegMode,
134    pub gamma: f64,
135    pub bad_color: Rgba<u8>,
136    pub meta: HealpixMeta,
137    pub hist_scale: Option<&'a crate::scale::HistogramScale>,
138    pub view: &'a crate::rotation::ViewTransform,
139    pub mask: Option<&'a crate::mask::PixelMask>,
140    pub scale_cache: Option<&'a crate::scale::ScaleCache>,
141    pub underflow: (u8, u8, u8),
142    pub overflow: (u8, u8, u8),
143}
144
145/// Colorbar rendering parameters for PDF output.
146pub struct ColorbarParams<'a> {
147    pub cmap: &'a Colormap,
148    pub minv: f64,
149    pub maxv: f64,
150    pub scale_type: Scale,
151    pub gamma: f64,
152    pub hist_scale: Option<&'a crate::scale::HistogramScale>,
153    pub latex_rendering: bool,
154    pub units: Option<&'a str>,
155    pub extend: &'a crate::cli::Extend,
156    pub units_font_size: Option<f32>,
157    pub map_width: Option<f64>, // For scaling units label with map size (gnomonic projections)
158}
159
160/// Graticule rendering parameters.
161pub struct GraticuleRenderParams {
162    pub color_r: f64,
163    pub color_g: f64,
164    pub color_b: f64,
165    pub line_width: f64,
166}
167
168/// Layout geometry for rendering regions.
169pub struct GeometryRect {
170    pub x: f64,
171    pub y: f64,
172    pub w: f64,
173    pub h: f64,
174}
175
176/// Associated coordinate systems for graticule rendering.
177pub struct GraticuleCoordinates {
178    pub grat_coord: CoordSystem,
179    pub input_coord: CoordSystem,
180}
181
182/// Graticule line spacing configuration.
183pub struct GraticuleSpacing {
184    pub dlon_deg: f64,
185    pub dlat_deg: f64,
186}
187
188/// Colorbar geometry and configuration.
189pub struct ColorbarGeometry {
190    pub rect: GeometryRect,
191    pub label_pad: f64,
192}
193
194/// Colorbar label configuration for rendering.
195pub struct ColorbarPdfLabelConfig {
196    pub scale: Scale,
197    pub latex_rendering: bool,
198    pub units: Option<String>,
199    pub units_font_size: Option<f32>,
200    pub map_width: Option<f64>,
201}
202
203/// Colorbar layout configuration parameters.
204pub struct ColorbarLayoutConfig {
205    pub label_pad: f64,
206    pub image_width: f64,
207    pub tick_direction: crate::cli::TickDirection,
208    pub custom_tick_font_size: Option<f32>,
209    pub width_scale: f64,
210}