´VVUDMV´ is the name given to the default version of the masked vector drawing routine, and it is also
the name given to the argument through which the external subroutine is passed to VVECTR. However, you
may choose any acceptable FORTRAN identifier as the name of a user-defined version of the routine. The
substitute routine must have an argument list equivalent to the default version of VVUDMV. Also, whether
or not the default version is used, the subroutine that calls VVECTR should contain an external
declaration of the routine similar to the following:
EXTERNAL VVUDMV
If the MSK parameter is set to the value 1, specifying high precision masking, Vectors sends one set of X
and Y polyline coordinate arrays to the area masking routine, ARDRLN, for each vector arrow. ARDRLN
subdivides the polyline into pieces such that each smaller polyline has a single area identifier with
respect to each area identifier group, then makes a call to VVUDMV for each polyline piece. While the
default version of VVUDMV only checks to see that none of the area identifiers are negative, a user-
defined version could perform more complicated decision processing based on knowledge of the meaning of
specific area identifier groups and/or area identifier values. Note that, before invoking VVUDMV, ARDRLN
modifies the user coordinate space by making the following calls:
CALL GETSET(VPL,VPR,VPB,VPT,WDL,WDR,WDB,WDT,LLG) CALL SET(VPL,VPR,VPB,VPT,VPL,VPR,VPB,VPT,1)
These calls temporarily turn the user to NDC mapping into an identity, allowing the user to call any of
the routines, CURVE, CURVED, or the GKS routine GPL, to render the polygon piece , without worrying about
a possible non-identity mapping between user and world coordinates.
If MSK has a value greater than 1, specifying low precision masking, Vectors calls the routine ARGTAI to
get the area identifiers with respect to the area identifier groups for a single point that locates the
base position of the vector. Vectors then calls the VVUDMV routine itself, passing the coordinate arrays
for a complete vector arrow. Thus, a vector arrow whose base position is within an area to be masked can
be eliminated, but an arrow whose base position is nearby, but outside, a masked area may intrude into
the area. Also, in this case, since faster rendering is the goal, Vectors does not convert the coordinate
arrays into normalized device coordinates and do the identity SET call. Therefore, the user should use
only CURVE or CURVED to render the polyline, unless there is no possibility of a non-identity user to
world coordinate mapping.
The current version of Vectors supports masked drawing with up to 64 area groups. Vectors will exit with
an error message if an area map with more than 64 groups is passed to it.