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.
108 lines
3.3 KiB
108 lines
3.3 KiB
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=======================================================================
|
|
SUBROUTINE IDEDGE (IEDSET, NEDGES, HIDENP, LINSET, LENL, IXLIN,
|
|
* MREF, LREF)
|
|
C=======================================================================
|
|
|
|
C --*** IDEDGE *** (MESH) Identify 3D lines on edge of visible mesh
|
|
C -- Written by Amy Gilkey - revised 10/02/86
|
|
C --
|
|
C --IDEDGE finds edges from IEDSET in the line set and marks them as
|
|
C --"must draw" with a -n in LINSET(3,x).
|
|
C --
|
|
C --Parameters:
|
|
C -- IEDSET - IN - the edge line set;
|
|
C -- (0) = face defining edge; 0 to delete edge
|
|
C -- NEDGES - IN - the number of lines in the edge set
|
|
C -- HIDENP - IN/OUT - node status (as in HIDDEN)
|
|
C -- LINSET - IN/OUT - the sorted line set
|
|
C -- LENL - IN - the length of the line set
|
|
C -- IXLIN - SCRATCH - index line set to be searched, length = LENL
|
|
|
|
PARAMETER (KNVIS=0, KNFOVR=10, KNHID=100)
|
|
|
|
common /debugc/ cdebug
|
|
common /debugn/ idebug
|
|
character*8 cdebug
|
|
|
|
COMMON /D3NUMS/ IS3DIM, NNPSUR, NUMNPF, LLNSET
|
|
LOGICAL IS3DIM
|
|
|
|
INTEGER IEDSET(0:2,*)
|
|
INTEGER HIDENP(*)
|
|
INTEGER LINSET(LLNSET,*)
|
|
INTEGER IXLIN(*)
|
|
INTEGER MREF(*), LREF(*)
|
|
|
|
C --Get indices of line set to search and order line set nodes
|
|
|
|
LENIX = 0
|
|
DO 100 IL = 1, LENL
|
|
IF (LINSET(3,IL) .GE. 1) THEN
|
|
LENIX = LENIX + 1
|
|
IXLIN(LENIX) = IL
|
|
IF (LINSET(3,IL) .EQ. 1) THEN
|
|
IF (LINSET(1,IL) .GT. LINSET(2,IL)) THEN
|
|
IF (HIDENP(LINSET(1,IL)) .GT. KNVIS) THEN
|
|
I = LINSET(1,IL)
|
|
LINSET(1,IL) = LINSET(2,IL)
|
|
LINSET(2,IL) = I
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
100 CONTINUE
|
|
|
|
C ... For each node, mref is first linset edge referencing that node
|
|
C lref is last linset edge referencing that node
|
|
call iniint(numnpf, 0, mref)
|
|
call iniint(numnpf, 0, lref)
|
|
DO IX=LENIX, 1, -1
|
|
IL = IXLIN(IX)
|
|
MREF(LINSET(1,IL)) = IX
|
|
MREF(LINSET(2,IL)) = IX
|
|
END DO
|
|
DO IX=1,LENIX
|
|
IL = IXLIN(IX)
|
|
LREF(LINSET(1,IL)) = IX
|
|
LREF(LINSET(2,IL)) = IX
|
|
END DO
|
|
|
|
DO 130 IEDG = 1, NEDGES
|
|
IF (IEDSET(0,IEDG) .EQ. 0) GOTO 130
|
|
|
|
C --Make sure edge set is still ordered (some nodes may have become
|
|
C --visible)
|
|
|
|
N1 = IEDSET(1,IEDG)
|
|
N2 = IEDSET(2,IEDG)
|
|
IF (N1 .GT. N2) THEN
|
|
IF (HIDENP(N1) .GT. KNVIS) THEN
|
|
I = N1
|
|
N1 = N2
|
|
N2 = I
|
|
END IF
|
|
END IF
|
|
|
|
C --Find edge in ordered line set
|
|
|
|
imax = min(lref(n1), lref(n2), lenix)
|
|
imin = max(mref(n1), mref(n2), 1)
|
|
DO 110 IX = imin, imax
|
|
IL = IXLIN(IX)
|
|
IF (LINSET(1,IL) .EQ. N1 .and.
|
|
* LINSET(2,IL) .EQ. N2) THEN
|
|
C --Mark line set as an edge
|
|
LINSET(3,IL) = - LINSET(3,IL)
|
|
GO TO 130
|
|
END IF
|
|
110 CONTINUE
|
|
130 CONTINUE
|
|
|
|
RETURN
|
|
END
|
|
|