[brlcad-commits] SF.net SVN: brlcad: [31635] brlcad/trunk/src/librt/primitives/revolve/ revolve.c
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <pac...@us...> - 2008-06-26 22:35:00
|
Revision: 31635 http://brlcad.svn.sourceforge.net/brlcad/?rev=31635&view=rev Author: pacman87 Date: 2008-06-26 15:35:10 -0700 (Thu, 26 Jun 2008) Log Message: ----------- more work on revolve's norm() Modified Paths: -------------- brlcad/trunk/src/librt/primitives/revolve/revolve.c Modified: brlcad/trunk/src/librt/primitives/revolve/revolve.c =================================================================== --- brlcad/trunk/src/librt/primitives/revolve/revolve.c 2008-06-26 20:52:29 UTC (rev 31634) +++ brlcad/trunk/src/librt/primitives/revolve/revolve.c 2008-06-26 22:35:10 UTC (rev 31635) @@ -444,18 +444,13 @@ (struct revolve_specific *)stp->st_specific; vect_t n, nT; - /* currently only does normal component in x-y plane */ -/* VJOIN1( n, rp->r_pt, hitp->hit_dist, rp->r_dir ); - VSUB2( hitp->hit_normal, n, rev->v3d ); - VUNITIZE( hitp->hit_normal ); -*/ - /* bu_log("\t%5.2f\n", - sqrt( hitp->hit_vpriv[X]*hitp->hit_vpriv[X] + - hitp->hit_vpriv[Y]*hitp->hit_vpriv[Y] ) ); -*/ VSET( n, hitp->hit_vpriv[X], hitp->hit_vpriv[Y], 0 ); n[Z] = MAGNITUDE( n ) * hitp->hit_vpriv[Z]; + if ( NEAR_ZERO( 1.0/hitp->hit_vpriv[Z], SMALL_FASTF ) ) { + VSET( n, 0, 0, 1 ); + } + nT[X] = ( rev->xUnit[X] * n[X] ) + ( rev->yUnit[X] * n[Y] ) + ( rev->zUnit[X] * n[Z] ); @@ -466,10 +461,11 @@ + ( rev->yUnit[Z] * n[Y] ) + ( rev->zUnit[Z] * n[Z] ); VUNITIZE( nT ); - VMOVE( hitp->hit_normal, nT ); - -/* VREVERSE( hitp->hit_normal, rp->r_dir ); -*/ + if ( VDOT( nT, rp->r_dir) < 0 ) { + VMOVE( hitp->hit_normal, nT ); + } else { + VREVERSE( hitp->hit_normal, nT ); + } } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |