[brlcad-commits] SF.net SVN: brlcad:[33910] brlcad/trunk/src/proc-db/coil.c
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <sta...@us...> - 2009-02-27 00:22:42
|
Revision: 33910 http://brlcad.svn.sourceforge.net/brlcad/?rev=33910&view=rev Author: starseeker Date: 2009-02-27 00:22:37 +0000 (Fri, 27 Feb 2009) Log Message: ----------- OK, can specify different ending types for the coil now - getting close Modified Paths: -------------- brlcad/trunk/src/proc-db/coil.c Modified: brlcad/trunk/src/proc-db/coil.c =================================================================== --- brlcad/trunk/src/proc-db/coil.c 2009-02-26 23:30:59 UTC (rev 33909) +++ brlcad/trunk/src/proc-db/coil.c 2009-02-27 00:22:37 UTC (rev 33910) @@ -50,17 +50,20 @@ fastf_t p; /*Pitch*/ }; -fastf_t cap_squared(struct bu_list *head, struct wmember *coil, fastf_t mean_outer_diameter, fastf_t wire_diameter, fastf_t helix_angle, fastf_t pitch, fastf_t starting_pitch, int is_start) +fastf_t cap_squared(struct rt_wdb *file, struct bu_list *head, char *prefix, struct wmember *coil_subtractions, fastf_t mean_outer_diameter, fastf_t wire_diameter, fastf_t helix_angle, fastf_t pitch, fastf_t starting_pitch, int is_start, int *need_subtraction) { fastf_t pipe_bend, coil_radius; - point_t origin, height, pnt1, pnt2, pnt4, pnt6, pnt8; + point_t pnt1, pnt2, pnt4, pnt6, pnt8; + struct bu_vls str; bu_vls_init(&str); coil_radius = mean_outer_diameter/2 - wire_diameter/2; pipe_bend = coil_radius; - + + *need_subtraction += 0; + if (is_start == 1) { VSET(pnt1, 0, -coil_radius, starting_pitch - sin(D2R(helix_angle))*coil_radius); VSET(pnt2, coil_radius , -coil_radius, starting_pitch - sin(D2R(helix_angle))*coil_radius); @@ -90,7 +93,7 @@ return 0; } -fastf_t cap_squared_ground(struct rt_wdb *file, struct bu_list *head, char *prefix, struct wmember *coil_subtractions, fastf_t mean_outer_diameter, fastf_t wire_diameter, fastf_t helix_angle, fastf_t pitch, fastf_t starting_pitch, int is_start) +fastf_t cap_squared_ground(struct rt_wdb *file, struct bu_list *head, char *prefix, struct wmember *coil_subtractions, fastf_t mean_outer_diameter, fastf_t wire_diameter, fastf_t helix_angle, fastf_t pitch, fastf_t starting_pitch, int is_start, int *need_subtraction) { fastf_t pipe_bend, coil_radius; point_t origin, height, pnt1, pnt2, pnt4, pnt6, pnt8, pnt10; @@ -99,7 +102,9 @@ bu_vls_init(&str); coil_radius = mean_outer_diameter/2 - wire_diameter/2; - pipe_bend = coil_radius; + pipe_bend = coil_radius; + + *need_subtraction += 1; if (is_start == 1) { VSET(pnt1, -coil_radius, 0, starting_pitch - sin(D2R(helix_angle))*coil_radius - pitch/4); @@ -146,9 +151,8 @@ return 0; } -fastf_t cap_ground(struct rt_wdb *file, struct bu_list *head, char *prefix, struct wmember *coil_subtractions, fastf_t mean_outer_diameter, fastf_t wire_diameter, fastf_t helix_angle, fastf_t pitch, fastf_t starting_pitch, int is_start) +fastf_t cap_ground(struct rt_wdb *file, struct bu_list *head, char *prefix, struct wmember *coil_subtractions, fastf_t mean_outer_diameter, fastf_t wire_diameter, fastf_t helix_angle, fastf_t pitch, fastf_t starting_pitch, int is_start, int *need_subtraction) { - int i; fastf_t coil_radius, pipe_bend; point_t origin, height, pnt1, pnt2, pnt4, pnt6, pnt8; @@ -157,6 +161,8 @@ struct bu_vls str; bu_vls_init(&str); + + *need_subtraction += 1; if (is_start == 1) { VSET(pnt1, 0, -coil_radius, starting_pitch); @@ -169,8 +175,8 @@ mk_add_pipe_pt(head, pnt4, wire_diameter, 0.0, pipe_bend); mk_add_pipe_pt(head, pnt6, wire_diameter, 0.0, pipe_bend); mk_add_pipe_pt(head, pnt8, wire_diameter, 0.0, pipe_bend); - VSET(origin, 0, 0, starting_pitch - sin(D2R(helix_angle))*coil_radius); - VSET(height, 0, 0, -wire_diameter); + VSET(origin, 0, 0, starting_pitch); + VSET(height, 0, 0, -wire_diameter - sin(D2R(helix_angle))*coil_radius); bu_vls_trunc(&str, 0); bu_vls_printf(&str, "%s-startcap.s", prefix); mk_rcc(file, bu_vls_addr(&str), origin, height, coil_radius+wire_diameter+.1*wire_diameter); @@ -187,8 +193,8 @@ mk_add_pipe_pt(head, pnt6, wire_diameter, 0.0, pipe_bend); mk_add_pipe_pt(head, pnt8, wire_diameter, 0.0, pipe_bend); mk_add_pipe_pt(head, pnt1, wire_diameter, 0.0, pipe_bend); - VSET(origin, 0, 0, starting_pitch + pitch + sin(D2R(helix_angle))*coil_radius); - VSET(height, 0, 0, wire_diameter); + VSET(origin, 0, 0, starting_pitch + pitch); + VSET(height, 0, 0, wire_diameter + sin(D2R(helix_angle))*coil_radius); bu_vls_trunc(&str, 0); bu_vls_printf(&str, "%s-endcap.s", prefix); mk_rcc(file, bu_vls_addr(&str), origin, height, coil_radius+wire_diameter+.1*wire_diameter); @@ -205,14 +211,14 @@ { int i; fastf_t coil_radius, pipe_bend; - point_t pnt1, pnt2, pnt4, pnt6, pnt8, endpt; + point_t pnt1, pnt2, pnt4, pnt6, pnt8; coil_radius = mean_outer_diameter/2 - wire_diameter/2; pipe_bend = coil_radius; /* If requested, take care of first point */ - if (do_1st_pt != 0) { - VSET(pnt1, 0, -coil_radius, i*pitch+starting_pitch); + if (do_1st_pt == 0) { + VSET(pnt1, 0, -coil_radius, starting_pitch); mk_add_pipe_pt(head, pnt1, wire_diameter, 0.0, pipe_bend); } @@ -229,7 +235,7 @@ } /* If requested, take care of last point */ - if (do_last_pt != 0) { + if (do_last_pt == 0) { VSET(pnt1, 0 , -coil_radius, nt*pitch+starting_pitch); mk_add_pipe_pt(head, pnt1, wire_diameter, 0.0, pipe_bend); return nt*pitch+starting_pitch; @@ -244,7 +250,7 @@ struct bu_list head; mk_pipe_init(&head); fastf_t last_pitch_pt; - + int need_subtractions = 0; struct wmember coil; BU_LIST_INIT(&coil.l); struct wmember coil_subtractions; @@ -252,23 +258,52 @@ struct bu_vls str; bu_vls_init(&str); + + last_pitch_pt = 0; - last_pitch_pt = 0; - last_pitch_pt = cap_ground(file, &head, prefix, &coil_subtractions, mean_outer_diameter, wire_diameter, helix_angle, pitch, 0, 1); - last_pitch_pt = helical_coil_plain(&head, &coil_subtractions, mean_outer_diameter, wire_diameter, helix_angle, pitch, last_pitch_pt, nt, 0, 0); - last_pitch_pt = cap_ground(file, &head, prefix, &coil_subtractions, mean_outer_diameter, wire_diameter, helix_angle, pitch, last_pitch_pt, 0); + switch (start_cap_type) { + case 1: + last_pitch_pt = cap_squared(file, &head, prefix, &coil_subtractions, mean_outer_diameter, wire_diameter, helix_angle, pitch, 0, 1, &need_subtractions); + break; + case 2: + last_pitch_pt = cap_ground(file, &head, prefix, &coil_subtractions, mean_outer_diameter, wire_diameter, helix_angle, pitch, 0, 1, &need_subtractions); + break; + case 3: + last_pitch_pt = cap_squared_ground(file, &head, prefix, &coil_subtractions, mean_outer_diameter, wire_diameter, helix_angle, pitch, 0, 1, &need_subtractions); + break; + default: + break; + } + + last_pitch_pt = helical_coil_plain(&head, &coil_subtractions, mean_outer_diameter, wire_diameter, helix_angle, pitch, last_pitch_pt, nt, start_cap_type, end_cap_type); + + switch (end_cap_type) { + case 1: + last_pitch_pt = cap_squared(file, &head, prefix, &coil_subtractions, mean_outer_diameter, wire_diameter, helix_angle, pitch, last_pitch_pt, 0, &need_subtractions); + break; + case 2: + last_pitch_pt = cap_ground(file, &head, prefix, &coil_subtractions, mean_outer_diameter, wire_diameter, helix_angle, pitch, last_pitch_pt, 0, &need_subtractions); + break; + case 3: + last_pitch_pt = cap_squared_ground(file, &head, prefix, &coil_subtractions, mean_outer_diameter, wire_diameter, helix_angle, pitch, last_pitch_pt, 0, &need_subtractions); + break; + default: + break; + } bu_vls_trunc(&str,0); bu_vls_printf(&str, "%s_core.s", prefix); mk_pipe(file, bu_vls_addr(&str), &head); (void)mk_addmember(bu_vls_addr(&str), &coil.l, NULL, WMOP_UNION); - + + if (need_subtractions > 0) { bu_vls_trunc(&str,0); bu_vls_printf(&str, "%s_subtractions.c", prefix); mk_lcomb(file, bu_vls_addr(&str), &coil_subtractions, 0, NULL, NULL, NULL, 0); (void)mk_addmember(bu_vls_addr(&str), &coil.l, NULL, WMOP_SUBTRACT); - + } + mk_lcomb(file, prefix, &coil, 0, NULL, NULL, NULL, 0); mk_pipe_free(&head); @@ -335,7 +370,6 @@ fastf_t helix_angle, pitch; int nt; /* Number of turns */ - fastf_t coil_index; int start_cap_type, end_cap_type; struct coil_data_t *coil_data = (struct coil_data_t *) @@ -393,7 +427,7 @@ /* Generate Name */ bu_vls_printf(&coil_type, "hc"); - bu_vls_printf(&name, "coil_%s_%.1f_%.1f_%.1f_%.1f_%d", bu_vls_addr(&coil_type), mean_outer_diameter, coil_index, helix_angle, pitch, nt); + bu_vls_printf(&name, "coil_%s_%.1f_%.1f_%.1f_%.1f_%d", bu_vls_addr(&coil_type), mean_outer_diameter, wire_diameter, helix_angle, pitch, nt); /* Create file name if supplied, else use "string.g" */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |