Reduce size of patch faces


nfv = shrinkfaces(p,sf)
nfv = shrinkfaces(fv,sf)
nfv = shrinkfaces(f,v,sf)
[nf,nv] = shrinkfaces(...)


shrinkfaces(p,sf) shrinks the area of the faces in patch p to shrink factor sf. A shrink factor of 0.6 shrinks each face to 60% of its original area. If the patch contains shared vertices, the MATLAB® software creates nonshared vertices before performing the face-area reduction.

nfv = shrinkfaces(p,sf) returns the face and vertex data in the struct nfv, but does not set the Faces and Vertices properties of patch p.

nfv = shrinkfaces(fv,sf) uses the face and vertex data from the struct fv.

shrinkfaces(p) and shrinkfaces(fv) (without specifying a shrink factor) assume a shrink factor of 0.3.

nfv = shrinkfaces(f,v,sf) uses the face and vertex data from the arrays f and v.

[nf,nv] = shrinkfaces(...) returns the face and vertex data in two separate arrays instead of a struct.


This example uses the flow data set, which represents the speed profile of a submerged jet within an infinite tank (type help flow for more information). Two isosurfaces provide a before and after view of the effects of shrinking the face size.

  • First reducevolume samples the flow data at every other point and then isosurface generates the faces and vertices data.

  • The patch command accepts the face/vertex struct and draws the first (p1) isosurface.

  • Use the daspect, view, and axis commands to set up the view and then add a title.

  • The shrinkfaces command modifies the face/vertex data and passes it directly to patch.

    [x,y,z,v] = flow;
    [x,y,z,v] = reducevolume(x,y,z,v,2);
    fv = isosurface(x,y,z,v,-3);
    p1 = patch(fv);
    p1.FaceColor = 'red';
    p1.EdgeColor = [0.5 0.5 0.5];
    daspect([1 1 1]); 
    axis tight
    p2 = patch(shrinkfaces(fv,.3));
    p2.FaceColor = 'red';
    p2.EdgeColor = [0.5 0.5 0.5];
    daspect([1 1 1]); 
    axis tight
    title('After Shrinking')

Was this topic helpful?