Previous: hidcs Up: ../plot79_h.html Next: hiddo
SUBROUTINE HIDCV (Z0, Z1,ZE,Z2, MX,MY, NX,NY, LX,LY, S, X SOUTH, EAST, TOP, TILT, INTERP, PL2) C$ (Corner View) C$ Make a hidden-line drawing of a surface defined in C$ cartesian coordinates on a uniform grid. A rather fast C$ algorithm is used to provide orthographic views from any of C$ the four corners, with optional tilt of the surface. C$ C$ Z0......Cutoff value. Only function values, ZE(I,J), above C$ (S .GT. 0.0) or below (S .LT. 0) Z0 are visible. C$ ZE......Array containing the surface. ZE(I,J) = C$ F(X(I),Y(J)), where X(I) = (I-1)*DX and Y(J) = C$ (J-1)*DY both map onto the interval 0..1. C$ Z1,Z2...Span of surface values. C$ MX,MY...Actual declared dimensions of the array ZE(*,*). C$ NX,NY...Sections of ZE(*,*) actually used. C$ LX,LY...Increments in X and Y directions (.GT. 0). Values C$ of LX and LY larger than 1 produce a coarser mesh C$ on the drawing without losing the smoothness of the C$ complete surface. LX should be an integral divisor C$ of NX-1, and LY of NY-1. If this is not the case, C$ the next smallest value which satisfies this C$ requirement is used internally. At present, LX and C$ LY will be adjusted internally to be of equal size. C$ S.......=+1.0, graph positive part of function, C$ =-1.0, graph negative part of function, C$ = 0.0, graph both positive and negative parts. C$ If S = 0.0, the cutoff value Z0 has no effect. C$ SOUTH... .TRUE. - view from southern edge. C$ .FALSE. - view from northern edge. C$ EAST.... .TRUE. - view from eastern edge. C$ .FALSE. - view from western edge. C$ TOP..... .TRUE. - show top of surface. C$ .FALSE. - show bottom of surface. C$ This routine should be called twice, once with each C$ value of top. This allows changing colors between C$ calls to help distinguish the sides. C$ TILT....Angle of tilt in degrees. TILT is positive C$ counterclockwise looking down the horizontal axis C$ to the origin. Thus TILT=0.0 corresponds to an C$ overhead view looking down the positive Z axis C$ toward the origin, and gives a totally C$ uninteresting display of the X-Y grid. Negative C$ TILT angles tip the top part of the rotated surface C$ away from the observer around the horizontal axis. C$ TILT=-90.0 corresponds to an edge-on view of the C$ surface. Recommended values are in the range C$ -20..-70. C$ INTERP.. .TRUE. - Interpolate function values using C$ bivariate surface interpolation. C$ .FALSE. - Interpolate function values using C$ simple linear interpolation. This C$ is the fastest way, and is usually C$ adequate for grids larger than about C$ 50 by 50. C$ PL2.....2-D pen movement subroutine C$ C$ The algorithm used here is described by C$ C$ J. Butland, "Surface Drawing Made Simple", Computer Aided C$ Design, Vol. 11, No. 1 (January, 1979). C$ C$ It was discovered and implemented several years earlier at C$ the Bettis Atomic Power Laboratory (pre-1971), and then C$ improved and rewritten by John Halleck at the University of C$ Utah, and the SAFRAS program, as it is called, has received C$ extensive use at the University of Utah Computing Center. C$ The outline sketch idea implemented in this routine appears C$ to be original with J. Butland, however. The C$ Bettis/Halleck version differs from Butland's in that C$ horizons are computed in left-to-right sweeps, rather than C$ in vertical strips, which necessitates substantially larger C$ horizon work areas, but economizes greatly in pen movement. C$ Butland's algorithm incorporates cubic spline C$ interpolation, while the Bettis/Halleck version uses linear C$ interpolation. Provided that a sufficiently dense function C$ grid is available, the difference in quality is not great. C$ C$ Because the scan proceeds in strips from front to back, the C$ Butland algorithm implemented here requires a substantial C$ amount of pen movement, since the pen must be lifted and C$ moved from back to front for each stip. It is therefore C$ not recommended for use on incremental pen plotters, but C$ will perform quite satisfactorily on CRT and dot-matrix C$ displays. C$ C$ (04-FEB-82)