diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2025-03-01 14:26:11 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2025-03-01 14:26:11 -0500 |
| commit | 47874c2ec00339314e43d282ab2bc906e9c9ac9b (patch) | |
| tree | 97bef4da33b15adc6ef913efc22f400cc6dd0bf9 | |
| parent | 3f05b42ab04ca4990edf0f374f02dfea7b3be10a (diff) | |
| download | volute-47874c2ec00339314e43d282ab2bc906e9c9ac9b.zip | |
add ambient pressure input
| -rw-r--r-- | engine.h | 2 | ||||
| -rw-r--r-- | main.c | 16 | ||||
| -rw-r--r-- | ui.c | 32 | ||||
| -rw-r--r-- | ui.h | 5 |
4 files changed, 55 insertions, 0 deletions
@@ -1,5 +1,7 @@ typedef struct { Volume displacement; + Temperature ambient_temperature; + Pressure ambient_pressure; AngularSpeed rpm; Pressure map; Fraction ve; @@ -58,6 +58,7 @@ static void process_frame(mu_Context *ctx, UI *ui); static void main_window(mu_Context *ctx, UI *ui); static void displacement_row(mu_Context *ctx, UI *ui); static void ambient_temperature_row(mu_Context *ctx, UI *ui); +static void ambient_pressure_row(mu_Context *ctx, UI *ui); static void rpm_row(mu_Context *ctx, UI *ui); static void map_row(mu_Context *ctx, UI *ui); static void ve_row(mu_Context *ctx, UI *ui); @@ -130,6 +131,8 @@ main_window(mu_Context *ctx, UI *ui) { } displacement_row(ctx, ui); + ambient_temperature_row(ctx, ui); + ambient_pressure_row(ctx, ui); vpad(ctx, 0); @@ -172,6 +175,19 @@ ambient_temperature_row(mu_Context *ctx, UI *ui) { } static void +ambient_pressure_row(mu_Context *ctx, UI *ui) { + mu_layout_row(ctx, 3, (int[]) {LABEL_WIDTH, FIELD_WIDTH, UNIT_WIDTH}, 0); + mu_label(ctx, "Ambient pressure:"); + if (w_field(ctx, &ui->ambient_pressure) & MU_RES_CHANGE) { + set_ambient_pressure(ui); + set_all_volume_flow_rate(ui); + } + if (w_select(ctx, &ui->ambient_pressure_unit) & MU_RES_CHANGE) { + set_ambient_pressure_unit(ui); + } +} + +static void rpm_row(mu_Context *ctx, UI *ui) { int i; @@ -49,6 +49,9 @@ init_ui(UI *ui) { w_init_field(&ui->ambient_temperature); w_init_select(&ui->ambient_temperature_unit, nelem(temperature_units), temperature_units); + w_init_field(&ui->ambient_pressure); + w_init_select(&ui->ambient_pressure_unit, nelem(pressure_units), pressure_units); + ui->npoints = 1; w_init_field(&ui->rpm[0]); @@ -123,6 +126,35 @@ set_ambient_temperature_unit(UI *ui) { } void +set_ambient_pressure(UI *ui) { + int idx, i; + PressureMaker convert; + Pressure p; + + idx = ui->ambient_pressure_unit.idx; + assert(idx >= 0 && (long unsigned int) idx < nelem(pressure_units)); + + convert = pressure_makers[idx]; + p = convert(ui->ambient_pressure.value); + + for (i = 0; i < ui->npoints; i++) { + ui->points[i].ambient_pressure = p; + } +} + +void +set_ambient_pressure_unit(UI *ui) { + PressureMaker maker; + Pressure p; + PressureReader reader; + + maker = pressure_makers[ui->ambient_pressure_unit.oldidx]; + p = maker(ui->ambient_pressure.value); + reader = pressure_readers[ui->ambient_pressure_unit.idx]; + w_set_field(&ui->ambient_pressure, reader(p)); +} + +void set_map(UI *ui, int idx) { int unit_idx; PressureMaker convert; @@ -7,6 +7,9 @@ typedef struct { w_Field ambient_temperature; w_Select ambient_temperature_unit; + w_Field ambient_pressure; + w_Select ambient_pressure_unit; + int npoints; w_Field rpm[MAX_POINTS]; @@ -27,6 +30,8 @@ void set_displacement(UI *ui); void set_displacement_unit(UI* ui); void set_ambient_temperature(UI *ui); void set_ambient_temperature_unit(UI *ui); +void set_ambient_pressure(UI *ui); +void set_ambient_pressure_unit(UI *ui); void set_map(UI *ui, int idx); void set_map_unit(UI *ui); void set_ve(UI *ui, int idx); |