/********************************************************** Routines to resize primitives by mx, my, mz (used for user defined primitive types). The routines must also scale the position vector by that amount. The scale factors are passed in as a vector (mult). **********************************************************/ #include "qrt.h" /* #define RESIZEDEBUG TRUE */ /********************************************************** Resizes sphere. If !(mult.x==mult.y==mult.z) will resize by smallest amount. **********************************************************/ Resize_Sphere(obj,mult) OBJ_PTR obj; VECT_PTR mult; { float size; # ifdef ROBUST if (obj->type!=SPHERE) Error(INTERNAL_ERROR,1401); # endif size = MIN(MIN(mult->x,mult->y),mult->z); VectorMult(&(obj->loc),&(obj->loc),mult); obj->vect1.x *= size; # ifdef RESIZEDEBUG printf("RESIZESPHERE: newloc = %f %f %f\n", obj->loc.x, obj->loc.y, obj->loc.z); printf(" new rad = %f\n",obj->vect1.x); # endif } /********************************************************** Resizes Planar object **********************************************************/ Resize_Plane(obj,mult) OBJ_PTR obj; VECT_PTR mult; { float size; # ifdef ROBUST if (!((obj->type != PARALLELOGRAM) || (obj->type != TRIANGLE) || (obj->type != RING))) Error(INTERNAL_ERROR,1402); # endif size = MIN(MIN(mult->x,mult->y),mult->z); VectorMult(&(obj->vect1),&(obj->vect1),mult); VectorMult(&(obj->vect2),&(obj->vect2),mult); VectorMult(&(obj->loc), &(obj->loc), mult); obj->vect3.x *= size; /* for ring */ obj->vect3.y *= size; # ifdef RESIZEDEBUG printf("RESIZEPLANE: newloc = %f %f %f\n", obj->loc.x, obj->loc.y, obj->loc.z); # endif } /********************************************************** Resizes Quadratic object **********************************************************/ Resize_Quadratic(obj,mult) OBJ_PTR obj; float mult; { # ifdef ROBUST if (obj->type!=QUADRATIC) Error(INTERNAL_ERROR,1403); # endif VectorMult(&(obj->upper),&(obj->upper),mult); VectorMult(&(obj->lower),&(obj->lower),mult); VectorMult(&(obj->loc), &(obj->loc), mult); # ifdef RESIZEDEBUG printf("RESIZEQUAD: newloc = %f %f %f\n", obj->loc.x, obj->loc.y, obj->loc.z); # endif } /********************************************************** Resizes Bbox - doesn't actually do anything, since bbox values are filled after the tree is created. **********************************************************/ Resize_Bbox(obj,mult) OBJ_PTR obj; VECT_PTR mult; { # ifdef ROBUST if (obj->type!=BBOX) Error(INTERNAL_ERROR,1404); # endif # ifdef RESIZEDEBUG printf("RESIZEBBOX:\n"); # endif }