void BicubicPatch::Transform(const TRANSFORM *tr) { int i, j; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { MTransPoint(Control_Points[i][j], Control_Points[i][j], tr); } } Precompute_Patch_Values(); Compute_BBox(); }
void BicubicPatch::Scale(const Vector3d& Vector, const TRANSFORM *) { int i, j; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { Control_Points[i][j] *= Vector; } } Precompute_Patch_Values(); Compute_BBox(); }
static void Transform_Bicubic_Patch(OBJECT *Object, TRANSFORM *Trans) { int i, j; BICUBIC_PATCH *Patch = (BICUBIC_PATCH *) Object; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { MTransPoint(Patch->Control_Points[i][j], Patch->Control_Points[i][j], Trans); } } Precompute_Patch_Values(Patch); Compute_Bicubic_Patch_BBox(Patch); }
static void Scale_Bicubic_Patch(OBJECT *Object, VECTOR Vector, TRANSFORM *) { int i, j; BICUBIC_PATCH *Patch = (BICUBIC_PATCH *) Object; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { VEvaluate(Patch->Control_Points[i][j], Patch->Control_Points[i][j], Vector); } } Precompute_Patch_Values(Patch); Compute_Bicubic_Patch_BBox(Patch); }
static BICUBIC_PATCH *Copy_Bicubic_Patch(OBJECT *Object) { int i, j; BICUBIC_PATCH *New; int m, h; New = Create_Bicubic_Patch(); /* Do not do *New = *Old so that Precompute works right */ New->Ph_Density = Object->Ph_Density; New->Patch_Type = ((BICUBIC_PATCH *)Object)->Patch_Type; New->U_Steps = ((BICUBIC_PATCH *)Object)->U_Steps; New->V_Steps = ((BICUBIC_PATCH *)Object)->V_Steps; if ( ((BICUBIC_PATCH *)Object)->Weights != NULL ) { New->Weights = (WEIGHTS *)POV_MALLOC( sizeof(WEIGHTS),"bicubic patch" ); POV_MEMCPY( New->Weights, (((BICUBIC_PATCH *)Object)->Weights), sizeof(WEIGHTS) ); } for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { Assign_Vector(New->Control_Points[i][j], ((BICUBIC_PATCH *)Object)->Control_Points[i][j]); } } New->Flatness_Value = ((BICUBIC_PATCH *)Object)->Flatness_Value; Precompute_Patch_Values(New); /* copy the mapping */ for (m = 0; m < 4; m++) { for (h = 0; h < 3; h++) { New->ST[m][h] = ((BICUBIC_PATCH *)Object)->ST[m][h]; } } return (New); }