You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.2 KiB
105 lines
3.2 KiB
2 years ago
|
C Copyright(C) 1999-2020 National Technology & Engineering Solutions
|
||
|
C of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
|
||
|
C NTESS, the U.S. Government retains certain rights in this software.
|
||
|
C
|
||
|
C See packages/seacas/LICENSE for details
|
||
|
|
||
|
C=======================================================================
|
||
|
INTEGER FUNCTION NZAWAY (NLNKF, LINKF1, XN, YN, ZN, HIDENP)
|
||
|
C=======================================================================
|
||
|
|
||
|
C --*** NZAWAY *** (MESH) Determine if warped face is hidden
|
||
|
C -- Written by Amy Gilkey - revised 05/02/88
|
||
|
C --
|
||
|
C --NZAWAY determines how many nodes of a possible warped face
|
||
|
C --on a 3D surface are hidden. A node is hidden if and only if the
|
||
|
C --outward normal formed by the node and the two adjacent nodes points
|
||
|
C --"into" the plotting surface. The nodes are marked as visible if
|
||
|
C --they point away from the plotting surface.
|
||
|
C --
|
||
|
C --Parameters:
|
||
|
C -- NLNKF - IN - the number of nodes per face
|
||
|
C -- LINKF1 - IN - the connectivity for the face
|
||
|
C -- XN, YN, ZN - IN - the nodal coordinates; the Z-coordinate is
|
||
|
C -- pointing towards the viewer (out of the plotting plane)
|
||
|
C -- HIDENP - IN/OUT - node status (as in HIDDEN)
|
||
|
|
||
|
PARAMETER (KNVIS=0, KNFOVR=10, KNHID=100)
|
||
|
|
||
|
common /debugc/ cdebug
|
||
|
common /debugn/ idebug
|
||
|
character*8 cdebug
|
||
|
|
||
|
INTEGER LINKF1(NLNKF)
|
||
|
REAL XN(*), YN(*), ZN(*)
|
||
|
INTEGER HIDENP(*)
|
||
|
|
||
|
NZAWAY = 0
|
||
|
IMID = LINKF1(3)
|
||
|
IRGT = LINKF1(4)
|
||
|
AX = XN(IRGT) - XN(IMID)
|
||
|
AY = YN(IRGT) - YN(IMID)
|
||
|
IF ((AX .NE. 0.0) .OR. (AY .NE. 0.0)) THEN
|
||
|
ISAME = 0
|
||
|
ELSE
|
||
|
IMID = LINKF1(2)
|
||
|
IRGT = LINKF1(3)
|
||
|
BX = XN(IRGT) - XN(IMID)
|
||
|
BY = YN(IRGT) - YN(IMID)
|
||
|
IMID = LINKF1(3)
|
||
|
IRGT = LINKF1(4)
|
||
|
ISAME = IMID
|
||
|
END IF
|
||
|
|
||
|
DO 100 ILINK = 1, 4
|
||
|
IMID = IRGT
|
||
|
IRGT = LINKF1(ILINK)
|
||
|
|
||
|
C --Form X and Y components of corner of face
|
||
|
|
||
|
IF (ISAME .EQ. 0) THEN
|
||
|
BX = -AX
|
||
|
BY = -AY
|
||
|
END IF
|
||
|
AX = XN(IRGT) - XN(IMID)
|
||
|
AY = YN(IRGT) - YN(IMID)
|
||
|
|
||
|
C --Form Z component of normal vector to corner, and make node
|
||
|
C --visible if normal points forward
|
||
|
|
||
|
IF ((AX .NE. 0.0) .OR. (AY .NE. 0.0)) THEN
|
||
|
IF (AX*BY .LE. BX*AY) THEN
|
||
|
NZAWAY = NZAWAY + 1
|
||
|
IF (ISAME .NE. 0) NZAWAY = NZAWAY + 1
|
||
|
ELSE
|
||
|
IXRGT = ILINK
|
||
|
HIDENP(IMID) = KNVIS
|
||
|
IF (ISAME .NE. 0) HIDENP(ISAME) = KNVIS
|
||
|
END IF
|
||
|
ISAME = 0
|
||
|
ELSE
|
||
|
ISAME = IMID
|
||
|
END IF
|
||
|
100 CONTINUE
|
||
|
|
||
|
IF (NZAWAY .EQ. 1) THEN
|
||
|
|
||
|
C --If single node visible, make two adjoining nodes visible
|
||
|
|
||
|
IF (IXRGT .GT. 2) THEN
|
||
|
IXLFT = IXRGT - 2
|
||
|
ELSE
|
||
|
IXLFT = IXRGT + 2
|
||
|
END IF
|
||
|
HIDENP(LINKF1(IXLFT)) = KNVIS
|
||
|
HIDENP(LINKF1(IXRGT)) = KNVIS
|
||
|
END IF
|
||
|
|
||
|
if ((nzaway .ne. 4) .and. (nzaway .ne. 0)) then
|
||
|
if ((cdebug .eq. 'HIDDEN') .and. (idebug .ge. 2))
|
||
|
& write (*, '(1x,a,i5,2x,4i5)') 'warped', nzaway, linkf1
|
||
|
end if
|
||
|
|
||
|
RETURN
|
||
|
END
|