[brlcad-commits] CVS: brlcad/src/librt g_metaball.c,14.9,14.10
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: Erik G. <eri...@us...> - 2006-08-02 20:59:18
|
Update of /cvsroot/brlcad/brlcad/src/librt In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv17673 Modified Files: g_metaball.c Log Message: Implemented rt_metaball_class. Fixed a_onehit handling in rt_metaball_shot. Index: g_metaball.c =================================================================== RCS file: /cvsroot/brlcad/brlcad/src/librt/g_metaball.c,v retrieving revision 14.9 retrieving revision 14.10 diff -w -u -r14.9 -r14.10 --- g_metaball.c 1 Aug 2006 20:51:00 -0000 14.9 +++ g_metaball.c 2 Aug 2006 20:59:15 -0000 14.10 @@ -162,7 +162,7 @@ { struct rt_metaball_internal *mb; point_t p, inc; - int stat=0, retval = 0; + int stat=0, retval = 0, segsleft = abs(ap->a_onehit); register struct seg *segp = NULL; fastf_t initstep = stp->st_bradius / 20, finalstep = stp->st_bradius / 10000000000.0; fastf_t step = initstep; @@ -181,6 +181,9 @@ VSUB2(delta, p, rp->r_pt); segp->seg_out.hit_dist = sqrt(MAGSQ(delta)); BU_LIST_INSERT( &(seghead->l), &(segp->l) ); + --segsleft; + if(!segsleft) + break; retval = 2; continue; } else { @@ -194,11 +197,14 @@ if(rt_metaball_point_value(&p, &mb->metaball_pt_head) > mb->threshhold ) { if(step<=finalstep) { point_t delta; + + --segsleft; VSUB2(delta, p, rp->r_pt); RT_GET_SEG(segp, ap->a_resource); segp->seg_stp = stp; segp->seg_in.hit_dist = sqrt(MAGSQ(delta)); - if(ap->a_onehit){ /* exit now if we're one-hit (like visual rendering) */ + if(!segsleft){ /* exit now if we're one-hit (like visual rendering) */ + segp->seg_out.hit_dist = segp->seg_in.hit_dist + .1; /* cope with silliness */ BU_LIST_INSERT( &(seghead->l), &(segp->l) ); return 2; } @@ -288,11 +294,11 @@ } +/* I have no clue what this function is supposed to do */ int rt_metaball_class(void) { - bu_log("rt_metaball_class called\n"); - return 0; + return RT_CLASSIFY_UNIMPLEMENTED; /* "assume the worst" */ } /** |