diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/console.c | 38 | ||||
-rw-r--r-- | src/physics.c | 54 |
2 files changed, 53 insertions, 39 deletions
diff --git a/src/console.c b/src/console.c index 9c7cebb..4edaf2e 100644 --- a/src/console.c +++ b/src/console.c @@ -163,7 +163,43 @@ char *cmd_csg_clear(char *arg) char *cmd_csg_push(char *arg) { - itc_chan_push(&con_sim->ctl, PHY_CMD_CSG_PUSH, NULL); + char *shape_str; + phy_csg_shape shape; + phy_csg_step *step; + + shape_str = con_var_get("csg_shape"); + + shape = CSG_SPHERE; + + if (shape_str) { + if (!strcmp(shape_str, "cylinder-z")) + shape = CSG_CYLINDER_Z; + } + + step = malloc(sizeof(phy_csg_step)); + assert(step); + + step->shape = shape; + step->value = con_var_get_float("csg_v"); + + switch (shape) { + case CSG_SPHERE: + step->x[0] = con_var_get_float("csg_x"); + step->x[1] = con_var_get_float("csg_y"); + step->x[2] = con_var_get_float("csg_z"); + step->d[0] = con_var_get_float("csg_r"); + break; + + case CSG_CYLINDER_Z: + step->x[0] = con_var_get_float("csg_x"); + step->x[1] = con_var_get_float("csg_y"); + step->x[2] = con_var_get_float("csg_z"); + step->d[0] = con_var_get_float("csg_r"); + step->d[1] = con_var_get_float("csg_h"); + break; + } + + itc_chan_push(&con_sim->ctl, PHY_CMD_CSG_PUSH, step); return "Wykonano operację na przenikalności elektrycznej"; } diff --git a/src/physics.c b/src/physics.c index 38f9c88..a6735a1 100644 --- a/src/physics.c +++ b/src/physics.c @@ -306,6 +306,8 @@ void phy_sim_destroy_fields(phy_sim *sim) free(sim->aux); sim->aux = NULL; + phy_sim_csg_clear(sim); + sim->valid = false; } @@ -544,46 +546,10 @@ void phy_sim_step(phy_sim *sim) { SDL_mutexV(sim->rotate_lock); } -void phy_sim_csg_push(phy_sim *sim) +void phy_sim_csg_push(phy_sim *sim, phy_csg_step *step) { - char *shape_str; - phy_csg_shape shape; - phy_csg_step *step; - - shape_str = con_var_get("csg_shape"); - - shape = CSG_SPHERE; - - if (shape_str) { - if (!strcmp(shape_str, "cylinder-z")) - shape = CSG_CYLINDER_Z; - } - - step = malloc(sizeof(phy_csg_step)); - assert(step); - step->next = sim->csg_stack; sim->csg_stack = step; - - step->shape = shape; - step->value = con_var_get_float("csg_v"); - - switch (shape) { - case CSG_SPHERE: - step->x[0] = con_var_get_float("csg_x"); - step->x[1] = con_var_get_float("csg_y"); - step->x[2] = con_var_get_float("csg_z"); - step->d[0] = con_var_get_float("csg_r"); - break; - - case CSG_CYLINDER_Z: - step->x[0] = con_var_get_float("csg_x"); - step->x[1] = con_var_get_float("csg_y"); - step->x[2] = con_var_get_float("csg_z"); - step->d[0] = con_var_get_float("csg_r"); - step->d[1] = con_var_get_float("csg_h"); - break; - } } void phy_sim_csg_clear(phy_sim *sim) @@ -594,6 +560,8 @@ void phy_sim_csg_clear(phy_sim *sim) next = step->next; free(step); } + + sim->csg_stack = NULL; } void phy_sim_debug(phy_sim *sim, size_t *coords) @@ -601,6 +569,7 @@ void phy_sim_debug(phy_sim *sim, size_t *coords) phy_field_info *fi = &sim->field_info; phy_field_aux_point *aux; float *E, *H, Emag, Hmag; + phy_csg_step *step; aux = sim->aux + coords[2] * fi->zstr1 + coords[1] * fi->ystr1 + coords[0] * fi->xstr1; @@ -634,6 +603,15 @@ void phy_sim_debug(phy_sim *sim, size_t *coords) aux->uec_H[1][0], aux->uec_H[1][1], aux->uec_H[1][2], aux->uec_H[1][3], aux->uec_H[2][0], aux->uec_H[2][1], aux->uec_H[2][2], aux->uec_H[2][3]); printf("Emag = %E, Hmag = %E, Z = %E\n", Emag, Hmag, Emag/Hmag); + + printf("CSG:\n"); + for (step = sim->csg_stack; step; step = step->next) { + printf("\ttype=%i, value=%f, x=[%f %f %f], d=[%f %f %f]\n", + step->shape, step->value, + step->x[0], step->x[1], step->x[2], + step->d[0], step->d[1], step->d[2]); + } + printf("=======================\n"); } @@ -677,7 +655,7 @@ void phy_run_command(phy_sim *sim, int number, void *data) break; case PHY_CMD_CSG_PUSH: - phy_sim_csg_push(sim); + phy_sim_csg_push(sim, data); break; case PHY_CMD_CSG_CLEAR: |