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.
91 lines
3.0 KiB
91 lines
3.0 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 INPICK (TYPE)
|
|
C=======================================================================
|
|
|
|
C --*** INPICK *** (MESH) Initialize cursor input for last display
|
|
C -- Written by Amy Gilkey - revised 03/07/88
|
|
C --
|
|
C --INPICK saves the displayed mesh characteristics for cursor input
|
|
C --in common /PICK/. This routine should be called after the last
|
|
C --mesh display before any cursor input.
|
|
C --
|
|
C --Parameters:
|
|
C -- TYPE - IN - the type of mesh last displayed (determines which
|
|
C -- coordinates arrays to use):
|
|
C -- 'DEFORM' - deformed mesh (or any 3D mesh)
|
|
C -- 'UNDEFORM' - undeformed mesh
|
|
C -- 'NONE' - no mesh displayed
|
|
C --
|
|
C --Common Variables:
|
|
C -- Sets /PICK/
|
|
C -- Uses IS3DIM of /D3NUMS/
|
|
C -- Uses ZMMESH of /MSHLIM/
|
|
C -- Uses ROTMAT, ROTCEN of /ROTOPT/
|
|
|
|
PARAMETER (KLFT=1, KRGT=2, KBOT=3, KTOP=4, KNEA=5, KFAR=6)
|
|
|
|
COMMON /PICK/ INITP, PKDEF,
|
|
& PKMESH(KTOP), PKRMAT(3,3), PKRCEN(3),
|
|
& DMESH(KTOP), DVRAT, DXMID, DYMID, DXLAST, DYLAST
|
|
LOGICAL INITP, PKDEF
|
|
|
|
COMMON /D3NUMS/ IS3DIM, NNPSUR, NUMNPF, LLNSET
|
|
LOGICAL IS3DIM
|
|
COMMON /MSHLIM/ UNMESH(KFAR), ALMESH(KFAR),
|
|
& ZMMESH(KTOP), RDMESH(KTOP), TICMSH, SQMESH
|
|
LOGICAL SQMESH
|
|
COMMON /ROTOPT/ NEWROT, ROTMAT(3,3), ROTCEN(3), EYE(3)
|
|
LOGICAL NEWROT
|
|
|
|
CHARACTER*(*) TYPE
|
|
|
|
INITP = .FALSE.
|
|
|
|
IF ((TYPE .EQ. 'DEFORM') .OR. (TYPE .EQ. 'UNDEFORM')) THEN
|
|
|
|
C --Set the pick initialization flag
|
|
INITP = .TRUE.
|
|
PKDEF = (TYPE .EQ. 'DEFORM')
|
|
|
|
C --Save the limits of the displayed mesh
|
|
CALL CPYREA (KTOP, ZMMESH, PKMESH)
|
|
|
|
C --Save the rotation matrix and the rotation center of the displayed mesh
|
|
IF (IS3DIM) THEN
|
|
CALL CPYREA (3*3, ROTMAT, PKRMAT)
|
|
CALL CPYREA (3, ROTCEN, PKRCEN)
|
|
END IF
|
|
|
|
C --Calculate the device coordinates of the limits of the displayed mesh
|
|
CALL MP2PT (1, PKMESH(KLFT), PKMESH(KBOT),
|
|
& DMESH(KLFT), DMESH(KBOT), M)
|
|
CALL MP2PT (1, PKMESH(KRGT), PKMESH(KTOP),
|
|
& DMESH(KRGT), DMESH(KTOP), M)
|
|
|
|
C --Calculate the device to mesh conversion factor
|
|
DVRAT = (PKMESH(KRGT) - PKMESH(KLFT))
|
|
& / (DMESH(KRGT) - DMESH(KLFT))
|
|
|
|
C --Find the device coordinates of the center of the displayed mesh,
|
|
C --for use as the default starting point
|
|
PKXMID = 0.5 * (PKMESH(KRGT) + PKMESH(KLFT))
|
|
PKYMID = 0.5 * (PKMESH(KTOP) + PKMESH(KBOT))
|
|
CALL MP2PT (1, PKXMID, PKYMID, DXMID, DYMID, M)
|
|
|
|
DXLAST = DXMID
|
|
DYLAST = DYMID
|
|
|
|
ELSE
|
|
|
|
C --Reset the pick initialization flag
|
|
INITP = .FALSE.
|
|
END IF
|
|
|
|
RETURN
|
|
END
|
|
|