diff --git a/.travis.yml b/.travis.yml index db236986ce..dbf2b13996 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ os: - linux -# - osx + - osx language: c++ @@ -10,8 +10,6 @@ before_install: - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update ; brew outdated cmake || brew upgrade cmake ; fi - cmake --version -before_script: travis_wait - script: - git submodule init - git submodule update diff --git a/CMake/cdat_modules/cmor_pkg.cmake b/CMake/cdat_modules/cmor_pkg.cmake index 35868da825..f08e3c8023 100644 --- a/CMake/cdat_modules/cmor_pkg.cmake +++ b/CMake/cdat_modules/cmor_pkg.cmake @@ -1,5 +1,5 @@ set(CMOR_VERSION 2.9.2) -set(CMOR_BRANCH master) +set(CMOR_BRANCH uvcdat-2.4.0) set(CMOR_REPOSITORY ${GIT_PROTOCOL}github.com/PCMDI/cmor.git ) set(GIT_CMD_STR_CMOR GIT_REPOSITORY ${CMOR_REPOSITORY}) diff --git a/CMake/cdat_modules/cryptography_deps.cmake b/CMake/cdat_modules/cryptography_deps.cmake index a43113d8a9..2f0646a7ca 100644 --- a/CMake/cdat_modules/cryptography_deps.cmake +++ b/CMake/cdat_modules/cryptography_deps.cmake @@ -1 +1 @@ -set(CRYPTOGRAPHY_deps ${python_pkg} ${pip_pkg} ${cffi_pkg}) +set(CRYPTOGRAPHY_deps ${python_pkg} ${pip_pkg} ${cffi_pkg} ${openssl_pkg}) diff --git a/CMake/cdat_modules/cryptography_external.cmake b/CMake/cdat_modules/cryptography_external.cmake index 32ba83518c..9e10cb4bb7 100644 --- a/CMake/cdat_modules/cryptography_external.cmake +++ b/CMake/cdat_modules/cryptography_external.cmake @@ -3,4 +3,10 @@ # and configure and build it set(nm CRYPTOGRAPHY) +# Set LDFlags and CFlags to make it easier to find OpenSSL +list(APPEND USR_ENVS + "LDFLAGS=-L${OPENSSL_LIBRARY_DIR} $ENV{LDFLAGS}" + "CFLAGS=-I${OPENSSL_INCLUDE_DIR} $ENV{CFLAGS}" + ) + include(pipinstaller) diff --git a/CMake/cdat_modules/curses_external.cmake b/CMake/cdat_modules/curses_external.cmake index 318edaa467..2fe0ea547b 100644 --- a/CMake/cdat_modules/curses_external.cmake +++ b/CMake/cdat_modules/curses_external.cmake @@ -2,6 +2,12 @@ set(curses_source "${CMAKE_CURRENT_BINARY_DIR}/build/curses") set(curses_install "${cdat_EXTERNALS}") set(curses_conf_args) +configure_file(${cdat_CMAKE_SOURCE_DIR}/cdat_modules_extra/curses_patch_step.cmake.in + ${cdat_CMAKE_BINARY_DIR}/curses_patch_step.cmake + @ONLY) + +set(curses_PATCH_COMMAND ${CMAKE_COMMAND} -P ${cdat_CMAKE_BINARY_DIR}/curses_patch_step.cmake) + ExternalProject_Add(Curses DOWNLOAD_DIR ${CDAT_PACKAGE_CACHE_DIR} SOURCE_DIR ${curses_source} @@ -9,7 +15,7 @@ ExternalProject_Add(Curses URL ${CURSES_URL}/${CURSES_GZ} URL_MD5 ${CURSES_MD5} BUILD_IN_SOURCE 1 - PATCH_COMMAND "" + PATCH_COMMAND ${curses_PATCH_COMMAND} CONFIGURE_COMMAND ${CMAKE_COMMAND} -DCONFIGURE_ARGS=${curses_conf_args} -DINSTALL_DIR= -DWORKING_DIR= -P ${cdat_CMAKE_BINARY_DIR}/cdat_configure_step.cmake DEPENDS ${curses_deps} ${ep_log_options} diff --git a/CMake/cdat_modules/curses_pkg.cmake b/CMake/cdat_modules/curses_pkg.cmake index 375dc06e75..29b6d52406 100644 --- a/CMake/cdat_modules/curses_pkg.cmake +++ b/CMake/cdat_modules/curses_pkg.cmake @@ -1,13 +1,14 @@ set (package Curses) string(TOUPPER ${package} package_uc) -set(${package_uc}_MAJOR_SRC 5) -set(${package_uc}_MINOR_SRC 9) +set(${package_uc}_MAJOR_SRC 6) +set(${package_uc}_MINOR_SRC 0) set(${package_uc}_PATCH_SRC 0) set(${package_uc}_URL ${LLNL_URL}) #set(${package_uc}_GZ ncurses-${${package_uc}_MAJOR_SRC}.${${package_uc}_MINOR_SRC}.${${package_uc}_PATCH_SRC}.tar.gz) set(${package_uc}_GZ ncurses-${${package_uc}_MAJOR_SRC}.${${package_uc}_MINOR_SRC}.tar.gz) -set(${package_uc}_MD5 8cb9c412e5f2d96bc6f459aa8c6282a1) +set(${pacakge_uc}_MD5 931959c0e1a9949999407b025cf44d3d) +#set(${package_uc}_MD5 8cb9c412e5f2d96bc6f459aa8c6282a1) set(${package_uc}_SOURCE ${${package_uc}_URL}/${${package_uc}_GZ}) set(${package_uc}_MD5 ${${package_uc}_MD5}) diff --git a/CMake/cdat_modules/cycler_deps.cmake b/CMake/cdat_modules/cycler_deps.cmake new file mode 100644 index 0000000000..6c4db45355 --- /dev/null +++ b/CMake/cdat_modules/cycler_deps.cmake @@ -0,0 +1 @@ +set(cycler_deps ${python_pkg} ${setuptools_pkg} ${six_pkg}) diff --git a/CMake/cdat_modules/cycler_external.cmake b/CMake/cdat_modules/cycler_external.cmake new file mode 100644 index 0000000000..5cd06b6e89 --- /dev/null +++ b/CMake/cdat_modules/cycler_external.cmake @@ -0,0 +1,16 @@ +# Cycler + +set(Cycler_source "${CMAKE_CURRENT_BINARY_DIR}/build/Cycler") + +ExternalProject_Add(Cycler + DOWNLOAD_DIR ${CDAT_PACKAGE_CACHE_DIR} + SOURCE_DIR ${Cycler_source} + URL ${CYCLER_URL}/${CYCLER_GZ} + URL_MD5 ${CYCLER_MD5} + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND "" + BUILD_COMMAND ${PYTHON_EXECUTABLE} setup.py build + INSTALL_COMMAND ${PYTHON_EXECUTABLE} setup.py install --old-and-unmanageable ${PYTHON_EXTRA_PREFIX} + DEPENDS ${cycler_deps} + ${ep_log_options} +) diff --git a/CMake/cdat_modules/cycler_pkg.cmake b/CMake/cdat_modules/cycler_pkg.cmake new file mode 100644 index 0000000000..b2310801a3 --- /dev/null +++ b/CMake/cdat_modules/cycler_pkg.cmake @@ -0,0 +1,10 @@ +set(CYCLER_MAJOR 0) +set(CYCLER_MINOR 9) +set(CYCLER_PATCH 0) +set(CYCLER_VERSION ${CYCLER_MAJOR}.${CYCLER_MINOR}.${CYCLER_PATCH}) +set(CYCLER_URL ${LLNL_URL}) +set(CYCLER_GZ cycler-${CYCLER_VERSION}.tar.gz) +set(CYCLER_MD5 c10ade5ca3f0aadf575eb25203b225a5) +set(CYCLER_SOURCE ${CYCLER_URL}/${CYCLER_GZ}) + +add_cdat_package_dependent(Cycler "" "" ON "CDAT_BUILD_GRAPHICS" OFF) diff --git a/CMake/cdat_modules/esmf_pkg.cmake b/CMake/cdat_modules/esmf_pkg.cmake index 7a92807b89..0fde092697 100644 --- a/CMake/cdat_modules/esmf_pkg.cmake +++ b/CMake/cdat_modules/esmf_pkg.cmake @@ -36,12 +36,12 @@ endif() if(CDAT_BUILD_ESMF_ESMP) if("${CMAKE_Fortran_COMPILER_ID}" STREQUAL GNU) - # GNU gfortran must be >= 4.3 - if(${Fortran_MAJOR_VERSION} GREATER 3 AND ${Fortran_MINOR_VERSION} GREATER 2) + # GNU gfortran must be >= 4.3 last 4.2 gfortran release was 4.2.4 + if(${Fortran_VERSION} VERSION_GREATER "4.2.9" AND ${Fortran_VERSION} VERSION_LESS "5.2.2") ## On APPLE need to test for -arch as well! add_cdat_package(ESMF "" "Build ESMF" ON) else() - message(FATAL_ERROR "[ERROR] gfortran must be 4.3 <= version < 5.0; you have ${Fortran_VERSION}") + message(FATAL_ERROR "[ERROR] gfortran must be 4.3 <= version < 5.2.2; you have ${Fortran_VERSION}") endif() else() add_cdat_package(ESMF "" "Build ESMF" ON) diff --git a/CMake/cdat_modules/ffmpeg_external.cmake b/CMake/cdat_modules/ffmpeg_external.cmake index 4d8d984e61..1a2fe723ab 100644 --- a/CMake/cdat_modules/ffmpeg_external.cmake +++ b/CMake/cdat_modules/ffmpeg_external.cmake @@ -6,9 +6,9 @@ set(ENV{PATH} $ENV{PATH}:${cdat_EXTERNALS}/bin) find_program(YASM_BIN "yasm") if (NOT YASM_BIN) - set(ffmpeg_conf_args --disable-yasm^^--enable-gpl^^--enable-libx264^^--extra-cxxflags=@ffmpeg_source@^^--enable-shared^^--enable-zlib) + set(ffmpeg_conf_args --disable-yasm^^--enable-gpl^^--enable-libx264^^--extra-cxxflags=${ffmpeg_source}^^--enable-shared^^--enable-zlib) else() - set(ffmpeg_conf_args --enable-gpl^^--enable-libx264^^--extra-cxxflags=@ffmpeg_source@^^--enable-shared^^--enable-zlib) + set(ffmpeg_conf_args --enable-gpl^^--enable-libx264^^--extra-cxxflags=${ffmpeg_source}^^--enable-shared^^--enable-zlib) endif() ExternalProject_Add(FFMPEG diff --git a/CMake/cdat_modules/h5py_pkg.cmake b/CMake/cdat_modules/h5py_pkg.cmake index b723859d33..3a753fc2b2 100644 --- a/CMake/cdat_modules/h5py_pkg.cmake +++ b/CMake/cdat_modules/h5py_pkg.cmake @@ -1,10 +1,10 @@ -set( H5PY_MAJOR 2 ) -set( H5PY_MINOR 4 ) -set( H5PY_PATCH 0 ) -set( H5PY_VERSION ${H5PY_MAJOR}.${H5PY_MINOR}.${H5PY_PATCH} ) -set( H5PY_URL ${LLNL_URL} ) -set( H5PY_GZ h5py-${H5PY_VERSION}.tar.gz ) -set( H5PY_MD5 80c9a94ae31f84885cc2ebe1323d6758) +set(H5PY_MAJOR 2) +set(H5PY_MINOR 5) +set(H5PY_PATCH 0) +set(H5PY_VERSION ${H5PY_MAJOR}.${H5PY_MINOR}.${H5PY_PATCH}) +set(H5PY_URL ${LLNL_URL}) +set(H5PY_GZ h5py-${H5PY_VERSION}.tar.gz) +set(H5PY_MD5 969c78e366e8e86dcd0376d945a72dd0) set (nm H5PY) string(TOUPPER ${nm} uc_nm) diff --git a/CMake/cdat_modules/libcdms_pkg.cmake b/CMake/cdat_modules/libcdms_pkg.cmake index 63e6729fa7..2048da20a0 100644 --- a/CMake/cdat_modules/libcdms_pkg.cmake +++ b/CMake/cdat_modules/libcdms_pkg.cmake @@ -3,7 +3,7 @@ set(LIBCDMS_URL ${LLNL_URL}) set(LIBCDMS_GZ libcdms-${LIBCDMS_VERSION}.tar.gz) set(LIBCDMS_SOURCE ${LIBCDMS_URL}/${LIBCDMS_GZ}) set(LIBCDMS_MD5 ce71f54616f755d67fbbb6c81ca4fd62) -set(LIBCDMS_BRANCH master) +set(LIBCDMS_BRANCH uvcdat-2.4.0) set(LIBCDMS_REPOSITORY ${GIT_PROTOCOL}github.com/UV-CDAT/libcdms.git ) set(GIT_CMD_STR_LIBCDMS GIT_REPOSITORY ${LIBCDMS_REPOSITORY}) diff --git a/CMake/cdat_modules/matplotlib_deps.cmake b/CMake/cdat_modules/matplotlib_deps.cmake index 2b6d9d2dfc..794a6a4766 100644 --- a/CMake/cdat_modules/matplotlib_deps.cmake +++ b/CMake/cdat_modules/matplotlib_deps.cmake @@ -1 +1 @@ -set(Matplotlib_deps ${pyqt_pkg} ${freetype_pkg} ${cairo_pkg} ${numpy_pkg} ${png_pkg} ${six_pkg} ${dateutils_pkg} ${pyparsing_pkg}) +set(Matplotlib_deps ${pyqt_pkg} ${freetype_pkg} ${cairo_pkg} ${numpy_pkg} ${png_pkg} ${six_pkg} ${dateutils_pkg} ${pyparsing_pkg} ${cycler_pkg}) diff --git a/CMake/cdat_modules/matplotlib_pkg.cmake b/CMake/cdat_modules/matplotlib_pkg.cmake index 89a6626621..4e048a172c 100644 --- a/CMake/cdat_modules/matplotlib_pkg.cmake +++ b/CMake/cdat_modules/matplotlib_pkg.cmake @@ -2,12 +2,12 @@ set(MATPLOTLIB_MAJOR_MIN 1) set(MATPLOTLIB_MINOR_MIN 1) set(MATPLOTLIB_PATCH_MIN 0) set(MATPLOTLIB_MAJOR 1) -set(MATPLOTLIB_MINOR 4) -set(MATPLOTLIB_PATCH 3) +set(MATPLOTLIB_MINOR 5) +set(MATPLOTLIB_PATCH 0) set(MATPLOTLIB_VERSION ${MATPLOTLIB_MAJOR}.${MATPLOTLIB_MINOR}.${MATPLOTLIB_PATCH}) set(MATPLOTLIB_URL ${LLNL_URL}) set(MATPLOTLIB_GZ matplotlib-${MATPLOTLIB_VERSION}.tar.gz) -set(MATPLOTLIB_MD5 f1bb5e2317cceed593119fad2071e236) +set(MATPLOTLIB_MD5 35a9cad23887dc6a7bd30cf434aa3f65) set(nm MATPLOTLIB) string(TOUPPER ${nm} uc_nm) diff --git a/CMake/cdat_modules/openssl_deps.cmake b/CMake/cdat_modules/openssl_deps.cmake new file mode 100644 index 0000000000..22b675b476 --- /dev/null +++ b/CMake/cdat_modules/openssl_deps.cmake @@ -0,0 +1 @@ +set(OPENSSL_deps ) diff --git a/CMake/cdat_modules/openssl_external.cmake b/CMake/cdat_modules/openssl_external.cmake new file mode 100644 index 0000000000..752d3395c7 --- /dev/null +++ b/CMake/cdat_modules/openssl_external.cmake @@ -0,0 +1,37 @@ +set (OPENSSL_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/build/openssl") +set (OPENSSL_INSTALL_DIR "${cdat_EXTERNALS}") + +execute_process (COMMAND uname -s COMMAND tr -d '\n' + OUTPUT_VARIABLE HOST) +STRING (TOLOWER ${HOST} HOST) +execute_process (COMMAND uname -m COMMAND tr -d '\n' + OUTPUT_VARIABLE ARCHITECTURE) + +get_filename_component (COMPILER "${CMAKE_C_COMPILER}" NAME_WE) + +if (APPLE) + if (ARCHITECTURE MATCHES "64$") + set (HOST "${HOST}64") + endif () + set (COMPILER "cc") +endif () + +set (OPENSSL_CONF_ARGS "${HOST}-${ARCHITECTURE}-${COMPILER}") +set (OPENSSL_CONF_ARGS + ${OPENSSL_CONF_ARGS} + "--prefix=${OPENSSL_INSTALL_DIR}") + +ExternalProject_Add (openssl + DOWNLOAD_DIR ${CDAT_PACKAGE_CACHE_DIR} + SOURCE_DIR ${OPENSSL_SOURCE_DIR} + INSTALL_DIR ${OPENSSL_INSTALL_DIR} + URL ${OPENSSL_SOURCE_URL} + URL_MD5 ${OPENSSL_MD5} + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND ${OPENSSL_SOURCE_DIR}/Configure ${OPENSSL_CONF_ARGS} + DEPENDS ${OPENSSL_DEPS} + ${ep_log_options} + ) + +set (OPENSSL_INCLUDE_DIR "${OPENSSL_INSTALL_DIR}/include") +set (OPENSSL_LIBRARY_DIR "${OPENSSL_INSTALL_DIR}/lib") diff --git a/CMake/cdat_modules/openssl_pkg.cmake b/CMake/cdat_modules/openssl_pkg.cmake new file mode 100644 index 0000000000..440d0f532f --- /dev/null +++ b/CMake/cdat_modules/openssl_pkg.cmake @@ -0,0 +1,37 @@ +option(CDAT_USE_SYSTEM_OPENSSL "Use system OpenSSL, if found." ON) +mark_as_advanced(CDAT_USE_SYSTEM_OPENSSL) +if(CDAT_USE_SYSTEM_OPENSSL) + find_package(OpenSSL QUIET) + if(OPENSSL_FOUND) + set(FILENAME_PATH_ARG "DIRECTORY") + if(CMAKE_VERSION VERSION_LESS 2.8.12) + # Support older version of GET_FILENAME_COMPONENT macro + # with legacy PATH argument + set(FILENAME_PATH_ARG "PATH") + endif(CMAKE_VERSION VERSION_LESS 2.8.12) + get_filename_component(OPENSSL_LIBRARY_DIR + "${OPENSSL_SSL_LIBRARY}" ${FILENAME_PATH_ARG}) + message(STATUS "System OpenSSL found. " + "OpenSSL library directory: ${OPENSSL_LIBRARY_DIR}. " + "OpenSSL Version: ${OPENSSL_VERSION}") + endif(OPENSSL_FOUND) +endif(CDAT_USE_SYSTEM_OPENSSL) + +if(NOT CDAT_USE_SYSTEM_OPENSSL OR NOT OPENSSL_FOUND) + set(OPENSSL_MAJOR_SRC 1) + set(OPENSSL_MINOR_SRC 0) + set(OPENSSL_PATCH_SRC 2e) + set(OPENSSL_VERSION + ${OPENSSL_MAJOR_SRC}.${OPENSSL_MINOR_SRC}.${OPENSSL_PATCH_SRC}) + + message(STATUS "Compiling OpenSSL from source. Version: ${OPENSSL_VERSION}") + + set(OPENSSL_URL ${LLNL_URL}) + set(OPENSSL_GZ "openssl-${OPENSSL_VERSION}.tar.gz") + set(OPENSSL_MD5 5262bfa25b60ed9de9f28d5d52d77fc5) + set(OPENSSL_SOURCE_URL ${OPENSSL_URL}/${OPENSSL_GZ}) + + # We've reached here because we need OpenSSL. + # Hence, defaulting to ON + add_cdat_package(openssl "" "" ON) +endif(NOT CDAT_USE_SYSTEM_OPENSSL OR NOT OPENSSL_FOUND) diff --git a/CMake/cdat_modules/r_pkg.cmake b/CMake/cdat_modules/r_pkg.cmake index e0637a397a..8f7e53eb48 100644 --- a/CMake/cdat_modules/r_pkg.cmake +++ b/CMake/cdat_modules/r_pkg.cmake @@ -1,9 +1,9 @@ set(R_MAJOR_SRC 3) set(R_MINOR_SRC 2) -set(R_PATCH_SRC 1) +set(R_PATCH_SRC 2) set(R_URL ${LLNL_URL}) set(R_GZ R-${R_MAJOR_SRC}.${R_MINOR_SRC}.${R_PATCH_SRC}.tar.gz) -set(R_MD5 c2aac8b40f84e08e7f8c9068de9239a3) +set(R_MD5 57cef5c2e210a5454da1979562a10e5b) set(R_SOURCE ${R_URL}/${R_GZ}) set (nm R) diff --git a/CMake/cdat_modules/readline_external.cmake b/CMake/cdat_modules/readline_external.cmake index b9ca0b3525..212f96171a 100644 --- a/CMake/cdat_modules/readline_external.cmake +++ b/CMake/cdat_modules/readline_external.cmake @@ -2,7 +2,7 @@ set(readline_source "${CMAKE_CURRENT_BINARY_DIR}/build/readline") set(readline_install "${cdat_EXTERNALS}") set(readline_conf_args) -set(readline_conf_args "--with-curses --disable-static --enable-shared") +set(readline_conf_args "--with-curses;--disable-static;--enable-shared") # with -fPIC IF(UNIX AND NOT WIN32) FIND_PROGRAM(CMAKE_UNAME uname /bin /usr/bin /usr/local/bin ) diff --git a/CMake/cdat_modules/seawater_pkg.cmake b/CMake/cdat_modules/seawater_pkg.cmake index 74de868362..81bde3ba70 100644 --- a/CMake/cdat_modules/seawater_pkg.cmake +++ b/CMake/cdat_modules/seawater_pkg.cmake @@ -1,10 +1,10 @@ -set( SEAWATER_MAJOR 3 ) -set( SEAWATER_MINOR 3 ) -set( SEAWATER_PATCH 2 ) -set( SEAWATER_VERSION ${SEAWATER_MAJOR}.${SEAWATER_MINOR}.${SEAWATER_PATCH} ) -set( SEAWATER_URL ${LLNL_URL} ) -set( SEAWATER_GZ python-seawater-${SEAWATER_VERSION}.tar.gz ) -set( SEAWATER_MD5 b23df1bbf3b96771aa9926dc851c4675 ) +set(SEAWATER_MAJOR 3) +set(SEAWATER_MINOR 3) +set(SEAWATER_PATCH 4) +set(SEAWATER_VERSION ${SEAWATER_MAJOR}.${SEAWATER_MINOR}.${SEAWATER_PATCH}) +set(SEAWATER_URL ${LLNL_URL}) +set(SEAWATER_GZ python-seawater-${SEAWATER_VERSION}.tar.gz) +set(SEAWATER_MD5 0932193350f42c055e7f523578ec1b7c) set (nm SEAWATER) string(TOUPPER ${nm} uc_nm) diff --git a/CMake/cdat_modules/spyder_pkg.cmake b/CMake/cdat_modules/spyder_pkg.cmake index 2f8499ac6e..664f2c3198 100644 --- a/CMake/cdat_modules/spyder_pkg.cmake +++ b/CMake/cdat_modules/spyder_pkg.cmake @@ -1,9 +1,9 @@ -set(SPYDER_MAJOR_SRC 3) -set(SPYDER_MINOR_SRC 0) -set(SPYDER_PATCH_SRC 0b1) +set(SPYDER_MAJOR_SRC 2) +set(SPYDER_MINOR_SRC 3) +set(SPYDER_PATCH_SRC 8) set(SPYDER_URL ${LLNL_URL}) set(SPYDER_ZIP spyder-${SPYDER_MAJOR_SRC}.${SPYDER_MINOR_SRC}.${SPYDER_PATCH_SRC}.zip) set(SPYDER_SOURCE ${SPYDER_URL}/${SPYDER_ZIP}) -set(SPYDER_MD5 0bd7a60573a839f9c85dd7a3eef61b4e) +set(SPYDER_MD5 fb890dc956f606c43d560558159f3491) -add_cdat_package_dependent(spyder "" "" OFF "CDAT_BUILD_GUI" OFF) +add_cdat_package_dependent(spyder "" "" OFF "CDAT_BUILD_GUI" OFF) diff --git a/CMake/cdat_modules/uvcmetrics_pkg.cmake b/CMake/cdat_modules/uvcmetrics_pkg.cmake index 9b5d78274f..25e66c56bb 100644 --- a/CMake/cdat_modules/uvcmetrics_pkg.cmake +++ b/CMake/cdat_modules/uvcmetrics_pkg.cmake @@ -6,7 +6,7 @@ set(UVCMETRICS_ZIP uvcmetrics-${UVCMETRICS_VERSION}.zip) #set(UVCMETRICS_SOURCE ${UVCMETRICS_URL}/${UVCMETRICS_ZIP}) set(UVCMETRICS_SOURCE ${GIT_PROTOCOL}github.com/UV-CDAT/uvcmetrics.git ) set(UVCMETRICS_MD5) -set(UVCMETRICS_BRANCH devel) +set(UVCMETRICS_BRANCH uvcdat-2.4.0) if (NOT CDAT_BUILD_LEAN) add_cdat_package(UVCMETRICS "" "" ON) diff --git a/CMake/cdat_modules/vacumm_pkg.cmake b/CMake/cdat_modules/vacumm_pkg.cmake index f873e76ca1..7dea0632e8 100644 --- a/CMake/cdat_modules/vacumm_pkg.cmake +++ b/CMake/cdat_modules/vacumm_pkg.cmake @@ -1,10 +1,10 @@ -set( VACUMM_MAJOR 2 ) -set( VACUMM_MINOR 5 ) -set( VACUMM_PATCH 1-svn1807 ) -set( VACUMM_VERSION ${VACUMM_MAJOR}.${VACUMM_MINOR}.${VACUMM_PATCH} ) -set( VACUMM_URL ${LLNL_URL} ) -set( VACUMM_GZ vacumm-${VACUMM_VERSION}.tar.gz ) -set( VACUMM_MD5 9da3f6c29a86e29c0e6e3799fd9ef378 ) +set(VACUMM_MAJOR 3) +set(VACUMM_MINOR 0) +set(VACUMM_PATCH 0) +set(VACUMM_VERSION ${VACUMM_MAJOR}.${VACUMM_MINOR}.${VACUMM_PATCH}) +set(VACUMM_URL ${LLNL_URL} ) +set(VACUMM_GZ vacumm-${VACUMM_VERSION}.tar.gz) +set(VACUMM_MD5 b468fa72ddba9d0cd39d51164bef1dd4) set (nm VACUMM) string(TOUPPER ${nm} uc_nm) diff --git a/CMake/cdat_modules/vistrails_pkg.cmake b/CMake/cdat_modules/vistrails_pkg.cmake index 498b835d71..de4704436d 100644 --- a/CMake/cdat_modules/vistrails_pkg.cmake +++ b/CMake/cdat_modules/vistrails_pkg.cmake @@ -1,6 +1,6 @@ set(VISTRAILS_VERSION ${VISTRAILS_TAG_POINT}) set(VISTRAILS_SOURCE "${GIT_PROTOCOL}github.com/UV-CDAT/VisTrails.git") -set(VISTRAILS_VERSION uvcdat-2.1.0) +set(VISTRAILS_VERSION uvcdat-2.4.0) set(VISTRAILS_MD5) -set(VISTRAILS_BRANCH uvcdat-master) +set(VISTRAILS_BRANCH uvcdat-2.4.0) add_cdat_package_dependent(vistrails "" "" ON "CDAT_BUILD_GUI" OFF) diff --git a/CMake/cdat_modules/vtk_pkg.cmake b/CMake/cdat_modules/vtk_pkg.cmake index 35504cbac6..f0bafbc2c1 100644 --- a/CMake/cdat_modules/vtk_pkg.cmake +++ b/CMake/cdat_modules/vtk_pkg.cmake @@ -1,4 +1,4 @@ set(VTK_SOURCE ${GIT_PROTOCOL}github.com/UV-CDAT/VTK.git ) set(VTK_MD5) -set(VTK_BRANCH uvcdat-master) +set(VTK_BRANCH uvcdat-2.4.0) add_cdat_package_dependent(VTK "" "" ON "CDAT_BUILD_GRAPHICS" OFF) diff --git a/CMake/cdat_modules_extra/curses_patch_step.cmake.in b/CMake/cdat_modules_extra/curses_patch_step.cmake.in new file mode 100644 index 0000000000..04c28afdc3 --- /dev/null +++ b/CMake/cdat_modules_extra/curses_patch_step.cmake.in @@ -0,0 +1,5 @@ +execute_process( + WORKING_DIRECTORY @curses_source@ + COMMAND patch -Np1 + INPUT_FILE @cdat_CMAKE_SOURCE_DIR@/curses_gcc5.patch +) diff --git a/CMake/cdat_modules_extra/python_configure_step.cmake.in b/CMake/cdat_modules_extra/python_configure_step.cmake.in index 081dc6ddec..27f6532751 100644 --- a/CMake/cdat_modules_extra/python_configure_step.cmake.in +++ b/CMake/cdat_modules_extra/python_configure_step.cmake.in @@ -1,3 +1,4 @@ +CMAKE_POLICY(SET CMP0012 NEW) set(ENV${CC} "@CMAKE_C_COMPILER@") set(ENV${CXX} "@CMAKE_CXX_COMPILER@") @@ -26,13 +27,13 @@ if(APPLE) set(ENV{AQUA_CDAT} "no") set(ENV{MAC_OSX_DEPLOYMENT_TARGET} "@CMAKE_OSX_DEPLOYMENT_TARGET@") unset(ENV{MAKEFLAGS}) -endif() - -if(APPLE) - set(library_param --prefix=@CMAKE_INSTALL_PREFIX@ --enable-framework=@CMAKE_INSTALL_PREFIX@/Library/Frameworks) + if(@_CURRENT_OSX_SDK_VERSION@ VERSION_LESS "10.11") + set(library_param --prefix=@CMAKE_INSTALL_PREFIX@ --with-system-expat --enable-framework=@CMAKE_INSTALL_PREFIX@/Library/Frameworks) + else() + set(library_param --prefix=@CMAKE_INSTALL_PREFIX@ --enable-framework=@CMAKE_INSTALL_PREFIX@/Library/Frameworks) + endif() elseif(UNIX) set(library_param --prefix=@CMAKE_INSTALL_PREFIX@ --enable-shared --enable-unicode=ucs4) - endif() EXECUTE_PROCESS( diff --git a/CMake/cdat_modules_extra/uvcdat.in b/CMake/cdat_modules_extra/uvcdat.in index 0be469844c..8b1a3f238d 100755 --- a/CMake/cdat_modules_extra/uvcdat.in +++ b/CMake/cdat_modules_extra/uvcdat.in @@ -50,6 +50,13 @@ if [ $redirect = false ] ;then else # Replace all uses of ~ with $HOME target="${target/#\~/$HOME}" + + # Check if path exists + target_dir="$(dirname $target)" + if [ ! -d "$target_dir" ] ;then + mkdir -p $target_dir + fi + # Make sure the file exists and that we have write privileges touch $target # Launch with redirection diff --git a/CMake/cmake_modules/AppleSDKUtils.cmake b/CMake/cmake_modules/AppleSDKUtils.cmake new file mode 100644 index 0000000000..90449561a1 --- /dev/null +++ b/CMake/cmake_modules/AppleSDKUtils.cmake @@ -0,0 +1,101 @@ +#---------------------------------------------------------------------------- +# The following script tries to set important toolchain related variables for +# MacOSX. The variables set include CMAKE_OSX_DEPLOYMENT_TARGET, +# OSX_DEVELOPER_ROOT, CMAKE_OSX_SYSROOT, etc. If the deployment target is not +# set by the user, it is set as the current OS version. Similarly, if the +# sysroot is not set by the user, it is set to the latest available version of +# the MacOSX SDK. +# NOTE: It is assumed that the latest available SDK is the best version that +# goes with the version specified by the deployment target. Matching the +# versions of the deployment target and SDK are not enforced. A warning, +# however, is presented to the user if the versions do not match. + +#---------------------------------------------------------------------------- +# OSX version number +# Support only 10.8 or higher for now +if (CURRENT_OSX_VERSION VERSION_LESS 10.8) + message(FATAL_ERROR "Found Mac OSX version ${CURRENT_OSX_VERSION}; " + "Minimum supported Mac OSX version is 10.8") +endif () + +# Current OSX version as a two-component string: 10.8, 10.9, etc ... +string(REGEX REPLACE "^([0-9]+\\.[0-9]+).*$" "\\1" + _CURRENT_OSX_VERSION "${CURRENT_OSX_VERSION}") + +#---------------------------------------------------------------------------- +# CMAKE_OSX_DEPLOYMENT_TARGET +if(NOT CMAKE_OSX_DEPLOYMENT_TARGET) + message(STATUS "Setting OSX_DEPLOYMENT_TARGET to ${_CURRENT_OSX_VERSION}") + set(CMAKE_OSX_DEPLOYMENT_TARGET ${_CURRENT_OSX_VERSION}) +endif() + +#---------------------------------------------------------------------------- +# OSX_DEVELOPER_ROOT +if(NOT OSX_DEVELOPER_ROOT) + message(WARNING "Could not determine developer root directory. " + "\nAssuming \"/Applications/Xcode.app/Contents/Developer\".") + set(OSX_DEVELOPER_ROOT "/Applications/Xcode.app/Contents/Developer") +endif(NOT OSX_DEVELOPER_ROOT) + +#---------------------------------------------------------------------------- +# CMAKE_OSX_SYSROOT + +if(NOT CMAKE_OSX_SYSROOT) + # Find all SDKs installed in the OSX_DEVELOPER_ROOT + foreach(d Platforms/MacOSX.platform/Developer/SDKs SDKs) + file(GLOB _CMAKE_OSX_SDKS ${OSX_DEVELOPER_ROOT}/${d}/*) + if(_CMAKE_OSX_SDKS) + set(_CMAKE_OSX_SDKS_DIR ${OSX_DEVELOPER_ROOT}/${d}) + break() + endif() + endforeach() + + # find the latest SDK + set(_CMAKE_OSX_LATEST_SDK_VERSION "0.0") + file(GLOB _CMAKE_OSX_SDKS RELATIVE "${_CMAKE_OSX_SDKS_DIR}" + "${_CMAKE_OSX_SDKS_DIR}/MacOSX*.sdk") + foreach(_SDK ${_CMAKE_OSX_SDKS}) + if(_SDK MATCHES "MacOSX([0-9]+\\.[0-9]+)[^/]*\\.sdk" AND + CMAKE_MATCH_1 VERSION_GREATER ${_CMAKE_OSX_LATEST_SDK_VERSION}) + set(_CMAKE_OSX_LATEST_SDK_VERSION "${CMAKE_MATCH_1}") + endif() + endforeach() + + if(_CMAKE_OSX_LATEST_SDK_VERSION VERSION_GREATER "0.0") + # Set sysroot to latest SDK + message(STATUS "Latest SDK version found is " + "${_CMAKE_OSX_LATEST_SDK_VERSION}. " + "Setting CMAKE_OSX_SYSROOT to the latest SDK version.") + set(CMAKE_OSX_SYSROOT + "${_CMAKE_OSX_SDKS_DIR}/MacOSX${_CMAKE_OSX_LATEST_SDK_VERSION}.sdk") + else() + message(AUTHOR_WARNING "No SDK found. " + "Please set CMAKE_OSX_SYSROOT to path of valid MacOSX SDK.") + endif() + +endif(NOT CMAKE_OSX_SYSROOT) + +#---------------------------------------------------------------------------- +# DEPLOYMENT_TARGET and SYSROOT version match + +if(CMAKE_OSX_DEPLOYMENT_TARGET AND CMAKE_OSX_SYSROOT) + string(REGEX REPLACE ".*MacOSX([0-9]+\\.[0-9]+).*" "\\1" + _CURRENT_OSX_SDK_VERSION "${CMAKE_OSX_SYSROOT}") + if(${CMAKE_OSX_DEPLOYMENT_TARGET} VERSION_GREATER ${_CURRENT_OSX_SDK_VERSION}) + message(AUTHOR_WARNING + "Deployment target (${CMAKE_OSX_DEPLOYMENT_TARGET}) cannot be greater " + "than the SYSROOT version (${_CURRENT_OSX_SDK_VERSION}) as specified by " + "CMAKE_OSX_SYSROOT. " + "Reverting CMAKE_OSX_DEPLOYMENT_TARGET to SYSROOT version.") + set(CMAKE_OSX_DEPLOYMENT_TARGET ${_CURRENT_OSX_SDK_VERSION}) + endif() +endif() + +#---------------------------------------------------------------------------- +# CMAKE_OSX_ARCHITECTURE +# Legacy code that enforces 64-bit-ness... + +if(NOT CMAKE_OSX_ARCHITECTURES) + set(CMAKE_OSX_ARCHITECTURES "x86_64") + set(CMAKE_OSX_ARCHITECTURES_M "64") +endif() diff --git a/CMake/curses_gcc5.patch b/CMake/curses_gcc5.patch new file mode 100644 index 0000000000..a1ee0240b8 --- /dev/null +++ b/CMake/curses_gcc5.patch @@ -0,0 +1,30 @@ +index d8cc3c9..b91398c 100755 +--- a/ncurses/base/MKlib_gen.sh ++++ b/ncurses/base/MKlib_gen.sh +@@ -491,11 +492,22 @@ sed -n -f $ED1 \ + -e 's/gen_$//' \ + -e 's/ / /g' >>$TMP + ++cat >$ED1 < $ED2 ++cat $ED2 >$TMP ++ + $preprocessor $TMP 2>/dev/null \ +-| sed \ +- -e 's/ / /g' \ +- -e 's/^ //' \ +- -e 's/_Bool/NCURSES_BOOL/g' \ ++| sed -f $ED1 \ + | $AWK -f $AW2 \ + | sed -f $ED3 \ + | sed \ diff --git a/CMakeLists.txt b/CMakeLists.txt index c7e908dbf8..d6cee344f9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,6 @@ #============================================================================= cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR) +CMAKE_POLICY(SET CMP0012 NEW) if ("${CMAKE_VERSION}" VERSION_LESS "2.8.12") message(WARNING "Your CMake version is ${CMAKE_VERSION} which is depreciated for UV-CDAT. The recommended minimum CMake version is 2.8.12. Using older versions can result in build errors particularly with Xcode 5") @@ -97,47 +98,7 @@ endif() # calls so that it's set properly to detect 64-bit-ness... #----------------------------------------------------------------------------- if(APPLE) - - string(REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1" OSX_VER_MAJOR "${CURRENT_OSX_VERSION}") - string(REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\2" OSX_VER_MINOR "${CURRENT_OSX_VERSION}") - - if("${CMAKE_OSX_DEPLOYMENT_TARGET}" STREQUAL "") - set(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "" FORCE) - set(CMAKE_OSX_ARCHITECTURES_M "64" CACHE STRING "" FORCE) - set(CMAKE_OSX_DEPLOYMENT_TARGET "${OSX_VER_MAJOR}.${OSX_VER_MINOR}" CACHE STRING "" FORCE) - endif() - - # Support only 10.8 or higher for now - if(IS_DIRECTORY "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk") - set(HAVE_10_8_SDK TRUE) - endif() - if(IS_DIRECTORY "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk") - set(HAVE_10_9_SDK TRUE) - endif() - if(IS_DIRECTORY "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk") - set(HAVE_10_10_SDK TRUE) - endif() - # Try for the lowest version SDK we can - if ((${OSX_VER_MINOR} VERSION_EQUAL 8) AND (HAVE_10_8_SDK)) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -headerpad_max_install_names") - set(CMAKE_OSX_DEPLOYMENT_TARGET 10.8 CACHE STRING "" FORCE) - set(CMAKE_OSX_SYSROOT "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk" CACHE PATH "" FORCE) - elseif((${OSX_VER_MINOR} VERSION_EQUAL 9) AND (HAVE_10_9_SDK)) - set(CMAKE_C_COMPILER clang) - set(CMAKE_CXX_COMPILER clang++) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -headerpad_max_install_names") - set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9 CACHE STRING "" FORCE) - set(CMAKE_OSX_SYSROOT "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk" CACHE PATH "" FORCE) - elseif((${OSX_VER_MINOR} VERSION_EQUAL 10) AND (HAVE_10_10_SDK)) - set(CMAKE_C_COMPILER clang) - set(CMAKE_CXX_COMPILER clang++) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -headerpad_max_install_names") - set(CMAKE_OSX_DEPLOYMENT_TARGET 10.10 CACHE STRING "" FORCE) - set(CMAKE_OSX_SYSROOT "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk" CACHE PATH "" FORCE) - else() - message(FATAL_ERROR "[ERROR] Could not match your OS VERSION (${OSX_VER_MAJOR}.${OSX_VER_MINOR}) with any of your SDKs, or OS not supported yet") - endif() - + include (AppleSDKUtils) endif() # Setup git and related options @@ -490,6 +451,7 @@ include(cdat_pkg) include(clapack_pkg) #include(curl_pkg) include(configobj_pkg) +include(cycler_pkg) include(cython_pkg) include(data_pkg) include(esmf_pkg) @@ -517,6 +479,7 @@ include(libcf_pkg) include(libdrs_pkg) include(matplotlib_pkg) include(six_pkg) +include(openssl_pkg) include(cryptography_pkg) include(cffi_pkg) include(ffi_pkg) @@ -820,30 +783,31 @@ add_custom_target(wrappers ALL DEPENDS # Package UV-CDAT with CPACK include(InstallRequiredSystemLibraries) - set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "UVCDAT") set(CPACK_PACKAGE_VENDOR "UVCDAT") set(CPACK_PACKAGE_NAME "UVCDAT") -set(CPACK_PACKAGE_VERSION_MAJOR "1") -set(CPACK_PACKAGE_VERSION_MINOR "4") +set(CPACK_PACKAGE_VERSION_MAJOR "2") +set(CPACK_PACKAGE_VERSION_MINOR "3") set(CPACK_PACKAGE_VERSION_PATCH "0") set(CPACK_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}) set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/docs/README.txt") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/docs/Legal.txt") set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Aashish Chaudhary") #required -set(CPACK_DESTINATION_PREFIX "UVCDAT") -set(CPACK_DESTINATION_LIB_PREFIX "UVCDAT/lib") -set(CPACK_DESTINATION_BIN_PREFIX "UVCDAT/bin") +set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) +set(CPACK_RPM_PACKAGE_PROVIDES /usr/local/uvcdat/bin/python /usr/local/uvcdat/bin/python2.7) +set(CPACK_DESTINATION_BIN_PREFIX "bin") if (APPLE) - set(CPACK_DESTINATION_PREFIX "\${CMAKE_INSTALL_PREFIX}/UVCDAT.app/Contents") + set(SB_EXTERNALS_DIR "Externals") + set(SB_LIB_DIR "Library/Frameworks/Python.framework/Versions/2.7/lib") set(CPACK_GENERATOR DragNDrop) - set(CPACK_DESTINATION_LIB_PREFIX "${CPACK_DESTINATION_PREFIX}/Libraries") + set(CPACK_DESTINATION_PREFIX "\${CMAKE_INSTALL_PREFIX}/UVCDAT.app/Contents") set(CPACK_DESTINATION_BIN_PREFIX "${CPACK_DESTINATION_PREFIX}/MacOS") endif() include(CPack) + install(CODE " set(SB_EXTERNALS_DIR ${SB_EXTERNALS_DIR}) set(SB_LIB_DIR ${SB_LIB_DIR}) @@ -852,6 +816,9 @@ install(CODE " set(PARAVIEW_MINOR ${PARAVIEW_MINOR}) set(VISIT_VERSION ${VISIT_VERSION}) set(CDAT_BUILD_PARAVIEW ${CDAT_BUILD_PARAVIEW}) + set(SETUP_EXECUTABLE_PATHS \"${SETUP_EXECUTABLE_PATHS}\") + set(SETUP_PYTHON_PATHS \"${SETUP_PYTHON_PATHS}\") + set(SETUP_LIBRARY_PATHS \"${SETUP_LIBRARY_PATHS}\") file(GLOB_RECURSE programs \"${CMAKE_INSTALL_PREFIX}/bin/*\") file(GLOB programs_images \"${CMAKE_INSTALL_PREFIX}/bin/images/*\") @@ -864,70 +831,130 @@ install(CODE " set (resolved_programs \"\") foreach (program \${programs}) get_filename_component(res_program \"\${program}\" REALPATH) - list (APPEND resolved_programs \"\${res_program}\") + set (regex_match \"\") + # Do not install uuid as its dependencies are not resolved when using + # RPMBuild + file (STRINGS \"\${res_program}\" regex_match REGEX \"uuid\") + if (\"\${regex_match}\" STREQUAL \"\") + file (STRINGS \"\${res_program}\" regex_match REGEX \"#!${CMAKE_INSTALL_PREFIX}\") + if (\"\${regex_match}\" STREQUAL \"\") + list (APPEND resolved_programs \"\${res_program}\") + endif () + endif () endforeach() + - file(INSTALL FILES \${resolved_programs} DESTINATION ${CPACK_DESTINATION_BIN_PREFIX} + file(INSTALL FILES \${resolved_programs} DESTINATION + \"\${CMAKE_INSTALL_PREFIX}/${CPACK_DESTINATION_BIN_PREFIX}\" PERMISSIONS USE_SOURCE_PERMISSIONS ) if(EXISTS \"${CMAKE_INSTALL_PREFIX}/bin/images\" AND IS_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/bin/images\") - file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/bin/images DESTINATION ${CPACK_DESTINATION_BIN_PREFIX} + file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/bin/images DESTINATION + \"\${CMAKE_INSTALL_PREFIX}/${CPACK_DESTINATION_BIN_PREFIX}\" PERMISSIONS USE_SOURCE_PERMISSIONS ) endif() if(EXISTS \"${CMAKE_INSTALL_PREFIX}/bin/tutorials\" AND IS_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/bin/tutorials\") - file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/bin/tutorials DESTINATION ${CPACK_DESTINATION_BIN_PREFIX} + file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/bin/tutorials DESTINATION + \"\${CMAKE_INSTALL_PREFIX}/${CPACK_DESTINATION_BIN_PREFIX}\" PERMISSIONS USE_SOURCE_PERMISSIONS ) endif() if(EXISTS \"${CMAKE_INSTALL_PREFIX}/Externals\" AND IS_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/Externals\") - file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/Externals DESTINATION ${CPACK_DESTINATION_PREFIX} - PERMISSIONS USE_SOURCE_PERMISSIONS + file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/Externals DESTINATION + \"\${CMAKE_INSTALL_PREFIX}\" + PERMISSIONS USE_SOURCE_PERMISSIONS + REGEX \"uuid\" EXCLUDE ) endif() if(EXISTS \"${CMAKE_INSTALL_PREFIX}/include\" AND IS_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/include\") - file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/include DESTINATION ${CPACK_DESTINATION_PREFIX} + file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/include DESTINATION + \"\${CMAKE_INSTALL_PREFIX}\" PERMISSIONS USE_SOURCE_PERMISSIONS ) endif() if(EXISTS \"${CMAKE_INSTALL_PREFIX}/lib\" AND IS_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/lib\") - file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/lib DESTINATION ${CPACK_DESTINATION_LIB_PREFIX} + file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/lib DESTINATION + \"\${CMAKE_INSTALL_PREFIX}\" + PERMISSIONS USE_SOURCE_PERMISSIONS + ) + endif() + + # Patch cgi.py to look for installed python + if (EXISTS \"\$ENV{DESTDIR}/\${CMAKE_INSTALL_PREFIX}/lib/python2.7/cgi.py\") + file (READ \"\$ENV{DESTDIR}/\${CMAKE_INSTALL_PREFIX}/lib/python2.7/cgi.py\" CGI_FILE) + SET (SEARCH_REGEX \"\\\#! /usr/local/bin/python\") + SET (REPLACEMENT_TEXT \"#! /usr/bin/env python\") + STRING (REGEX REPLACE \"\${SEARCH_REGEX}\" \"\${REPLACEMENT_TEXT}\" + MODIFIED_FILE \"\${CGI_FILE}\") + file (WRITE \"\$ENV{DESTDIR}/\${CMAKE_INSTALL_PREFIX}/lib/python2.7/cgi.py\" + \"\${MODIFIED_FILE}\") + endif () + + if(EXISTS \"${CMAKE_INSTALL_PREFIX}/share\" AND IS_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/share\") + file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/share DESTINATION + \"\${CMAKE_INSTALL_PREFIX}\" + PERMISSIONS USE_SOURCE_PERMISSIONS + ) + endif() + + if(EXISTS \"${CMAKE_INSTALL_PREFIX}/wrappers\" AND IS_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/wrappers\") + file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/wrappers DESTINATION + \"\${CMAKE_INSTALL_PREFIX}\" PERMISSIONS USE_SOURCE_PERMISSIONS ) endif() if(EXISTS \"${CMAKE_INSTALL_PREFIX}/bin/man\" AND IS_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/bin/man\") - file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/man DESTINATION ${CPACK_DESTINATION_BIN_PREFIX} + file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/man DESTINATION + \"\${CMAKE_INSTALL_PREFIX}/${CPACK_DESTINATION_BIN_PREFIX}\" PERMISSIONS USE_SOURCE_PERMISSIONS ) endif() if(EXISTS \"${CMAKE_INSTALL_PREFIX}/vistrails\" AND IS_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/vistrails\") - file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/vistrails DESTINATION ${CPACK_DESTINATION_PREFIX} + file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/vistrails DESTINATION + \"\${CMAKE_INSTALL_PREFIX}\" PERMISSIONS USE_SOURCE_PERMISSIONS ) endif() if(EXISTS \"${CMAKE_INSTALL_PREFIX}/Library\" AND IS_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/Library\") - file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/Library DESTINATION ${CPACK_DESTINATION_PREFIX} + file(INSTALL FILES ${CMAKE_INSTALL_PREFIX}/Library DESTINATION + \"\${CMAKE_INSTALL_PREFIX}\" PERMISSIONS USE_SOURCE_PERMISSIONS ) endif() + + file(INSTALL FILES ${cdat_BINARY_DIR}/build_info.txt DESTINATION ${CMAKE_INSTALL_PREFIX}/info) # Unset QT_LIB_DIR as we need to use the one in user's environment # We need to keep in ming that we might need to build Qt on some systems # (e.g. RH6) in which case this might break something set(QT_LIB_DIR) + + # Configure the environment setup script to point to the installation + # Creating a temporary file that will be installed. configure_file(${cdat_CMAKE_SOURCE_DIR}/cdat_modules_extra/setup_runtime.sh.in - ${CPACK_DESTINATION_BIN_PREFIX}/setup_runtime.sh + \"\$ENV{DESTDIR}/\${CMAKE_INSTALL_PREFIX}/${CPACK_DESTINATION_BIN_PREFIX}/setup_runtime.sh\" @ONLY ) + # Finally, create a symlink for python to point to point to installed python + if (EXISTS \"\$ENV{DESTDIR}/\${CMAKE_INSTALL_PREFIX}/${CPACK_DESTINATION_BIN_PREFIX}/python2.7\" + AND + NOT EXISTS \"\$ENV{DESTDIR}/\${CMAKE_INSTALL_PREFIX}/${CPACK_DESTINATION_BIN_PREFIX}/python\") + execute_process(COMMAND \${CMAKE_COMMAND} -E create_symlink + \"\$ENV{DESTDIR}/\${CMAKE_INSTALL_PREFIX}/${CPACK_DESTINATION_BIN_PREFIX}/python2.7\" + \"\$ENV{DESTDIR}/\${CMAKE_INSTALL_PREFIX}/${CPACK_DESTINATION_BIN_PREFIX}/python\" + ) + endif () + if (APPLE) configure_file(${cdat_CMAKE_SOURCE_DIR}/cdat_modules_extra/uvcdat.mac.in ${CPACK_DESTINATION_BIN_PREFIX}/uvcdat @@ -966,3 +993,4 @@ install(CODE " COMPONENT superbuild ) + diff --git a/docs/CCLRC_CDAT_License.txt b/LICENSE similarity index 96% rename from docs/CCLRC_CDAT_License.txt rename to LICENSE index d757528626..6ab06a13f7 100644 --- a/docs/CCLRC_CDAT_License.txt +++ b/LICENSE @@ -1,5 +1,5 @@ -CCLRC Licence for CCLRC Software forming part of the - Climate Data Analysis Tools Package +CCLRC License for CCLRC Software forming part of the Ultrascale Visualization +Climate Data Analysis Tools Package. The Council for the Central Laboratory of the Research Councils (CCLRC) grants any person who obtains a copy of this software (the Software), @@ -24,7 +24,7 @@ risk. 4)All warranties, conditions, terms, undertakings and obligations on the part of CCLRC, implied by statute, common law, custom, trade usage, course of dealing or in any other way are excluded to the fullest extent -permitted by law. +permitted by law. 5)Subject to condition 6, CCLRC will not be liable for: a)any loss of profits, loss of revenue, loss or corruption @@ -64,4 +64,3 @@ unenforceable in any jurisdiction, the other provisions, and the rest of the void or unenforceable provision, will continue in force in that jurisdiction, and the validity and enforceability of that provision in any other jurisdiction will not be affected. - diff --git a/Packages/cdms2/Lib/__init__.py b/Packages/cdms2/Lib/__init__.py index 7287903472..8746016325 100644 --- a/Packages/cdms2/Lib/__init__.py +++ b/Packages/cdms2/Lib/__init__.py @@ -33,7 +33,8 @@ setNetcdfUseNCSwitchModeFlag,getNetcdfUseNCSwitchModeFlag,\ setCompressionWarnings,\ setNetcdf4Flag, getNetcdf4Flag,\ - setNetcdfUseParallelFlag, getNetcdfUseParallelFlag + setNetcdfUseParallelFlag, getNetcdfUseParallelFlag, \ + getMpiRank, getMpiSize open = openDataset @@ -66,14 +67,3 @@ from restApi import esgfConnection,esgfDataset,FacetConnection MV = MV2 - -ESMP_HAS_BEEN_INITIALIZED = False -if not ESMP_HAS_BEEN_INITIALIZED: - try: - import ESMP - ESMP.ESMP_Initialize(ESMP.ESMP_LOGKIND_NONE) - # this turns off the PET file logs - ESMP.ESMP_LogSet(False) - ESMP_HAS_BEEN_INITIALIZED = True - except: - pass diff --git a/Packages/cdms2/Lib/dataset.py b/Packages/cdms2/Lib/dataset.py index 9488d84185..a89ee91207 100644 --- a/Packages/cdms2/Lib/dataset.py +++ b/Packages/cdms2/Lib/dataset.py @@ -29,13 +29,18 @@ import convention import typeconv +# Default is serial mode until setNetcdfUseParallelFlag(1) is called +rk = 0 +sz = 1 +Cdunif.CdunifSetNCFLAGS("use_parallel",0) +CdMpi = False + try: - import mpi4py - rk = mpi4py.MPI.COMM_WORLD.Get_rank() - hasMpi = True + from mpi4py import rc + rc.initialize = False + from mpi4py import MPI except: rk = 0 - hasMpi = False try: import gsHost @@ -97,18 +102,20 @@ def setCompressionWarnings(value=None): else: value = 0 if not isinstance(value, (int,bool)): - raise CMDSError("setCompressionWarnings flags must be yes/no or 1/0, or None to invert it") + raise CDMSError("setCompressionWarnings flags must be yes/no or 1/0, or None to invert it") if value in [1,True]: _showCompressWarnings = True elif value in [0,False]: _showCompressWarnings = False else: - raise CMDSError("setCompressionWarnings flags must be yes/no or 1/0, or None to invert it") + raise CDMSError("setCompressionWarnings flags must be yes\/no or 1\/0, or None to invert it") + return _showCompressWarnings def setNetcdfUseNCSwitchModeFlag(value): """ Tells cdms2 to switch constantly between netcdf define/write modes""" + if value not in [True,False,0,1]: raise CDMSError("Error UseNCSwitchMode flag must be 1(can use)/0(do not use) or true/False") if value in [0,False]: @@ -118,12 +125,32 @@ def setNetcdfUseNCSwitchModeFlag(value): def setNetcdfUseParallelFlag(value): """ Sets NetCDF classic flag value""" + global CdMpi if value not in [True,False,0,1]: raise CDMSError("Error UseParallel flag must be 1(can use)/0(do not use) or true/False") if value in [0,False]: Cdunif.CdunifSetNCFLAGS("use_parallel",0) else: Cdunif.CdunifSetNCFLAGS("use_parallel",1) + CdMpi = True + if not MPI.Is_initialized(): + MPI.Init() + rk = MPI.COMM_WORLD.Get_rank() + +def getMpiRank(): + ''' Return number of processor available ''' + if CdMpi: + rk = MPI.COMM_WORLD.Get_rank() + return rk + else: + return 0 + +def getMpiSize(): + if CdMpi: + sz = MPI.COMM_WORLD.Get_size() + return sz + else: + return 1 def setNetcdf4Flag(value): """ Sets NetCDF classic flag value""" @@ -265,13 +292,14 @@ def openDataset(uri,mode='r',template=None,dods=1,dpath=None, hostObj=None): else: # If the doesn't exist allow it to be created ##Ok mpi has issues with bellow we need to test this only with 1 rank - if not os.path.exists(path): - return CdmsFile(path,mode,mpiBarrier=hasMpi) + return CdmsFile(path,mode,mpiBarrier=CdMpi) elif mode=="w": - if rk == 0 : - os.remove(path) - return CdmsFile(path,mode,mpiBarrier=hasMpi) + try: + os.remove(path) + except: + pass + return CdmsFile(path,mode,mpiBarrier=CdMpi) # The file exists file1 = CdmsFile(path,"r") @@ -687,12 +715,12 @@ def createAxis(self,name,ar): # Create an implicit rectilinear grid. lat, lon, and mask are objects. # order and type are strings - def createRectGrid(id, lat, lon, order, type="generic", mask=None): + def createRectGrid(self,id, lat, lon, order, type="generic", mask=None): node = cdmsNode.RectGridNode(id, lat.id, lon.id, type, order, mask.id) grid = RectGrid(self,node) grid.initDomain(self.axes, self.variables) self.grids[grid.id] = grid - self._gridmap_[gridkey] = grid +# self._gridmap_[gridkey] = grid # Create a variable # 'name' is the string name of the Variable @@ -921,7 +949,7 @@ class CdmsFile(CdmsObj, cuDataset): def __init__(self, path, mode, hostObj = None, mpiBarrier=False): if mpiBarrier: - mpi4py.MPI.COMM_WORLD.Barrier() + MPI.COMM_WORLD.Barrier() CdmsObj.__init__(self, None) cuDataset.__init__(self) @@ -938,7 +966,10 @@ def __init__(self, path, mode, hostObj = None, mpiBarrier=False): 'mode'] self.___cdms_internals__ = value self.id = path - self.uri="file://"+path + if "://" in path: + self.uri = path + else: + self.uri = "file://" + path self._mode_ = mode try: if mode[0].lower()=="w": diff --git a/Packages/regrid2/Lib/__init__.py b/Packages/regrid2/Lib/__init__.py index bc0e700e75..970cf6c271 100644 --- a/Packages/regrid2/Lib/__init__.py +++ b/Packages/regrid2/Lib/__init__.py @@ -18,3 +18,14 @@ from mvESMFRegrid import ESMFRegrid except: pass + +ESMP_HAS_BEEN_INITIALIZED = False +if not ESMP_HAS_BEEN_INITIALIZED: + try: + import ESMP + ESMP.ESMP_Initialize(ESMP.ESMP_LOGKIND_NONE) + # this turns off the PET file logs + ESMP.ESMP_LogSet(False) + ESMP_HAS_BEEN_INITIALIZED = True + except: + pass diff --git a/Packages/vcs/Lib/Canvas.py b/Packages/vcs/Lib/Canvas.py index c509a90ce5..1d699768d8 100644 --- a/Packages/vcs/Lib/Canvas.py +++ b/Packages/vcs/Lib/Canvas.py @@ -66,8 +66,6 @@ from xmldocs import plot_keywords_doc, graphics_method_core, axesconvert, xaxisconvert, \ plot_1D_input, plot_2D_input, plot_output, plot_2_1D_input, \ plot_2_1D_options -# Flag to set if the initial attributes file has aready been read in -called_initial_attributes_flg = 0 gui_canvas_closed = 0 canvas_closed = 0 import vcsaddons @@ -373,6 +371,7 @@ class Canvas(object): '__last_plot_actual_args', '__last_plot_keyargs', '_continents', + '_continents_line', '_savedcontinentstype', '__weakref__', ] @@ -800,14 +799,12 @@ def _reconstruct_tv(self, arglist, keyargs): # Draw continental outlines if specified. contout = keyargs.get('continents', None) if contout is None: - # if xdim>=0 and ydim>=0 and isgridded: - # Charles put back the self.isplottinggridded in addition for - # meshfill, if (xdim >= 0 and ydim >= 0 and tv.getAxis(xdim).isLongitude() and tv.getAxis(ydim).isLatitude()) or (self.isplottinggridded): contout = 1 else: contout = 0 + if (isinstance(arglist[GRAPHICS_METHOD], str) and (arglist[GRAPHICS_METHOD]) == 'meshfill') or ( (xdim >= 0 and ydim >= 0 and (contout >= 1) and (contout < 12))): self.setcontinentstype(contout) @@ -863,15 +860,13 @@ def objecthelp(self, *arg): # # ########################################################################## def __init__(self, gui=0, mode=1, pause_time=0, - call_from_gui=0, size=None, backend="vtk"): + call_from_gui=0, size=None, backend="vtk", geometry=None, bg=None): self._canvas_id = vcs.next_canvas_id self.ParameterChanged = SIGNAL('ParameterChanged') vcs.next_canvas_id += 1 self.colormap = None self.backgroundcolor = 255, 255, 255 - # default size for bg - self.bgX = 814 - self.bgY = 606 + # displays plotted self.display_names = [] ospath = os.environ["PATH"] @@ -883,7 +878,6 @@ def __init__(self, gui=0, mode=1, pause_time=0, if found is False: os.environ["PATH"] = os.environ["PATH"] + \ ":" + os.path.join(sys.prefix, "bin") - global called_initial_attributes_flg global gui_canvas_closed global canvas_closed @@ -938,10 +932,40 @@ def __init__(self, gui=0, mode=1, pause_time=0, gui_canvas_closed = 1 self.drawLogo = False self.enableLogo = True + + if geometry is not None: + # Extract width and height, create dict + if type(geometry) == dict: + for key in geometry: + if key not in ("width", "height"): + raise ValueError("Unexpected key %s in geometry" % key) + + width = geometry.get("width", None) + height = geometry.get("height", None) + + check_vals = [v for v in (width, height) if v is not None] + VCS_validation_functions.checkListOfNumbers(self, 'geometry', check_vals, + minvalue=1, minelements=1, maxelements=2, ints=True) + elif type(geometry) in (list, tuple): + width, height = VCS_validation_functions.checkListOfNumbers(self, 'geometry', geometry, + minvalue=1, minelements=2, + maxelements=2, ints=True) + else: + raise ValueError("geometry should be list, tuple, or dict") + geometry = {"width": width, "height": height} + + if geometry is not None and bg: + self.bgX = geometry["width"] + self.bgY = geometry["height"] + else: + # default size for bg + self.bgX = 814 + self.bgY = 606 + if backend == "vtk": - self.backend = VTKVCSBackend(self) + self.backend = VTKVCSBackend(self, geometry=geometry, bg=bg) elif isinstance(backend, vtk.vtkRenderWindow): - self.backend = VTKVCSBackend(self, renWin=backend) + self.backend = VTKVCSBackend(self, renWin=backend, bg=bg) else: warnings.warn( "Unknown backend type: '%s'\nAssiging 'as is' to " @@ -952,6 +976,7 @@ def __init__(self, gui=0, mode=1, pause_time=0, self._animate = self.backend.Animate(self) self.configurator = None + self.setcontinentsline("default") # Initial.attributes is being called in main.c, so it is not needed here! # Actually it is for taylordiagram graphic methods.... @@ -961,25 +986,7 @@ def __init__(self, gui=0, mode=1, pause_time=0, # to make sure that the initial attributes file is called only once for normalization # # purposes.... # ########################################################################## - if called_initial_attributes_flg == 0: - pth = vcs.__path__[0].split(os.path.sep) - pth = pth[:-4] # Maybe need to make sure on none framework config - pth = ['/'] + pth + ['share', 'vcs', 'initial.attributes'] - try: - vcs.scriptrun(os.path.join(*pth)) - except: - pass - self._dotdir, self._dotdirenv = vcs.getdotdirectory() - user_init = os.path.join( - os.environ['HOME'], - self._dotdir, - 'initial.attributes') - if os.path.exists(user_init): - vcs.scriptrun(user_init) - else: - shutil.copy2(os.path.join(*pth), user_init) - called_initial_attributes_flg = 1 self.canvas_template_editor = None self.ratio = 0 self._user_actions_names = [ @@ -2261,7 +2268,7 @@ def drawtextcombined(self, Tt_name=None, To_name=None, string=None, 'xbounds', 'ybounds', 'xname', 'yname', 'xunits', 'yunits', 'xweights', 'yweights', 'comment1', 'comment2', 'comment3', 'comment4', 'hms', 'long_name', 'zaxis', 'zarray', 'zname', 'zunits', 'taxis', 'tarray', 'tname', 'tunits', 'waxis', 'warray', - 'wname', 'wunits', 'bg', 'ratio', 'donotstoredisplay', 'render'] + 'wname', 'wunits', 'bg', 'ratio', 'donotstoredisplay', 'render', 'continents_line'] # def replot(self): # """ Clears and plots with last used plot arguments @@ -2407,8 +2414,17 @@ def plot(self, *actual_args, **keyargs): except: pass + if "continents_line" in keyargs: + # Stash the current line type + old_line = self.getcontinentsline() + self.setcontinentsline(keyargs["continents_line"]) + # Plot the data a = self.__plot(arglist, keyargs) + + if "continents_line" in keyargs: + # Restore the canvas line type + self.setcontinentsline(old_line) return a plot.__doc__ = plot.__doc__ % (plot_2_1D_options, plot_keywords_doc, @@ -3473,6 +3489,8 @@ def set_convert_labels(copy_mthd, test=0): t.plot(arglist[0], canvas=self, template=arglist[2], **keyargs) nm, src = self.check_name_source(None, "default", "display") dn = displayplot.Dp(nm) + dn.continents = self.getcontinentstype() + dn.continents_line = self.getcontinentsline() dn.template = arglist[2] dn.g_type = arglist[3] dn.g_name = arglist[4] @@ -3497,6 +3515,8 @@ def set_convert_labels(copy_mthd, test=0): tp = "textcombined" elif tp == "default": tp = "boxfill" + elif tp in ("xvsy", "xyvsy", "yxvsx", "scatter"): + tp = "1d" gm = vcs.elements[tp][arglist[4]] if hasattr(gm, "priority") and gm.priority == 0: return @@ -3687,7 +3707,7 @@ def set_convert_labels(copy_mthd, test=0): if hasattr(self, '_isplottinggridded'): del(self._isplottinggridded) # Get the continents for animation generation - self.animate.continents_value = self.getcontinentstype() + self.animate.continents_value = self._continentspath() # Get the option for doing graphics in the background. if bg: @@ -3727,7 +3747,7 @@ def set_convert_labels(copy_mthd, test=0): if not keyargs.get("donotstoredisplay", False): nm, src = self.check_name_source( None, "default", "display") - dn = displayplot.Dp(nm) + dn = displayplot.Dp(nm, parent=self) dn.template = arglist[2] dn.g_type = arglist[3] dn.g_name = arglist[4] @@ -3739,6 +3759,8 @@ def set_convert_labels(copy_mthd, test=0): if dn is not None: dn._template_origin = template_origin dn.ratio = Doratio + dn.continents = self.getcontinentstype() + dn.continents_line = self.getcontinentsline() dn.newelements = self.__new_elts(original_elts, new_elts) if self.mode != 0: @@ -4230,8 +4252,8 @@ def getcontinentstype(self, *args): Function: getcontinentstype Description of Function: - Retrieve continents type from VCS. Remember the value can only be between - 0 and 11. + Retrieve continents type from VCS; either an integer between 0 and 11 or the + path to a custom continentstype. Example of Use: a=vcs.init() @@ -4424,7 +4446,7 @@ def updateorientation(self, *args): # Open VCS Canvas wrapper for VCS. # # # ########################################################################## - def open(self, *args, **kargs): + def open(self, width=None, height=None, **kargs): """ Function: open @@ -4435,9 +4457,10 @@ def open(self, *args, **kargs): Example of Use: a=vcs.init() a.open() + a.open(800,600) """ - a = self.backend.open(*args, **kargs) + a = self.backend.open(width, height, **kargs) return a @@ -4649,11 +4672,10 @@ def ffmpeg(self, movie, files, bitrate=1024, rate=None, options=None): if test_file is not False: # H264 requires even numbered heights and widths width, height = self.backend.png_dimensions(test_file) - print width, height if width % 2 == 1: - width = width - 1 + width = width + 1 if height % 2 == 1: - height = height - 1 + height = height + 1 args.extend(("-vf", "scale=%d:%d" % (width, height))) if options is not None: @@ -4764,9 +4786,9 @@ def pdf(self, file, width=None, height=None, units='inches'): Example of Use: a=vcs.init() a.plot(array) - a.png('example') # Overwrite a postscript file - a.png('example', width=11.5, height= 8.5) # US Legal - a.png('example', width=21, height=29.7, units='cm') # A4 + a.pdf('example') # Overwrite a postscript file + a.pdf('example', width=11.5, height= 8.5) # US Legal + a.pdf('example', width=21, height=29.7, units='cm') # A4 """ if units not in [ 'inches', 'in', 'cm', 'mm', 'pixel', 'pixels', 'dot', 'dots']: @@ -4912,7 +4934,7 @@ def isopened(self): """Is the Canvas opened?""" return self.backend.isopened() - def _compute_width_height(self, width, height, units, ps=True): + def _compute_width_height(self, width, height, units, ps=False): dpi = 72. # dot per inches if units in ["in", "inches"]: factor = 1. @@ -5018,7 +5040,7 @@ def postscript(self, file, mode='r', orientation=None, width=None, height=None, # figures out width/height W, H = self._compute_width_height( - width, height, units) + width, height, units, ps=True) # orientation keyword is useless left for backward compatibility if not file.split('.')[-1].lower() in ['ps', 'eps']: @@ -5250,9 +5272,41 @@ def setcolorcell(self, *args): return a ########################################################################## - # # - # Set continents type wrapper for VCS. # - # # + # # + # Set continents line wrapper for VCS. # + # # + ########################################################################## + def setcontinentsline(self, line="default"): + """ + Function: setcontinentsline + + Description of Function: + One has the option of configuring the appearance of the lines used to + draw continents by providing a VCS Line object. + + Example of Use: + a = vcs.init() + line = vcs.createline() + line.width = 5 + # Use custom continents line + a.setcontinentsline(line) + # Use default line + a.setcontinentsline("default") + """ + linename = VCS_validation_functions.checkLine(self, "continentsline", line) + line = vcs.getline(linename) + self._continents_line = line + + def getcontinentsline(self): + if self._continents_line is None: + return vcs.getline("default") + else: + return self._continents_line + + ########################################################################## + # # + # Set continents type wrapper for VCS. # + # # ########################################################################## def setcontinentstype(self, value): """ @@ -5272,10 +5326,9 @@ def setcontinentstype(self, value): 4 signifies "Political Borders" (with "Fine Continents") 5 signifies "Rivers" (with "Fine Continents") - Values 6 through 11 signify the line type defined by the files - data_continent_other7 through data_continent_other12. + 6 uses a custom continent set - You can also pass a file + You can also pass a file by path. Example of Use: a=vcs.init() @@ -5283,68 +5336,26 @@ def setcontinentstype(self, value): #a.setcontinentstype(os.environ["HOME"]+"/.uvcdat/data_continents_states") a.plot(array,'default','isofill','quick') """ - nms = [ - "fine", - "coarse", - "states", - "political", - "river", - "other6", - "other7", - "other8", - "other9", - "other10", - "other11", - "other12"] - if isinstance(value, int): - if value == 0: - self._continents = None - elif 0 < value < 12: - self._continents = os.path.join( - os.environ.get( - "HOME", - ""), - os.environ.get( - vcs.getdotdirectory()[1], - vcs.getdotdirectory()[0]), - "data_continent_%s" % nms[ - value - 1]) - if not os.path.exists(self._continents): - # fallback on installed with system one - self._continents = os.path.join( - vcs.prefix, - "share", - "vcs", - "data_continent_%s" % nms[ - value - 1]) - else: - raise Exception( - "Error continents value must be file or int < 12") - elif isinstance(value, str): - self._continents = value - else: - self._continents = None - if self._continents is not None and not os.path.exists( - self._continents): + continent_path = VCS_validation_functions.checkContinents(self, value) + self._continents = value + if continent_path is not None and not os.path.exists( + continent_path): warnings.warn( - "Continents file not found: %s, substituing with coarse continents" % - self._continents) - self._continents = os.path.join( - os.environ.get( - "HOME", - ""), - os.environ.get( - vcs.getdotdirectory()[1], - vcs.getdotdirectory()[0]), - "data_continent_coarse") - if not os.path.exists(self._continent): - self._continents = os.path.join( - vcs.prefix, - "share", - "vcs", - "data_continent_coarse") + "Continents file not found: %s, substituing with fine continents" % + continent_path) + self._continents = 1 return + def _continentspath(self): + try: + path = VCS_validation_functions.checkContinents(self, self._continents) + if path is None and self._continents != 0: + return VCS_validation_functions.checkContinents(self, 1) + else: + return path + except: + return VCS_validation_functions.checkContinents(self, 1) + ########################################################################## # # # Screen GIF wrapper for VCS. # diff --git a/Packages/vcs/Lib/VCS_validation_functions.py b/Packages/vcs/Lib/VCS_validation_functions.py index 000b0bac5c..70a51753ac 100644 --- a/Packages/vcs/Lib/VCS_validation_functions.py +++ b/Packages/vcs/Lib/VCS_validation_functions.py @@ -44,7 +44,7 @@ def matchVcsColor(r, g, b, colormap="default"): color = None cmap = vcs.elements["colormap"][colormap] for i in range(256): - r2, g2, b2 = cmap.index[i] + r2, g2, b2 = cmap.index[i][:3] rms = numpy.sqrt((r2 - r) ** 2 + (g2 - g) ** 2 + (b2 - b) ** 2) if rms < rmsmin: rmsmin = rms @@ -87,6 +87,44 @@ def checkElements(self, name, value, function): return value +def checkContinents(self, value): + import os + nms = [ + "fine", + "coarse", + "states", + "political", + "river", + "other7"] + path = None + if isinstance(value, int): + if value == 0: + path = None + elif 0 < value < 7: + path = os.path.join( + os.environ.get( + "HOME", + ""), + os.environ.get( + vcs.getdotdirectory()[1], + vcs.getdotdirectory()[0]), + "data_continent_%s" % nms[ + value - 1]) + if not os.path.exists(path): + # fallback on installed with system one + path = os.path.join( + vcs.prefix, + "share", + "vcs", + "data_continent_%s" % nms[ + value - 1]) + else: + raise ValueError("Continents value must be file or int < 12") + else: + path = value + return path + + def checkContType(self, name, value): checkName(self, name, value) checkInt(self, name, value, minvalue=0) @@ -676,11 +714,24 @@ def checkColor(self, name, value, NoneOk=False): if isinstance(value, unicode): value = str(value) if isinstance(value, str): - value = color2vcs(value) + # Ok it is a string let's see if that is a valid color name + r, g, b = vcs.str2rgb(value) + if r is None: # ok not a valid color + checkedRaise(self, value, ValueError, + 'Invalid color name: %s' % value) + return r / 2.55, g / 2.55, b / 2.55, 100. if value is None and NoneOk: return value if isinstance(value, int) and value in range(0, 256): return value + elif isinstance(value, (list, tuple)): # for r,g,b,a tuples + value = checkListOfNumbers(self, name, value, + minvalue=0, maxvalue=100., + minelements=3, + maxelements=4) + if len(value) == 3: + value.append(100.) + return value else: checkedRaise( self, @@ -688,15 +739,17 @@ def checkColor(self, name, value, NoneOk=False): ValueError, 'The ' + name + - ' attribute must be an integer value within the range 0 to 255.') + ' attribute must be an integer value within the range 0 to 255.' + + 'a color name or an (r,g,b,[a]) tuple/list)') def checkColorList(self, name, value): checkName(self, name, value) value = checkListTuple(self, name, value) + returned_values = [] for v in value: - checkColor(self, name + '_list_value', v, NoneOk=True) - return value + returned_values.append(checkColor(self, name + '_list_value', v, NoneOk=True)) + return returned_values def checkIsolineLevels(self, name, value): @@ -746,7 +799,9 @@ def checkIndicesList(self, name, value): def checkOpacity(self, name, value): checkName(self, name, value) - if isinstance(value, int) and value in range(0, 101): + if value is None: # not overwritten by user + return value + if 0. <= value <= 100.: return value else: checkedRaise( @@ -889,7 +944,7 @@ def checkTextOrientation(self, name, value): return value -def checkTextsList(self, name, value): +def checkTextsList(self, name, value, storeName=False): import queries checkName(self, name, value) if isinstance(value, int): @@ -907,11 +962,20 @@ def checkTextsList(self, name, value): hvalue.append(v) elif isinstance(v, str): if v in vcs.listelements("textcombined"): - hvalue.append(vcs.gettextcombined(v)) + if storeName: + hvalue.append(vcs.gettextcombined(v).name) + else: + hvalue.append(vcs.gettextcombined(v)) elif v in vcs.listelements("texttable"): - hvalue.append(vcs.gettexttable(v)) + if storeName: + hvalue.append(vcs.gettexttable(v).name) + else: + hvalue.append(vcs.gettexttable(v)) elif v in vcs.listelements("textorientation"): - hvalue.append(vcs.gettextorientation(v)) + if storeName: + hvalue.append(vcs.gettextorientation(v).name) + else: + hvalue.append(vcs.gettextorientation(v)) else: checkedRaise( self, @@ -1814,22 +1878,22 @@ def _setprojection(self, value): self._projection = value projection = property(_getprojection, _setprojection) -########################################################################## -# # +# +# # Function: add_level_ext_1 # -# # +# # Description of Function: # -# Private function that adds the extension triangle to the left of the # -# legend on the plot # -# # -# # +# Private function that adds the extension triangle to the left of the # +# legend on the plot # +# +# # Example of Use: # -# add_level_ext_1(self, ext_value) # -# where: self is the class (e.g., Gfm) # -# ext_value is either 'n' to remove the triangle on the # -# legend or 'y' to show the triangle on the triangle # -# # -########################################################################## +# add_level_ext_1(self, ext_value) # +# where: self is the class (e.g., Gfm) # +# ext_value is either 'n' to remove the triangle on the # +# legend or 'y' to show the triangle on the triangle # +# +# def add_level_ext_1(self, ext_value): @@ -1870,22 +1934,22 @@ def add_level_ext_1(self, ext_value): self.levels = ret_tup return self.levels -########################################################################## -# # +# +# # Function: add_level_ext_2 # -# # +# # Description of Function: # -# Private function that adds the extension triangle to the right of the # -# legend on the plot # -# # -# # +# Private function that adds the extension triangle to the right of the # +# legend on the plot # +# +# # Example of Use: # -# add_level_ext_2(self, ext_value) # -# where: self is the class (e.g., Gfm) # -# ext_value is either 'n' to remove the triangle on the # -# legend or 'y' to show the triangle on the triangle # -# # -########################################################################## +# add_level_ext_2(self, ext_value) # +# where: self is the class (e.g., Gfm) # +# ext_value is either 'n' to remove the triangle on the # +# legend or 'y' to show the triangle on the triangle # +# +# def add_level_ext_2(self, ext_value): @@ -1972,3 +2036,31 @@ def _setvp(self, value): maxvalue=1.) self._viewport = value viewport = property(_getvp, _setvp) + + +def _getfillareaopacity(self): + return self._fillareaopacity + + +def _setfillareaopacity(self, value): + if value is not None: + value = checkOpacitiesList( + self, + 'fillareaopacity', + value) + self._fillareaopacity = value +fillareaopacity = property(_getfillareaopacity, _setfillareaopacity) + + +def _getfillareacolors(self): + return self._fillareacolors + + +def _setfillareacolors(self, value): + if value is not None: + value = checkColorList( + self, + 'fillareacolors', + value) + self._fillareacolors = value +fillareacolors = property(_getfillareacolors, _setfillareacolors) diff --git a/Packages/vcs/Lib/VTKPlots.py b/Packages/vcs/Lib/VTKPlots.py index 2ea30ae1f8..2c24b61370 100644 --- a/Packages/vcs/Lib/VTKPlots.py +++ b/Packages/vcs/Lib/VTKPlots.py @@ -29,7 +29,7 @@ def __init__(self, parent): class VTKVCSBackend(object): - def __init__(self, canvas, renWin=None, debug=False, bg=None): + def __init__(self, canvas, renWin=None, debug=False, bg=None, geometry=None): self._lastSize = None self.canvas = canvas self.renWin = renWin @@ -57,6 +57,7 @@ def __init__(self, canvas, renWin=None, debug=False, bg=None): # Initially set to 16x Multi-Sampled Anti-Aliasing self.antialiasing = 8 self._rasterPropsInVectorFormats = False + self._initialGeometry = geometry if renWin is not None: self.renWin = renWin @@ -234,10 +235,14 @@ def configureEvent(self, obj, ev): parg.append(d.g_type) parg.append(d.g_name) plots_args.append(parg) + kwarg = {} if d.ratio is not None: - key_args.append({"ratio": d.ratio}) - else: - key_args.append({}) + kwarg["ratio"] = d.ratio + + kwarg["continents"] = d.continents + kwarg["continents_line"] = d.continents_line + + key_args.append(kwarg) # Have to pull out the UI layer so it doesn't get borked by the clear self.hideGUI() @@ -317,13 +322,25 @@ def createRenWin(self, *args, **kargs): # turning off antialiasing by default # mostly so that pngs are same accross platforms self.renWin.SetMultiSamples(self.antialiasing) - self.initialSize() + if self._initialGeometry is not None: + width = self._initialGeometry["width"] + height = self._initialGeometry["height"] + else: + width = None + height = None + if "width" in kargs and kargs["width"] is not None: + width = kargs["width"] + if "height" in kargs and kargs["height"] is not None: + height = kargs["height"] + self.initialSize(width, height) if self.renderer is None: self.renderer = self.createRenderer() if not self.bg: self.createDefaultInteractor(self.renderer) self.renWin.AddRenderer(self.renderer) + if self.bg: + self.renWin.SetOffScreenRendering(True) if "open" in kargs and kargs["open"]: self.renWin.Render() @@ -422,8 +439,13 @@ def portrait(self, W=-99, H=-99, x=-99, y=-99, clear=0): def landscape(self, W=-99, H=-99, x=-99, y=-99, clear=0): self.resize_or_rotate_window(W, H, x, y, clear) - def initialSize(self): + def initialSize(self, width=None, height=None): # Gets user physical screen dimensions + if isinstance(width, int) and isinstance(height, int): + self.renWin.SetSize(width, height) + self._lastSize = (width, height) + return + screenSize = self.renWin.GetScreenSize() try: # following works on some machines but not all @@ -437,8 +459,8 @@ def initialSize(self): self.renWin.SetSize(bgX, bgY) self._lastSize = (bgX, bgY) - def open(self): - self.createRenWin(open=True) + def open(self, width=None, height=None, **kargs): + self.createRenWin(open=True, width=width, height=height) def close(self): if self.renWin is None: @@ -458,6 +480,7 @@ def isopened(self): def geometry(self, x, y, *args): self.renWin.SetSize(x, y) + self._lastSize = (x, y) def flush(self): if self.renWin is not None: @@ -483,6 +506,8 @@ def plot(self, data1, data2, template, gtype, gname, bg, *args, **kargs): tt = vcs.elements["texttable"][tt] to = vcs.elements["textorientation"][to] gm = tt + elif gtype in ("xvsy", "xyvsy", "yxvsx", "scatter"): + gm = vcs.elements["1d"][gname] else: gm = vcs.elements[gtype][gname] tpl = vcs.elements["template"][template] @@ -534,12 +559,14 @@ def plot(self, data1, data2, template, gtype, gname, bg, *args, **kargs): cmap=self.canvas.colormap) returned["vtk_backend_line_actors"] = actors create_renderer = True + # bounds = vtk_backend_grid.GetBounds() if vtk_backend_grid else None for act, geo in actors: ren = self.fitToViewport( act, gm.viewport, wc=gm.worldcoordinate, geo=geo, + # geoBounds=bounds, priority=gm.priority, create_renderer=create_renderer) create_renderer = False @@ -550,11 +577,12 @@ def plot(self, data1, data2, template, gtype, gname, bg, *args, **kargs): returned["vtk_backend_marker_actors"] = actors create_renderer = True for g, gs, pd, act, geo in actors: - ren = self.fitToViewport( + ren = self.fitToViewportBounds( act, gm.viewport, wc=gm.worldcoordinate, - geo=geo, + geoBounds=None, + geo=None, priority=gm.priority, create_renderer=create_renderer) create_renderer = False @@ -568,11 +596,12 @@ def plot(self, data1, data2, template, gtype, gname, bg, *args, **kargs): returned["vtk_backend_fillarea_actors"] = actors create_renderer = True for act, geo in actors: - ren = self.fitToViewport( + ren = self.fitToViewportBounds( act, gm.viewport, wc=gm.worldcoordinate, - geo=geo, + geoBounds=None, + geo=None, priority=gm.priority, create_renderer=create_renderer) create_renderer = False @@ -650,16 +679,16 @@ def onClosing(self, cell): if hasattr(plot, 'onClosing'): plot.onClosing(cell) - def plotContinents(self, x1, x2, y1, y2, projection, wrap, tmpl): - contData = vcs2vtk.prepContinents(self.canvas._continents) + def plotContinents(self, x1, x2, y1, y2, projection, wrap, tmpl, **kargs): + contData = vcs2vtk.prepContinents(self.canvas._continentspath()) contMapper = vtk.vtkPolyDataMapper() contMapper.SetInputData(contData) contActor = vtk.vtkActor() contActor.SetMapper(contMapper) - contActor.GetProperty().SetColor(0., 0., 0.) contActor = vcs2vtk.doWrap( contActor, [ x1, x2, y1, y2], wrap, fastClip=False) + if projection.type != "linear": contData = contActor.GetMapper().GetInput() cpts = contData.GetPoints() @@ -669,22 +698,50 @@ def plotContinents(self, x1, x2, y1, y2, projection, wrap, tmpl): contMapper.SetInputData(contData) contActor = vtk.vtkActor() contActor.SetMapper(contMapper) - contActor.GetProperty().SetColor(0., 0., 0.) else: geo = None + contLine = self.canvas.getcontinentsline() + line_prop = contActor.GetProperty() + + # Width + line_prop.SetLineWidth(contLine.width[0]) + + # Color + if contLine.colormap: + cmap = vcs.getcolormap(contLine.colormap) + else: + cmap = self.canvas.getcolormap() + + if type(contLine.color[0]) in (float, int): + c_index = int(contLine.color[0]) + color = cmap.index[c_index] + else: + color = contLine.color[0] + + color = [c / 100. for c in color] + + line_prop.SetColor(*color[:3]) + if len(color) == 4: + line_prop.SetOpacity(color[3]) + + # Stippling + vcs2vtk.stippleLine(line_prop, contLine.type[0]) + # vtk_backend_grid = kargs.get("vtk_backend_grid", None) self.fitToViewport(contActor, [tmpl.data.x1, tmpl.data.x2, tmpl.data.y1, tmpl.data.y2], wc=[x1, x2, y1, y2], geo=geo, + # geoBounds=vtk_backend_grid.GetBounds(), priority=tmpl.data.priority, create_renderer=True) return {} - def renderTemplate(self, tmpl, data, gm, taxis, zaxis): + def renderTemplate(self, tmpl, data, gm, taxis, zaxis, **kargs): # ok first basic template stuff, let's store the displays # because we need to return actors for min/max/mean - displays = tmpl.plot(self.canvas, data, gm, bg=self.bg) + displays = tmpl.plot(self.canvas, data, gm, bg=self.bg, + vtk_backend_grid=kargs.get("vtk_backend_grid")) returned = {} for d in displays: if d is None: @@ -1005,8 +1062,16 @@ def png(self, file, width=None, height=None, except: pass + sz = self.renWin.GetSize() if width is not None and height is not None: - self.renWin.SetSize(width, height) + if self.renWin.GetSize() != (width, height): + user_dims = (self.canvas.bgX, self.canvas.bgY, sz[0], sz[1]) + self.renWin.SetSize(width, height) + self.canvas.bgX = width + self.canvas.bgY = height + self.configureEvent(None, None) + else: + user_dims = None imgfiltr = vtk.vtkWindowToImageFilter() imgfiltr.SetInput(self.renWin) @@ -1024,7 +1089,15 @@ def png(self, file, width=None, height=None, writer = vtk.vtkPNGWriter() writer.SetInputConnection(imgfiltr.GetOutputPort()) writer.SetFileName(file) + # add text chunks to the writer + m = args.get('metadata', {}) + for k, v in m.iteritems(): + writer.AddText(k, v) writer.Write() + if user_dims is not None: + self.canvas.bgX, self.canvas.bgY, w, h = user_dims + self.renWin.SetSize(w, h) + self.configureEvent(None, None) def cgm(self, file): if self.renWin is None: @@ -1109,6 +1182,133 @@ def scaleLogo(self): self.setLayer(self.logoRenderer, 1) self.renWin.AddRenderer(self.logoRenderer) + def fitToViewportBounds(self, Actor, vp, wc=None, geoBounds=None, geo=None, priority=None, + create_renderer=False): + + # Data range in World Coordinates + if priority == 0: + return None + vp = tuple(vp) + if wc is None: + Xrg = list(Actor.GetXRange()) + Yrg = list(Actor.GetYRange()) + else: + Xrg = [float(wc[0]), float(wc[1])] + Yrg = [float(wc[2]), float(wc[3])] + + wc_used = (float(Xrg[0]), float(Xrg[1]), float(Yrg[0]), float(Yrg[1])) + sc = self.renWin.GetSize() + + # Ok at this point this is all the info we need + # we can determine if it's a unique renderer or not + # let's see if we did this already. + if not create_renderer and\ + (vp, wc_used, sc, priority) in self._renderers.keys(): + # yep already have one, we will use this Renderer + Renderer, xScale, yScale = self._renderers[ + (vp, wc_used, sc, priority)] + else: + Renderer = self.createRenderer() + self.renWin.AddRenderer(Renderer) + Renderer.SetViewport(vp[0], vp[2], vp[1], vp[3]) + + if Yrg[0] > Yrg[1]: + # Yrg=[Yrg[1],Yrg[0]] + # T.RotateY(180) + Yrg = [Yrg[1], Yrg[0]] + flipY = True + else: + flipY = False + if Xrg[0] > Xrg[1]: + Xrg = [Xrg[1], Xrg[0]] + flipX = True + else: + flipX = False + + if geo is not None and geoBounds is not None: + Xrg = geoBounds[0:2] + Yrg = geoBounds[2:4] + + wRatio = float(sc[0]) / float(sc[1]) + dRatio = (Xrg[1] - Xrg[0]) / (Yrg[1] - Yrg[0]) + vRatio = float(vp[1] - vp[0]) / float(vp[3] - vp[2]) + + if wRatio > 1.: # landscape orientated window + yScale = 1. + xScale = vRatio * wRatio / dRatio + else: + xScale = 1. + yScale = dRatio / (vRatio * wRatio) + self.setLayer(Renderer, priority) + self._renderers[ + (vp, wc_used, sc, priority)] = Renderer, xScale, yScale + + xc = xScale * float(Xrg[1] + Xrg[0]) / 2. + yc = yScale * float(Yrg[1] + Yrg[0]) / 2. + yd = yScale * float(Yrg[1] - Yrg[0]) / 2. + cam = Renderer.GetActiveCamera() + cam.ParallelProjectionOn() + cam.SetParallelScale(yd) + cd = cam.GetDistance() + cam.SetPosition(xc, yc, cd) + cam.SetFocalPoint(xc, yc, 0.) + if geo is None: + if flipY: + cam.Elevation(180.) + cam.Roll(180.) + pass + if flipX: + cam.Azimuth(180.) + + T = vtk.vtkTransform() + T.Scale(xScale, yScale, 1.) + + Actor.SetUserTransform(T) + + mapper = Actor.GetMapper() + planeCollection = mapper.GetClippingPlanes() + + # We have to transform the hardware clip planes as well + if (planeCollection is not None): + planeCollection.InitTraversal() + plane = planeCollection.GetNextItem() + while (plane): + origin = plane.GetOrigin() + inOrigin = [origin[0], origin[1], origin[2], 1.0] + outOrigin = [origin[0], origin[1], origin[2], 1.0] + + normal = plane.GetNormal() + inNormal = [normal[0], normal[1], normal[2], 0.0] + outNormal = [normal[0], normal[1], normal[2], 0.0] + + T.MultiplyPoint(inOrigin, outOrigin) + if (outOrigin[3] != 0.0): + outOrigin[0] /= outOrigin[3] + outOrigin[1] /= outOrigin[3] + outOrigin[2] /= outOrigin[3] + plane.SetOrigin(outOrigin[0], outOrigin[1], outOrigin[2]) + + # For normal matrix, compute the transpose of inverse + normalTransform = vtk.vtkTransform() + normalTransform.DeepCopy(T) + mat = vtk.vtkMatrix4x4() + normalTransform.GetTranspose(mat) + normalTransform.GetInverse(mat) + normalTransform.SetMatrix(mat) + normalTransform.MultiplyPoint(inNormal, outNormal) + if (outNormal[3] != 0.0): + outNormal[0] /= outNormal[3] + outNormal[1] /= outNormal[3] + outNormal[2] /= outNormal[3] + plane.SetNormal(outNormal[0], outNormal[1], outNormal[2]) + plane = planeCollection.GetNextItem() + + Renderer.AddActor(Actor) + return Renderer + + # Deprecated: It is going to be removed in the future. + # This is the same as fitToViewportBounds but it also computes the + # geographic projection bounds using an array of points. def fitToViewport(self, Actor, vp, wc=None, geo=None, priority=None, create_renderer=False): @@ -1156,17 +1356,17 @@ def fitToViewport(self, Actor, vp, wc=None, geo=None, priority=None, pt = vtk.vtkPoints() Xrg2 = [1.e20, -1.e20] Yrg2 = [1.e20, -1.e20] - if geo.GetDestinationProjection().GetName() in ["aeqd", ]: + if geo.GetDestinationProjection().GetName() in ["aeqd", "robin", "moll"]: # These need more precision to compute actual range Npts = 250 else: Npts = 50 NGridCover = 0 pt.SetNumberOfPoints(Npts * Npts) - for x in numpy.arange( - Xrg[0], Xrg[1], (Xrg[1] - Xrg[0]) / Npts): - for y in numpy.arange( - Yrg[0], Yrg[1], (Yrg[1] - Yrg[0]) / Npts): + for x in numpy.linspace( + Xrg[0], Xrg[1], Npts, endpoint=True): + for y in numpy.linspace( + Yrg[0], Yrg[1], Npts, endpoint=True): pt.InsertPoint(NGridCover, x, y, 0) NGridCover += 1 pts = vtk.vtkPoints() @@ -1299,6 +1499,10 @@ def update_input(self, vtkobjects, array1, array2=None, update=True): vg.GetPointData().AddArray(w) ports[0].SetInputData(vg) + projection = None + if "vtk_backend_geo" in vtkobjects: + projection = vtkobjects["vtk_backend_geo"] + if "vtk_backend_actors" in vtkobjects: i = 0 for a in vtkobjects["vtk_backend_actors"]: @@ -1332,7 +1536,7 @@ def update_input(self, vtkobjects, array1, array2=None, update=True): stripper.GetOutputPort()) stripper.Update() tprops = vtkobjects[ - "vtk_backend_contours_labels_text_properties"] + "vtk_backend_contours_labels_text_properties"][i] mapper.GetPolyDataMapper().SetLookupTable(lut) mapper.GetPolyDataMapper( ).SetScalarModeToUsePointData() @@ -1345,8 +1549,9 @@ def update_input(self, vtkobjects, array1, array2=None, update=True): mapper.SetScalarModeToUseCellData() mapper.SetScalarRange(rg[0], rg[1]) act.SetMapper(mapper) - act = vcs2vtk.doWrap(a[0], wrp) - a[0].SetMapper(act.GetMapper()) + if not projection: + # Wrap only if the data is not projected + act = vcs2vtk.doWrap(a[0], wrp) i += 1 taxis = array1.getTime() diff --git a/Packages/vcs/Lib/__init__.py b/Packages/vcs/Lib/__init__.py index 5f09d7acc7..cd71e3db2f 100755 --- a/Packages/vcs/Lib/__init__.py +++ b/Packages/vcs/Lib/__init__.py @@ -29,112 +29,67 @@ sample_data = cdat_info.get_sampledata_path() cdat_info.pingPCMDIdb("cdat", "vcs") from utils import * # noqa +import colors # noqa import Canvas from vcshelp import * # noqa from queries import * # noqa import install_vcs import os from manageElements import * # noqa +import collections _colorMap = "default" _default_time_units = 'days since 2000' - -########################################################################## -# # +# +# # Set up the User's directory if necessary. Copy files from # # $PYTHONHOME/bin to the newly created $HOME/.uvcdat directory. # -# # -########################################################################## +# +# install_vcs._files() -########################################################################## -# # +# +# # Set the user's XGKSFontDir environment variable. # -# # -########################################################################## +# +# install_vcs._XGKSFontDir() -########################################################################## -# # -# Construct a VCS Canvas Object. # -# # -########################################################################## -# Initialize the list of taylor diagrams objects +elements = collections.OrderedDict() +elements["list"] = {} +elements["projection"] = {} +elements["texttable"] = {} +elements["textorientation"] = {} +elements["textcombined"] = {} +elements["line"] = {} +elements["marker"] = {} +elements["fillarea"] = {} +elements["font"] = {} +elements["fontNumber"] = {} +elements["boxfill"] = {} +elements["isofill"] = {} +elements["isoline"] = {} +elements["meshfill"] = {} +elements["3d_scalar"] = {} +elements["3d_dual_scalar"] = {} +elements["3d_vector"] = {} +elements["template"] = {} +elements["taylordiagram"] = {} +elements["1d"] = {} +elements["vector"] = {} +elements["yxvsx"] = {} +elements["xyvsy"] = {} +elements["xvsy"] = {} +elements["scatter"] = {} +elements["colormap"] = {} +elements["display"] = {} - -def init(gui=0, mode=1, pause_time=0, call_from_gui=0, size=None, - backend="vtk"): - ''' - Function: init # Initialize, Construct a VCS Canvas Object - - Description of Function: - Construct the VCS Canas object. There can only be at most 8 VCS - Canvases open at any given time. - - Graphics User Interface Mode: - gui = 0|1 if ==1, create the canvas with GUI controls - (Default setting is *not* to display GUI controls) - - Example of Use: - import vcs,cu - - file=cu.open('filename.nc') - slab=file.getslab('variable') - a=vcs.init() # This examples constructs 4 VCS Canvas - a.plot(slab) # Plot slab using default settings - b=vcs.init() # Construct VCS object - template=b.gettemplate('AMIP') # Get 'example' template object - b.plot(slab,template) # Plot slab using template 'AMIP' - c=vcs.init() # Construct new VCS object - isofill=c.getisofill('quick') # Get 'quick' isofill graphics method - c.plot(slab,template,isofill) # Plot slab using template and isofill objects - d=vcs.init() # Construct new VCS object - isoline=c.getisoline('quick') # Get 'quick' isoline graphics method - c.plot(isoline,slab,template) # Plot slab using isoline and template objects -''' - canvas = Canvas.Canvas( - gui=gui, - mode=mode, - pause_time=pause_time, - call_from_gui=call_from_gui, - size=size, - backend=backend) - global canvaslist - canvaslist.append(canvas) - return canvas - - -elements = {"boxfill": {}, - "isofill": {}, - "isoline": {}, - "meshfill": {}, - "3d_scalar": {}, - "3d_dual_scalar": {}, - "3d_vector": {}, - "template": {}, - "taylordiagram": {}, - "1d": {}, - "vector": {}, - "yxvsx": {}, - "xyvsy": {}, - "xvsy": {}, - "scatter": {}, - "list": {}, - "projection": {}, - "fillarea": {}, - "texttable": {}, - "textorientation": {}, - "textcombined": {}, - "line": {}, - "marker": {}, - "colormap": {}, - "font": {}, - "fontNumber": {}, - "display": {}, - } +_protected_elements = {} +for k in elements.keys(): + _protected_elements[k] = set() dic = {} for i in range(-5, 5): @@ -145,7 +100,7 @@ def init(gui=0, mode=1, pause_time=0, call_from_gui=0, size=None, dic[i * 360 + j] = "%iE" % j else: dic[i * 360] = "0" -vcs.elements["list"]["Lon30"] = dic +elements["list"]["Lon30"] = dic dic = {} for j in range(-80, 81, 20): @@ -157,7 +112,7 @@ def init(gui=0, mode=1, pause_time=0, call_from_gui=0, size=None, dic[0] = "Eq" dic[-90] = "90S" dic[90] = "90N" -vcs.elements["list"]["Lat20"] = dic +elements["list"]["Lat20"] = dic d, e = vcs.getdotdirectory() i = 0 @@ -192,6 +147,7 @@ def init(gui=0, mode=1, pause_time=0, call_from_gui=0, size=None, p = projection.Proj("default") p = projection.Proj("linear") line.Tl("default") +line.Tl("solid") line.Tl("deftaylordot") line.type = ["dot"] texttable.Tt("default") @@ -249,5 +205,74 @@ def init(gui=0, mode=1, pause_time=0, call_from_gui=0, size=None, t = taylor.Gtd("default") +pth = vcs.__path__[0].split(os.path.sep) +pth = pth[:-4] # Maybe need to make sure on none framework config +pth = ['/'] + pth + ['share', 'vcs', 'initial.attributes'] +try: + vcs.scriptrun(os.path.join(*pth)) +except: + pass + +for typ in elements.keys(): + elts = elements[typ] + for k in elts.keys(): # let's save which elements should be saved and untouched + _protected_elements[typ].add(k) + +_dotdir, _dotdirenv = vcs.getdotdirectory() +user_init = os.path.join( + os.environ['HOME'], + _dotdir, + 'initial.attributes') +if os.path.exists(user_init): + vcs.scriptrun(user_init) + canvaslist = [] -# meshfills=[meshfill.Gfm()] +# +# +# Construct a VCS Canvas Object. # +# +# + + +def init(gui=0, mode=1, pause_time=0, call_from_gui=0, size=None, + backend="vtk", geometry=None, bg=None): + ''' + Function: init # Initialize, Construct a VCS Canvas Object + + Description of Function: + Construct the VCS Canas object. There can only be at most 8 VCS + Canvases open at any given time. + + Graphics User Interface Mode: + gui = 0|1 if ==1, create the canvas with GUI controls + (Default setting is *not* to display GUI controls) + + Example of Use: + import vcs,cu + + file=cu.open('filename.nc') + slab=file.getslab('variable') + a=vcs.init() # This examples constructs 4 VCS Canvas + a.plot(slab) # Plot slab using default settings + b=vcs.init() # Construct VCS object + template=b.gettemplate('AMIP') # Get 'example' template object + b.plot(slab,template) # Plot slab using template 'AMIP' + c=vcs.init() # Construct new VCS object + isofill=c.getisofill('quick') # Get 'quick' isofill graphics method + c.plot(slab,template,isofill) # Plot slab using template and isofill objects + d=vcs.init() # Construct new VCS object + isoline=c.getisoline('quick') # Get 'quick' isoline graphics method + c.plot(isoline,slab,template) # Plot slab using isoline and template objects +''' + canvas = Canvas.Canvas( + gui=gui, + mode=mode, + pause_time=pause_time, + call_from_gui=call_from_gui, + size=size, + backend=backend, + geometry=geometry, + bg=bg) + global canvaslist + canvaslist.append(canvas) + return canvas diff --git a/Packages/vcs/Lib/boxfill.py b/Packages/vcs/Lib/boxfill.py index 4ff2d68da1..773a44b161 100755 --- a/Packages/vcs/Lib/boxfill.py +++ b/Packages/vcs/Lib/boxfill.py @@ -124,7 +124,6 @@ def process_src(nm, code): fac = [] fai = [] fas = [] - fao = [] badfa = True for l in lines: if l.find("(id=") > -1: @@ -140,7 +139,6 @@ def process_src(nm, code): fac.append(fa.color[0]) fai.append(fa.index[0]) fas.append(fa.style[0]) - fao.append(fa.opacity[0]) i += 1 gm.levels = levs if badfa: @@ -149,7 +147,6 @@ def process_src(nm, code): gm.fillareacolor = fac gm.fillareaindices = fai gm.fillareastyle = fas[0] - gm.fillareaopacity = fao[0] ############################################################################# # # # Boxfill (Gfb) graphics method Class. # @@ -552,17 +549,7 @@ def _setcolor_2(self, value): levels = VCS_validation_functions.levels - def _getfillareacolors(self): - return self._fillareacolors - - def _setfillareacolors(self, value): - if value is not None: - value = VCS_validation_functions.checkColorList( - self, - 'fillareacolors', - value) - self._fillareacolors = value - fillareacolors = property(_getfillareacolors, _setfillareacolors) + fillareacolors = VCS_validation_functions.fillareacolors def _getfillareaindices(self): return self._fillareaindices @@ -576,18 +563,6 @@ def _setfillareaindices(self, value): self._fillareaindices = value fillareaindices = property(_getfillareaindices, _setfillareaindices) - def _getfillareaopacity(self): - return self._fillareaopacity - - def _setfillareaopacity(self, value): - if value is not None: - value = VCS_validation_functions.checkOpacitiesList( - self, - 'fillareaopacity', - value) - self._fillareaopacity = value - fillareaopacity = property(_getfillareaopacity, _setfillareaopacity) - def _getfillareastyle(self): return self._fillareastyle @@ -599,6 +574,8 @@ def _setfillareastyle(self, value): self._fillareastyle = value fillareastyle = property(_getfillareastyle, _setfillareastyle) + fillareaopacity = VCS_validation_functions.fillareaopacity + ext_1 = VCS_validation_functions.ext_1 ext_2 = VCS_validation_functions.ext_2 diff --git a/Packages/vcs/Lib/colormap.py b/Packages/vcs/Lib/colormap.py index f4536443b4..81c0926fee 100644 --- a/Packages/vcs/Lib/colormap.py +++ b/Packages/vcs/Lib/colormap.py @@ -33,7 +33,7 @@ def process_src(nm, code): for i in range(255): val = numbers[i * 3:i * 3 + 3] if val != (): - d[i] = list(val) + d[i] = list(val) + [100] cp = Cp(nm) cp.index.data.update(d) @@ -42,58 +42,109 @@ class RGB_Table(UserDict): __slots__ = ["data", ] def __init__(self, name, dict=None): - self.data = {0: [100, 100, 100], 1: [0, 0, 0], 2: [85, 85, 85], 3: [32, 32, 32], 4: [100, 100, 100], - 5: [100, 100, 0], 6: [0, 3, 100], 7: [0, 6, 100], 8: [0, 9, 100], 9: [0, 12, 100], - 10: [0, 15, 100], 11: [0, 18, 100], 12: [0, 21, 100], 13: [0, 24, 100], 14: [0, 27, 100], - 15: [0, 30, 100], 16: [0, 33, 100], 17: [0, 36, 100], 18: [0, 39, 100], 19: [0, 42, 100], - 20: [0, 45, 100], 21: [0, 48, 100], 22: [0, 51, 100], 23: [0, 55, 100], 24: [0, 57, 100], - 25: [0, 60, 100], 26: [0, 64, 100], 27: [0, 67, 100], 28: [0, 69, 100], 29: [0, 73, 100], - 30: [0, 76, 100], 31: [0, 78, 100], 32: [0, 82, 100], 33: [0, 85, 100], 34: [0, 88, 100], - 35: [0, 91, 100], 36: [0, 94, 100], 37: [0, 97, 100], 38: [0, 100, 100], 39: [0, 100, 97], - 40: [0, 100, 94], 41: [0, 100, 91], 42: [0, 100, 88], 43: [0, 100, 85], 44: [0, 100, 82], - 45: [0, 100, 78], 46: [0, 100, 76], 47: [0, 100, 73], 48: [0, 100, 69], 49: [0, 100, 67], - 50: [0, 100, 64], 51: [0, 100, 60], 52: [0, 100, 57], 53: [0, 100, 55], 54: [0, 100, 51], - 55: [0, 100, 48], 56: [0, 100, 45], 57: [0, 100, 42], 58: [0, 100, 39], 59: [0, 100, 36], - 60: [0, 100, 33], 61: [0, 100, 30], 62: [0, 100, 27], 63: [0, 100, 24], 64: [0, 100, 21], - 65: [0, 100, 18], 66: [0, 100, 15], 67: [0, 100, 12], 68: [0, 100, 9], 69: [0, 100, 6], - 70: [0, 100, 3], 71: [0, 100, 0], 72: [3, 100, 0], 73: [6, 100, 0], 74: [9, 100, 0], - 75: [12, 100, 0], 76: [15, 100, 0], 77: [18, 100, 0], 78: [21, 100, 0], 79: [24, 100, 0], - 80: [27, 100, 0], 81: [30, 100, 0], 82: [33, 100, 0], 83: [36, 100, 0], 84: [39, 100, 0], - 85: [42, 100, 0], 86: [45, 100, 0], 87: [48, 100, 0], 88: [51, 100, 0], 89: [55, 100, 0], - 90: [57, 100, 0], 91: [60, 100, 0], 92: [64, 100, 0], 93: [67, 100, 0], 94: [69, 100, 0], - 95: [73, 100, 0], 96: [76, 100, 0], 97: [78, 100, 0], 98: [82, 100, 0], 99: [85, 100, 0], - 100: [88, 100, 0], 101: [91, 100, 0], 102: [94, 100, 0], 103: [97, 100, 0], 104: [100, 100, 0], - 105: [100, 98, 0], 106: [100, 96, 0], 107: [100, 94, 0], 108: [100, 92, 0], 109: [100, 90, 0], - 110: [100, 88, 0], 111: [100, 85, 0], 112: [100, 84, 0], 113: [100, 82, 0], 114: [100, 80, 0], - 115: [100, 78, 0], 116: [100, 76, 0], 117: [100, 74, 0], 118: [100, 71, 0], 119: [100, 69, 0], - 120: [100, 67, 0], 121: [100, 65, 0], 122: [100, 64, 0], 123: [100, 62, 0], 124: [100, 59, 0], - 125: [100, 57, 0], 126: [100, 55, 0], 127: [100, 53, 0], 128: [100, 51, 0], 129: [100, 49, 0], - 130: [100, 47, 0], 131: [100, 45, 0], 132: [100, 43, 0], 133: [100, 41, 0], 134: [100, 39, 0], - 135: [100, 37, 0], 136: [100, 35, 0], 137: [100, 33, 0], 138: [100, 32, 0], 139: [100, 31, 0], - 140: [100, 30, 0], 141: [100, 29, 0], 142: [100, 28, 0], 143: [100, 27, 0], 144: [100, 26, 0], - 145: [100, 25, 0], 146: [100, 24, 0], 147: [100, 23, 0], 148: [100, 22, 0], 149: [100, 21, 0], - 150: [100, 20, 0], 151: [100, 19, 0], 152: [100, 18, 0], 153: [100, 17, 0], 154: [100, 16, 0], - 155: [100, 15, 0], 156: [100, 14, 0], 157: [100, 13, 0], 158: [100, 12, 0], 159: [100, 11, 0], - 160: [100, 10, 0], 161: [100, 9, 0], 162: [100, 8, 0], 163: [100, 7, 0], 164: [100, 6, 0], - 165: [100, 5, 0], 166: [100, 4, 0], 167: [100, 3, 0], 168: [100, 2, 0], 169: [100, 1, 0], - 170: [100, 0, 0], 171: [98, 0, 0], 172: [96, 0, 0], 173: [94, 0, 0], 174: [92, 0, 0], - 175: [90, 0, 0], 176: [89, 0, 0], 177: [87, 0, 0], 178: [85, 0, 0], 179: [83, 0, 0], - 180: [81, 0, 0], 181: [79, 0, 0], 182: [77, 0, 0], 183: [75, 0, 0], 184: [73, 0, 0], - 185: [71, 0, 0], 186: [69, 0, 0], 187: [68, 0, 0], 188: [66, 0, 0], 189: [64, 0, 0], - 190: [62, 0, 0], 191: [60, 0, 0], 192: [58, 0, 0], 193: [56, 0, 0], 194: [55, 0, 0], - 195: [53, 0, 0], 196: [51, 0, 0], 197: [49, 0, 0], 198: [47, 0, 0], 199: [45, 0, 0], - 200: [43, 0, 0], 201: [41, 0, 0], 202: [39, 0, 0], 203: [38, 0, 0], 204: [38, 0, 2], - 205: [39, 0, 4], 206: [40, 0, 6], 207: [41, 0, 8], 208: [42, 0, 10], 209: [43, 0, 12], - 210: [44, 0, 14], 211: [45, 0, 16], 212: [46, 0, 18], 213: [47, 0, 20], 214: [48, 0, 22], - 215: [49, 0, 24], 216: [50, 0, 26], 217: [51, 0, 29], 218: [52, 0, 31], 219: [53, 0, 33], - 220: [54, 0, 35], 221: [55, 0, 37], 222: [56, 0, 39], 223: [57, 0, 41], 224: [58, 0, 43], - 225: [59, 0, 45], 226: [60, 0, 47], 227: [61, 0, 49], 228: [62, 0, 51], 229: [63, 0, 53], - 230: [64, 0, 55], 231: [65, 0, 57], 232: [65, 0, 59], 233: [67, 0, 61], 234: [67, 0, 63], - 235: [69, 0, 65], 236: [69, 0, 67], 237: [71, 0, 69], 238: [71, 0, 71], 239: [73, 0, 74], - 240: [100, 100, 100], 241: [0, 0, 0], 242: [100, 0, 0], 243: [0, 100, 0], 244: [0, 0, 100], - 245: [100, 100, 0], 246: [0, 100, 100], 247: [100, 0, 100], 248: [100, 50, 10], 249: [60, 30, 10], - 250: [5, 10, 67], 251: [50, 50, 0], 252: [80, 80, 80], 253: [80, 100, 80], 254: [95, 75, 75], - 255: [60, 80, 100]} + self.data = {0: [100, 100, 100, 100.], 1: [0, 0, 0, 100.], 2: [85, 85, 85, 100.], + 3: [32, 32, 32, 100.], 4: [100, 100, 100, 100.], + 5: [100, 100, 0, 100.], 6: [0, 3, 100, 100.], 7: [0, 6, 100, 100.], + 8: [0, 9, 100, 100.], 9: [0, 12, 100, 100.], + 10: [0, 15, 100, 100.], 11: [0, 18, 100, 100.], 12: [0, 21, 100, 100.], + 13: [0, 24, 100, 100.], 14: [0, 27, 100, 100.], + 15: [0, 30, 100, 100.], 16: [0, 33, 100, 100.], 17: [0, 36, 100, 100.], + 18: [0, 39, 100, 100.], 19: [0, 42, 100, 100.], + 20: [0, 45, 100, 100.], 21: [0, 48, 100, 100.], 22: [0, 51, 100, 100.], + 23: [0, 55, 100, 100.], 24: [0, 57, 100, 100.], + 25: [0, 60, 100, 100.], 26: [0, 64, 100, 100.], 27: [0, 67, 100, 100.], + 28: [0, 69, 100, 100.], 29: [0, 73, 100, 100.], + 30: [0, 76, 100, 100.], 31: [0, 78, 100, 100.], 32: [0, 82, 100, 100.], + 33: [0, 85, 100, 100.], 34: [0, 88, 100, 100.], + 35: [0, 91, 100, 100.], 36: [0, 94, 100, 100.], 37: [0, 97, 100, 100.], + 38: [0, 100, 100, 100.], 39: [0, 100, 97, 100.], + 40: [0, 100, 94, 100.], 41: [0, 100, 91, 100.], 42: [0, 100, 88, 100.], + 43: [0, 100, 85, 100.], 44: [0, 100, 82, 100.], + 45: [0, 100, 78, 100.], 46: [0, 100, 76, 100.], 47: [0, 100, 73, 100.], + 48: [0, 100, 69, 100.], 49: [0, 100, 67, 100.], + 50: [0, 100, 64, 100.], 51: [0, 100, 60, 100.], 52: [0, 100, 57, 100.], + 53: [0, 100, 55, 100.], 54: [0, 100, 51, 100.], + 55: [0, 100, 48, 100.], 56: [0, 100, 45, 100.], 57: [0, 100, 42, 100.], + 58: [0, 100, 39, 100.], 59: [0, 100, 36, 100.], + 60: [0, 100, 33, 100.], 61: [0, 100, 30, 100.], 62: [0, 100, 27, 100.], + 63: [0, 100, 24, 100.], 64: [0, 100, 21, 100.], + 65: [0, 100, 18, 100.], 66: [0, 100, 15, 100.], 67: [0, 100, 12, 100.], + 68: [0, 100, 9, 100.], 69: [0, 100, 6, 100.], + 70: [0, 100, 3, 100.], 71: [0, 100, 0, 100.], 72: [3, 100, 0, 100.], + 73: [6, 100, 0, 100.], 74: [9, 100, 0, 100.], + 75: [12, 100, 0, 100.], 76: [15, 100, 0, 100.], 77: [18, 100, 0, 100.], + 78: [21, 100, 0, 100.], 79: [24, 100, 0, 100.], + 80: [27, 100, 0, 100.], 81: [30, 100, 0, 100.], 82: [33, 100, 0, 100.], + 83: [36, 100, 0, 100.], 84: [39, 100, 0, 100.], + 85: [42, 100, 0, 100.], 86: [45, 100, 0, 100.], 87: [48, 100, 0, 100.], + 88: [51, 100, 0, 100.], 89: [55, 100, 0, 100.], + 90: [57, 100, 0, 100.], 91: [60, 100, 0, 100.], 92: [64, 100, 0, 100.], + 93: [67, 100, 0, 100.], 94: [69, 100, 0, 100.], + 95: [73, 100, 0, 100.], 96: [76, 100, 0, 100.], 97: [78, 100, 0, 100.], + 98: [82, 100, 0, 100.], 99: [85, 100, 0, 100.], + 100: [88, 100, 0, 100.], 101: [91, 100, 0, 100.], 102: [94, 100, 0, 100.], + 103: [97, 100, 0, 100.], 104: [100, 100, 0, 100.], + 105: [100, 98, 0, 100.], 106: [100, 96, 0, 100.], 107: [100, 94, 0, 100.], + 108: [100, 92, 0, 100.], 109: [100, 90, 0, 100.], + 110: [100, 88, 0, 100.], 111: [100, 85, 0, 100.], 112: [100, 84, 0, 100.], + 113: [100, 82, 0, 100.], 114: [100, 80, 0, 100.], + 115: [100, 78, 0, 100.], 116: [100, 76, 0, 100.], 117: [100, 74, 0, 100.], + 118: [100, 71, 0, 100.], 119: [100, 69, 0, 100.], + 120: [100, 67, 0, 100.], 121: [100, 65, 0, 100.], 122: [100, 64, 0, 100.], + 123: [100, 62, 0, 100.], 124: [100, 59, 0, 100.], + 125: [100, 57, 0, 100.], 126: [100, 55, 0, 100.], 127: [100, 53, 0, 100.], + 128: [100, 51, 0, 100.], 129: [100, 49, 0, 100.], + 130: [100, 47, 0, 100.], 131: [100, 45, 0, 100.], 132: [100, 43, 0, 100.], + 133: [100, 41, 0, 100.], 134: [100, 39, 0, 100.], + 135: [100, 37, 0, 100.], 136: [100, 35, 0, 100.], 137: [100, 33, 0, 100.], + 138: [100, 32, 0, 100.], 139: [100, 31, 0, 100.], + 140: [100, 30, 0, 100.], 141: [100, 29, 0, 100.], 142: [100, 28, 0, 100.], + 143: [100, 27, 0, 100.], 144: [100, 26, 0, 100.], + 145: [100, 25, 0, 100.], 146: [100, 24, 0, 100.], 147: [100, 23, 0, 100.], + 148: [100, 22, 0, 100.], 149: [100, 21, 0, 100.], + 150: [100, 20, 0, 100.], 151: [100, 19, 0, 100.], 152: [100, 18, 0, 100.], + 153: [100, 17, 0, 100.], 154: [100, 16, 0, 100.], + 155: [100, 15, 0, 100.], 156: [100, 14, 0, 100.], 157: [100, 13, 0, 100.], + 158: [100, 12, 0, 100.], 159: [100, 11, 0, 100.], + 160: [100, 10, 0, 100.], 161: [100, 9, 0, 100.], 162: [100, 8, 0, 100.], + 163: [100, 7, 0, 100.], 164: [100, 6, 0, 100.], + 165: [100, 5, 0, 100.], 166: [100, 4, 0, 100.], 167: [100, 3, 0, 100.], + 168: [100, 2, 0, 100.], 169: [100, 1, 0, 100.], + 170: [100, 0, 0, 100.], 171: [98, 0, 0, 100.], 172: [96, 0, 0, 100.], + 173: [94, 0, 0, 100.], 174: [92, 0, 0, 100.], + 175: [90, 0, 0, 100.], 176: [89, 0, 0, 100.], 177: [87, 0, 0, 100.], + 178: [85, 0, 0, 100.], 179: [83, 0, 0, 100.], + 180: [81, 0, 0, 100.], 181: [79, 0, 0, 100.], 182: [77, 0, 0, 100.], + 183: [75, 0, 0, 100.], 184: [73, 0, 0, 100.], + 185: [71, 0, 0, 100.], 186: [69, 0, 0, 100.], 187: [68, 0, 0, 100.], + 188: [66, 0, 0, 100.], 189: [64, 0, 0, 100.], + 190: [62, 0, 0, 100.], 191: [60, 0, 0, 100.], 192: [58, 0, 0, 100.], + 193: [56, 0, 0, 100.], 194: [55, 0, 0, 100.], + 195: [53, 0, 0, 100.], 196: [51, 0, 0, 100.], 197: [49, 0, 0, 100.], + 198: [47, 0, 0, 100.], 199: [45, 0, 0, 100.], + 200: [43, 0, 0, 100.], 201: [41, 0, 0, 100.], 202: [39, 0, 0, 100.], + 203: [38, 0, 0, 100.], 204: [38, 0, 2, 100.], + 205: [39, 0, 4, 100.], 206: [40, 0, 6, 100.], 207: [41, 0, 8, 100.], + 208: [42, 0, 10, 100.], 209: [43, 0, 12, 100.], + 210: [44, 0, 14, 100.], 211: [45, 0, 16, 100.], 212: [46, 0, 18, 100.], + 213: [47, 0, 20, 100.], 214: [48, 0, 22, 100.], + 215: [49, 0, 24, 100.], 216: [50, 0, 26, 100.], 217: [51, 0, 29, 100.], + 218: [52, 0, 31, 100.], 219: [53, 0, 33, 100.], + 220: [54, 0, 35, 100.], 221: [55, 0, 37, 100.], 222: [56, 0, 39, 100.], + 223: [57, 0, 41, 100.], 224: [58, 0, 43, 100.], + 225: [59, 0, 45, 100.], 226: [60, 0, 47, 100.], 227: [61, 0, 49, 100.], + 228: [62, 0, 51, 100.], 229: [63, 0, 53, 100.], + 230: [64, 0, 55, 100.], 231: [65, 0, 57, 100.], 232: [65, 0, 59, 100.], + 233: [67, 0, 61, 100.], 234: [67, 0, 63, 100.], + 235: [69, 0, 65, 100.], 236: [69, 0, 67, 100.], 237: [71, 0, 69, 100.], + 238: [71, 0, 71, 100.], 239: [73, 0, 74, 100.], + 240: [100, 100, 100, 100.], 241: [0, 0, 0, 100.], 242: [100, 0, 0, 100.], + 243: [0, 100, 0, 100.], 244: [0, 0, 100, 100.], + 245: [100, 100, 0, 100.], 246: [0, 100, 100, 100.], 247: [100, 0, 100, 100.], + 248: [100, 50, 10, 100.], 249: [60, 30, 10, 100.], + 250: [5, 10, 67, 100.], 251: [50, 50, 0, 100.], 252: [80, 80, 80, 100.], + 253: [80, 100, 80, 100.], 254: [95, 75, 75, 100.], + 255: [60, 80, 100, 100.]} self.name = name if dict is not None: @@ -102,16 +153,18 @@ def __init__(self, name, dict=None): def __setitem__(self, key, value): if (self.name == 'default'): raise ValueError('You cannot modify the default colormap.') - if (key not in range(0, 240)): - raise ValueError('Cell index must be in the range 0 to 239.') + if (key not in range(0, 256)): + raise ValueError('Cell index must be in the range 0 to 255.') if isinstance(value, (list, tuple)): value = list(value) - if len(value) != 3: - raise ValueError('Must be a tuple or list of size 3.') + if len(value) not in [3, 4]: + raise ValueError('Must be a tuple or list of size 3 or 4') + if len(value) == 3: + value.append(100.) for i in range(len(value)): - if value[i] not in range(0, 101): + if not 0. <= value[i] <= 100.: raise ValueError( - 'The R,G,B values must be in the range 0 to 100.') + 'The R,G,B,A values must be in the range 0 to 100. %s' % str(value)) else: raise ValueError( 'Must be either a list object, tuple object, or integer value.') @@ -182,6 +235,8 @@ def setname(self, value): name = property(getname, setname) def getindex(self): + if len(self._index) == 3: + return self._index + [100.] return self._index def setindex(self, value): @@ -193,6 +248,8 @@ def setindex(self, value): d2 = {} d = value[u'data'] for k in d.keys(): + if len(d[k]) == 3: # Old style only r,g,b no a + d[k] += [100.] d2[int(k)] = d[k] self.index.data.update(d2) index = property(getindex, setindex) @@ -231,12 +288,12 @@ def __init__(self, Cp_name, Cp_name_src='default'): # Note: See RGB_Table Class for "index" setting of the colormap entries # Set a colorcell RGB - def setcolorcell(self, index, red, green, blue): + def setcolorcell(self, index, red, green, blue, alpha=100.): """ - Sets the R,G,B values of a colorcell - Usage setcolorcell(index,r,g,b) + Sets the R,G,B,A values of a colorcell + Usage setcolorcell(index,r,g,b,a=100.) """ - self.index[index] = [red, green, blue] + self.index[index] = [red, green, blue, alpha] # get a colorcell RGB def getcolorcell(self, index): diff --git a/Packages/vcs/Lib/colorpicker.py b/Packages/vcs/Lib/colorpicker.py index b2fb55cbaa..624d148f5c 100644 --- a/Packages/vcs/Lib/colorpicker.py +++ b/Packages/vcs/Lib/colorpicker.py @@ -232,7 +232,7 @@ def colors_to_scalars(colors): colorData.SetNumberOfComponents(3) for color in colors: - colorData.InsertNextTuple3(*color) + colorData.InsertNextTuple3(*color[:3]) return colorData diff --git a/Packages/vcs/Lib/colors.py b/Packages/vcs/Lib/colors.py index 0441af8c1c..8b79541863 100644 --- a/Packages/vcs/Lib/colors.py +++ b/Packages/vcs/Lib/colors.py @@ -1,748 +1,34 @@ -cols = { - 'snow': [255, 250, 250], - 'ghost white': [248, 248, 255], - 'GhostWhite': [248, 248, 255], - 'white smoke': [245, 245, 245], - 'WhiteSmoke': [245, 245, 245], - 'gainsboro': [220, 220, 220], - 'floral white': [255, 250, 240], - 'FloralWhite': [255, 250, 240], - 'old lace': [253, 245, 230], - 'OldLace': [253, 245, 230], - 'linen': [250, 240, 230], - 'antique white': [250, 235, 215], - 'AntiqueWhite': [250, 235, 215], - 'papaya whip': [255, 239, 213], - 'PapayaWhip': [255, 239, 213], - 'blanched almond': [255, 235, 205], - 'BlanchedAlmond': [255, 235, 205], - 'bisque': [255, 228, 196], - 'peach puff': [255, 218, 185], - 'PeachPuff': [255, 218, 185], - 'navajo white': [255, 222, 173], - 'NavajoWhite': [255, 222, 173], - 'moccasin': [255, 228, 181], - 'cornsilk': [255, 248, 220], - 'ivory': [255, 255, 240], - 'lemon chiffon': [255, 250, 205], - 'LemonChiffon': [255, 250, 205], - 'seashell': [255, 245, 238], - 'honeydew': [240, 255, 240], - 'mint cream': [245, 255, 250], - 'MintCream': [245, 255, 250], - 'azure': [240, 255, 255], - 'alice blue': [240, 248, 255], - 'AliceBlue': [240, 248, 255], - 'lavender': [230, 230, 250], - 'lavender blush': [255, 240, 245], - 'LavenderBlush': [255, 240, 245], - 'misty rose': [255, 228, 225], - 'MistyRose': [255, 228, 225], - 'white': [255, 255, 255], - 'black': [0, 0, 0], - 'dark slate gray': [47, 79, 79], - 'DarkSlateGray': [47, 79, 79], - 'dark slate grey': [47, 79, 79], - 'DarkSlateGrey': [47, 79, 79], - 'dim gray': [105, 105, 105], - 'DimGray': [105, 105, 105], - 'dim grey': [105, 105, 105], - 'DimGrey': [105, 105, 105], - 'slate gray': [112, 128, 144], - 'SlateGray': [112, 128, 144], - 'slate grey': [112, 128, 144], - 'SlateGrey': [112, 128, 144], - 'light slate gray': [119, 136, 153], - 'LightSlateGray': [119, 136, 153], - 'light slate grey': [119, 136, 153], - 'LightSlateGrey': [119, 136, 153], - 'gray': [190, 190, 190], - 'grey': [190, 190, 190], - 'light grey': [211, 211, 211], - 'LightGrey': [211, 211, 211], - 'light gray': [211, 211, 211], - 'LightGray': [211, 211, 211], - 'midnight blue': [25, 25, 112], - 'MidnightBlue': [25, 25, 112], - 'navy': [0, 0, 128], - 'navy blue': [0, 0, 128], - 'NavyBlue': [0, 0, 128], - 'cornflower blue': [100, 149, 237], - 'CornflowerBlue': [100, 149, 237], - 'dark slate blue': [72, 61, 139], - 'DarkSlateBlue': [72, 61, 139], - 'slate blue': [106, 90, 205], - 'SlateBlue': [106, 90, 205], - 'medium slate blue': [123, 104, 238], - 'MediumSlateBlue': [123, 104, 238], - 'light slate blue': [132, 112, 255], - 'LightSlateBlue': [132, 112, 255], - 'medium blue': [0, 0, 205], - 'MediumBlue': [0, 0, 205], - 'royal blue': [65, 105, 225], - 'RoyalBlue': [65, 105, 225], - 'blue': [0, 0, 255], - 'dodger blue': [30, 144, 255], - 'DodgerBlue': [30, 144, 255], - 'deep sky blue': [0, 191, 255], - 'DeepSkyBlue': [0, 191, 255], - 'sky blue': [135, 206, 235], - 'SkyBlue': [135, 206, 235], - 'light sky blue': [135, 206, 250], - 'LightSkyBlue': [135, 206, 250], - 'steel blue': [70, 130, 180], - 'SteelBlue': [70, 130, 180], - 'light steel blue': [176, 196, 222], - 'LightSteelBlue': [176, 196, 222], - 'light blue': [173, 216, 230], - 'LightBlue': [173, 216, 230], - 'powder blue': [176, 224, 230], - 'PowderBlue': [176, 224, 230], - 'pale turquoise': [175, 238, 238], - 'PaleTurquoise': [175, 238, 238], - 'dark turquoise': [0, 206, 209], - 'DarkTurquoise': [0, 206, 209], - 'medium turquoise': [72, 209, 204], - 'MediumTurquoise': [72, 209, 204], - 'turquoise': [64, 224, 208], - 'cyan': [0, 255, 255], - 'light cyan': [224, 255, 255], - 'LightCyan': [224, 255, 255], - 'cadet blue': [95, 158, 160], - 'CadetBlue': [95, 158, 160], - 'medium aquamarine': [102, 205, 170], - 'MediumAquamarine': [102, 205, 170], - 'aquamarine': [127, 255, 212], - 'dark green': [0, 100, 0], - 'DarkGreen': [0, 100, 0], - 'dark olive green': [85, 107, 47], - 'DarkOliveGreen': [85, 107, 47], - 'dark sea green': [143, 188, 143], - 'DarkSeaGreen': [143, 188, 143], - 'sea green': [46, 139, 87], - 'SeaGreen': [46, 139, 87], - 'medium sea green': [60, 179, 113], - 'MediumSeaGreen': [60, 179, 113], - 'light sea green': [32, 178, 170], - 'LightSeaGreen': [32, 178, 170], - 'pale green': [152, 251, 152], - 'PaleGreen': [152, 251, 152], - 'spring green': [0, 255, 127], - 'SpringGreen': [0, 255, 127], - 'lawn green': [124, 252, 0], - 'LawnGreen': [124, 252, 0], - 'green': [0, 255, 0], - 'chartreuse': [127, 255, 0], - 'medium spring green': [0, 250, 154], - 'MediumSpringGreen': [0, 250, 154], - 'green yellow': [173, 255, 47], - 'GreenYellow': [173, 255, 47], - 'lime green': [50, 205, 50], - 'LimeGreen': [50, 205, 50], - 'yellow green': [154, 205, 50], - 'YellowGreen': [154, 205, 50], - 'forest green': [34, 139, 34], - 'ForestGreen': [34, 139, 34], - 'olive drab': [107, 142, 35], - 'OliveDrab': [107, 142, 35], - 'dark khaki': [189, 183, 107], - 'DarkKhaki': [189, 183, 107], - 'khaki': [240, 230, 140], - 'pale goldenrod': [238, 232, 170], - 'PaleGoldenrod': [238, 232, 170], - 'light goldenrod yellow': [250, 250, 210], - 'LightGoldenrodYellow': [250, 250, 210], - 'light yellow': [255, 255, 224], - 'LightYellow': [255, 255, 224], - 'yellow': [255, 255, 0], - 'gold': [255, 215, 0], - 'light goldenrod': [238, 221, 130], - 'LightGoldenrod': [238, 221, 130], - 'goldenrod': [218, 165, 32], - 'dark goldenrod': [184, 134, 11], - 'DarkGoldenrod': [184, 134, 11], - 'rosy brown': [188, 143, 143], - 'RosyBrown': [188, 143, 143], - 'indian red': [205, 92, 92], - 'IndianRed': [205, 92, 92], - 'saddle brown': [139, 69, 19], - 'SaddleBrown': [139, 69, 19], - 'sienna': [160, 82, 45], - 'peru': [205, 133, 63], - 'burlywood': [222, 184, 135], - 'beige': [245, 245, 220], - 'wheat': [245, 222, 179], - 'sandy brown': [244, 164, 96], - 'SandyBrown': [244, 164, 96], - 'tan': [210, 180, 140], - 'chocolate': [210, 105, 30], - 'firebrick': [178, 34, 34], - 'brown': [165, 42, 42], - 'dark salmon': [233, 150, 122], - 'DarkSalmon': [233, 150, 122], - 'salmon': [250, 128, 114], - 'light salmon': [255, 160, 122], - 'LightSalmon': [255, 160, 122], - 'orange': [255, 165, 0], - 'dark orange': [255, 140, 0], - 'DarkOrange': [255, 140, 0], - 'coral': [255, 127, 80], - 'light coral': [240, 128, 128], - 'LightCoral': [240, 128, 128], - 'tomato': [255, 99, 71], - 'orange red': [255, 69, 0], - 'OrangeRed': [255, 69, 0], - 'red': [255, 0, 0], - 'hot pink': [255, 105, 180], - 'HotPink': [255, 105, 180], - 'deep pink': [255, 20, 147], - 'DeepPink': [255, 20, 147], - 'pink': [255, 192, 203], - 'light pink': [255, 182, 193], - 'LightPink': [255, 182, 193], - 'pale violet red': [219, 112, 147], - 'PaleVioletRed': [219, 112, 147], - 'maroon': [176, 48, 96], - 'medium violet red': [199, 21, 133], - 'MediumVioletRed': [199, 21, 133], - 'violet red': [208, 32, 144], - 'VioletRed': [208, 32, 144], - 'magenta': [255, 0, 255], - 'violet': [238, 130, 238], - 'plum': [221, 160, 221], - 'orchid': [218, 112, 214], - 'medium orchid': [186, 85, 211], - 'MediumOrchid': [186, 85, 211], - 'dark orchid': [153, 50, 204], - 'DarkOrchid': [153, 50, 204], - 'dark violet': [148, 0, 211], - 'DarkViolet': [148, 0, 211], - 'blue violet': [138, 43, 226], - 'BlueViolet': [138, 43, 226], - 'purple': [160, 32, 240], - 'medium purple': [147, 112, 219], - 'MediumPurple': [147, 112, 219], - 'thistle': [216, 191, 216], - 'snow1': [255, 250, 250], - 'snow2': [238, 233, 233], - 'snow3': [205, 201, 201], - 'snow4': [139, 137, 137], - 'seashell1': [255, 245, 238], - 'seashell2': [238, 229, 222], - 'seashell3': [205, 197, 191], - 'seashell4': [139, 134, 130], - 'AntiqueWhite1': [255, 239, 219], - 'AntiqueWhite2': [238, 223, 204], - 'AntiqueWhite3': [205, 192, 176], - 'AntiqueWhite4': [139, 131, 120], - 'bisque1': [255, 228, 196], - 'bisque2': [238, 213, 183], - 'bisque3': [205, 183, 158], - 'bisque4': [139, 125, 107], - 'PeachPuff1': [255, 218, 185], - 'PeachPuff2': [238, 203, 173], - 'PeachPuff3': [205, 175, 149], - 'PeachPuff4': [139, 119, 101], - 'NavajoWhite1': [255, 222, 173], - 'NavajoWhite2': [238, 207, 161], - 'NavajoWhite3': [205, 179, 139], - 'NavajoWhite4': [139, 121, 94], - 'LemonChiffon1': [255, 250, 205], - 'LemonChiffon2': [238, 233, 191], - 'LemonChiffon3': [205, 201, 165], - 'LemonChiffon4': [139, 137, 112], - 'cornsilk1': [255, 248, 220], - 'cornsilk2': [238, 232, 205], - 'cornsilk3': [205, 200, 177], - 'cornsilk4': [139, 136, 120], - 'ivory1': [255, 255, 240], - 'ivory2': [238, 238, 224], - 'ivory3': [205, 205, 193], - 'ivory4': [139, 139, 131], - 'honeydew1': [240, 255, 240], - 'honeydew2': [224, 238, 224], - 'honeydew3': [193, 205, 193], - 'honeydew4': [131, 139, 131], - 'LavenderBlush1': [255, 240, 245], - 'LavenderBlush2': [238, 224, 229], - 'LavenderBlush3': [205, 193, 197], - 'LavenderBlush4': [139, 131, 134], - 'MistyRose1': [255, 228, 225], - 'MistyRose2': [238, 213, 210], - 'MistyRose3': [205, 183, 181], - 'MistyRose4': [139, 125, 123], - 'azure1': [240, 255, 255], - 'azure2': [224, 238, 238], - 'azure3': [193, 205, 205], - 'azure4': [131, 139, 139], - 'SlateBlue1': [131, 111, 255], - 'SlateBlue2': [122, 103, 238], - 'SlateBlue3': [105, 89, 205], - 'SlateBlue4': [71, 60, 139], - 'RoyalBlue1': [72, 118, 255], - 'RoyalBlue2': [67, 110, 238], - 'RoyalBlue3': [58, 95, 205], - 'RoyalBlue4': [39, 64, 139], - 'blue1': [0, 0, 255], - 'blue2': [0, 0, 238], - 'blue3': [0, 0, 205], - 'blue4': [0, 0, 139], - 'DodgerBlue1': [30, 144, 255], - 'DodgerBlue2': [28, 134, 238], - 'DodgerBlue3': [24, 116, 205], - 'DodgerBlue4': [16, 78, 139], - 'SteelBlue1': [99, 184, 255], - 'SteelBlue2': [92, 172, 238], - 'SteelBlue3': [79, 148, 205], - 'SteelBlue4': [54, 100, 139], - 'DeepSkyBlue1': [0, 191, 255], - 'DeepSkyBlue2': [0, 178, 238], - 'DeepSkyBlue3': [0, 154, 205], - 'DeepSkyBlue4': [0, 104, 139], - 'SkyBlue1': [135, 206, 255], - 'SkyBlue2': [126, 192, 238], - 'SkyBlue3': [108, 166, 205], - 'SkyBlue4': [74, 112, 139], - 'LightSkyBlue1': [176, 226, 255], - 'LightSkyBlue2': [164, 211, 238], - 'LightSkyBlue3': [141, 182, 205], - 'LightSkyBlue4': [96, 123, 139], - 'SlateGray1': [198, 226, 255], - 'SlateGray2': [185, 211, 238], - 'SlateGray3': [159, 182, 205], - 'SlateGray4': [108, 123, 139], - 'LightSteelBlue1': [202, 225, 255], - 'LightSteelBlue2': [188, 210, 238], - 'LightSteelBlue3': [162, 181, 205], - 'LightSteelBlue4': [110, 123, 139], - 'LightBlue1': [191, 239, 255], - 'LightBlue2': [178, 223, 238], - 'LightBlue3': [154, 192, 205], - 'LightBlue4': [104, 131, 139], - 'LightCyan1': [224, 255, 255], - 'LightCyan2': [209, 238, 238], - 'LightCyan3': [180, 205, 205], - 'LightCyan4': [122, 139, 139], - 'PaleTurquoise1': [187, 255, 255], - 'PaleTurquoise2': [174, 238, 238], - 'PaleTurquoise3': [150, 205, 205], - 'PaleTurquoise4': [102, 139, 139], - 'CadetBlue1': [152, 245, 255], - 'CadetBlue2': [142, 229, 238], - 'CadetBlue3': [122, 197, 205], - 'CadetBlue4': [83, 134, 139], - 'turquoise1': [0, 245, 255], - 'turquoise2': [0, 229, 238], - 'turquoise3': [0, 197, 205], - 'turquoise4': [0, 134, 139], - 'cyan1': [0, 255, 255], - 'cyan2': [0, 238, 238], - 'cyan3': [0, 205, 205], - 'cyan4': [0, 139, 139], - 'DarkSlateGray1': [151, 255, 255], - 'DarkSlateGray2': [141, 238, 238], - 'DarkSlateGray3': [121, 205, 205], - 'DarkSlateGray4': [82, 139, 139], - 'aquamarine1': [127, 255, 212], - 'aquamarine2': [118, 238, 198], - 'aquamarine3': [102, 205, 170], - 'aquamarine4': [69, 139, 116], - 'DarkSeaGreen1': [193, 255, 193], - 'DarkSeaGreen2': [180, 238, 180], - 'DarkSeaGreen3': [155, 205, 155], - 'DarkSeaGreen4': [105, 139, 105], - 'SeaGreen1': [84, 255, 159], - 'SeaGreen2': [78, 238, 148], - 'SeaGreen3': [67, 205, 128], - 'SeaGreen4': [46, 139, 87], - 'PaleGreen1': [154, 255, 154], - 'PaleGreen2': [144, 238, 144], - 'PaleGreen3': [124, 205, 124], - 'PaleGreen4': [84, 139, 84], - 'SpringGreen1': [0, 255, 127], - 'SpringGreen2': [0, 238, 118], - 'SpringGreen3': [0, 205, 102], - 'SpringGreen4': [0, 139, 69], - 'green1': [0, 255, 0], - 'green2': [0, 238, 0], - 'green3': [0, 205, 0], - 'green4': [0, 139, 0], - 'chartreuse1': [127, 255, 0], - 'chartreuse2': [118, 238, 0], - 'chartreuse3': [102, 205, 0], - 'chartreuse4': [69, 139, 0], - 'OliveDrab1': [192, 255, 62], - 'OliveDrab2': [179, 238, 58], - 'OliveDrab3': [154, 205, 50], - 'OliveDrab4': [105, 139, 34], - 'DarkOliveGreen1': [202, 255, 112], - 'DarkOliveGreen2': [188, 238, 104], - 'DarkOliveGreen3': [162, 205, 90], - 'DarkOliveGreen4': [110, 139, 61], - 'khaki1': [255, 246, 143], - 'khaki2': [238, 230, 133], - 'khaki3': [205, 198, 115], - 'khaki4': [139, 134, 78], - 'LightGoldenrod1': [255, 236, 139], - 'LightGoldenrod2': [238, 220, 130], - 'LightGoldenrod3': [205, 190, 112], - 'LightGoldenrod4': [139, 129, 76], - 'LightYellow1': [255, 255, 224], - 'LightYellow2': [238, 238, 209], - 'LightYellow3': [205, 205, 180], - 'LightYellow4': [139, 139, 122], - 'yellow1': [255, 255, 0], - 'yellow2': [238, 238, 0], - 'yellow3': [205, 205, 0], - 'yellow4': [139, 139, 0], - 'gold1': [255, 215, 0], - 'gold2': [238, 201, 0], - 'gold3': [205, 173, 0], - 'gold4': [139, 117, 0], - 'goldenrod1': [255, 193, 37], - 'goldenrod2': [238, 180, 34], - 'goldenrod3': [205, 155, 29], - 'goldenrod4': [139, 105, 20], - 'DarkGoldenrod1': [255, 185, 15], - 'DarkGoldenrod2': [238, 173, 14], - 'DarkGoldenrod3': [205, 149, 12], - 'DarkGoldenrod4': [139, 101, 8], - 'RosyBrown1': [255, 193, 193], - 'RosyBrown2': [238, 180, 180], - 'RosyBrown3': [205, 155, 155], - 'RosyBrown4': [139, 105, 105], - 'IndianRed1': [255, 106, 106], - 'IndianRed2': [238, 99, 99], - 'IndianRed3': [205, 85, 85], - 'IndianRed4': [139, 58, 58], - 'sienna1': [255, 130, 71], - 'sienna2': [238, 121, 66], - 'sienna3': [205, 104, 57], - 'sienna4': [139, 71, 38], - 'burlywood1': [255, 211, 155], - 'burlywood2': [238, 197, 145], - 'burlywood3': [205, 170, 125], - 'burlywood4': [139, 115, 85], - 'wheat1': [255, 231, 186], - 'wheat2': [238, 216, 174], - 'wheat3': [205, 186, 150], - 'wheat4': [139, 126, 102], - 'tan1': [255, 165, 79], - 'tan2': [238, 154, 73], - 'tan3': [205, 133, 63], - 'tan4': [139, 90, 43], - 'chocolate1': [255, 127, 36], - 'chocolate2': [238, 118, 33], - 'chocolate3': [205, 102, 29], - 'chocolate4': [139, 69, 19], - 'firebrick1': [255, 48, 48], - 'firebrick2': [238, 44, 44], - 'firebrick3': [205, 38, 38], - 'firebrick4': [139, 26, 26], - 'brown1': [255, 64, 64], - 'brown2': [238, 59, 59], - 'brown3': [205, 51, 51], - 'brown4': [139, 35, 35], - 'salmon1': [255, 140, 105], - 'salmon2': [238, 130, 98], - 'salmon3': [205, 112, 84], - 'salmon4': [139, 76, 57], - 'LightSalmon1': [255, 160, 122], - 'LightSalmon2': [238, 149, 114], - 'LightSalmon3': [205, 129, 98], - 'LightSalmon4': [139, 87, 66], - 'orange1': [255, 165, 0], - 'orange2': [238, 154, 0], - 'orange3': [205, 133, 0], - 'orange4': [139, 90, 0], - 'DarkOrange1': [255, 127, 0], - 'DarkOrange2': [238, 118, 0], - 'DarkOrange3': [205, 102, 0], - 'DarkOrange4': [139, 69, 0], - 'coral1': [255, 114, 86], - 'coral2': [238, 106, 80], - 'coral3': [205, 91, 69], - 'coral4': [139, 62, 47], - 'tomato1': [255, 99, 71], - 'tomato2': [238, 92, 66], - 'tomato3': [205, 79, 57], - 'tomato4': [139, 54, 38], - 'OrangeRed1': [255, 69, 0], - 'OrangeRed2': [238, 64, 0], - 'OrangeRed3': [205, 55, 0], - 'OrangeRed4': [139, 37, 0], - 'red1': [255, 0, 0], - 'red2': [238, 0, 0], - 'red3': [205, 0, 0], - 'red4': [139, 0, 0], - 'DeepPink1': [255, 20, 147], - 'DeepPink2': [238, 18, 137], - 'DeepPink3': [205, 16, 118], - 'DeepPink4': [139, 10, 80], - 'HotPink1': [255, 110, 180], - 'HotPink2': [238, 106, 167], - 'HotPink3': [205, 96, 144], - 'HotPink4': [139, 58, 98], - 'pink1': [255, 181, 197], - 'pink2': [238, 169, 184], - 'pink3': [205, 145, 158], - 'pink4': [139, 99, 108], - 'LightPink1': [255, 174, 185], - 'LightPink2': [238, 162, 173], - 'LightPink3': [205, 140, 149], - 'LightPink4': [139, 95, 101], - 'PaleVioletRed1': [255, 130, 171], - 'PaleVioletRed2': [238, 121, 159], - 'PaleVioletRed3': [205, 104, 137], - 'PaleVioletRed4': [139, 71, 93], - 'maroon1': [255, 52, 179], - 'maroon2': [238, 48, 167], - 'maroon3': [205, 41, 144], - 'maroon4': [139, 28, 98], - 'VioletRed1': [255, 62, 150], - 'VioletRed2': [238, 58, 140], - 'VioletRed3': [205, 50, 120], - 'VioletRed4': [139, 34, 82], - 'magenta1': [255, 0, 255], - 'magenta2': [238, 0, 238], - 'magenta3': [205, 0, 205], - 'magenta4': [139, 0, 139], - 'orchid1': [255, 131, 250], - 'orchid2': [238, 122, 233], - 'orchid3': [205, 105, 201], - 'orchid4': [139, 71, 137], - 'plum1': [255, 187, 255], - 'plum2': [238, 174, 238], - 'plum3': [205, 150, 205], - 'plum4': [139, 102, 139], - 'MediumOrchid1': [224, 102, 255], - 'MediumOrchid2': [209, 95, 238], - 'MediumOrchid3': [180, 82, 205], - 'MediumOrchid4': [122, 55, 139], - 'DarkOrchid1': [191, 62, 255], - 'DarkOrchid2': [178, 58, 238], - 'DarkOrchid3': [154, 50, 205], - 'DarkOrchid4': [104, 34, 139], - 'purple1': [155, 48, 255], - 'purple2': [145, 44, 238], - 'purple3': [125, 38, 205], - 'purple4': [85, 26, 139], - 'MediumPurple1': [171, 130, 255], - 'MediumPurple2': [159, 121, 238], - 'MediumPurple3': [137, 104, 205], - 'MediumPurple4': [93, 71, 139], - 'thistle1': [255, 225, 255], - 'thistle2': [238, 210, 238], - 'thistle3': [205, 181, 205], - 'thistle4': [139, 123, 139], - 'gray0': [0, 0, 0], - 'grey1': [3, 3, 3], - 'gray2': [5, 5, 5], - 'grey3': [8, 8, 8], - 'gray4': [10, 10, 10], - 'grey5': [13, 13, 13], - 'gray6': [15, 15, 15], - 'grey7': [18, 18, 18], - 'gray8': [20, 20, 20], - 'grey9': [23, 23, 23], - 'gray10': [26, 26, 26], - 'grey11': [28, 28, 28], - 'gray12': [31, 31, 31], - 'grey13': [33, 33, 33], - 'gray14': [36, 36, 36], - 'grey15': [38, 38, 38], - 'gray16': [41, 41, 41], - 'grey17': [43, 43, 43], - 'gray18': [46, 46, 46], - 'grey19': [48, 48, 48], - 'gray20': [51, 51, 51], - 'grey21': [54, 54, 54], - 'gray22': [56, 56, 56], - 'grey23': [59, 59, 59], - 'gray24': [61, 61, 61], - 'grey25': [64, 64, 64], - 'gray26': [66, 66, 66], - 'grey27': [69, 69, 69], - 'gray28': [71, 71, 71], - 'grey29': [74, 74, 74], - 'gray30': [77, 77, 77], - 'grey31': [79, 79, 79], - 'gray32': [82, 82, 82], - 'grey33': [84, 84, 84], - 'gray34': [87, 87, 87], - 'grey35': [89, 89, 89], - 'gray36': [92, 92, 92], - 'grey37': [94, 94, 94], - 'gray38': [97, 97, 97], - 'grey39': [99, 99, 99], - 'gray40': [102, 102, 102], - 'grey41': [105, 105, 105], - 'gray42': [107, 107, 107], - 'grey43': [110, 110, 110], - 'gray44': [112, 112, 112], - 'grey45': [115, 115, 115], - 'gray46': [117, 117, 117], - 'grey47': [120, 120, 120], - 'gray48': [122, 122, 122], - 'grey49': [125, 125, 125], - 'gray50': [127, 127, 127], - 'grey51': [130, 130, 130], - 'gray52': [133, 133, 133], - 'grey53': [135, 135, 135], - 'gray54': [138, 138, 138], - 'grey55': [140, 140, 140], - 'gray56': [143, 143, 143], - 'grey57': [145, 145, 145], - 'gray58': [148, 148, 148], - 'grey59': [150, 150, 150], - 'gray60': [153, 153, 153], - 'grey61': [156, 156, 156], - 'gray62': [158, 158, 158], - 'grey63': [161, 161, 161], - 'gray64': [163, 163, 163], - 'grey65': [166, 166, 166], - 'gray66': [168, 168, 168], - 'grey67': [171, 171, 171], - 'gray68': [173, 173, 173], - 'grey69': [176, 176, 176], - 'gray70': [179, 179, 179], - 'grey71': [181, 181, 181], - 'gray72': [184, 184, 184], - 'grey73': [186, 186, 186], - 'gray74': [189, 189, 189], - 'grey75': [191, 191, 191], - 'gray76': [194, 194, 194], - 'grey77': [196, 196, 196], - 'gray78': [199, 199, 199], - 'grey79': [201, 201, 201], - 'gray80': [204, 204, 204], - 'grey81': [207, 207, 207], - 'gray82': [209, 209, 209], - 'grey83': [212, 212, 212], - 'gray84': [214, 214, 214], - 'grey85': [217, 217, 217], - 'gray86': [219, 219, 219], - 'grey87': [222, 222, 222], - 'gray88': [224, 224, 224], - 'grey89': [227, 227, 227], - 'gray90': [229, 229, 229], - 'grey91': [232, 232, 232], - 'gray92': [235, 235, 235], - 'grey93': [237, 237, 237], - 'gray94': [240, 240, 240], - 'grey95': [242, 242, 242], - 'gray96': [245, 245, 245], - 'grey97': [247, 247, 247], - 'gray98': [250, 250, 250], - 'grey99': [252, 252, 252], - 'grey100': [255, 255, 255], - 'dark grey': [169, 169, 169], - 'DarkGrey': [169, 169, 169], - 'dark gray': [169, 169, 169], - 'DarkGray': [169, 169, 169], - 'dark blue': [0, 0, 139], - 'DarkBlue': [0, 0, 139], - 'dark cyan': [0, 139, 139], - 'DarkCyan': [0, 139, 139], - 'dark magenta': [139, 0, 139], - 'DarkMagenta': [139, 0, 139], - 'dark red': [139, 0, 0], - 'DarkRed': [139, 0, 0], - 'light green': [144, 238, 144], - 'LightGreen': [144, 238, 144], -} +from genutil.colors import rgb2str, str2rgb # noqa -def str2rgb(col): - ''' - Input a string representing a color name and it outputs the corresponding r,g,b values - If the color name is unknown, returns None,None,None - looks into /usr/X11R6/lib/X11/rgb.txt file - if file does not exist then looks into the builtin dictionary - Examples: - r,g,b=str2rgb('pink2') # returns: [238 , 169 , 184 ] - r,g,b=str2rgb('crapy') # returns: [None, None, None] - Note r,g,b values between 0 and 255 - ''' - import string - ret = [] - col = string.lower(col) - col = string.replace(col, ' ', '') - try: - f = open('/usr/X11R6/lib/X11/rgb.txt', 'r') - ln = f.readlines() - f.close() - for l in ln[1:]: - c = string.split(l)[3:] - c = string.join(c) - c = string.lower(c) - c = string.replace(c, ' ', '') - if c == col: - ret = string.split(l)[:3] - if len(ret) != 3: - ret = [None, None, None] - for i in range(3): - ret[i] = string.atoi(ret[i]) - return ret - except: - ky = cols.keys() - for k in ky: - c = string.replace(k, ' ', '') - if c == col: - return cols[k] - return [None, None, None] +def matplotlib2vcs(cmap, vcs_name=None): + """Convert a matplotlib colormap to a vcs colormap + Input can be either the actual matplotlib colormap or its name + Optional second argument: vcs_name, name of the resulting vcs colormap + """ + import vcs + import matplotlib.cm + import warnings + if isinstance(cmap, (str, unicode)): + try: + cmap = matplotlib.cm.get_cmap(cmap) + except: + raise RuntimeError("Could not retrieve matplotlib colormap: %s" % cmap) + if vcs_name is None: + vcs_name = cmap.name + i = 0 + vcs_name_final = vcs_name + while vcs_name_final in vcs.listelements("colormap"): + vcs_name_final = vcs_name + "_mpl_%.3i" % i + i += 1 + if vcs_name_final != vcs_name: + warnings.warn( + "%s colormap name was already existing, your colormap name will be: %s" % + (vcs_name, vcs_name_final)) + vcs_cmap = vcs.createcolormap(vcs_name_final) + cmap_rgbs = cmap(range(0, cmap.N)) + for i in range(0, min(cmap.N, 256)): + vcs_cmap.setcolorcell(i, *([int(x * 100) for x in cmap_rgbs[i][:4]])) -def rgb2str(r, g=None, b=None): - ''' - Input rgb values, return the closest name - example: - print rgb2str([0,0,0]) - >>> 'black' - ''' - import string - if g is None and len(r) == 3: - r, g, b = r - - ret = '' - rmsmin = 200000.0 - try: - f = open('/usr/X11R6/lib/X11/rgb.txt', 'r') - ln = f.readlines() - f.close() - for l in ln[1:]: - sp = string.split(l) - r2, g2, b2 = string.atof( - sp[0]), string.atof( - sp[1]), string.atof( - sp[2]) - rms = (r2 - r) ** 2. + (b2 - b) ** 2. + (g2 - g) ** 2. - if rms < rmsmin: - ret = string.join(sp[3:]) - rmsmin = rms - if rms == 0.: - return ret - return ret - except: - ky = cols.keys() - rmsmin = 200000.0 - for k in ky: - r2, g2, b2 = cols[k] - rms = (r2 - r) ** 2. + (b2 - b) ** 2. + (g2 - g) ** 2. - if rms < rmsmin: - ret = k - rmsmin = rms - if rms == 0.: - return ret - return ret - - -if __name__ == '__main__': - print str2rgb('pink2') - print str2rgb('black') - print str2rgb('crap') - print rgb2str(255, 255, 255) - print rgb2str([0, 0, 0]) - print rgb2str(str2rgb('pink2')) - print rgb2str([241, 255, 255]) - print rgb2str(69, 184, 67) + return vcs_cmap diff --git a/Packages/vcs/Lib/configurator.py b/Packages/vcs/Lib/configurator.py index ff8f3c164a..b62d5b32dc 100644 --- a/Packages/vcs/Lib/configurator.py +++ b/Packages/vcs/Lib/configurator.py @@ -312,8 +312,11 @@ def actor_at_point(self, x, y): if back is None: continue if type(back) not in (list, tuple): - if back.IsA("vtkProp"): - actors.append(back) + try: + if back.IsA("vtkProp"): + actors.append(back) + except AttributeError: + continue else: for back_obj in back: if type(back_obj) in (list, tuple): @@ -437,7 +440,6 @@ def activate(self, display, actor, key): self.deactivate(self.target) self.toolbar.hide() - if display.g_type == "marker": l = display.backend[key] # Actor is actually a group of VTK objects diff --git a/Packages/vcs/Lib/displayplot.py b/Packages/vcs/Lib/displayplot.py index 5c8d527ca5..1f00450ba1 100755 --- a/Packages/vcs/Lib/displayplot.py +++ b/Packages/vcs/Lib/displayplot.py @@ -78,6 +78,7 @@ class Dp(object): "continents", "extradisplays", "parent", + "_parent", "_off", "_priority", "_template", @@ -86,16 +87,18 @@ class Dp(object): "_g_name", "_array", "_continents", + "_continents_line", + "continents_line", "_backend", "ratio", "newelements", "_newelements", ] - def _repr_png_(self): + def _repr_png(self): import tempfile tmp = tempfile.mktemp() + ".png" - self.parent.png(tmp) + self._parent.png(tmp) f = open(tmp) st = f.read() f.close() @@ -124,14 +127,20 @@ def _getcontinents(self): return self._continents def _setcontinents(self, value): - self._continents = VCS_validation_functions.checkInt( + VCS_validation_functions.checkContinents( self, - 'continents', - value, - minvalue=- - 1) + value) + self._continents = value continents = property(_getcontinents, _setcontinents) + def _getcontinents_line(self): + return self._continents_line + + def _setcontinents_line(self, value): + self._continents_line = VCS_validation_functions.checkLine( + self, "continents_line", value) + continents_line = property(_getcontinents_line, _setcontinents_line) + def _getpriority(self): return self._priority @@ -228,7 +237,7 @@ def _set_backend(self, value): # Initialize the display plot attributes. # # # ########################################################################## - def __init__(self, Dp_name, Dp_name_src='default'): + def __init__(self, Dp_name, Dp_name_src='default', parent=None): # # ################################################################### # Initialize the display plot's class and its members # @@ -240,6 +249,7 @@ def __init__(self, Dp_name, Dp_name_src='default'): self.extradisplays = [] self._name = Dp_name self.s_name = 'Dp' + self._parent = parent if self._name == "default": self._off = 0 self._priority = 0 @@ -248,7 +258,7 @@ def __init__(self, Dp_name, Dp_name_src='default'): self._g_type = "boxfill" self._g_name = "default" self._array = [] - self._continents = -1 + self._continents = 1 self.ratio = None else: src = vcs.elements["display"][Dp_name_src] diff --git a/Packages/vcs/Lib/editors/text.py b/Packages/vcs/Lib/editors/text.py index 840921d2d2..fa556eb4f6 100644 --- a/Packages/vcs/Lib/editors/text.py +++ b/Packages/vcs/Lib/editors/text.py @@ -362,5 +362,10 @@ def update_priority(self): def text_dimensions(text, index, winsize, dpi): prop = vtkTextProperty() - vcs.vcs2vtk.prepTextProperty(prop, winsize, text.To, text.Tt, vcs.getcolormap()) + vcs.vcs2vtk.prepTextProperty( + prop, + winsize, + text.To, + text.Tt, + vcs.getcolormap()) return vcs.vtk_ui.text.text_dimensions(text.string[index], prop, dpi) diff --git a/Packages/vcs/Lib/isofill.py b/Packages/vcs/Lib/isofill.py index 50deb7856d..8b9b7242b9 100755 --- a/Packages/vcs/Lib/isofill.py +++ b/Packages/vcs/Lib/isofill.py @@ -129,7 +129,6 @@ def process_src(nm, code): fac = [] fai = [] fas = [] - fao = [] badfa = True for l in lines: if l.find("(id=") > -1: @@ -145,7 +144,6 @@ def process_src(nm, code): fac.append(fa.color[0]) fai.append(fa.index[0]) fas.append(fa.style[0]) - fao.append(fa.opacity[0]) i += 1 if not numpy.allclose(levs, 1.e20): g.levels = levs @@ -155,7 +153,6 @@ def process_src(nm, code): g.fillareacolor = fac g.fillareaindices = fai g.fillareastyle = fas[0] - g.fillareaopacity = fao[0] class Gfi(object): @@ -400,7 +397,7 @@ def _setfillareacolors(self, value): 'fillareacolors', value) self._fillareacolors = value - fillareacolors = property(_getfillareacolors, _setfillareacolors) + fillareacolors = VCS_validation_functions.fillareacolors def _getfillareaindices(self): return self._fillareaindices @@ -425,17 +422,7 @@ def _setfillareastyle(self, value): self._fillareastyle = value fillareastyle = property(_getfillareastyle, _setfillareastyle) - def _getfillareaopacity(self): - return self._fillareaopacity - - def _setfillareaopacity(self, value): - if value is not None: - value = VCS_validation_functions.checkOpacitiesList( - self, - 'fillareaopacity', - value) - self._fillareaopacity = value - fillareaopacity = property(_getfillareaopacity, _setfillareaopacity) + fillareaopacity = VCS_validation_functions.fillareaopacity ext_1 = VCS_validation_functions.ext_1 ext_2 = VCS_validation_functions.ext_2 diff --git a/Packages/vcs/Lib/isoline.py b/Packages/vcs/Lib/isoline.py index f7b0662c1e..6db1830878 100755 --- a/Packages/vcs/Lib/isoline.py +++ b/Packages/vcs/Lib/isoline.py @@ -169,9 +169,9 @@ def process_src(nm, code): except: g._text = to try: - g.textcolor = tt + g.textcolors = tt except: - g._textcolor = tt + g._textcolors = tt gd = vcs.elements["isoline"]["default"] try: @@ -633,7 +633,8 @@ def _settext(self, value): value = VCS_validation_functions.checkTextsList( self, 'text', - value) + value, + storeName=True) self._text = value text = property(_gettext, _settext) diff --git a/Packages/vcs/Lib/meshfill.py b/Packages/vcs/Lib/meshfill.py index afd6c57266..31d876ab21 100644 --- a/Packages/vcs/Lib/meshfill.py +++ b/Packages/vcs/Lib/meshfill.py @@ -268,6 +268,7 @@ class Gfm(object): 'fillareacolors', 'fillareastyle', 'fillareaindices', + 'fillareaopacity', 'ext_1', 'ext_2', 'missing', @@ -296,6 +297,7 @@ class Gfm(object): '_fillareacolors', '_fillareastyle', '_fillareaindices', + '_fillareaopacity', '_ext_1', '_ext_2', '_missing', @@ -352,18 +354,7 @@ def _setyaxisconvert(self, value): levels = VCS_validation_functions.levels - def _getfillareacolors(self): - return self._fillareacolors - - def _setfillareacolors(self, value): - if value is not None: - value = list( - VCS_validation_functions.checkListTuple( - self, - 'fillareacolors', - value)) - self._fillareacolors = value - fillareacolors = property(_getfillareacolors, _setfillareacolors) + fillareacolors = VCS_validation_functions.fillareacolors def _getfillareaindices(self): return self._fillareaindices @@ -388,6 +379,8 @@ def _setfillareastyle(self, value): self._fillareastyle = value fillareastyle = property(_getfillareastyle, _setfillareastyle) + fillareaopacity = VCS_validation_functions.fillareaopacity + ext_1 = VCS_validation_functions.ext_1 ext_2 = VCS_validation_functions.ext_2 @@ -609,6 +602,7 @@ def __init__(self, Gfm_name, Gfm_name_src='default'): self._fillareastyle = 'solid' self._fillareaindices = None self._fillareacolors = [1, ] + self._fillareaopacity = [] self._levels = ([1.0000000200408773e+20, 1.0000000200408773e+20],) self._legend = None self._mesh = 0 @@ -628,7 +622,7 @@ def __init__(self, Gfm_name, Gfm_name_src='default'): 'xmtics1', 'xmtics2', 'yticlabels1', 'yticlabels2', 'ymtics1', 'ymtics2', 'datawc_y1', 'datawc_y2', 'datawc_x1', 'datawc_x2', 'xaxisconvert', 'yaxisconvert', 'missing', 'levels', 'ext_1', 'ext_2', - 'fillareastyle', 'fillareaindices', 'fillareacolors', 'legend', + 'fillareastyle', 'fillareaindices', 'fillareacolors', 'fillareaopacity', 'legend', 'datawc_timeunits', 'datawc_calendar']: setattr(self, "_" + att, getattr(src, "_" + att)) vcs.elements["meshfill"][Gfm_name] = self diff --git a/Packages/vcs/Lib/projection.py b/Packages/vcs/Lib/projection.py index 275bd51f3a..a8476a9892 100644 --- a/Packages/vcs/Lib/projection.py +++ b/Packages/vcs/Lib/projection.py @@ -21,6 +21,9 @@ round_projections = ['polar (non gctp)', 'stereographic', 'orthographic', "ortho", ] +no_over_proj4_parameter_projections = round_projections+["aeqd", "lambert conformal c"] +elliptical_projections = ["robinson", "mollweide"] + def process_src(nm, code): try: diff --git a/Packages/vcs/Lib/taylor.py b/Packages/vcs/Lib/taylor.py index b5183dc13b..1e519145be 100644 --- a/Packages/vcs/Lib/taylor.py +++ b/Packages/vcs/Lib/taylor.py @@ -15,8 +15,7 @@ def process_src(name, code): # now gets the name and prepare the graphics method if name != 'default': # we cannot change default try: - td = Gtd() - td._name = name + td = Gtd(name) except Exception as err: print "Err:", err td = vcs.elements["taylordiagram"][name] @@ -941,7 +940,7 @@ def drawSkill(self, canvas, values, function=None): a[j, i] = function(std, cor) iso = createnewvcsobj(canvas, 'isoline', 'td_new_') cols = [] - c = VCS_validation_functions.color2vcs(color) + c = VCS_validation_functions.checkColor(self, "color", color) for i in range(len(values)): cols.append(c) @@ -1172,7 +1171,7 @@ def draw(self, canvas, data): markers.append(m) markers[-1].size = s markers[-1].type = t - markers[-1].color = VCS_validation_functions.color2vcs(c) + markers[-1].color = [c, ] markers[-1].x = [d0 * d1, ] markers[-1].y = [float(d0 * numpy.ma.sin(numpy.ma.arccos(d1))), ] diff --git a/Packages/vcs/Lib/template.py b/Packages/vcs/Lib/template.py index eba2fdf57a..2928f4ff4a 100644 --- a/Packages/vcs/Lib/template.py +++ b/Packages/vcs/Lib/template.py @@ -37,6 +37,7 @@ import inspect import cdutil from projection import round_projections +from projection import elliptical_projections # Following for class properties @@ -1140,6 +1141,8 @@ def drawTicks(self, slab, gm, x, axis, number, ys.append([obj.y1, obj.y2]) txs.append((l - wc[0]) / dx + vp[0]) tys.append(objlabl.y) + elif vcs.elements["projection"][gm.projection].type in elliptical_projections: + pass else: xs.append([l, l]) end = wc[ @@ -1773,6 +1776,9 @@ def drawColorBar(self, colors, levels, legend=None, ext_1='n', fa.color = colors fa.style = style fa.index = index + # Boxfill default comes in here with [] we need to fix this + if opacity == []: + opacity = [None, ] * len(colors) fa.opacity = opacity fa.priority = priority if cmap is not None: @@ -2046,7 +2052,7 @@ def ratio(self, Rwished, Rout=None, box_and_ticks=0, x=None): self.data._x2 = t.data._x2 self.data._y1 = t.data._y1 self.data._y2 = t.data._y2 - # print odx,ndx + if odx != ndx: self.data._x1 = max(0, min(1, self.data.x1 + (odx - ndx) / 2.)) self.data._x2 = max(0, min(1, self.data.x2 + (odx - ndx) / 2.)) @@ -2055,6 +2061,13 @@ def ratio(self, Rwished, Rout=None, box_and_ticks=0, x=None): self.data._y2 = max(0, min(1, self.data.y2 + (ody - ndy) / 2.)) if box_and_ticks: + # Used to calculate label positions + x_scale = ndx / float(odx) + y_scale = ndy / float(ody) + + x_label_name_diff = self.xlabel1.y - self.xname.y + y_label_name_diff = self.ylabel1.x - self.yname.x + # Box1 resize self.box1._x1 = self.data._x1 self.box1._x2 = self.data._x2 @@ -2100,6 +2113,10 @@ def ratio(self, Rwished, Rout=None, box_and_ticks=0, x=None): # Ylabels self.ylabel1._x = max(0, min(1, self.ytic1._x1 + dX1)) self.ylabel2._x = max(0, min(1, self.ytic2._x1 + dX2)) + + # Axis Names + self.xname.y = max(0, min(1, self.xlabel1._y - x_scale * x_label_name_diff)) + self.yname.x = max(0, min(1, self.ylabel1._x - y_scale * y_label_name_diff)) self.data._ratio = -Rwished else: self.data._ratio = Rwished diff --git a/Packages/vcs/Lib/texttable.py b/Packages/vcs/Lib/texttable.py index 5437435147..3b7039e568 100755 --- a/Packages/vcs/Lib/texttable.py +++ b/Packages/vcs/Lib/texttable.py @@ -65,8 +65,7 @@ def process_src(nm, code): tt.priority = int(sp[5]) if len(sp) != 14: tt.fillincolor = int(sp[6]) - tt.backgroundcolor = int(sp[7]) - tt.backgroundopacity = int(sp[8]) + ############################################################################# # # diff --git a/Packages/vcs/Lib/utils.py b/Packages/vcs/Lib/utils.py index f6385f08e9..c4e15b02fd 100644 --- a/Packages/vcs/Lib/utils.py +++ b/Packages/vcs/Lib/utils.py @@ -23,6 +23,9 @@ import vcsaddons import cdms2 import genutil +import vtk + +from colors import rgb2str, str2rgb, matplotlib2vcs # noqa indent = 1 sort_keys = True @@ -103,7 +106,7 @@ def dumpToJson(obj, fileout, skipped=[ f.close() for etype in associated.keys(): for asso in associated[etype]: - if asso is not None: + if asso is not None and asso not in vcs._protected_elements[etype]: dumpToJson( vcs.elements[etype][asso], fileout, @@ -194,11 +197,11 @@ def listelements(typ=None): return sorted(vcs.elements[typ].keys()) -############################################################################# -# # +# +# # Show VCS primary and secondary elements wrapper for VCS. # -# # -############################################################################# +# +# def show(*args): """ Function: show @@ -290,7 +293,7 @@ def _scriptrun(script, canvas=None): for e in g.line: if e in vcs.elements["texttable"]: lst.append(vcs.elements["line"][e]) - elif e in vcs.elements["text"]: + elif e in vcs.elements["textcombined"]: lst.append(vcs.elements["line"][e]) else: lst.append(e) @@ -299,11 +302,11 @@ def _scriptrun(script, canvas=None): except: setattr(g, att, getattr(gd, att)) -############################################################################# -# # +# +# # Import old VCS file script commands into CDAT. # -# # -############################################################################# +# +# def scriptrun_scr(*args): @@ -324,7 +327,7 @@ def scriptrun_scr(*args): (l[3][0:31] == "# #") and (l[4][0:29] == "#############################")): fin.close() - execfile(args[0], __main__.__dict__) + exec(compile(open(args[0]).read(), args[0], 'exec'), __main__.__dict__) return while i < line_ct: @@ -536,48 +539,50 @@ def saveinitialfile(): fnm = os.path.join(os.environ['HOME'], _dotdir, 'initial.attributes') if os.path.exists(fnm): os.remove(fnm) - items = vcs.elements.keys() - for k in ["projection", "marker", "texttable", - "textorientation", "line", "list"]: - items.remove(k) - items.insert(0, k) - for k in items: - if k in ["font", "fontNumber"]: + Skip = {} + for k in vcs.elements.keys(): + Skip[k] = [] + for e in vcs.elements[k].keys(): + if e in vcs._protected_elements[k] or e[:2] == "__": # temporary elt + Skip[k].append(e) + for k in vcs.elements.keys(): + if k in ["display", "font", "fontNumber"]: continue elif k == "list": - D = {} - D["L"] = vcs.elements["list"] - f = open(fnm + ".json", "w") - json.dump(D, f) - f.close() + D2 = {} + D2["L"] = {} + for l in vcs.elements["list"].keys(): + if l not in Skip["list"]: + D2["L"][l] = vcs.elements["list"][l] + if len(D2["L"].keys()) != 0: + f = open(fnm + ".json", "w") + json.dump(D2, f) + f.close() continue e = vcs.elements[k] for nm, g in e.iteritems(): - if nm != "default" and not nm[:2] == "__" \ - and nm not in ["default_scatter_", - "default_xvsy_", "default_xyvsy_", - "default_yxvsx_"]: # skip defaults and temp ones + if nm not in Skip[k]: try: g.script(fnm) except Exception as err: warnings.warn( - "Could not save graphic method %s named %si: %s" % + "Could not save graphic method %s named %s: %s" % (k, nm, err)) # extension .json has been auto-added, removing it in this specific case os.rename(fnm + ".json", fnm) -############################################################################# -# # +# +# # Import old VCS file script commands into CDAT. -# # -############################################################################# +# +# def scriptrun(script): if script.split(".")[-1] == "scr": scriptrun_scr(script) elif script.split(".")[-1] == "py": - execfile(script) + exec(compile(open(script).read(), script, 'exec')) else: if os.path.split(script)[-1] == "initial.attributes": vcs._doValidation = False @@ -604,7 +609,14 @@ def scriptrun(script): try: f = open(script) jsn = json.load(f) - for typ in jsn.keys(): + keys = [] + for k in ["Tt", "To", "Tl", "Tm", "Proj"]: # always read these first + if k in jsn.keys(): + keys.append(k) + for k in jsn.keys(): + if k not in keys: + keys.append(k) + for typ in keys: for nm, v in jsn[typ].iteritems(): if typ == "P": try: @@ -621,7 +633,7 @@ def scriptrun(script): if os.path.split(script)[-1] == "initial.attributes": _scriptrun(script) else: - warnings.warn("unable to source file: %si %s" % (script, err)) + warnings.warn("unable to source file: %s %s" % (script, err)) vcs._doValidation = True return @@ -1485,7 +1497,7 @@ def getcolorcell(cell, obj=None): return cmap.index[cell] -def setcolorcell(obj, num, r, g, b): +def setcolorcell(obj, num, r, g, b, a=100): """ Function: setcolorcell @@ -1514,7 +1526,7 @@ def setcolorcell(obj, num, r, g, b): cmap = getcolormap(obj) else: cmap = getcolormap(obj.colormap) - cmap.index[num] = (r, g, b) + cmap.index[num] = (r, g, b, a) return @@ -1702,3 +1714,14 @@ def getworldcoordinates(gm, X, Y): wc[0] -= .0001 wc[1] += .0001 return wc + + +def png_read_metadata(path): + reader = vtk.vtkPNGReader() + reader.SetFileName(path) + reader.Update() + numberOfTextChunks = reader.GetNumberOfTextChunks() + m = {} + for i in range(0, numberOfTextChunks): + m[reader.GetTextKey(i)] = reader.GetTextValue(i) + return m diff --git a/Packages/vcs/Lib/vcs2vtk.py b/Packages/vcs/Lib/vcs2vtk.py index bc6acdbdbb..62e6e9bc15 100644 --- a/Packages/vcs/Lib/vcs2vtk.py +++ b/Packages/vcs/Lib/vcs2vtk.py @@ -9,7 +9,7 @@ import cdms2 import warnings import cdtime -from projection import round_projections +from projection import round_projections, no_over_proj4_parameter_projections from vcsvtk import fillareautils f = open(os.path.join(vcs.prefix, "share", "vcs", "wmo_symbols.json")) @@ -87,15 +87,15 @@ def putMaskOnVTKGrid(data, grid, actorColor=None, cellData=True, deep=True): grid2.CopyStructure(grid) geoFilter = vtk.vtkDataSetSurfaceFilter() lut = vtk.vtkLookupTable() - r, g, b = actorColor + r, g, b, a = actorColor lut.SetNumberOfTableValues(2) if not cellData: grid2.GetPointData().RemoveArray( vtk.vtkDataSetAttributes.GhostArrayName()) grid2.GetPointData().SetScalars(imsk) geoFilter.SetInputData(grid2) - lut.SetTableValue(0, r / 100., g / 100., b / 100., 1.) - lut.SetTableValue(1, r / 100., g / 100., b / 100., 1.) + lut.SetTableValue(0, r / 100., g / 100., b / 100., a / 100.) + lut.SetTableValue(1, r / 100., g / 100., b / 100., a / 100.) else: grid2.GetCellData().RemoveArray( vtk.vtkDataSetAttributes.GhostArrayName()) @@ -133,13 +133,15 @@ def handleProjectionEdgeCases(projection, data): # For mercator projection, latitude values of -90 or 90 # transformation result in infinity values. We chose -85, 85 # as that's the typical limit used by the community. - pname = projDict.get(projection._type, projection.type) - if (pname.lower() == "merc"): - lat = data.getLatitude()[:] - # Reverse the latitudes incase the starting latitude is greater - # than the ending one - if lat[-1] < lat[0]: - lat = lat[::-1] + ptype = projDict.get(projection._type, projection.type) + if (ptype.lower() == "merc"): + lat = data.getLatitude() + if isinstance(lat, cdms2.axis.TransientAxis): + lat = lat[:] + # Reverse the latitudes incase the starting latitude is greater + # than the ending one + if lat[-1] < lat[0]: + lat = lat[::-1] data = data(latitude=(max(-85, lat.min()), min(85, lat.max()))) return data @@ -251,7 +253,7 @@ def genGrid(data1, data2, gm, deep=True, grid=None, geo=None): try: # First try to see if we can get a mesh out of this g = data1.getGrid() - # Ok need unstrctured grid + # Ok need unstructured grid if isinstance(g, cdms2.gengrid.AbstractGenericGrid): continents = True wrap = [0., 360.] @@ -261,7 +263,7 @@ def genGrid(data1, data2, gm, deep=True, grid=None, geo=None): xM = m[:, 1].max() ym = m[:, 0].min() yM = m[:, 0].max() - N = m.shape[0] + numberOfCells = m.shape[0] # For vtk we need to reorder things m2 = numpy.ascontiguousarray(numpy.transpose(m, (0, 2, 1))) m2.resize((m2.shape[0] * m2.shape[1], m2.shape[2])) @@ -282,7 +284,8 @@ def genGrid(data1, data2, gm, deep=True, grid=None, geo=None): xM = data2[:, 1].max() ym = data2[:, 0].min() yM = data2[:, 0].max() - N = data2.shape[0] + numberOfCells = data2.shape[0] + data2 = data2.filled(numpy.nan) m2 = numpy.ascontiguousarray(numpy.transpose(data2, (0, 2, 1))) nVertices = m2.shape[-2] m2.resize((m2.shape[0] * m2.shape[1], m2.shape[2])) @@ -297,20 +300,15 @@ def genGrid(data1, data2, gm, deep=True, grid=None, geo=None): if m3 is not None: # Create unstructured grid points vg = vtk.vtkUnstructuredGrid() - lst = vtk.vtkIdTypeArray() - cells = vtk.vtkCellArray() - numberOfCells = N - lst.SetNumberOfComponents(nVertices + 1) - lst.SetNumberOfTuples(numberOfCells) - for i in range(N): - tuple = [None] * (nVertices + 1) - tuple[0] = nVertices + for i in range(numberOfCells): + pt_ids = [] for j in range(nVertices): - tuple[j + 1] = i * nVertices + j - lst.SetTuple(i, tuple) - # ??? TODO ??? when 3D use CUBE? - cells.SetCells(numberOfCells, lst) - vg.SetCells(vtk.VTK_POLYGON, cells) + indx = i * nVertices + j + if not numpy.isnan(m3[indx][0]): # missing value means skip vertex + pt_ids.append(indx) + vg.InsertNextCell(vtk.VTK_POLYGON, + len(pt_ids), + pt_ids) else: # Ok a simple structured grid is enough if grid is None: @@ -342,10 +340,22 @@ def genGrid(data1, data2, gm, deep=True, grid=None, geo=None): try: blat = lat.getBounds() blon = lon.getBounds() - lat2[:len(lat)] = blat[:, 0] - lat2[len(lat)] = blat[-1, 1] - lon2[:len(lon)] = blon[:, 0] - lon2[len(lon)] = blon[-1, 1] + if (lat[0] < lat[-1]): + # latitude is increasing + lat2[:len(lat)] = blat[:, 0] + lat2[len(lat)] = blat[-1, 1] + else: + # latitude is decreasing + lat2[:len(lat)] = blat[:, 1] + lat2[len(lat)] = blat[-1, 0] + if (lon[0] < lon[-1]): + # longitude is incresing + lon2[:len(lon)] = blon[:, 0] + lon2[len(lon)] = blon[-1, 1] + else: + # longitude is decreasing + lon2[:len(lon)] = blon[:, 1] + lon2[len(lon)] = blon[-1, 0] xm = blon[0][0] xM = blon[-1][1] ym = blat[0][0] @@ -545,6 +555,43 @@ def prepContinents(fnm): return poly +def apply_proj_parameters(pd, projection, xm, xM, ym, yM): + pname = projDict.get(projection._type, projection.type) + projName = pname + pd.SetName(projName) + if projection.type == "polar (non gctp)": + if ym < yM: + pd.SetOptionalParameter("lat_0", "-90.") + pd.SetCentralMeridian(xm) + else: + pd.SetOptionalParameter("lat_0", "90.") + pd.SetCentralMeridian(xm + 180.) + else: + if projection.type not in no_over_proj4_parameter_projections: + pd.SetOptionalParameter("over", "true") + else: + pd.SetOptionalParameter("over", "false") + setProjectionParameters(pd, projection) + if (hasattr(projection, 'centralmeridian') and + numpy.allclose(projection.centralmeridian, 1e+20)): + pd.SetCentralMeridian(float(xm + xM) / 2.0) + if (hasattr(projection, 'centerlongitude') and + numpy.allclose(projection.centerlongitude, 1e+20)): + pd.SetOptionalParameter("lon_0", str(float(xm + xM) / 2.0)) + if (hasattr(projection, 'originlatitude') and + numpy.allclose(projection.originlatitude, 1e+20)): + pd.SetOptionalParameter("lat_0", str(float(ym + yM) / 2.0)) + if (hasattr(projection, 'centerlatitude') and + numpy.allclose(projection.centerlatitude, 1e+20)): + pd.SetOptionalParameter("lat_0", str(float(ym + yM) / 2.0)) + if (hasattr(projection, 'standardparallel1') and + numpy.allclose(projection.standardparallel1, 1.e20)): + pd.SetOptionalParameter('lat_1', str(min(ym, yM))) + if (hasattr(projection, 'standardparallel2') and + numpy.allclose(projection.standardparallel2, 1.e20)): + pd.SetOptionalParameter('lat_2', str(max(ym, yM))) + + def projectArray(w, projection, wc, geo=None): xm, xM, ym, yM = wc if isinstance(projection, (str, unicode)): @@ -557,19 +604,8 @@ def projectArray(w, projection, wc, geo=None): ps = vtk.vtkGeoProjection() pd = vtk.vtkGeoProjection() - pname = projDict.get(projection._type, projection.type) - projName = pname - pd.SetName(projName) + apply_proj_parameters(pd, projection, xm, xM, ym, yM) - if projection.type == "polar (non gctp)": - if ym < yM: - pd.SetOptionalParameter("lat_0", "-90.") - pd.SetCentralMeridian(xm) - else: - pd.SetOptionalParameter("lat_0", "90.") - pd.SetCentralMeridian(xm + 180.) - else: - setProjectionParameters(pd, projection) geo.SetSourceProjection(ps) geo.SetDestinationProjection(pd) @@ -592,18 +628,8 @@ def project(pts, projection, wc, geo=None): ps = vtk.vtkGeoProjection() pd = vtk.vtkGeoProjection() - pname = projDict.get(projection._type, projection.type) - projName = pname - pd.SetName(projName) - if projection.type == "polar (non gctp)": - if ym < yM: - pd.SetOptionalParameter("lat_0", "-90.") - pd.SetCentralMeridian(xm) - else: - pd.SetOptionalParameter("lat_0", "90.") - pd.SetCentralMeridian(xm + 180.) - else: - setProjectionParameters(pd, projection) + apply_proj_parameters(pd, projection, xm, xM, ym, yM) + geo.SetSourceProjection(ps) geo.SetDestinationProjection(pd) geopts = vtk.vtkPoints() @@ -937,7 +963,7 @@ def setClipPlanes(mapper, xmin, xmax, ymin, ymax): # def doClip1(data,value,normal,axis=0): # return data -# # We have the actor, do clipping +# We have the actor, do clipping # clpf = vtk.vtkPlane() # if axis == 0: # clpf.SetOrigin(value,0,0) @@ -966,11 +992,18 @@ def prepTextProperty(p, winSize, to="default", tt="default", cmap=None, if isinstance(cmap, str): cmap = vcs.elements["colormap"][cmap] colorIndex = overrideColorIndex if overrideColorIndex else tt.color - c = cmap.index[colorIndex] - p.SetColor([C / 100. for C in c]) + if isinstance(colorIndex, int): + c = cmap.index[colorIndex] + else: + c = colorIndex + p.SetColor([C / 100. for C in c[:3]]) + p.SetOpacity(c[-1]) bcolorIndex = tt.backgroundcolor if tt.backgroundcolor else 255 - bc = cmap.index[bcolorIndex] - p.SetBackgroundColor([C / 100. for C in bc]) + if isinstance(bcolorIndex, int): + bc = cmap.index[bcolorIndex] + else: + bc = bcolorIndex + p.SetBackgroundColor([C / 100. for C in bc[:3]]) bopacity = (tt.backgroundopacity / 100.) if tt.backgroundopacity else 0 p.SetBackgroundOpacity(bopacity) if to.halign in [0, 'left']: @@ -1138,8 +1171,11 @@ def prepFillarea(renWin, farea, cmap=None): for i in range(n): x = farea.x[i] y = farea.y[i] - c = farea.color[i] st = farea.style[i] + if st == "pattern": + c = 241 + else: + c = farea.color[i] if st == "solid": points, polys, pd, color_arr = pts, polygons, polygonPolyData, colors @@ -1166,33 +1202,40 @@ def prepFillarea(renWin, farea, cmap=None): pid.SetId(j, points.InsertNextPoint(x[j], y[j], 0.)) cellId = polys.InsertNextCell(polygon) - color = [int((C / 100.) * 255) for C in cmap.index[c]] + if isinstance(c, int): + color = [C for C in cmap.index[c]] + else: + color = [C for C in c] if len(farea.opacity) > i: - opacity = farea.opacity[i] * 255 / 100.0 - elif st == "pattern": - opacity = 0 + opacity = farea.opacity[i] + if opacity is not None: + opacity = farea.opacity[i] else: - opacity = 255 - # Draw colored background for solid or patterns - # or white background for hatches - if st in ('solid', "pattern"): + opacity = None + # Draw colored background for solid + # transparent/white background for hatches/patterns + if st == 'solid': # Add the color to the color array: - color = color + [int(opacity)] - color_arr.SetTupleValue(cellId, color) + if opacity is not None: + color[-1] = opacity + color = [int(C / 100. * 255) for C in color] + colors.SetTupleValue(cellId, color) else: color_arr.SetTupleValue(cellId, [255, 255, 255, 0]) if st != "solid": # Patterns/hatches support - geo, proj_points = project(points, farea.projection, farea.worldcoordinate) + geo, proj_points = project( + points, farea.projection, farea.worldcoordinate) pd.SetPoints(proj_points) act = fillareautils.make_patterned_polydata(pd, st, idx, color, - opacity) + opacity, + renWin.GetSize()) if act is not None: - if opacity > 0: + if (st == "pattern" and opacity > 0) or st == "hatch": m = vtk.vtkPolyDataMapper() m.SetInputData(pd) a = vtk.vtkActor() @@ -1420,8 +1463,12 @@ def setMarkerColor(p, marker, c, cmap=None): cmap = vcs._colorMap if isinstance(cmap, str): cmap = vcs.elements["colormap"][cmap] - color = cmap.index[c] - p.SetColor([C / 100. for C in color]) + if isinstance(c, int): + color = cmap.index[c] + else: + color = c + p.SetColor([C / 100. for C in color[:3]]) + p.SetOpacity(color[-1]) def scaleMarkerGlyph(g, gs, pd, a): @@ -1488,11 +1535,31 @@ def __build_ld__(): linePolyData.SetPoints(pts) linePolyData.SetLines(lines) colors = vtk.vtkUnsignedCharArray() - colors.SetNumberOfComponents(3) + colors.SetNumberOfComponents(4) colors.SetName("Colors") return pts, lines, linePolyData, colors +def stippleLine(prop, line_type): + if line_type == 'long-dash': + prop.SetLineStipplePattern(int('1111111100000000', 2)) + prop.SetLineStippleRepeatFactor(1) + elif line_type == 'dot': + prop.SetLineStipplePattern(int('1010101010101010', 2)) + prop.SetLineStippleRepeatFactor(1) + elif line_type == 'dash': + prop.SetLineStipplePattern(int('1111000011110000', 2)) + prop.SetLineStippleRepeatFactor(1) + elif line_type == 'dash-dot': + prop.SetLineStipplePattern(int('0011110000110011', 2)) + prop.SetLineStippleRepeatFactor(1) + elif line_type == 'solid': + prop.SetLineStipplePattern(int('1111111111111111', 2)) + prop.SetLineStippleRepeatFactor(1) + else: + raise Exception("Unknown line type: '%s'" % line_type) + + def prepLine(renWin, line, cmap=None): number_lines = prepPrimitive(line) if number_lines == 0: @@ -1514,7 +1581,10 @@ def prepLine(renWin, line, cmap=None): x = line.x[i] y = line.y[i] - c = cmap.index[line.color[i]] + if isinstance(line.color[i], int): + c = cmap.index[line.color[i]] + else: + c = line.color[i] w = line.width[i] t = line.type[i] @@ -1581,23 +1651,7 @@ def prepLine(renWin, line, cmap=None): p = a.GetProperty() p.SetLineWidth(w) - if t == 'long-dash': - p.SetLineStipplePattern(int('1111111100000000', 2)) - p.SetLineStippleRepeatFactor(1) - elif t == 'dot': - p.SetLineStipplePattern(int('1010101010101010', 2)) - p.SetLineStippleRepeatFactor(1) - elif t == 'dash': - p.SetLineStipplePattern(int('1111000011110000', 2)) - p.SetLineStippleRepeatFactor(1) - elif t == 'dash-dot': - p.SetLineStipplePattern(int('0011110000110011', 2)) - p.SetLineStippleRepeatFactor(1) - elif t == 'solid': - p.SetLineStipplePattern(int('1111111111111111', 2)) - p.SetLineStippleRepeatFactor(1) - else: - raise Exception("Unknown line type: '%s'" % t) + stippleLine(p, t) actors.append((a, geo)) return actors diff --git a/Packages/vcs/Lib/vcsvtk/boxfillpipeline.py b/Packages/vcs/Lib/vcsvtk/boxfillpipeline.py index 9ad33c8efe..e18863bbca 100644 --- a/Packages/vcs/Lib/vcsvtk/boxfillpipeline.py +++ b/Packages/vcs/Lib/vcsvtk/boxfillpipeline.py @@ -1,11 +1,10 @@ from .pipeline2d import Pipeline2D from .. import vcs2vtk - import fillareautils + import numpy import vcs import vtk -import warnings class BoxfillPipeline(Pipeline2D): @@ -24,7 +23,7 @@ def __init__(self, gm, context_): self._contourLabels = None self._mappers = None - self._patternActors = [] + self._customBoxfillArgs = {} def _updateScalarData(self): """Overrides baseclass implementation.""" @@ -41,7 +40,7 @@ def _updateContourLevelsAndColors(self): if self._gm.boxfill_type != "custom": self._updateContourLevelsAndColorsForBoxfill() else: - self._updateContourLevelsAndColorsForCustomBoxfill() + self._updateContourLevelsAndColorsGeneric() if isinstance(self._contourLevels, numpy.ndarray): self._contourLevels = self._contourLevels.tolist() @@ -94,40 +93,6 @@ def _updateContourLevelsAndColorsForBoxfill(self): # Use consecutive colors: self._contourColors = range(self._gm.color_1, self._gm.color_2 + 1) - def _updateContourLevelsAndColorsForCustomBoxfill(self): - """Set contour information for a custom boxfill.""" - self._contourLevels = self._gm.levels - - if numpy.allclose(self._contourLevels[0], [0., 1.e20]) or \ - numpy.allclose(self._contourLevels, 1.e20): - levs2 = vcs.mkscale(self._scalarRange[0], - self._scalarRange[1]) - if len(levs2) == 1: # constant value ? - levs2 = [levs2[0], levs2[0] + .00001] - self._contourLevels = [] - if self._gm.ext_1: - # user wants arrow at the end - levs2[0] = -1.e20 - if self._gm.ext_2: - # user wants arrow at the end - levs2[-1] = 1.e20 - for i in range(len(levs2) - 1): - self._contourLevels.append([levs2[i], levs2[i + 1]]) - else: - if not isinstance(self._gm.levels[0], (list, tuple)): - self._contourLevels = [] - levs2 = self._gm.levels - if numpy.allclose(levs2[0], 1.e20): - levs2[0] = 0 - for i in range(len(levs2) - 1): - self._contourLevels.append([levs2[i], levs2[i + 1]]) - - # Contour colors: - self._contourColors = self._gm.fillareacolors - if self._contourColors is None: - # TODO BUG levs2 may not be defined here... - self._contourColors = vcs.getcolors(levs2, split=0) - def _createPolyDataFilter(self): """Overrides baseclass implementation.""" self._vtkPolyDataFilter = vtk.vtkDataSetSurfaceFilter() @@ -155,6 +120,11 @@ def _plotInternal(self): # And now we need actors to actually render this thing actors = [] + patternActors = [] + cti = 0 + ctj = 0 + _colorMap = self.getColorMap() + _style = self._gm.fillareastyle for mapper in self._mappers: act = vtk.vtkActor() act.SetMapper(mapper) @@ -174,23 +144,48 @@ def _plotInternal(self): else: actors.append([act, [x1, x2, y1, y2]]) + if self._gm.boxfill_type == "custom": + # Patterns/hatches creation for custom boxfill plots + patact = None + + tmpColors = self._customBoxfillArgs["tmpColors"] + if ctj >= len(tmpColors[cti]): + ctj = 0 + cti += 1 + # Since pattern creation requires a single color, assuming the first + c = self.getColorIndexOrRGBA(_colorMap, tmpColors[cti][ctj]) + patact = fillareautils.make_patterned_polydata( + mapper.GetInput(), + fillareastyle=_style, + fillareaindex=self._customBoxfillArgs["tmpIndices"][cti], + fillareacolors=c, + fillareaopacity=self._customBoxfillArgs["tmpOpacities"][cti], + size=(x2 - x1, y2 - y1)) + + ctj += 1 + + if patact is not None: + patternActors.append(patact) + # create a new renderer for this mapper # (we need one for each mapper because of camera flips) - self._context().fitToViewport( + self._context().fitToViewportBounds( act, [self._template.data.x1, self._template.data.x2, self._template.data.y1, self._template.data.y2], - wc=[x1, x2, y1, y2], geo=self._vtkGeoTransform, + wc=[x1, x2, y1, y2], geoBounds=self._vtkDataSet.GetBounds(), + geo=self._vtkGeoTransform, priority=self._template.data.priority, create_renderer=True) - for act in self._patternActors: + for act in patternActors: if self._vtkGeoTransform is None: # If using geofilter on wireframed does not get wrapped not sure # why so sticking to many mappers - self._context().fitToViewport( + self._context().fitToViewportBounds( act, [self._template.data.x1, self._template.data.x2, self._template.data.y1, self._template.data.y2], - wc=[x1, x2, y1, y2], geo=self._vtkGeoTransform, + wc=[x1, x2, y1, y2], geoBounds=self._vtkDataSet.GetBounds(), + geo=self._vtkGeoTransform, priority=self._template.data.priority, create_renderer=True) actors.append([act, [x1, x2, y1, y2]]) @@ -204,7 +199,8 @@ def _plotInternal(self): z = None self._resultDict.update(self._context().renderTemplate(self._template, self._data1, - self._gm, t, z)) + self._gm, t, z, + vtk_backend_grid=self._vtkDataSet)) if getattr(self._gm, "legend", None) is not None: self._contourLabels = self._gm.legend @@ -251,7 +247,8 @@ def _plotInternal(self): projection = vcs.elements["projection"][self._gm.projection] self._context().plotContinents(x1, x2, y1, y2, projection, self._dataWrapModulo, - self._template) + self._template, + vtk_backend_grid=self._vtkDataSet) def _plotInternalBoxfill(self): """Implements the logic to render a non-custom boxfill.""" @@ -289,8 +286,8 @@ def _plotInternalBoxfill(self): lut.SetNumberOfTableValues(numLevels) _colorMap = self.getColorMap() for i in range(numLevels): - r, g, b = _colorMap.index[self._contourColors[i]] - lut.SetTableValue(i, r / 100., g / 100., b / 100.) + r, g, b, a = self.getColorIndexOrRGBA(_colorMap, self._contourColors[i]) + lut.SetTableValue(i, r / 100., g / 100., b / 100., a / 100.) mapper.SetLookupTable(lut) if numpy.allclose(self._contourLevels[0], -1.e20): @@ -307,81 +304,18 @@ def _plotInternalBoxfill(self): def _plotInternalCustomBoxfill(self): """Implements the logic to render a custom boxfill.""" self._mappers = [] - tmpLevels = [] - tmpColors = [] - tmpIndices = [] - tmpOpacities = [] - indices = self._gm.fillareaindices - opacities = self._gm.fillareaopacity - style = self._gm.fillareastyle + self._customBoxfillArgs = self._prepContours() + tmpLevels = self._customBoxfillArgs["tmpLevels"] + tmpColors = self._customBoxfillArgs["tmpColors"] + tmpOpacities = self._customBoxfillArgs["tmpOpacities"] - if indices is None: - indices = [1] - while len(indices) < len(self._contourColors): - indices.append(indices[-1]) - if len(self._contourLevels) > len(self._contourColors): - raise RuntimeError( - "You asked for %i levels but provided only %i colors\n" - "Graphic Method: %s of type %s\nLevels: %s" - % (len(self._contourLevels), len(self._contourColors), - self._gm.name, self._gm.g_name, - repr(self._contourLevels))) - elif len(self._contourLevels) < len(self._contourColors) - 1: - warnings.warn( - "You asked for %i lgridevels but provided %i colors, " - "extra ones will be ignored\nGraphic Method: %s of type %s" - % (len(self._contourLevels), len(self._contourColors), - self._gm.name, self._gm.g_name)) - if len(opacities) < len(self._contourColors): - # fill up the opacity values - if style == 'pattern': - opacities += [0] * (len(self._contourColors) - len(opacities)) - else: - opacities += [100] * (len(self._contourColors) - len(opacities)) - - # The following loop attempts to group isosurfaces based on their - # attributes. Isosurfaces grouped if and only if all properties match. - for i, l in enumerate(self._contourLevels): - if i == 0: - C = [self._contourColors[i]] - if numpy.allclose(self._contourLevels[0][0], -1.e20): - # ok it's an extension arrow - L = [self._scalarRange[0] - 1., self._contourLevels[0][1]] - else: - L = list(self._contourLevels[i]) - I = indices[i] - O = opacities[i] - else: - if l[0] == L[-1] and I == indices[i] and\ - ((style == 'solid') or - (C[-1] == self._contourColors[i] and O == opacities[i])): - # Ok same type lets keep going - if numpy.allclose(l[1], 1.e20): - L.append(self._scalarRange[1] + 1.) - else: - L.append(l[1]) - C.append(self._contourColors[i]) - else: # ok we need new contouring - tmpLevels.append(L) - tmpColors.append(C) - tmpIndices.append(I) - tmpOpacities.append(O) - C = [self._contourColors[i]] -# L = self._contourLevels[i] - L = [L[-1], l[1]] - I = indices[i] - O = opacities[i] - tmpLevels.append(L) - tmpColors.append(C) - tmpIndices.append(I) - tmpOpacities.append(O) + style = self._gm.fillareastyle luts = [] geos = [] wholeDataMin, wholeDataMax = vcs.minmax(self._originalData1) _colorMap = self.getColorMap() - self._patternActors = [] for i, l in enumerate(tmpLevels): # Ok here we are trying to group together levels can be, a join # will happen if: next set of levels continues where one left off @@ -401,10 +335,14 @@ def _plotInternalCustomBoxfill(self): geos.append(geoFilter2) mapper.SetInputConnection(geoFilter2.GetOutputPort()) lut.SetNumberOfTableValues(1) - r, g, b = _colorMap.index[color] - if style in ['solid', 'pattern']: - lut.SetTableValue(0, r / 100., g / 100., b / 100., - tmpOpacities[i] / 100.) + r, g, b, a = self.getColorIndexOrRGBA(_colorMap, color) + if style == 'solid': + tmpOpacity = tmpOpacities[j] + if tmpOpacity is None: + tmpOpacity = a / 100. + else: + tmpOpacity = tmpOpacities[j] / 100. + lut.SetTableValue(0, r / 100., g / 100., b / 100., tmpOpacity) else: lut.SetTableValue(0, 1., 1., 1., 0.) mapper.SetLookupTable(lut) @@ -416,16 +354,6 @@ def _plotInternalCustomBoxfill(self): if not (l[j + 1] < wholeDataMin or l[j] > wholeDataMax): self._mappers.append(mapper) - # Since pattern creation requires a single color, assuming the first - c = [val * 255 / 100.0 for val in _colorMap.index[tmpColors[i][0]]] - act = fillareautils.make_patterned_polydata(geoFilter2.GetOutput(), - fillareastyle=style, - fillareaindex=tmpIndices[i], - fillareacolors=c, - fillareaopacity=tmpOpacities[i] * 255 / 100.0) - if act is not None: - self._patternActors.append(act) - self._resultDict["vtk_backend_luts"] = luts if len(geos) > 0: self._resultDict["vtk_backend_geofilters"] = geos diff --git a/Packages/vcs/Lib/vcsvtk/fillareautils.py b/Packages/vcs/Lib/vcsvtk/fillareautils.py index bf7eac236b..60f4c35b98 100644 --- a/Packages/vcs/Lib/vcsvtk/fillareautils.py +++ b/Packages/vcs/Lib/vcsvtk/fillareautils.py @@ -1,13 +1,16 @@ import vtk from patterns import pattern_list -# number of pixels per individual pattern block -NUM_PIXELS = 16 + +def num_pixels_for_size(size): + # Select the largest dimension available + dim = max(size) + return int(round(dim / 20)) def make_patterned_polydata(inputContours, fillareastyle=None, fillareaindex=None, fillareacolors=None, - fillareaopacity=None): + fillareaopacity=None, size=None): if inputContours is None or fillareastyle == 'solid': return None if inputContours.GetNumberOfCells() == 0: @@ -15,11 +18,13 @@ def make_patterned_polydata(inputContours, fillareastyle=None, if fillareaindex is None: fillareaindex = 1 if fillareaopacity is None: - fillareaopacity = 255 + fillareaopacity = 100 + num_pixels = num_pixels_for_size(size) # Create the plane that will be textured with the pattern # The bounds of the plane match the bounds of the input polydata bounds = inputContours.GetBounds() + patternPlane = vtk.vtkPlaneSource() patternPlane.SetOrigin(bounds[0], bounds[2], 0.0) patternPlane.SetPoint1(bounds[0], bounds[3], 0.0) @@ -30,22 +35,20 @@ def make_patterned_polydata(inputContours, fillareastyle=None, # Create the pattern image of the size of the input polydata # and type defined by fillareaindex - # Scaled the size to 2 times to make the pattern image of a finer resolution xBounds = bounds[1] - bounds[0] yBounds = bounds[3] - bounds[2] + + if xBounds <= 1 and yBounds <= 1 and size is not None: + xBounds *= size[0] + yBounds *= size[1] + xres, yres = int(xBounds), int(yBounds) + xres = int(4.0*xBounds) yres = int(4.0*yBounds) + # Handle the case when the bounds are less than 1 in physical dimensions - if xBounds < 1 or yBounds < 1: - boundsAspect = xBounds / yBounds - global NUM_PIXELS - if boundsAspect > 1.0: - yres = 2 * NUM_PIXELS - xres = int(boundsAspect * yres) - else: - xres = 2 * NUM_PIXELS - yres = int(xres / boundsAspect) - patternImage = create_pattern(xres, yres, fillareastyle, + + patternImage = create_pattern(xres, yres, num_pixels, fillareastyle, fillareaindex, fillareacolors, fillareaopacity) if patternImage is None: @@ -82,6 +85,7 @@ def make_patterned_polydata(inputContours, fillareastyle=None, patternTexture = vtk.vtkTexture() patternTexture.SetInputData(patternImage) patternTexture.InterpolateOn() + patternTexture.RepeatOn() mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(textureMap.GetOutputPort()) actor = vtk.vtkActor() @@ -90,7 +94,7 @@ def make_patterned_polydata(inputContours, fillareastyle=None, return actor -def create_pattern(width, height, fillareastyle=None, +def create_pattern(width, height, num_pixels, fillareastyle=None, fillareaindex=None, fillareacolors=None, fillareaopacity=None): if fillareastyle == 'solid': return None @@ -102,8 +106,8 @@ def create_pattern(width, height, fillareastyle=None, fillareacolors = [0, 0, 0] if fillareaopacity is None: - fillareaopacity = 255 + fillareaopacity = 100 # Create a pattern source image of the given size - pattern = pattern_list[fillareaindex](width, height, fillareacolors, fillareastyle, fillareaopacity) + pattern = pattern_list[fillareaindex](width, height, num_pixels, fillareacolors, fillareastyle, fillareaopacity) return pattern.render() diff --git a/Packages/vcs/Lib/vcsvtk/isofillpipeline.py b/Packages/vcs/Lib/vcsvtk/isofillpipeline.py index b3b9cb28f6..4580e3b921 100644 --- a/Packages/vcs/Lib/vcsvtk/isofillpipeline.py +++ b/Packages/vcs/Lib/vcsvtk/isofillpipeline.py @@ -1,11 +1,10 @@ from .pipeline2d import Pipeline2D from .. import vcs2vtk +import fillareautils import numpy import vcs import vtk -import warnings -import fillareautils class IsofillPipeline(Pipeline2D): @@ -15,8 +14,6 @@ class IsofillPipeline(Pipeline2D): def __init__(self, gm, context_): super(IsofillPipeline, self).__init__(gm, context_) - self._patternActors = None - def _updateVTKDataSet(self): """Overrides baseclass implementation.""" # Force point data for isoline/isofill @@ -34,43 +31,7 @@ def _updateVTKDataSet(self): self._vtkDataSet.GetPointData().SetScalars(data) def _updateContourLevelsAndColors(self): - """Overrides baseclass implementation.""" - # Contour values: - self._contourLevels = self._gm.levels - if numpy.allclose(self._contourLevels[0], [0., 1.e20]) or \ - numpy.allclose(self._contourLevels, 1.e20): - levs2 = vcs.mkscale(self._scalarRange[0], - self._scalarRange[1]) - if len(levs2) == 1: # constant value ? - levs2 = [levs2[0], levs2[0] + .00001] - self._contourLevels = [] - if self._gm.ext_1: - # user wants arrow at the end - levs2[0] = -1.e20 - if self._gm.ext_2: - # user wants arrow at the end - levs2[-1] = 1.e20 - for i in range(len(levs2) - 1): - self._contourLevels.append([levs2[i], levs2[i + 1]]) - else: - if not isinstance(self._gm.levels[0], (list, tuple)): - self._contourLevels = [] - levs2 = self._gm.levels - if numpy.allclose(levs2[0], 1.e20): - levs2[0] = -1.e20 - for i in range(len(levs2) - 1): - self._contourLevels.append([levs2[i], levs2[i + 1]]) - - if isinstance(self._contourLevels, numpy.ndarray): - self._contourLevels = self._contourLevels.tolist() - - # Figure out colors - self._contourColors = self._gm.fillareacolors - if self._contourColors == [1]: - # TODO BUG It's possible that levs2 may not exist here... - self._contourColors = vcs.getcolors(levs2, split=0) - if isinstance(self._contourColors, (int, float)): - self._contourColors = [self._contourColors] + self._updateContourLevelsAndColorsGeneric() def _createPolyDataFilter(self): """Overrides baseclass implementation.""" @@ -89,79 +50,22 @@ def _createPolyDataFilter(self): def _plotInternal(self): """Overrides baseclass implementation.""" - tmpLevels = [] - tmpColors = [] - tmpIndices = [] - tmpOpacities = [] - indices = self._gm.fillareaindices - opacities = self._gm.fillareaopacity + + prepedContours = self._prepContours() + tmpLevels = prepedContours["tmpLevels"] + tmpIndices = prepedContours["tmpIndices"] + tmpColors = prepedContours["tmpColors"] + tmpOpacities = prepedContours["tmpOpacities"] style = self._gm.fillareastyle - if indices is None: - indices = [1] - while len(indices) < len(self._contourColors): - indices.append(indices[-1]) - if len(self._contourLevels) > len(self._contourColors): - raise RuntimeError( - "You asked for %i levels but provided only %i colors\n" - "Graphic Method: %s of type %s\nLevels: %s" - % (len(self._contourLevels), len(self._contourColors), - self._gm.name, self._gm.g_name, - repr(self._contourLevels))) - elif len(self._contourLevels) < len(self._contourColors) - 1: - warnings.warn( - "You asked for %i lgridevels but provided %i colors, extra " - "ones will be ignored\nGraphic Method: %s of type %s" - % (len(self._contourLevels), len(self._contourColors), - self._gm.name, self._gm.g_name)) - - if len(opacities) < len(self._contourColors): - # fill up the opacity values - if style == 'pattern': - opacities += [0] * (len(self._contourColors) - len(opacities)) - else: - opacities += [100] * (len(self._contourColors) - len(opacities)) - - # The following loop attempts to group isosurfaces based on their attributes. - # Isosurfaces are grouped if and only if all the properties match - for i, l in enumerate(self._contourLevels): - if i == 0: - C = [self._contourColors[i]] - if numpy.allclose(self._contourLevels[0][0], -1.e20): - # ok it's an extension arrow - L = [self._scalarRange[0] - 1., self._contourLevels[0][1]] - else: - L = list(self._contourLevels[i]) - I = indices[i] - O = opacities[i] - else: - if l[0] == L[-1] and I == indices[i] and\ - ((style == 'solid') or - (C[-1] == self._contourColors[i] and O == opacities[i])): - # Ok same type lets keep going - if numpy.allclose(l[1], 1.e20): - L.append(self._scalarRange[1] + 1.) - else: - L.append(l[1]) - C.append(self._contourColors[i]) - else: # ok we need new contouring - tmpLevels.append(L) - tmpColors.append(C) - tmpIndices.append(I) - tmpOpacities.append(O) - C = [self._contourColors[i]] - L = [L[-1], l[1]] - I = indices[i] - O = opacities[i] - tmpLevels.append(L) - tmpColors.append(C) - tmpIndices.append(I) - tmpOpacities.append(O) luts = [] cots = [] mappers = [] _colorMap = self.getColorMap() - self._patternActors = [] + + x1, x2, y1, y2 = vcs.utils.getworldcoordinates(self._gm, + self._data1.getAxis(-1), + self._data1.getAxis(-2)) for i, l in enumerate(tmpLevels): # Ok here we are trying to group together levels can be, a join # will happen if: next set of levels continues where one left off @@ -181,10 +85,14 @@ def _plotInternal(self): mapper.SetInputConnection(cot.GetOutputPort()) lut.SetNumberOfTableValues(len(tmpColors[i])) for j, color in enumerate(tmpColors[i]): - r, g, b = _colorMap.index[color] - if style in ['solid', 'pattern']: - lut.SetTableValue(j, r / 100., g / 100., b / 100., - tmpOpacities[i] / 100.) + r, g, b, a = self.getColorIndexOrRGBA(_colorMap, color) + if style == 'solid': + tmpOpacity = tmpOpacities[j] + if tmpOpacity is None: + tmpOpacity = a / 100. + else: + tmpOpacity = tmpOpacities[j] / 100. + lut.SetTableValue(j, r / 100., g / 100., b / 100., tmpOpacity) else: lut.SetTableValue(j, 1., 1., 1., 0.) luts.append([lut, [0, len(l) - 1, True]]) @@ -193,16 +101,6 @@ def _plotInternal(self): mapper.SetScalarModeToUseCellData() mappers.append(mapper) - # Since pattern creation requires a single color, assuming the first - c = [val*255/100.0 for val in _colorMap.index[tmpColors[i][0]]] - act = fillareautils.make_patterned_polydata(cot.GetOutput(), - fillareastyle=style, - fillareaindex=tmpIndices[i], - fillareacolors=c, - fillareaopacity=tmpOpacities[i] * 255 / 100.0) - if act is not None: - self._patternActors.append(act) - self._resultDict["vtk_backend_luts"] = luts if len(cots) > 0: self._resultDict["vtk_backend_contours"] = cots @@ -219,8 +117,8 @@ def _plotInternal(self): lut = vtk.vtkLookupTable() lut.SetNumberOfTableValues(numLevels) for i in range(numLevels): - r, g, b = _colorMap.index[self._contourColors[i]] - lut.SetTableValue(i, r / 100., g / 100., b / 100.) + r, g, b, a = self.getColorIndexOrRGBA(_colorMap, self._contourColors[i]) + lut.SetTableValue(i, r / 100., g / 100., b / 100., a / 100.) mapper.SetLookupTable(lut) if numpy.allclose(self._contourLevels[0], -1.e20): @@ -237,12 +135,10 @@ def _plotInternal(self): if self._maskedDataMapper is not None: mappers.insert(0, self._maskedDataMapper) - x1, x2, y1, y2 = vcs.utils.getworldcoordinates(self._gm, - self._data1.getAxis(-1), - self._data1.getAxis(-2)) - # And now we need actors to actually render this thing actors = [] + patternActors = [] + ct = 0 for mapper in mappers: act = vtk.vtkActor() act.SetMapper(mapper) @@ -253,26 +149,48 @@ def _plotInternal(self): act = vcs2vtk.doWrap(act, [x1, x2, y1, y2], self._dataWrapModulo) + patact = None # TODO see comment in boxfill. if mapper is self._maskedDataMapper: actors.append([act, self._maskedDataMapper, [x1, x2, y1, y2]]) else: actors.append([act, [x1, x2, y1, y2]]) + # Since pattern creation requires a single color, assuming the first + c = self.getColorIndexOrRGBA(_colorMap, tmpColors[ct][0]) + + # The isofill actor is scaled by the camera, so we need to use this size + # instead of window size for scaling the pattern. + viewsize = (x2 - x1, y2 - y1) + patact = fillareautils.make_patterned_polydata(mapper.GetInput(), + fillareastyle=style, + fillareaindex=tmpIndices[ct], + fillareacolors=c, + fillareaopacity=tmpOpacities[ct], + size=viewsize) + + if patact is not None: + patternActors.append(patact) + + # increment the count + ct += 1 + # create a new renderer for this mapper # (we need one for each mapper because of cmaera flips) - self._context().fitToViewport( + self._context().fitToViewportBounds( act, [self._template.data.x1, self._template.data.x2, self._template.data.y1, self._template.data.y2], - wc=[x1, x2, y1, y2], geo=self._vtkGeoTransform, + wc=[x1, x2, y1, y2], geoBounds=self._vtkDataSet.GetBounds(), + geo=self._vtkGeoTransform, priority=self._template.data.priority, create_renderer=True) - for act in self._patternActors: - self._context().fitToViewport( + for act in patternActors: + self._context().fitToViewportBounds( act, [self._template.data.x1, self._template.data.x2, self._template.data.y1, self._template.data.y2], - wc=[x1, x2, y1, y2], geo=self._vtkGeoTransform, + wc=[x1, x2, y1, y2], geoBounds=self._vtkDataSet.GetBounds(), + geo=self._vtkGeoTransform, priority=self._template.data.priority, create_renderer=True) actors.append([act, [x1, x2, y1, y2]]) @@ -287,7 +205,8 @@ def _plotInternal(self): self._resultDict.update(self._context().renderTemplate(self._template, self._data1, - self._gm, t, z)) + self._gm, t, z, + vtk_backend_grid=self._vtkDataSet)) legend = getattr(self._gm, "legend", None) @@ -318,7 +237,7 @@ def _plotInternal(self): self.getColorMap(), style=style, index=self._gm.fillareaindices, - opacity=opacities)) + opacity=self._gm.fillareaopacity)) if self._context().canvas._continents is None: self._useContinents = False @@ -326,4 +245,5 @@ def _plotInternal(self): projection = vcs.elements["projection"][self._gm.projection] self._context().plotContinents(x1, x2, y1, y2, projection, self._dataWrapModulo, - self._template) + self._template, + vtk_backend_grid=self._vtkDataSet) diff --git a/Packages/vcs/Lib/vcsvtk/isolinepipeline.py b/Packages/vcs/Lib/vcsvtk/isolinepipeline.py index cce0a50b9a..80151352c4 100644 --- a/Packages/vcs/Lib/vcsvtk/isolinepipeline.py +++ b/Packages/vcs/Lib/vcsvtk/isolinepipeline.py @@ -65,171 +65,267 @@ def _createPolyDataFilter(self): def _plotInternal(self): """Overrides baseclass implementation.""" - numLevels = len(self._contourLevels) + tmpLevels = [] + tmpColors = [] + tmpLineWidths = [] + tmpLineStyles = [] - cot = vtk.vtkContourFilter() - if self._useCellScalars: - cot.SetInputConnection(self._vtkPolyDataFilter.GetOutputPort()) - else: - cot.SetInputData(self._vtkDataSet) - cot.SetNumberOfContours(numLevels) + linewidth = self._gm.linewidths + linestyle = self._gm.line - if self._contourLevels[0] == 1.e20: - self._contourLevels[0] = -1.e20 - for i in range(numLevels): - cot.SetValue(i, self._contourLevels[i]) - cot.SetValue(numLevels, self._contourLevels[-1]) - # TODO remove update - cot.Update() + if len(linewidth) < len(self._contourLevels): + # fill up the line width values + linewidth += [1.0] * (len(self._contourLevels) - len(linewidth)) - mappers = [] + if len(linestyle) < len(self._contourLevels): + # fill up the line style values + linestyle += ['solid'] * (len(self._contourLevels) - len(linestyle)) - lut = vtk.vtkLookupTable() - lut.SetNumberOfTableValues(len(self._contourColors)) - cmap = self.getColorMap() - for i, col in enumerate(self._contourColors): - r, g, b = cmap.index[col] - lut.SetTableValue(i, r / 100., g / 100., b / 100.) - - # Setup isoline labels - if self._gm.label: - # Setup label mapping array: - tpropMap = vtk.vtkDoubleArray() - tpropMap.SetNumberOfComponents(1) - tpropMap.SetNumberOfTuples(numLevels) - for i, val in enumerate(self._contourLevels): - tpropMap.SetTuple(i, [val]) - - # Prep text properties: - tprops = vtk.vtkTextPropertyCollection() - if self._gm.text or self._gm.textcolors: - # Text objects: - if self._gm.text: - texts = self._gm.text - while len(texts) < numLevels: - texts.append(texts[-1]) - else: - texts = [None] * len(self._gm.textcolors) + x1, x2, y1, y2 = vcs.utils.getworldcoordinates(self._gm, + self._data1.getAxis(-1), + self._data1.getAxis(-2)) - # Custom colors: - if self._gm.textcolors: - colorOverrides = self._gm.textcolors - while len(colorOverrides) < numLevels: - colorOverrides.append(colorOverrides[-1]) + for i, l in enumerate(self._contourLevels): + if i == 0: + W = linewidth[i] + S = linestyle[i] + C = [self._contourColors[i]] + if l == 1.e20: + L = [-1.e20] + else: + L = [l] + else: + if W == linewidth[i] and S == linestyle[i]: + # Ok same style and width, lets keep going + L.append(l) + if i >= len(self._contourColors): + C.append(self._contourColors[-1]) + else: + C.append(self._contourColors[i]) else: - colorOverrides = [None] * len(self._gm.text) - - # Custom background colors and opacities: - backgroundColors = self._gm.labelbackgroundcolors - if backgroundColors: - while len(backgroundColors) < numLevels: - backgroundColors.append(backgroundColors[-1]) - backgroundOpacities = self._gm.labelbackgroundopacities - if backgroundOpacities: - while len(backgroundOpacities) < numLevels: - backgroundOpacities.append(backgroundOpacities[-1]) - - for idx, tc in enumerate(texts): - if vcs.queries.istextcombined(tc): - tt, to = tuple(tc.name.split(":::")) - elif tc is None: - tt = "default" - to = "default" - elif vcs.queries.istexttable(tc): - tt = tc.name - to = "default" - elif vcs.queries.istextorientation(tc): - to = tc.name - tt = "default" - - colorOverride = colorOverrides[idx] - if colorOverride is not None: - tt = vcs.createtexttable(None, tt) - tt.color = colorOverride - tt = tt.name - if backgroundColors is not None: - texttbl = vcs.gettexttable(tt) - texttbl.backgroundcolor = backgroundColors[idx] - if backgroundOpacities is not None: - texttbl = vcs.gettexttable(tt) - texttbl.backgroundopacity = backgroundOpacities[idx] + tmpLevels.append(L) + tmpColors.append(C) + tmpLineWidths.append(W) + tmpLineStyles.append(S) + L = [l] + if i >= len(self._contourColors): + C = [self._contourColors[-1]] + else: + C = [self._contourColors[i]] + W = linewidth[i] + S = linestyle[i] + + tmpLevels.append(L) + tmpColors.append(C) + tmpLineWidths.append(W) + tmpLineStyles.append(S) + + cots = [] + textprops = [] + luts = [] + + actors = [] + mappers = [] + + if self._gm.label and (self._gm.text or self._gm.textcolors): + # Text objects: + if self._gm.text: + texts = self._gm.text + while len(texts) < len(self._contourLevels): + texts.append(texts[-1]) + else: + texts = [None] * len(self._contourLevels) + + # Custom colors: + if self._gm.textcolors: + colorOverrides = self._gm.textcolors + while len(colorOverrides) < len(self._contourLevels): + colorOverrides.append(colorOverrides[-1]) + else: + colorOverrides = [None] * len(self._gm.text) + + # Custom background colors and opacities: + backgroundColors = self._gm.labelbackgroundcolors + if backgroundColors: + while len(backgroundColors) < len(self._contourLevels): + backgroundColors.append(backgroundColors[-1]) + backgroundOpacities = self._gm.labelbackgroundopacities + if backgroundOpacities: + while len(backgroundOpacities) < len(self._contourLevels): + backgroundOpacities.append(backgroundOpacities[-1]) + + countLevels = 0 + for i, l in enumerate(tmpLevels): + numLevels = len(l) + + cot = vtk.vtkContourFilter() + if self._useCellScalars: + cot.SetInputConnection(self._vtkPolyDataFilter.GetOutputPort()) + else: + cot.SetInputData(self._vtkDataSet) + cot.SetNumberOfContours(numLevels) + + for n in range(numLevels): + cot.SetValue(n, l[n]) + cot.SetValue(numLevels, l[-1]) + # TODO remove update + cot.Update() + + lut = vtk.vtkLookupTable() + lut.SetNumberOfTableValues(len(tmpColors[i])) + cmap = self.getColorMap() + for n, col in enumerate(tmpColors[i]): + r, g, b, a = self.getColorIndexOrRGBA(cmap, col) + lut.SetTableValue(n, r / 100., g / 100., b / 100., a / 100.) + + # Setup isoline labels + if self._gm.label: + # Setup label mapping array: + tpropMap = vtk.vtkDoubleArray() + tpropMap.SetNumberOfComponents(1) + tpropMap.SetNumberOfTuples(numLevels) + for n, val in enumerate(l): + tpropMap.SetTuple(n, [val]) + + # Prep text properties: + tprops = vtk.vtkTextPropertyCollection() + if self._gm.text or self._gm.textcolors: + ttexts = texts[countLevels:(countLevels + len(l))] + + for idx, tc in enumerate(ttexts): + if vcs.queries.istextcombined(tc): + tt, to = tuple(tc.name.split(":::")) + elif tc is None: + tt = "default" + to = "default" + elif vcs.queries.istexttable(tc): + tt = tc.name + to = "default" + elif vcs.queries.istextorientation(tc): + to = tc.name + tt = "default" + elif isinstance(tc, (str, unicode)): + sp = tc.split(":::") + if len(sp) == 2: + tt = sp[0] + to = sp[1] + else: # Hum don't know what do do with this + if sp[0] in vcs.listelements("textcombined"): + tc = vcs.gettextcombined(tc) + tt, to = tuple(tc.name.split(":::")) + elif sp[0] in vcs.listelements("textorientation"): + to = sp[0] + tt = "default" + elif sp[0] in vcs.listelements("texttable"): + tt = sp[0] + to = "default" + + colorOverride = colorOverrides[countLevels + idx] + if colorOverride is not None: + tt = vcs.createtexttable(None, tt) + tt.color = colorOverride + tt = tt.name + if backgroundColors is not None: + texttbl = vcs.gettexttable(tt) + texttbl.backgroundcolor = backgroundColors[countLevels + idx] + if backgroundOpacities is not None: + texttbl = vcs.gettexttable(tt) + texttbl.backgroundopacity = backgroundOpacities[countLevels + idx] + tprop = vtk.vtkTextProperty() + vcs2vtk.prepTextProperty(tprop, + self._context().renWin.GetSize(), + to, tt, cmap=cmap) + tprops.AddItem(tprop) + if colorOverride is not None: + del(vcs.elements["texttable"][tt]) + else: # No text properties specified. Use the default: tprop = vtk.vtkTextProperty() vcs2vtk.prepTextProperty(tprop, self._context().renWin.GetSize(), - to, tt, cmap=cmap) + cmap=cmap) tprops.AddItem(tprop) - if colorOverride is not None: - del(vcs.elements["texttable"][tt]) - else: # No text properties specified. Use the default: - tprop = vtk.vtkTextProperty() - vcs2vtk.prepTextProperty(tprop, - self._context().renWin.GetSize(), - cmap=cmap) - tprops.AddItem(tprop) - self._resultDict["vtk_backend_contours_labels_text_properties"] = \ - tprops - - mapper = vtk.vtkLabeledContourMapper() - mapper.SetTextProperties(tprops) - mapper.SetTextPropertyMapping(tpropMap) - mapper.SetLabelVisibility(1) - mapper.SetSkipDistance(self._gm.labelskipdistance) - - pdMapper = mapper.GetPolyDataMapper() - - self._resultDict["vtk_backend_labeled_luts"] = [ - [lut, - [self._contourLevels[0], self._contourLevels[-1], False]]] - else: # No isoline labels: - mapper = vtk.vtkPolyDataMapper() - pdMapper = mapper - self._resultDict["vtk_backend_luts"] = \ - [[lut, [self._contourLevels[0], - self._contourLevels[-1], False]]] - pdMapper.SetLookupTable(lut) - pdMapper.SetScalarRange(self._contourLevels[0], - self._contourLevels[-1]) - pdMapper.SetScalarModeToUsePointData() - - stripper = vtk.vtkStripper() - stripper.SetInputConnection(cot.GetOutputPort()) - mapper.SetInputConnection(stripper.GetOutputPort()) - # TODO remove update, make pipeline - stripper.Update() - mappers.append(mapper) - self._resultDict["vtk_backend_contours"] = [cot] - - if self._maskedDataMapper is not None: - mappers.insert(0, self._maskedDataMapper) - - x1, x2, y1, y2 = vcs.utils.getworldcoordinates(self._gm, - self._data1.getAxis(-1), - self._data1.getAxis(-2)) - - # And now we need actors to actually render this thing - actors = [] - for mapper in mappers: + textprops.append(tprops) + + mapper = vtk.vtkLabeledContourMapper() + mapper.SetTextProperties(tprops) + mapper.SetTextPropertyMapping(tpropMap) + mapper.SetLabelVisibility(1) + mapper.SetSkipDistance(self._gm.labelskipdistance) + + pdMapper = mapper.GetPolyDataMapper() + + luts.append([lut, [l[0], l[-1], False]]) + else: # No isoline labels: + mapper = vtk.vtkPolyDataMapper() + pdMapper = mapper + luts.append([lut, [l[0], l[-1], False]]) + pdMapper.SetLookupTable(lut) + pdMapper.SetScalarRange(l[0], l[-1]) + pdMapper.SetScalarModeToUsePointData() + + stripper = vtk.vtkStripper() + stripper.SetInputConnection(cot.GetOutputPort()) + mapper.SetInputConnection(stripper.GetOutputPort()) + # TODO remove update, make pipeline + stripper.Update() + mappers.append(mapper) + cots.append(cot) + + # Create actor to add to scene act = vtk.vtkActor() act.SetMapper(mapper) + # Set line properties here + p = act.GetProperty() + p.SetLineWidth(tmpLineWidths[i]) + vcs2vtk.stippleLine(p, tmpLineStyles[i]) if self._vtkGeoTransform is None: # If using geofilter on wireframed does not get wrppaed not # sure why so sticking to many mappers act = vcs2vtk.doWrap(act, [x1, x2, y1, y2], self._dataWrapModulo) + actors.append([act, [x1, x2, y1, y2]]) + + # create a new renderer for this mapper + # (we need one for each mapper because of cmaera flips) + self._context().fitToViewportBounds( + act, [self._template.data.x1, self._template.data.x2, + self._template.data.y1, self._template.data.y2], + wc=[x1, x2, y1, y2], geoBounds=self._vtkDataSet.GetBounds(), + geo=self._vtkGeoTransform, + priority=self._template.data.priority, + create_renderer=True) + + countLevels += len(l) - # TODO See comment in boxfill. - if mapper is self._maskedDataMapper: - actors.append([act, self._maskedDataMapper, [x1, x2, y1, y2]]) + if len(textprops) > 0: + self._resultDict["vtk_backend_contours_labels_text_properties"] = \ + textprops + if len(luts) > 0: + if self._gm.label: + self._resultDict["vtk_backend_labeled_luts"] = luts else: - actors.append([act, [x1, x2, y1, y2]]) + self._resultDict["vtk_backend_luts"] = luts + if len(cots) > 0: + self._resultDict["vtk_backend_contours"] = cots + if self._maskedDataMapper is not None: + mappers.insert(0, self._maskedDataMapper) + act = vtk.vtkActor() + act.SetMapper(self._maskedDataMapper) + if self._vtkGeoTransform is None: + # If using geofilter on wireframed does not get wrppaed not + # sure why so sticking to many mappers + act = vcs2vtk.doWrap(act, [x1, x2, y1, y2], + self._dataWrapModulo) + actors.append([act, self._maskedDataMapper, [x1, x2, y1, y2]]) # create a new renderer for this mapper # (we need one for each mapper because of cmaera flips) - self._context().fitToViewport( + self._context().fitToViewportBounds( act, [self._template.data.x1, self._template.data.x2, self._template.data.y1, self._template.data.y2], - wc=[x1, x2, y1, y2], geo=self._vtkGeoTransform, + wc=[x1, x2, y1, y2], geoBounds=self._vtkDataSet.GetBounds(), + geo=self._vtkGeoTransform, priority=self._template.data.priority, create_renderer=True) @@ -243,7 +339,8 @@ def _plotInternal(self): self._resultDict.update(self._context().renderTemplate(self._template, self._data1, - self._gm, t, z)) + self._gm, t, z, + vtk_backend_grid=self._vtkDataSet)) if self._context().canvas._continents is None: self._useContinents = False @@ -251,4 +348,5 @@ def _plotInternal(self): projection = vcs.elements["projection"][self._gm.projection] self._context().plotContinents(x1, x2, y1, y2, projection, self._dataWrapModulo, - self._template) + self._template, + vtk_backend_grid=self._vtkDataSet) diff --git a/Packages/vcs/Lib/vcsvtk/meshfillpipeline.py b/Packages/vcs/Lib/vcsvtk/meshfillpipeline.py index e9078457b6..3d6638c5ef 100644 --- a/Packages/vcs/Lib/vcsvtk/meshfillpipeline.py +++ b/Packages/vcs/Lib/vcsvtk/meshfillpipeline.py @@ -1,10 +1,10 @@ from .pipeline2d import Pipeline2D from .. import vcs2vtk +import fillareautils import numpy import vcs import vtk -import warnings class MeshfillPipeline(Pipeline2D): @@ -14,6 +14,8 @@ class MeshfillPipeline(Pipeline2D): def __init__(self, gm, context_): super(MeshfillPipeline, self).__init__(gm, context_) + self._patternActors = [] + def _updateScalarData(self): """Overrides baseclass implementation.""" # We don't trim _data2 for meshfill: @@ -21,42 +23,7 @@ def _updateScalarData(self): self._data2 = self._originalData2 def _updateContourLevelsAndColors(self): - """Overrides baseclass implementation.""" - # Contour values: - self._contourLevels = self._gm.levels - if numpy.allclose(self._contourLevels[0], [0., 1.e20]) or \ - numpy.allclose(self._contourLevels, 1.e20): - levs2 = vcs.mkscale(self._scalarRange[0], self._scalarRange[1]) - if len(levs2) == 1: # constant value ? - levs2 = [levs2[0], levs2[0] + .00001] - self._contourLevels = [] - if self._gm.ext_1: - # user wants arrow at the end - levs2[0] = -1.e20 - if self._gm.ext_2: - # user wants arrow at the end - levs2[-1] = 1.e20 - for i in range(len(levs2) - 1): - self._contourLevels.append([levs2[i], levs2[i + 1]]) - else: - if not isinstance(self._contourLevels[0], (list, tuple)): - self._contourLevels = [] - levs2 = self._gm.levels - if numpy.allclose(levs2[0], 1.e20): - levs2[0] = -1.e20 - for i in range(len(levs2) - 1): - self._contourLevels.append([levs2[i], levs2[i + 1]]) - - # Contour colors: - self._contourColors = self._gm.fillareacolors - if self._contourColors == [1]: - # TODO BUG levs2 may be uninitialized here - self._contourColors = vcs.getcolors(levs2, split=0) - if isinstance(self._contourColors, (int, float)): - self._contourColors = [self._contourColors] - - if isinstance(self._contourLevels, numpy.ndarray): - self._contourLevels = self._contourLevels.tolist() + self._updateContourLevelsAndColorsGeneric() def _createPolyDataFilter(self): """Overrides baseclass implementation.""" @@ -69,61 +36,33 @@ def _createPolyDataFilter(self): self._vtkPolyDataFilter.SetInputData(self._vtkDataSet) def _plotInternal(self): - tmpLevels = [] - tmpColors = [] - indices = self._gm.fillareaindices - if indices is None: - indices = [1] - while len(indices) < len(self._contourColors): - indices.append(indices[-1]) - if len(self._contourLevels) > len(self._contourColors): - raise RuntimeError( - "You asked for %i levels but provided only %i colors\n" - "Graphic Method: %s of type %s\nLevels: %s" - % (len(self._contourLevels), len(self._contourColors), - self._gm.name, self._gm.g_name, - repr(self._contourLevels))) - elif len(self._contourLevels) < len(self._contourColors) - 1: - warnings.warn( - "You asked for %i lgridevels but provided %i colors, extra " - "ones will be ignored\nGraphic Method: %s of type %s" - % (len(self._contourLevels), len(self._contourColors), - self._gm.name, self._gm.g_name)) - for i, l in enumerate(self._contourLevels): - if i == 0: - C = [self._contourColors[i]] - if numpy.allclose(self._contourLevels[0][0], -1.e20): - # ok it's an extension arrow - L = [self._scalarRange[0] - 1., self._contourLevels[0][1]] - else: - L = list(self._contourLevels[i]) - I = [indices[i]] - else: - if l[0] == L[-1] and I[-1] == indices[i]: - # Ok same type lets keep going - if numpy.allclose(l[1], 1.e20): - L.append(self._scalarRange[1] + 1.) - else: - L.append(l[1]) - C.append(self._contourColors[i]) - else: # ok we need new contouring - tmpLevels.append(L) - tmpColors.append(C) - C = [self._contourColors[i]] - L = self._contourLevels[i] - I = [indices[i]] - tmpLevels.append(L) - tmpColors.append(C) + + prepedContours = self._prepContours() + tmpLevels = prepedContours["tmpLevels"] + tmpIndices = prepedContours["tmpIndices"] + tmpColors = prepedContours["tmpColors"] + tmpOpacities = prepedContours["tmpOpacities"] + + style = self._gm.fillareastyle + # self._patternActors = [] mappers = [] luts = [] geos = [] + wholeDataMin, wholeDataMax = vcs.minmax(self._originalData1) + # This is also different for meshfill, others use + # vcs.utils.getworldcoordinates + x1, x2, y1, y2 = vcs2vtk.getRange(self._gm, + self._vtkDataSetBounds[0], + self._vtkDataSetBounds[1], + self._vtkDataSetBounds[2], + self._vtkDataSetBounds[3]) _colorMap = self.getColorMap() + self._patternActors = [] for i, l in enumerate(tmpLevels): # Ok here we are trying to group together levels can be, a join # will happen if: next set of levels contnues where one left off # AND pattern is identical - wholeDataMin, wholeDataMax = vcs.minmax(self._originalData1) # TODO this should really just be a single polydata that is # colored by scalars: for j, color in enumerate(tmpColors[i]): @@ -134,11 +73,22 @@ def _plotInternal(self): th.SetInputConnection(self._vtkPolyDataFilter.GetOutputPort()) geoFilter2 = vtk.vtkDataSetSurfaceFilter() geoFilter2.SetInputConnection(th.GetOutputPort()) + # Make the polydata output available here for patterning later + geoFilter2.Update() geos.append(geoFilter2) mapper.SetInputConnection(geoFilter2.GetOutputPort()) lut.SetNumberOfTableValues(1) - r, g, b = _colorMap.index[color] - lut.SetTableValue(0, r / 100., g / 100., b / 100.) + r, g, b, a = self.getColorIndexOrRGBA(_colorMap, color) + if style == 'solid': + tmpOpacity = tmpOpacities[j] + if tmpOpacity is None: + tmpOpacity = a / 100. + else: + tmpOpacity = tmpOpacities[j] / 100. + lut.SetTableValue( + 0, r / 100., g / 100., b / 100., tmpOpacity) + else: + lut.SetTableValue(0, 1., 1., 1., 0.) mapper.SetLookupTable(lut) mapper.SetScalarRange(l[j], l[j + 1]) luts.append([lut, [l[j], l[j + 1], True]]) @@ -148,10 +98,23 @@ def _plotInternal(self): if not (l[j + 1] < wholeDataMin or l[j] > wholeDataMax): mappers.append(mapper) + # Since pattern creation requires a single color, assuming the + # first + c = self.getColorIndexOrRGBA(_colorMap, tmpColors[i][0]) + act = fillareautils.make_patterned_polydata(geoFilter2.GetOutput(), + fillareastyle=style, + fillareaindex=tmpIndices[i], + fillareacolors=c, + fillareaopacity=tmpOpacities[i], + size=(x2 - x1, y2 - y1)) + if act is not None: + self._patternActors.append(act) + self._resultDict["vtk_backend_luts"] = luts if len(geos) > 0: self._resultDict["vtk_backend_geofilters"] = geos + """ numLevels = len(self._contourLevels) if mappers == []: # ok didn't need to have special banded contours mapper = vtk.vtkPolyDataMapper() @@ -164,8 +127,8 @@ def _plotInternal(self): lut = vtk.vtkLookupTable() lut.SetNumberOfTableValues(numLevels) for i in range(numLevels): - r, g, b = self._colorMap.index[self._contourColors[i]] - lut.SetTableValue(i, r / 100., g / 100., b / 100.) + r, g, b, a = self._colorMap.index[self._contourColors[i]] + lut.SetTableValue(i, r / 100., g / 100., b / 100., a / 100.) mapper.SetLookupTable(lut) if numpy.allclose(self._contourLevels[0], -1.e20): @@ -178,19 +141,12 @@ def _plotInternal(self): lmx = self._contourLevels[-1] mapper.SetScalarRange(lmn, lmx) self._resultDict["vtk_backend_luts"] = [[lut, [lmn, lmx, True]]] + """ if self._maskedDataMapper is not None: # Note that this is different for meshfill -- others prepend. mappers.append(self._maskedDataMapper) - # This is also different for meshfill, others use - # vcs.utils.getworldcoordinates - x1, x2, y1, y2 = vcs2vtk.getRange(self._gm, - self._vtkDataSetBounds[0], - self._vtkDataSetBounds[1], - self._vtkDataSetBounds[2], - self._vtkDataSetBounds[3]) - # Add a second mapper for wireframe meshfill: if self._gm.mesh: lineMappers = [] @@ -241,15 +197,29 @@ def _plotInternal(self): # create a new renderer for this mapper # (we need one for each mapper because of cmaera flips) - self._context().fitToViewport( + self._context().fitToViewportBounds( act, [self._template.data.x1, self._template.data.x2, self._template.data.y1, self._template.data.y2], - wc=[x1, x2, y1, y2], geo=self._vtkGeoTransform, + wc=[x1, x2, y1, y2], geoBounds=self._vtkDataSet.GetBounds(), + geo=self._vtkGeoTransform, priority=self._template.data.priority, create_renderer=True) + for act in self._patternActors: + if self._vtkGeoTransform is None: + # If using geofilter on wireframed does not get wrapped not sure + # why so sticking to many mappers + self._context().fitToViewportBounds( + act, [self._template.data.x1, self._template.data.x2, + self._template.data.y1, self._template.data.y2], + wc=[x1, x2, y1, y2], geoBounds=self._vtkDataSet.GetBounds(), + geo=self._vtkGeoTransform, + priority=self._template.data.priority, + create_renderer=True) + actors.append([act, [x1, x2, y1, y2]]) + self._resultDict["vtk_backend_actors"] = actors self._template.plot(self._context().canvas, self._data1, self._gm, @@ -286,10 +256,18 @@ def _plotInternal(self): # need exts self._contourLevels.append(1.e20) + patternArgs = {} + patternArgs['style'] = self._gm.fillareastyle + patternArgs['index'] = self._gm.fillareaindices + if patternArgs['index'] is None: + patternArgs['index'] = [1, ] + patternArgs['opacity'] = self._gm.fillareaopacity self._resultDict.update( self._context().renderColorBar(self._template, self._contourLevels, - self._contourColors, legend, - self.getColorMap())) + self._contourColors, + legend, + self.getColorMap(), + **patternArgs)) if self._context().canvas._continents is None: self._useContinents = False @@ -297,4 +275,5 @@ def _plotInternal(self): projection = vcs.elements["projection"][self._gm.projection] self._context().plotContinents(x1, x2, y1, y2, projection, self._dataWrapModulo, - self._template) + self._template, + vtk_backend_grid=self._vtkDataSet) diff --git a/Packages/vcs/Lib/vcsvtk/patterns.py b/Packages/vcs/Lib/vcsvtk/patterns.py index 162affb4d8..5be0f78b34 100644 --- a/Packages/vcs/Lib/vcsvtk/patterns.py +++ b/Packages/vcs/Lib/vcsvtk/patterns.py @@ -1,18 +1,17 @@ import vtk -NUM_PIXELS = 16 - class Pattern(object): - def __init__(self, width, height, colors, style, opacity): + def __init__(self, width, height, num_pixels, colors, style, opacity): self.width = width self.height = height - self.colors = colors + self.colors = [int(C / 100. * 255) for C in colors] + self.num_pixels = num_pixels self.style = style if self.style != "hatch": self.colors = [0, 0, 0] - if self.style == "hatch": - self.opacity = opacity + if self.style in ["hatch", "pattern"]: + self.opacity = int(opacity / 100. * 255) else: self.opacity = 255 @@ -35,102 +34,105 @@ def render(self): return patternSource.GetOutput() def paint(self, pattern): - raise NotImplementedError("paint() not implemented for %s" % str(type(self))) + raise NotImplementedError( + "paint() not implemented for %s" % str( + type(self))) class BottomLeftTri(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - for x in xrange(0, self.width, NUM_PIXELS): - for y in xrange(0, self.height, NUM_PIXELS): + for x in xrange(0, self.width, self.num_pixels): + for y in xrange(0, self.height, self.num_pixels): patternSource.FillTriangle(x, y, - x + NUM_PIXELS * 3 / 4, y, - x, y + NUM_PIXELS * 3 / 4) + x + self.num_pixels * 3 / 4, y, + x, y + self.num_pixels * 3 / 4) class TopRightTri(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - for x in xrange(0, self.width, NUM_PIXELS): - for y in xrange(0, self.height, NUM_PIXELS): - patternSource.FillTriangle(x + NUM_PIXELS, y + NUM_PIXELS, - x + NUM_PIXELS / 4, y + NUM_PIXELS, - x + NUM_PIXELS, y + NUM_PIXELS * 1 / 4) + for x in xrange(0, self.width, self.num_pixels): + for y in xrange(0, self.height, self.num_pixels): + patternSource.FillTriangle(x + self.num_pixels, y + self.num_pixels, + x + self.num_pixels / 4, y + self.num_pixels, + x + self.num_pixels, y + self.num_pixels * 1 / 4) class SmallRectDot(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - for x in xrange(0, self.width, NUM_PIXELS): - for y in xrange(0, self.height, NUM_PIXELS): - patternSource.FillBox(x + NUM_PIXELS * 3 / 8, x + NUM_PIXELS * 5 / 8, - y + NUM_PIXELS * 3 / 8, y + NUM_PIXELS * 5 / 8) + for x in xrange(0, self.width, self.num_pixels): + for y in xrange(0, self.height, self.num_pixels): + patternSource.FillBox(x + self.num_pixels / 4, x + self.num_pixels * 3 / 4, + y + self.num_pixels / 4, y + self.num_pixels * 3 / 4) class CheckerBoard(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - for x in xrange(0, self.width, NUM_PIXELS): - for y in xrange(0, self.height, NUM_PIXELS): - patternSource.FillBox(x, x + NUM_PIXELS / 2, - y, y + NUM_PIXELS / 2) - patternSource.FillBox(x + NUM_PIXELS / 2, x + NUM_PIXELS, - y + NUM_PIXELS / 2, y + NUM_PIXELS) + for x in xrange(0, self.width, self.num_pixels): + for y in xrange(0, self.height, self.num_pixels): + patternSource.FillBox(x, x + self.num_pixels / 2, + y, y + self.num_pixels / 2) + patternSource.FillBox(x + self.num_pixels / 2, x + self.num_pixels, + y + self.num_pixels / 2, y + self.num_pixels) class HorizStripe(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - patternLevels = range(0, self.height, NUM_PIXELS) + patternLevels = range(0, self.height, self.num_pixels) for lev in patternLevels: - patternSource.FillBox(0, self.width, lev + NUM_PIXELS / 4, lev + NUM_PIXELS * 3 / 4) + patternSource.FillBox(0, self.width, lev + self.num_pixels / 4, lev + self.num_pixels * 3 / 4) class VertStripe(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - patternLevels = range(0, self.width, NUM_PIXELS) + patternLevels = range(0, self.width, self.num_pixels) for lev in patternLevels: - patternSource.FillBox(lev + NUM_PIXELS / 4, lev + NUM_PIXELS * 3 / 4, 0, self.height) + patternSource.FillBox(lev + self.num_pixels / 4, lev + self.num_pixels * 3 / 4, 0, self.height) class HorizDash(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - for x in xrange(0, self.width, NUM_PIXELS): - for y in xrange(0, self.height, NUM_PIXELS): - patternSource.FillBox(x, x + NUM_PIXELS * 3 / 4, - y, y + NUM_PIXELS / 4) + for x in xrange(0, self.width, self.num_pixels): + for y in xrange(0, self.height, self.num_pixels): + patternSource.FillBox(x, x + self.num_pixels * 3 / 4, + y, y + self.num_pixels / 4) class VertDash(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - for x in xrange(0, self.width, NUM_PIXELS): - for y in xrange(0, self.height, NUM_PIXELS): - patternSource.FillBox(x + NUM_PIXELS / 4, x + NUM_PIXELS / 2, - y, y + NUM_PIXELS * 3 / 4) - patternSource.FillBox(x + NUM_PIXELS * 3 / 4, x + NUM_PIXELS, - y, y + NUM_PIXELS * 3 / 4) + for x in xrange(0, self.width, self.num_pixels): + for y in xrange(0, self.height, self.num_pixels): + patternSource.FillBox(x + self.num_pixels / 4, x + self.num_pixels / 2, + y, y + self.num_pixels * 3 / 4) + patternSource.FillBox(x + self.num_pixels * 3 / 4, x + self.num_pixels, + y, y + self.num_pixels * 3 / 4) class XDash(Pattern): + def render(self): """ Returns vtkImageData for pattern @@ -174,166 +176,169 @@ def paint(self, patternSource): if patternSource is None: return None - thickness = 2 - for x in range(thickness, self.width, NUM_PIXELS): + thickness = self.num_pixels / 8 + for x in range(thickness, self.width, self.num_pixels): patternSource.FillBox(x - thickness, x + thickness, 0, self.height) - for y in range(thickness, self.height, NUM_PIXELS): + for y in range(thickness, self.height, self.num_pixels): patternSource.FillBox(0, self.width, y - thickness, y + thickness) patternSource.SetDrawColor(255, 255, 255, 0) - for x in range(thickness, self.width, NUM_PIXELS): + for x in range(thickness, self.width, self.num_pixels): patternSource.FillBox(x - thickness, x + thickness, y - thickness, y + thickness) patternSource.SetDrawColor(self.colors[0], self.colors[1], self.colors[2], self.opacity) class ThinDiagDownRight(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - patternLevels = range(0, max(self.width, self.height) + min(self.width, self.height), NUM_PIXELS) + patternLevels = range(0, max(self.width, self.height) + min(self.width, self.height), self.num_pixels) for lev in patternLevels: - patternSource.FillTube(0, lev, lev, 0, NUM_PIXELS / 8) + patternSource.FillTube(0, lev, lev, 0, self.num_pixels / 8) class ThickDiagRownRight(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - patternLevels = range(0, max(self.width, self.height) + min(self.width, self.height), NUM_PIXELS) + patternLevels = range(0, max(self.width, self.height) + min(self.width, self.height), self.num_pixels) for lev in patternLevels: - patternSource.FillTube(0, lev, lev, 0, NUM_PIXELS / 4) + patternSource.FillTube(0, lev, lev, 0, self.num_pixels / 4) class ThinDiagUpRight(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - patternLevels = range(0, max(self.width, self.height) + min(self.width, self.height), NUM_PIXELS) + patternLevels = range(0, max(self.width, self.height) + min(self.width, self.height), self.num_pixels) for lev in patternLevels: - patternSource.FillTube(lev, self.height, 0, self.height - lev, NUM_PIXELS / 8) + patternSource.FillTube(lev, self.height, 0, self.height - lev, self.num_pixels / 8) class ThickDiagUpRight(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - patternLevels = range(0, max(self.width, self.height) + min(self.width, self.height), NUM_PIXELS) + patternLevels = range(0, max(self.width, self.height) + min(self.width, self.height), self.num_pixels) for lev in patternLevels: - patternSource.FillTube(lev, self.height, 0, self.height - lev, NUM_PIXELS / 4) + patternSource.FillTube(lev, self.height, 0, self.height - lev, self.num_pixels / 4) class ThickThinVertStripe(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - patternLevels = range(0, self.width, NUM_PIXELS) + patternLevels = range(0, self.width, self.num_pixels) for lev in patternLevels: - patternSource.FillBox(lev + NUM_PIXELS / 8, lev + NUM_PIXELS * 1 / 2, 0, self.height) - patternSource.FillBox(lev + NUM_PIXELS * 3 / 4, lev + NUM_PIXELS * 7 / 8, 0, self.height) + patternSource.FillBox(lev + self.num_pixels / 8, lev + self.num_pixels * 1 / 2, 0, self.height) + patternSource.FillBox(lev + self.num_pixels * 3 / 4, lev + self.num_pixels * 7 / 8, 0, self.height) class ThickThinHorizStripe(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - patternLevels = range(0, self.height, NUM_PIXELS) + patternLevels = range(0, self.height, self.num_pixels) for lev in patternLevels: - patternSource.FillBox(0, self.width, lev + NUM_PIXELS / 8, lev + NUM_PIXELS * 1 / 2) - patternSource.FillBox(0, self.width, lev + NUM_PIXELS * 3 / 4, lev + NUM_PIXELS * 7 / 8) + patternSource.FillBox(0, self.width, lev + self.num_pixels / 8, lev + self.num_pixels * 1 / 2) + patternSource.FillBox(0, self.width, lev + self.num_pixels * 3 / 4, lev + self.num_pixels * 7 / 8) class LargeRectDot(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - for x in xrange(0, self.width, NUM_PIXELS): - for y in xrange(0, self.height, NUM_PIXELS): - patternSource.FillBox(x + NUM_PIXELS * 1 / 8, x + NUM_PIXELS * 7 / 8, - y + NUM_PIXELS * 1 / 8, y + NUM_PIXELS * 7 / 8) + for x in xrange(0, self.width, self.num_pixels): + for y in xrange(0, self.height, self.num_pixels): + patternSource.FillBox(x + self.num_pixels * 1 / 8, x + self.num_pixels * 7 / 8, + y + self.num_pixels * 1 / 8, y + self.num_pixels * 7 / 8) class Diamond(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - for x in xrange(0, self.width, NUM_PIXELS): - for y in xrange(0, self.height, NUM_PIXELS): + for x in xrange(0, self.width, self.num_pixels): + for y in xrange(0, self.height, self.num_pixels): patternSource.FillTriangle(x, y, - x + NUM_PIXELS / 4, y, - x, y + NUM_PIXELS / 4) - patternSource.FillTriangle(x, y + NUM_PIXELS, - x + NUM_PIXELS / 4, y + NUM_PIXELS, - x, y + NUM_PIXELS * 3 / 4) - patternSource.FillTriangle(x + NUM_PIXELS, y + NUM_PIXELS, - x + NUM_PIXELS * 3 / 4, y + NUM_PIXELS, - x + NUM_PIXELS, y + NUM_PIXELS * 3 / 4) - patternSource.FillTriangle(x + NUM_PIXELS, y, - x + NUM_PIXELS * 3 / 4, y, - x + NUM_PIXELS, y + NUM_PIXELS / 4) - patternSource.FillTriangle(x, y + NUM_PIXELS / 2, - x + NUM_PIXELS / 2, y + NUM_PIXELS, - x + NUM_PIXELS / 2, y) - patternSource.FillTriangle(x + NUM_PIXELS, y + NUM_PIXELS / 2, - x + NUM_PIXELS / 2, y + NUM_PIXELS, - x + NUM_PIXELS / 2, y) + x + self.num_pixels / 4, y, + x, y + self.num_pixels / 4) + patternSource.FillTriangle(x, y + self.num_pixels, + x + self.num_pixels / 4, y + self.num_pixels, + x, y + self.num_pixels * 3 / 4) + patternSource.FillTriangle(x + self.num_pixels, y + self.num_pixels, + x + self.num_pixels * 3 / 4, y + self.num_pixels, + x + self.num_pixels, y + self.num_pixels * 3 / 4) + patternSource.FillTriangle(x + self.num_pixels, y, + x + self.num_pixels * 3 / 4, y, + x + self.num_pixels, y + self.num_pixels / 4) + patternSource.FillTriangle(x, y + self.num_pixels / 2, + x + self.num_pixels / 2, y + self.num_pixels, + x + self.num_pixels / 2, y) + patternSource.FillTriangle(x + self.num_pixels, y + self.num_pixels / 2, + x + self.num_pixels / 2, y + self.num_pixels, + x + self.num_pixels / 2, y) class Bubble(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - for x in xrange(0, self.width, NUM_PIXELS): - for y in xrange(0, self.height, NUM_PIXELS): - patternSource.FillBox(x, x + NUM_PIXELS / 8, - y, y + NUM_PIXELS / 8) - patternSource.FillBox(x + NUM_PIXELS / 2, x + NUM_PIXELS * 5 / 8, - y, y + NUM_PIXELS / 8) - patternSource.FillBox(x, x + NUM_PIXELS / 8, - y + NUM_PIXELS / 2, y + NUM_PIXELS * 5 / 8) - patternSource.FillBox(x + NUM_PIXELS / 8, x + NUM_PIXELS / 2, - y + NUM_PIXELS / 8, y + NUM_PIXELS / 2) - patternSource.FillBox(x + NUM_PIXELS * 5 / 8, x + NUM_PIXELS, - y + NUM_PIXELS * 5 / 8, y + NUM_PIXELS) - patternSource.FillBox(x + NUM_PIXELS / 8, x + NUM_PIXELS * 3 / 8, - y + NUM_PIXELS * 5 / 8, y + NUM_PIXELS * 3/4) - patternSource.FillBox(x + NUM_PIXELS * 5 / 8, x + NUM_PIXELS * 7 / 8, - y + NUM_PIXELS / 8, y + NUM_PIXELS * 1 / 4) + for x in xrange(0, self.width, self.num_pixels): + for y in xrange(0, self.height, self.num_pixels): + patternSource.FillBox(x, x + self.num_pixels / 8, + y, y + self.num_pixels / 8) + patternSource.FillBox(x + self.num_pixels / 2, x + self.num_pixels * 5 / 8, + y, y + self.num_pixels / 8) + patternSource.FillBox(x, x + self.num_pixels / 8, + y + self.num_pixels / 2, y + self.num_pixels * 5 / 8) + patternSource.FillBox(x + self.num_pixels / 8, x + self.num_pixels / 2, + y + self.num_pixels / 8, y + self.num_pixels / 2) + patternSource.FillBox(x + self.num_pixels * 5 / 8, x + self.num_pixels, + y + self.num_pixels * 5 / 8, y + self.num_pixels) + patternSource.FillBox(x + self.num_pixels / 8, x + self.num_pixels * 3 / 8, + y + self.num_pixels * 5 / 8, y + self.num_pixels * 3/4) + patternSource.FillBox(x + self.num_pixels * 5 / 8, x + self.num_pixels * 7 / 8, + y + self.num_pixels / 8, y + self.num_pixels * 1 / 4) class Snake(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - for x in xrange(0, self.width, NUM_PIXELS): - for y in xrange(0, self.height, NUM_PIXELS): - patternSource.FillBox(x, x + NUM_PIXELS * 3 / 8, - y, y + NUM_PIXELS / 4) - patternSource.FillBox(x + NUM_PIXELS * 5 / 8, x + NUM_PIXELS, - y, y + NUM_PIXELS / 4) - patternSource.FillBox(x + NUM_PIXELS / 4, x + NUM_PIXELS * 3 / 4, - y + NUM_PIXELS / 3, y + NUM_PIXELS * 2 / 3) + for x in xrange(0, self.width, self.num_pixels): + for y in xrange(0, self.height, self.num_pixels): + patternSource.FillBox(x, x + self.num_pixels / 3, + y, y + self.num_pixels / 3) + patternSource.FillBox(x + self.num_pixels * 2 / 3, x + self.num_pixels, + y, y + self.num_pixels / 3) + patternSource.FillBox(x + self.num_pixels / 6, x + self.num_pixels * 5 / 6, + y + self.num_pixels / 3, y + self.num_pixels * 2 / 3) class EmptyCircle(Pattern): + def paint(self, patternSource): if patternSource is None: return None - global NUM_PIXELS - for x in xrange(0, self.width, NUM_PIXELS): - for y in xrange(0, self.height, NUM_PIXELS): - patternSource.DrawCircle(x + NUM_PIXELS / 2, y + NUM_PIXELS / 2, NUM_PIXELS / 4.) + for x in xrange(0, self.width, self.num_pixels): + for y in xrange(0, self.height, self.num_pixels): + # Draw 1/3 or the radius as border by making several smaller circles + for r in range(self.num_pixels / 8): + patternSource.DrawCircle(x + self.num_pixels / 2, y + self.num_pixels / 2, self.num_pixels / 4. - r) +# Patterns are 1-indexed, so we always skip the 0th element in this list pattern_list = [Pattern, BottomLeftTri, TopRightTri, SmallRectDot, CheckerBoard, HorizStripe, VertStripe, HorizDash, VertDash, XDash, ThinDiagDownRight, ThickDiagRownRight, ThinDiagUpRight, ThickDiagUpRight, ThickThinVertStripe, diff --git a/Packages/vcs/Lib/vcsvtk/pipeline.py b/Packages/vcs/Lib/vcsvtk/pipeline.py index d517dff775..d85d24ff1f 100644 --- a/Packages/vcs/Lib/vcsvtk/pipeline.py +++ b/Packages/vcs/Lib/vcsvtk/pipeline.py @@ -35,3 +35,9 @@ def getColorMap(self): if isinstance(_colorMap, str): _colorMap = vcs.elements["colormap"][_colorMap] return _colorMap + + def getColorIndexOrRGBA(self, colormap, color): + if isinstance(color, (list, tuple)): + return color + else: + return colormap.index[color] diff --git a/Packages/vcs/Lib/vcsvtk/pipeline1d.py b/Packages/vcs/Lib/vcsvtk/pipeline1d.py index 10253f7746..57e2700049 100644 --- a/Packages/vcs/Lib/vcsvtk/pipeline1d.py +++ b/Packages/vcs/Lib/vcsvtk/pipeline1d.py @@ -64,7 +64,7 @@ def plot(self, data1, data2, tmpl, grid, transform): l._x = xs l._y = ys - l.color = self._gm.linecolor + l.color = [self._gm.linecolor, ] if self._gm.linewidth > 0: l.width = self._gm.linewidth else: @@ -85,7 +85,7 @@ def plot(self, data1, data2, tmpl, grid, transform): if self._gm.marker is not None: m = self._context().canvas.createmarker() m.type = self._gm.marker - m.color = self._gm.markercolor + m.color = [self._gm.markercolor, ] if self._gm.markersize > 0: m.size = self._gm.markersize else: diff --git a/Packages/vcs/Lib/vcsvtk/pipeline2d.py b/Packages/vcs/Lib/vcsvtk/pipeline2d.py index 3958146c30..52a67578a8 100644 --- a/Packages/vcs/Lib/vcsvtk/pipeline2d.py +++ b/Packages/vcs/Lib/vcsvtk/pipeline2d.py @@ -2,6 +2,9 @@ from .. import vcs2vtk import vcs +import numpy +import fillareautils +import warnings class IPipeline2D(Pipeline): @@ -89,6 +92,46 @@ def _updateFromGenGridDict(self, genGridDict): """ raise NotImplementedError("Missing override.") + def _updateContourLevelsAndColorsGeneric(self): + # Contour values: + self._contourLevels = self._gm.levels + if numpy.allclose(self._contourLevels[0], [0., 1.e20]) or \ + numpy.allclose(self._contourLevels, 1.e20): + levs2 = vcs.mkscale(self._scalarRange[0], + self._scalarRange[1]) + if len(levs2) == 1: # constant value ? + levs2 = [levs2[0], levs2[0] + .00001] + self._contourLevels = [] + if self._gm.ext_1: + # user wants arrow at the end + levs2[0] = -1.e20 + if self._gm.ext_2: + # user wants arrow at the end + levs2[-1] = 1.e20 + for i in range(len(levs2) - 1): + self._contourLevels.append([levs2[i], levs2[i + 1]]) + else: + if not isinstance(self._gm.levels[0], (list, tuple)): + self._contourLevels = [] + levs2 = self._gm.levels + if numpy.allclose(levs2[0], 1.e20): + levs2[0] = -1.e20 + for i in range(len(levs2) - 1): + self._contourLevels.append([levs2[i], levs2[i + 1]]) + else: + levs2 = self._gm.levels + + if isinstance(self._contourLevels, numpy.ndarray): + self._contourLevels = self._contourLevels.tolist() + + # Figure out colors + self._contourColors = self._gm.fillareacolors + if self._contourColors == [1] or self._contourColors is None: + # TODO BUG It's possible that levs2 may not exist here... + self._contourColors = vcs.getcolors(levs2, split=0) + if isinstance(self._contourColors, (int, float)): + self._contourColors = [self._contourColors] + def _updateContourLevelsAndColors(self): """This method prepares the _contourLevels and _contourColors variables. """ @@ -117,6 +160,104 @@ class Pipeline2D(IPipeline2D): def __init__(self, gm, context_): super(Pipeline2D, self).__init__(gm, context_) + def _patternCreation(self, vtkFilter, color, style, index, opacity): + """ Creates pattern things """ + c = [val * 255 / 100.0 for val in color] + if opacity is None: + opacity = c[-1] + else: + opacity = opacity * 255 / 100. + act = fillareautils.make_patterned_polydata(vtkFilter.GetOutput(), + fillareastyle=style, + fillareaindex=index, + fillareacolors=c, + fillareaopacity=opacity) + if act is not None: + self._patternActors.append(act) + return + + def _prepContours(self): + """ Prep contours bands""" + tmpLevels = [] + tmpColors = [] + tmpIndices = [] + tmpOpacities = [] + + indices = self._gm.fillareaindices + opacities = self._gm.fillareaopacity + style = self._gm.fillareastyle + + if indices is None: + indices = [1] + while len(indices) < len(self._contourColors): + indices.append(indices[-1]) + if len(self._contourLevels) > len(self._contourColors): + raise RuntimeError( + "You asked for %i levels but provided only %i colors\n" + "Graphic Method: %s of type %s\nLevels: %s" + % (len(self._contourLevels), len(self._contourColors), + self._gm.name, self._gm.g_name, + repr(self._contourLevels))) + elif len(self._contourLevels) < len(self._contourColors) - 1: + warnings.warn( + "You asked for %i lgridevels but provided %i colors, " + "extra ones will be ignored\nGraphic Method: %s of type %s" + % (len(self._contourLevels), len(self._contourColors), + self._gm.name, self._gm.g_name)) + if len(opacities) < len(self._contourColors): + # fill up the opacity values + opacities += [None] * (len(self._contourColors) - len(opacities)) + + # The following loop attempts to group isosurfaces based on their + # attributes. Isosurfaces grouped if and only if all properties match. + for i, l in enumerate(self._contourLevels): + if i == 0: + C = [self._contourColors[i]] + if style == "pattern": + C = [241] + if numpy.allclose(self._contourLevels[0][0], -1.e20): + # ok it's an extension arrow + L = [self._scalarRange[0] - 1., self._contourLevels[0][1]] + else: + L = list(self._contourLevels[i]) + I = indices[i] + O = opacities[i] + else: + if l[0] == L[-1] and\ + ((style == 'solid') or + (I == indices[i] and C[-1] == self._contourColors[i] and + O == opacities[i])): + # Ok same type lets keep going + if numpy.allclose(l[1], 1.e20): + L.append(self._scalarRange[1] + 1.) + else: + L.append(l[1]) + C.append(self._contourColors[i]) + tmpOpacities.append(O) + O = opacities[i] + else: # ok we need new contouring + tmpLevels.append(L) + tmpColors.append(C) + tmpIndices.append(I) + tmpOpacities.append(O) + C = [self._contourColors[i]] + L = self._contourLevels[i] + I = indices[i] + O = opacities[i] + tmpLevels.append(L) + tmpColors.append(C) + tmpIndices.append(I) + tmpOpacities.append(O) + + result = { + "tmpLevels": tmpLevels, + "tmpColors": tmpColors, + "tmpIndices": tmpIndices, + "tmpOpacities": tmpOpacities, + } + + return result + def plot(self, data1, data2, tmpl, grid, transform): """Overrides baseclass implementation.""" # Clear old results: diff --git a/Packages/vcs/Lib/vcsvtk/vectorpipeline.py b/Packages/vcs/Lib/vcsvtk/vectorpipeline.py index 15156446a3..60e4f0508b 100644 --- a/Packages/vcs/Lib/vcsvtk/vectorpipeline.py +++ b/Packages/vcs/Lib/vcsvtk/vectorpipeline.py @@ -55,8 +55,8 @@ def plot(self, data1, data2, tmpl, grid, transform): if geo is not None: newv = vtk.vtkDoubleArray() newv.SetNumberOfComponents(3) - newv.InsertTupleValue(0, [lon.min(), lat.min(), 0]) - newv.InsertTupleValue(1, [lon.max(), lat.max(), 0]) + newv.InsertTupleValue(0, [lon.min(), lat.min(), 0]) + newv.InsertTupleValue(1, [lon.max(), lat.max(), 0]) vcs2vtk.projectArray(newv, projection, [gridGenDict['xm'], gridGenDict['xM'], @@ -145,7 +145,7 @@ def plot(self, data1, data2, tmpl, grid, transform): act.SetMapper(mapper) cmap = self.getColorMap() - r, g, b = cmap.index[lcolor] + r, g, b, a = cmap.index[lcolor] act.GetProperty().SetColor(r / 100., g / 100., b / 100.) x1, x2, y1, y2 = vcs.utils.getworldcoordinates(self._gm, data1.getAxis(-1), @@ -159,20 +159,22 @@ def plot(self, data1, data2, tmpl, grid, transform): act = vcs2vtk.doWrap(act, wc, self._dataWrapModulo) - self._context().fitToViewport(act, [tmpl.data.x1, tmpl.data.x2, + self._context().fitToViewportBounds(act, [tmpl.data.x1, tmpl.data.x2, tmpl.data.y1, tmpl.data.y2], - wc=wc, - priority=tmpl.data.priority, - create_renderer=True) + wc=wc, + priority=tmpl.data.priority, + create_renderer=True) returned.update(self._context().renderTemplate(tmpl, data1, - self._gm, taxis, zaxis)) + self._gm, taxis, zaxis, + vtk_backend_grid=returned["vtk_backend_grid"])) if self._context().canvas._continents is None: continents = False if continents: self._context().plotContinents(x1, x2, y1, y2, projection, - self._dataWrapModulo, tmpl) + self._dataWrapModulo, tmpl, + vtk_backend_grid=returned["vtk_backend_grid"]) returned["vtk_backend_actors"] = [[act, [x1, x2, y1, y2]]] returned["vtk_backend_glyphfilters"] = [glyphFilter] diff --git a/Packages/vcs/Share/initial.attributes b/Packages/vcs/Share/initial.attributes index 39f21da7af..4a70d89901 100644 --- a/Packages/vcs/Share/initial.attributes +++ b/Packages/vcs/Share/initial.attributes @@ -37199,12816 +37199,6 @@ "y": 0.68 } }, - "UVWG": { - "box1": { - "line": "default", - "priority": 1, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.920000016689, - "y1": 0.300000011921, - "y2": 0.879999995232 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.910000026226, - "y1": 0.319999992847, - "y2": 0.860000014305 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.0, - "y1": 0.0, - "y2": 0.0 - }, - "comment1": { - "priority": 1, - "textorientation": "texss", - "texttable": "default", - "x": 0.835, - "y": 0.96 - }, - "comment2": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.975000023842 - }, - "comment3": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.995000004768 - }, - "comment4": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.999000012875 - }, - "crdate": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.75, - "y": 0.922999978065 - }, - "crtime": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.850000023842, - "y": 0.922999978065 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "dataname": { - "priority": 1, - "textorientation": "texd", - "texttable": "default", - "x": 0.045, - "y": 0.96 - }, - "file": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "function": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "legend": { - "line": "default", - "priority": 1, - "textorientation": "defcenter", - "texttable": "default", - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.129999995232, - "y2": 0.159999996424 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.560000002384, - "y2": 0.560000002384 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0.5, - "x2": 0.5, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.52999997139, - "y2": 0.52999997139 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.990000009537, - "y2": 0.990000009537 - }, - "logicalmask": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0329999998212 - }, - "max": { - "format": "default", - "priority": 1, - "textorientation": "texo", - "texttable": "default", - "x": 0.9, - "y": 0.92 - }, - "mean": { - "format": "default", - "priority": 1, - "textorientation": "texs", - "texttable": "default", - "x": 0.4, - "y": 0.885 - }, - "min": { - "format": "default", - "priority": 1, - "textorientation": "texo", - "texttable": "default", - "x": 0.8, - "y": 0.92 - }, - "source": { - "priority": 1, - "textorientation": "texs", - "texttable": "default", - "x": 0.065, - "y": 0.885 - }, - "title": { - "priority": 1, - "textorientation": "texot", - "texttable": "default", - "x": 0.5, - "y": 0.96 - }, - "tname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "transformation": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0529999993742 - }, - "tunits": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "tvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.883000016212 - }, - "units": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.78, - "y": 0.885 - }, - "xlabel1": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.234999999404 - }, - "xlabel2": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.870000004768 - }, - "xmintic1": { - "line": "default", - "priority": 0, - "y1": 0.259999990463, - "y2": 0.256999999285 - }, - "xmintic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.860000014305 - }, - "xname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.277000010014 - }, - "xtic1": { - "line": "default", - "priority": 0, - "y1": 0.259999990463, - "y2": 0.24699999392 - }, - "xtic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.871999979019 - }, - "xunits": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.600000023842, - "y": 0.277000010014 - }, - "xvalue": { - "format": "default", - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.941999971867 - }, - "ylabel1": { - "priority": 0, - "textorientation": "defright", - "texttable": "default", - "x": 0.0399999991059 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.959999978542 - }, - "ymintic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0450000017881 - }, - "ymintic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.954999983311 - }, - "yname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0168999992311, - "y": 0.420033991337 - }, - "ytic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0399999991059 - }, - "ytic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.959999978542 - }, - "yunits": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.019999999553, - "y": 0.658999979496 - }, - "yvalue": { - "format": "default", - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.922999978065 - }, - "zname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zunits": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.902999997139 - } - }, - "UVWG1D": { - "box1": { - "line": "default", - "priority": 1, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.920000016689, - "y1": 0.300000011921, - "y2": 0.879999995232 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.910000026226, - "y1": 0.319999992847, - "y2": 0.860000014305 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.0, - "y1": 0.0, - "y2": 0.0 - }, - "comment1": { - "priority": 1, - "textorientation": "texss", - "texttable": "default", - "x": 0.835, - "y": 0.96 - }, - "comment2": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.975000023842 - }, - "comment3": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.995000004768 - }, - "comment4": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.999000012875 - }, - "crdate": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.75, - "y": 0.922999978065 - }, - "crtime": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.850000023842, - "y": 0.922999978065 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "dataname": { - "priority": 1, - "textorientation": "texd", - "texttable": "default", - "x": 0.045, - "y": 0.96 - }, - "file": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "function": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "legend": { - "line": "default", - "priority": 1, - "textorientation": "defcenter", - "texttable": "default", - "x1": 0.05, - "x2": 0.2, - "y1": 0.13, - "y2": 0.15 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.560000002384, - "y2": 0.560000002384 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0.5, - "x2": 0.5, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.52999997139, - "y2": 0.52999997139 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.990000009537, - "y2": 0.990000009537 - }, - "logicalmask": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0329999998212 - }, - "max": { - "format": "default", - "priority": 1, - "textorientation": "texo", - "texttable": "default", - "x": 0.9, - "y": 0.92 - }, - "mean": { - "format": "default", - "priority": 1, - "textorientation": "texs", - "texttable": "default", - "x": 0.4, - "y": 0.885 - }, - "min": { - "format": "default", - "priority": 1, - "textorientation": "texo", - "texttable": "default", - "x": 0.8, - "y": 0.92 - }, - "source": { - "priority": 1, - "textorientation": "texs", - "texttable": "default", - "x": 0.065, - "y": 0.885 - }, - "title": { - "priority": 1, - "textorientation": "texot", - "texttable": "default", - "x": 0.5, - "y": 0.96 - }, - "tname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "transformation": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0529999993742 - }, - "tunits": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "tvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.883000016212 - }, - "units": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.78, - "y": 0.885 - }, - "xlabel1": { - "priority": 1, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.234999999404 - }, - "xlabel2": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.870000004768 - }, - "xmintic1": { - "line": "default", - "priority": 1, - "y1": 0.259999990463, - "y2": 0.256999999285 - }, - "xmintic2": { - "line": "default", - "priority": 1, - "y1": 0.860000014305, - "y2": 0.860000014305 - }, - "xname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.277000010014 - }, - "xtic1": { - "line": "default", - "priority": 1, - "y1": 0.259999990463, - "y2": 0.24699999392 - }, - "xtic2": { - "line": "default", - "priority": 1, - "y1": 0.860000014305, - "y2": 0.871999979019 - }, - "xunits": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.600000023842, - "y": 0.277000010014 - }, - "xvalue": { - "format": "default", - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.941999971867 - }, - "ylabel1": { - "priority": 1, - "textorientation": "defright", - "texttable": "default", - "x": 0.0399999991059 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.959999978542 - }, - "ymintic1": { - "line": "default", - "priority": 1, - "x1": 0.0500000007451, - "x2": 0.0450000017881 - }, - "ymintic2": { - "line": "default", - "priority": 1, - "x1": 0.949999988079, - "x2": 0.954999983311 - }, - "yname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0168999992311, - "y": 0.420033991337 - }, - "ytic1": { - "line": "default", - "priority": 1, - "x1": 0.0500000007451, - "x2": 0.0399999991059 - }, - "ytic2": { - "line": "default", - "priority": 1, - "x1": 0.949999988079, - "x2": 0.959999978542 - }, - "yunits": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.019999999553, - "y": 0.658999979496 - }, - "yvalue": { - "format": "default", - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.922999978065 - }, - "zname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zunits": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.902999997139 - } - }, - "UVWG1D_1of2": { - "box1": { - "line": "default", - "priority": 1, - "x1": 0.15, - "x2": 0.75, - "y1": 0.58, - "y2": 0.93 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.920000016689, - "y1": 0.300000011921, - "y2": 0.879999995232 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.910000026226, - "y1": 0.319999992847, - "y2": 0.860000014305 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.0, - "y1": 0.0, - "y2": 0.0 - }, - "comment1": { - "priority": 1, - "textorientation": "tex1Da", - "texttable": "default", - "x": 0.42, - "y": 0.97 - }, - "comment2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.975000023842 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.995000004768 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.999000012875 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.75, - "y": 0.922999978065 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.850000023842, - "y": 0.922999978065 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.15, - "x2": 0.75, - "y1": 0.58, - "y2": 0.93 - }, - "dataname": { - "priority": 0, - "textorientation": "texd", - "texttable": "default", - "x": 0.045, - "y": 0.96 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "legend": { - "line": "default", - "priority": 1, - "textorientation": "defcenter", - "texttable": "default", - "x1": 0.8, - "x2": 0.9, - "y1": 0.7, - "y2": 0.71 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.560000002384, - "y2": 0.560000002384 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0.5, - "x2": 0.5, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.52999997139, - "y2": 0.52999997139 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.990000009537, - "y2": 0.990000009537 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0329999998212 - }, - "max": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.9, - "y": 0.92 - }, - "mean": { - "format": "default", - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.4, - "y": 0.885 - }, - "min": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.8, - "y": 0.92 - }, - "source": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.065, - "y": 0.885 - }, - "title": { - "priority": 0, - "textorientation": "texot", - "texttable": "default", - "x": 0.5, - "y": 0.96 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0529999993742 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "tvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.883000016212 - }, - "units": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.78, - "y": 0.885 - }, - "xlabel1": { - "priority": 1, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.55 - }, - "xlabel2": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.870000004768 - }, - "xmintic1": { - "line": "default", - "priority": 1, - "y1": 0.58, - "y2": 0.57 - }, - "xmintic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.860000014305 - }, - "xname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.53 - }, - "xtic1": { - "line": "default", - "priority": 1, - "y1": 0.58, - "y2": 0.565 - }, - "xtic2": { - "line": "default", - "priority": 1, - "y1": 0.93, - "y2": 0.945 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.600000023842, - "y": 0.277000010014 - }, - "xvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.941999971867 - }, - "ylabel1": { - "priority": 1, - "textorientation": "defright", - "texttable": "default", - "x": 0.12 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.959999978542 - }, - "ymintic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0450000017881 - }, - "ymintic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.954999983311 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0168999992311, - "y": 0.420033991337 - }, - "ytic1": { - "line": "default", - "priority": 1, - "x1": 0.15, - "x2": 0.128 - }, - "ytic2": { - "line": "default", - "priority": 1, - "x1": 0.75, - "x2": 0.774 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.019999999553, - "y": 0.658999979496 - }, - "yvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.922999978065 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.902999997139 - } - }, - "UVWG1D_2of2": { - "box1": { - "line": "default", - "priority": 1, - "x1": 0.15, - "x2": 0.75, - "y1": 0.1, - "y2": 0.45 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.920000016689, - "y1": 0.300000011921, - "y2": 0.879999995232 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.910000026226, - "y1": 0.319999992847, - "y2": 0.860000014305 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.0, - "y1": 0.0, - "y2": 0.0 - }, - "comment1": { - "priority": 1, - "textorientation": "tex1Da", - "texttable": "default", - "x": 0.42, - "y": 0.49 - }, - "comment2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.975000023842 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.995000004768 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.999000012875 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.75, - "y": 0.922999978065 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.850000023842, - "y": 0.922999978065 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.15, - "x2": 0.75, - "y1": 0.1, - "y2": 0.45 - }, - "dataname": { - "priority": 0, - "textorientation": "texd", - "texttable": "default", - "x": 0.045, - "y": 0.96 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "legend": { - "line": "default", - "priority": 1, - "textorientation": "defcenter", - "texttable": "default", - "x1": 0.8, - "x2": 0.9, - "y1": 0.22, - "y2": 0.23 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.560000002384, - "y2": 0.560000002384 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0.5, - "x2": 0.5, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.52999997139, - "y2": 0.52999997139 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.990000009537, - "y2": 0.990000009537 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0329999998212 - }, - "max": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.9, - "y": 0.92 - }, - "mean": { - "format": "default", - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.4, - "y": 0.885 - }, - "min": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.8, - "y": 0.92 - }, - "source": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.065, - "y": 0.885 - }, - "title": { - "priority": 0, - "textorientation": "texot", - "texttable": "default", - "x": 0.5, - "y": 0.96 - }, - "tname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0529999993742 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "tvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.883000016212 - }, - "units": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.78, - "y": 0.885 - }, - "xlabel1": { - "priority": 1, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.07 - }, - "xlabel2": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.870000004768 - }, - "xmintic1": { - "line": "default", - "priority": 1, - "y1": 0.1, - "y2": 0.09 - }, - "xmintic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.860000014305 - }, - "xname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.277000010014 - }, - "xtic1": { - "line": "default", - "priority": 1, - "y1": 0.1, - "y2": 0.085 - }, - "xtic2": { - "line": "default", - "priority": 1, - "y1": 0.45, - "y2": 0.465 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.600000023842, - "y": 0.277000010014 - }, - "xvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.941999971867 - }, - "ylabel1": { - "priority": 1, - "textorientation": "defright", - "texttable": "default", - "x": 0.12 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.959999978542 - }, - "ymintic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0450000017881 - }, - "ymintic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.954999983311 - }, - "yname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0168999992311, - "y": 0.420033991337 - }, - "ytic1": { - "line": "default", - "priority": 1, - "x1": 0.15, - "x2": 0.128 - }, - "ytic2": { - "line": "default", - "priority": 1, - "x1": 0.75, - "x2": 0.774 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.019999999553, - "y": 0.658999979496 - }, - "yvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.922999978065 - }, - "zname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.902999997139 - } - }, - "UVWG1D_DUD": { - "box1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.920000016689, - "y1": 0.300000011921, - "y2": 0.879999995232 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.910000026226, - "y1": 0.319999992847, - "y2": 0.860000014305 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.0, - "y1": 0.0, - "y2": 0.0 - }, - "comment1": { - "priority": 0, - "textorientation": "texss", - "texttable": "default", - "x": 0.835, - "y": 0.96 - }, - "comment2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.975000023842 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.995000004768 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.999000012875 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.75, - "y": 0.922999978065 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.850000023842, - "y": 0.922999978065 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "dataname": { - "priority": 0, - "textorientation": "texd", - "texttable": "default", - "x": 0.045, - "y": 0.96 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "legend": { - "line": "red", - "priority": 1, - "textorientation": "defcenter", - "texttable": "default", - "x1": 0.05, - "x2": 0.2, - "y1": 0.08, - "y2": 0.1 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.560000002384, - "y2": 0.560000002384 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0.5, - "x2": 0.5, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.52999997139, - "y2": 0.52999997139 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.990000009537, - "y2": 0.990000009537 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0329999998212 - }, - "max": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.9, - "y": 0.92 - }, - "mean": { - "format": "default", - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.4, - "y": 0.885 - }, - "min": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.8, - "y": 0.92 - }, - "source": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.065, - "y": 0.885 - }, - "title": { - "priority": 0, - "textorientation": "texot", - "texttable": "default", - "x": 0.5, - "y": 0.96 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0529999993742 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "tvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.883000016212 - }, - "units": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.78, - "y": 0.885 - }, - "xlabel1": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.234999999404 - }, - "xlabel2": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.870000004768 - }, - "xmintic1": { - "line": "default", - "priority": 0, - "y1": 0.259999990463, - "y2": 0.256999999285 - }, - "xmintic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.860000014305 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.277000010014 - }, - "xtic1": { - "line": "default", - "priority": 0, - "y1": 0.259999990463, - "y2": 0.24699999392 - }, - "xtic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.871999979019 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.600000023842, - "y": 0.277000010014 - }, - "xvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.941999971867 - }, - "ylabel1": { - "priority": 0, - "textorientation": "defright", - "texttable": "default", - "x": 0.0399999991059 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.959999978542 - }, - "ymintic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0450000017881 - }, - "ymintic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.954999983311 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0168999992311, - "y": 0.420033991337 - }, - "ytic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0399999991059 - }, - "ytic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.959999978542 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.019999999553, - "y": 0.658999979496 - }, - "yvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.922999978065 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.902999997139 - } - }, - "UVWG1D_DUD_1of2": { - "box1": { - "line": "default", - "priority": 0, - "x1": 0.15, - "x2": 0.75, - "y1": 0.58, - "y2": 0.93 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.920000016689, - "y1": 0.300000011921, - "y2": 0.879999995232 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.910000026226, - "y1": 0.319999992847, - "y2": 0.860000014305 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.0, - "y1": 0.0, - "y2": 0.0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex1Da", - "texttable": "default", - "x": 0.42, - "y": 0.97 - }, - "comment2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.975000023842 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.995000004768 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.999000012875 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.75, - "y": 0.922999978065 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.850000023842, - "y": 0.922999978065 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.15, - "x2": 0.75, - "y1": 0.58, - "y2": 0.93 - }, - "dataname": { - "priority": 0, - "textorientation": "texd", - "texttable": "default", - "x": 0.045, - "y": 0.96 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "legend": { - "line": "default", - "priority": 1, - "textorientation": "defcenter", - "texttable": "default", - "x1": 0.8, - "x2": 0.9, - "y1": 0.67, - "y2": 0.68 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.560000002384, - "y2": 0.560000002384 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0.5, - "x2": 0.5, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.52999997139, - "y2": 0.52999997139 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.990000009537, - "y2": 0.990000009537 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0329999998212 - }, - "max": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.9, - "y": 0.92 - }, - "mean": { - "format": "default", - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.4, - "y": 0.885 - }, - "min": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.8, - "y": 0.92 - }, - "source": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.065, - "y": 0.885 - }, - "title": { - "priority": 0, - "textorientation": "texot", - "texttable": "default", - "x": 0.5, - "y": 0.96 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0529999993742 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "tvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.883000016212 - }, - "units": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.78, - "y": 0.885 - }, - "xlabel1": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.55 - }, - "xlabel2": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.870000004768 - }, - "xmintic1": { - "line": "default", - "priority": 0, - "y1": 0.58, - "y2": 0.57 - }, - "xmintic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.860000014305 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.53 - }, - "xtic1": { - "line": "default", - "priority": 0, - "y1": 0.58, - "y2": 0.565 - }, - "xtic2": { - "line": "default", - "priority": 0, - "y1": 0.93, - "y2": 0.945 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.600000023842, - "y": 0.277000010014 - }, - "xvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.941999971867 - }, - "ylabel1": { - "priority": 0, - "textorientation": "defright", - "texttable": "default", - "x": 0.12 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.959999978542 - }, - "ymintic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0450000017881 - }, - "ymintic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.954999983311 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0168999992311, - "y": 0.420033991337 - }, - "ytic1": { - "line": "default", - "priority": 0, - "x1": 0.15, - "x2": 0.128 - }, - "ytic2": { - "line": "default", - "priority": 0, - "x1": 0.75, - "x2": 0.774 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.019999999553, - "y": 0.658999979496 - }, - "yvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.922999978065 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.902999997139 - } - }, - "UVWG1D_DUD_2of2": { - "box1": { - "line": "default", - "priority": 0, - "x1": 0.15, - "x2": 0.75, - "y1": 0.1, - "y2": 0.45 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.920000016689, - "y1": 0.300000011921, - "y2": 0.879999995232 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.910000026226, - "y1": 0.319999992847, - "y2": 0.860000014305 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.0, - "y1": 0.0, - "y2": 0.0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex1Da", - "texttable": "default", - "x": 0.42, - "y": 0.49 - }, - "comment2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.975000023842 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.995000004768 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.999000012875 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.75, - "y": 0.922999978065 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.850000023842, - "y": 0.922999978065 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.15, - "x2": 0.75, - "y1": 0.1, - "y2": 0.45 - }, - "dataname": { - "priority": 0, - "textorientation": "texd", - "texttable": "default", - "x": 0.045, - "y": 0.96 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "legend": { - "line": "default", - "priority": 1, - "textorientation": "defcenter", - "texttable": "default", - "x1": 0.8, - "x2": 0.9, - "y1": 0.18, - "y2": 0.19 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.560000002384, - "y2": 0.560000002384 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0.5, - "x2": 0.5, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.52999997139, - "y2": 0.52999997139 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.990000009537, - "y2": 0.990000009537 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0329999998212 - }, - "max": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.9, - "y": 0.92 - }, - "mean": { - "format": "default", - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.4, - "y": 0.885 - }, - "min": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.8, - "y": 0.92 - }, - "source": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.065, - "y": 0.885 - }, - "title": { - "priority": 0, - "textorientation": "texot", - "texttable": "default", - "x": 0.5, - "y": 0.96 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0529999993742 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "tvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.883000016212 - }, - "units": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.78, - "y": 0.885 - }, - "xlabel1": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.07 - }, - "xlabel2": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.870000004768 - }, - "xmintic1": { - "line": "default", - "priority": 0, - "y1": 0.1, - "y2": 0.09 - }, - "xmintic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.860000014305 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.277000010014 - }, - "xtic1": { - "line": "default", - "priority": 0, - "y1": 0.1, - "y2": 0.085 - }, - "xtic2": { - "line": "default", - "priority": 0, - "y1": 0.45, - "y2": 0.465 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.600000023842, - "y": 0.277000010014 - }, - "xvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.941999971867 - }, - "ylabel1": { - "priority": 0, - "textorientation": "defright", - "texttable": "default", - "x": 0.12 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.959999978542 - }, - "ymintic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0450000017881 - }, - "ymintic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.954999983311 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0168999992311, - "y": 0.420033991337 - }, - "ytic1": { - "line": "default", - "priority": 0, - "x1": 0.15, - "x2": 0.128 - }, - "ytic2": { - "line": "default", - "priority": 0, - "x1": 0.75, - "x2": 0.774 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.019999999553, - "y": 0.658999979496 - }, - "yvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.922999978065 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.902999997139 - } - }, - "UVWG_1of3": { - "box1": { - "line": "default", - "priority": 2, - "x1": 0.06, - "x2": 0.8, - "y1": 0.68, - "y2": 0.95 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 1, - "textorientation": "texssu", - "texttable": "default", - "x": 0.835, - "y": 0.97 - }, - "comment2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.06, - "x2": 0.8, - "y1": 0.68, - "y2": 0.95 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 1, - "textorientation": "texcent", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.68, - "y2": 0.9 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 1, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.92 - }, - "mean": { - "format": "AMIP", - "priority": 1, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.965 - }, - "min": { - "format": "AMIP", - "priority": 1, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.94 - }, - "source": { - "priority": 1, - "textorientation": "texsu", - "texttable": "default", - "x": 0.065, - "y": 0.965 - }, - "title": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.99 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.965 - }, - "xlabel1": { - "priority": 0, - "textorientation": "7rcc", - "texttable": "std", - "y": 0.684 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xtic1": { - "line": "std", - "priority": 0, - "y1": 0.684, - "y2": 0.692 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 0, - "textorientation": "7right", - "texttable": "std", - "x": 0.143 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "std", - "priority": 0, - "x1": 0.143, - "x2": 0.15 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "UVWG_1of4": { - "box1": { - "line": "default", - "priority": 1, - "x1": 0.1, - "x2": 0.47, - "y1": 0.58, - "y2": 0.88 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.920000016689, - "y1": 0.300000011921, - "y2": 0.879999995232 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.910000026226, - "y1": 0.319999992847, - "y2": 0.860000014305 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.0, - "y1": 0.0, - "y2": 0.0 - }, - "comment1": { - "priority": 1, - "textorientation": "tex4t", - "texttable": "default", - "x": 0.5, - "y": 0.975 - }, - "comment2": { - "priority": 1, - "textorientation": "tex4y", - "texttable": "default", - "x": 0.025, - "y": 0.73 - }, - "comment3": { - "priority": 1, - "textorientation": "tex4x", - "texttable": "default", - "x": 0.29, - "y": 0.54 - }, - "comment4": { - "priority": 1, - "textorientation": "tex4m", - "texttable": "default", - "x": 0.16, - "y": 0.9 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.75, - "y": 0.922999978065 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.850000023842, - "y": 0.922999978065 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.1, - "x2": 0.47, - "y1": 0.58, - "y2": 0.88 - }, - "dataname": { - "priority": 0, - "textorientation": "texd", - "texttable": "default", - "x": 0.045, - "y": 0.96 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "x1": 0.8, - "x2": 0.9, - "y1": 0.7, - "y2": 0.71 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.560000002384, - "y2": 0.560000002384 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0.5, - "x2": 0.5, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.52999997139, - "y2": 0.52999997139 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.990000009537, - "y2": 0.990000009537 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0329999998212 - }, - "max": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.9, - "y": 0.92 - }, - "mean": { - "format": "default", - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.4, - "y": 0.885 - }, - "min": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.8, - "y": 0.92 - }, - "source": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.065, - "y": 0.885 - }, - "title": { - "priority": 0, - "textorientation": "texot", - "texttable": "default", - "x": 0.5, - "y": 0.96 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0529999993742 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "tvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.883000016212 - }, - "units": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.78, - "y": 0.885 - }, - "xlabel1": { - "priority": 1, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.56 - }, - "xlabel2": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.870000004768 - }, - "xmintic1": { - "line": "default", - "priority": 0, - "y1": 0.58, - "y2": 0.57 - }, - "xmintic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.860000014305 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.53 - }, - "xtic1": { - "line": "default", - "priority": 1, - "y1": 0.58, - "y2": 0.569 - }, - "xtic2": { - "line": "default", - "priority": 0, - "y1": 0.93, - "y2": 0.945 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.600000023842, - "y": 0.277000010014 - }, - "xvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.941999971867 - }, - "ylabel1": { - "priority": 1, - "textorientation": "defright", - "texttable": "default", - "x": 0.085 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.959999978542 - }, - "ymintic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0450000017881 - }, - "ymintic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.954999983311 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0168999992311, - "y": 0.420033991337 - }, - "ytic1": { - "line": "default", - "priority": 1, - "x1": 0.1, - "x2": 0.085 - }, - "ytic2": { - "line": "default", - "priority": 0, - "x1": 0.75, - "x2": 0.774 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.019999999553, - "y": 0.658999979496 - }, - "yvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.922999978065 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.902999997139 - } - }, - "UVWG_1of6": { - "box1": { - "line": "default", - "priority": 1, - "x1": 0.13, - "x2": 0.46, - "y1": 0.69, - "y2": 0.93 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 1, - "textorientation": "tex6t", - "texttable": "default", - "x": 0.5, - "y": 0.985 - }, - "comment2": { - "priority": 1, - "textorientation": "tex6y", - "texttable": "default", - "x": 0.05, - "y": 0.81 - }, - "comment3": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.2, - "y": 0.025 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.13, - "x2": 0.46, - "y1": 0.69, - "y2": 0.93 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "texcent", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.68, - "y2": 0.9 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.92 - }, - "mean": { - "format": "AMIP", - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.965 - }, - "min": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.94 - }, - "source": { - "priority": 1, - "textorientation": "tex6s", - "texttable": "default", - "x": 0.295, - "y": 0.94 - }, - "title": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.99 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.965 - }, - "xlabel1": { - "priority": 1, - "textorientation": "tex6", - "texttable": "std", - "y": 0.67 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.5 - }, - "xtic1": { - "line": "default", - "priority": 1, - "y1": 0.69, - "y2": 0.679 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 1, - "textorientation": "tex6", - "texttable": "std", - "x": 0.103 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "default", - "priority": 1, - "x1": 0.13, - "x2": 0.115 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "UVWG_2of3": { - "box1": { - "line": "default", - "priority": 2, - "x1": 0.06, - "x2": 0.8, - "y1": 0.35, - "y2": 0.62 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 1, - "textorientation": "texssu", - "texttable": "default", - "x": 0.835, - "y": 0.97 - }, - "comment2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.06, - "x2": 0.8, - "y1": 0.35, - "y2": 0.62 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 1, - "textorientation": "texcent", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.35, - "y2": 0.57 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 1, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.59 - }, - "mean": { - "format": "AMIP", - "priority": 1, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.635 - }, - "min": { - "format": "AMIP", - "priority": 1, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.61 - }, - "source": { - "priority": 1, - "textorientation": "texsu", - "texttable": "default", - "x": 0.065, - "y": 0.635 - }, - "title": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.66 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.635 - }, - "xlabel1": { - "priority": 0, - "textorientation": "7rcc", - "texttable": "std", - "y": 0.684 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xtic1": { - "line": "std", - "priority": 0, - "y1": 0.684, - "y2": 0.692 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 0, - "textorientation": "7right", - "texttable": "std", - "x": 0.143 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "std", - "priority": 0, - "x1": 0.143, - "x2": 0.15 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "UVWG_2of4": { - "box1": { - "line": "default", - "priority": 1, - "x1": 0.58, - "x2": 0.95, - "y1": 0.58, - "y2": 0.88 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.920000016689, - "y1": 0.300000011921, - "y2": 0.879999995232 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.910000026226, - "y1": 0.319999992847, - "y2": 0.860000014305 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.0, - "y1": 0.0, - "y2": 0.0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex4t", - "texttable": "default", - "x": 0.5, - "y": 0.975 - }, - "comment2": { - "priority": 0, - "textorientation": "tex4y", - "texttable": "default", - "x": 0.025, - "y": 0.73 - }, - "comment3": { - "priority": 1, - "textorientation": "tex4x", - "texttable": "default", - "x": 0.77, - "y": 0.54 - }, - "comment4": { - "priority": 1, - "textorientation": "tex4m", - "texttable": "default", - "x": 0.643, - "y": 0.9 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.75, - "y": 0.922999978065 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.850000023842, - "y": 0.922999978065 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.58, - "x2": 0.95, - "y1": 0.58, - "y2": 0.88 - }, - "dataname": { - "priority": 0, - "textorientation": "texd", - "texttable": "default", - "x": 0.045, - "y": 0.96 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "x1": 0.8, - "x2": 0.9, - "y1": 0.7, - "y2": 0.71 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.560000002384, - "y2": 0.560000002384 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0.5, - "x2": 0.5, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.52999997139, - "y2": 0.52999997139 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.990000009537, - "y2": 0.990000009537 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0329999998212 - }, - "max": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.9, - "y": 0.92 - }, - "mean": { - "format": "default", - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.4, - "y": 0.885 - }, - "min": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.8, - "y": 0.92 - }, - "source": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.065, - "y": 0.885 - }, - "title": { - "priority": 0, - "textorientation": "texot", - "texttable": "default", - "x": 0.5, - "y": 0.96 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0529999993742 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "tvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.883000016212 - }, - "units": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.78, - "y": 0.885 - }, - "xlabel1": { - "priority": 1, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.56 - }, - "xlabel2": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.870000004768 - }, - "xmintic1": { - "line": "default", - "priority": 0, - "y1": 0.58, - "y2": 0.57 - }, - "xmintic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.860000014305 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.53 - }, - "xtic1": { - "line": "default", - "priority": 1, - "y1": 0.58, - "y2": 0.569 - }, - "xtic2": { - "line": "default", - "priority": 0, - "y1": 0.93, - "y2": 0.945 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.600000023842, - "y": 0.277000010014 - }, - "xvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.941999971867 - }, - "ylabel1": { - "priority": 1, - "textorientation": "defright", - "texttable": "default", - "x": 0.565 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.959999978542 - }, - "ymintic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0450000017881 - }, - "ymintic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.954999983311 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0168999992311, - "y": 0.420033991337 - }, - "ytic1": { - "line": "default", - "priority": 1, - "x1": 0.58, - "x2": 0.565 - }, - "ytic2": { - "line": "default", - "priority": 0, - "x1": 0.75, - "x2": 0.774 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.019999999553, - "y": 0.658999979496 - }, - "yvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.922999978065 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.902999997139 - } - }, - "UVWG_2of6": { - "box1": { - "line": "default", - "priority": 1, - "x1": 0.58, - "x2": 0.92, - "y1": 0.69, - "y2": 0.93 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex6t", - "texttable": "default", - "x": 0.5, - "y": 0.985 - }, - "comment2": { - "priority": 0, - "textorientation": "tex6y", - "texttable": "default", - "x": 0.05, - "y": 0.81 - }, - "comment3": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.65, - "y": 0.025 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.58, - "x2": 0.92, - "y1": 0.69, - "y2": 0.93 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "texcent", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.68, - "y2": 0.9 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.92 - }, - "mean": { - "format": "AMIP", - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.965 - }, - "min": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.94 - }, - "source": { - "priority": 1, - "textorientation": "tex6s", - "texttable": "default", - "x": 0.75, - "y": 0.94 - }, - "title": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.99 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.965 - }, - "xlabel1": { - "priority": 1, - "textorientation": "tex6", - "texttable": "std", - "y": 0.67 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.5 - }, - "xtic1": { - "line": "default", - "priority": 1, - "y1": 0.69, - "y2": 0.679 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 1, - "textorientation": "tex6", - "texttable": "std", - "x": 0.5535 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "default", - "priority": 1, - "x1": 0.58, - "x2": 0.565 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "UVWG_3of3": { - "box1": { - "line": "default", - "priority": 2, - "x1": 0.06, - "x2": 0.8, - "y1": 0.02, - "y2": 0.29 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 1, - "textorientation": "texssu", - "texttable": "default", - "x": 0.835, - "y": 0.97 - }, - "comment2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.06, - "x2": 0.8, - "y1": 0.02, - "y2": 0.29 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 1, - "textorientation": "texcent", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.02, - "y2": 0.24 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 1, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.26 - }, - "mean": { - "format": "AMIP", - "priority": 1, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.305 - }, - "min": { - "format": "AMIP", - "priority": 1, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.28 - }, - "source": { - "priority": 1, - "textorientation": "texsu", - "texttable": "default", - "x": 0.065, - "y": 0.305 - }, - "title": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.33 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.305 - }, - "xlabel1": { - "priority": 0, - "textorientation": "7rcc", - "texttable": "std", - "y": 0.684 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xtic1": { - "line": "std", - "priority": 0, - "y1": 0.684, - "y2": 0.692 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 0, - "textorientation": "7right", - "texttable": "std", - "x": 0.143 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "std", - "priority": 0, - "x1": 0.143, - "x2": 0.15 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "UVWG_3of4": { - "box1": { - "line": "default", - "priority": 1, - "x1": 0.1, - "x2": 0.47, - "y1": 0.12, - "y2": 0.42 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.920000016689, - "y1": 0.300000011921, - "y2": 0.879999995232 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.910000026226, - "y1": 0.319999992847, - "y2": 0.860000014305 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.0, - "y1": 0.0, - "y2": 0.0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex4t", - "texttable": "default", - "x": 0.5, - "y": 0.975 - }, - "comment2": { - "priority": 1, - "textorientation": "tex4y", - "texttable": "default", - "x": 0.025, - "y": 0.27 - }, - "comment3": { - "priority": 1, - "textorientation": "tex4x", - "texttable": "default", - "x": 0.29, - "y": 0.08 - }, - "comment4": { - "priority": 1, - "textorientation": "tex4m", - "texttable": "default", - "x": 0.16, - "y": 0.44 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.75, - "y": 0.922999978065 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.850000023842, - "y": 0.922999978065 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.1, - "x2": 0.47, - "y1": 0.12, - "y2": 0.42 - }, - "dataname": { - "priority": 0, - "textorientation": "texd", - "texttable": "default", - "x": 0.045, - "y": 0.96 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "x1": 0.8, - "x2": 0.9, - "y1": 0.7, - "y2": 0.71 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.560000002384, - "y2": 0.560000002384 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0.5, - "x2": 0.5, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.52999997139, - "y2": 0.52999997139 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.990000009537, - "y2": 0.990000009537 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0329999998212 - }, - "max": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.9, - "y": 0.92 - }, - "mean": { - "format": "default", - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.4, - "y": 0.885 - }, - "min": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.8, - "y": 0.92 - }, - "source": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.065, - "y": 0.885 - }, - "title": { - "priority": 0, - "textorientation": "texot", - "texttable": "default", - "x": 0.5, - "y": 0.96 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0529999993742 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "tvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.883000016212 - }, - "units": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.78, - "y": 0.885 - }, - "xlabel1": { - "priority": 1, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.1 - }, - "xlabel2": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.870000004768 - }, - "xmintic1": { - "line": "default", - "priority": 0, - "y1": 0.58, - "y2": 0.57 - }, - "xmintic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.860000014305 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.53 - }, - "xtic1": { - "line": "default", - "priority": 1, - "y1": 0.12, - "y2": 0.109 - }, - "xtic2": { - "line": "default", - "priority": 0, - "y1": 0.93, - "y2": 0.945 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.600000023842, - "y": 0.277000010014 - }, - "xvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.941999971867 - }, - "ylabel1": { - "priority": 1, - "textorientation": "defright", - "texttable": "default", - "x": 0.085 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.959999978542 - }, - "ymintic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0450000017881 - }, - "ymintic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.954999983311 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0168999992311, - "y": 0.420033991337 - }, - "ytic1": { - "line": "default", - "priority": 1, - "x1": 0.1, - "x2": 0.085 - }, - "ytic2": { - "line": "default", - "priority": 0, - "x1": 0.75, - "x2": 0.774 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.019999999553, - "y": 0.658999979496 - }, - "yvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.922999978065 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.902999997139 - } - }, - "UVWG_3of6": { - "box1": { - "line": "default", - "priority": 1, - "x1": 0.13, - "x2": 0.46, - "y1": 0.38, - "y2": 0.62 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex6t", - "texttable": "default", - "x": 0.5, - "y": 0.985 - }, - "comment2": { - "priority": 1, - "textorientation": "tex6y", - "texttable": "default", - "x": 0.05, - "y": 0.5 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.2, - "y": 0.025 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.13, - "x2": 0.46, - "y1": 0.38, - "y2": 0.62 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "texcent", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.68, - "y2": 0.9 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.92 - }, - "mean": { - "format": "AMIP", - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.965 - }, - "min": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.94 - }, - "source": { - "priority": 1, - "textorientation": "tex6s", - "texttable": "default", - "x": 0.295, - "y": 0.63 - }, - "title": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.99 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.965 - }, - "xlabel1": { - "priority": 1, - "textorientation": "tex6", - "texttable": "std", - "y": 0.36 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.5 - }, - "xtic1": { - "line": "default", - "priority": 1, - "y1": 0.38, - "y2": 0.369 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 1, - "textorientation": "tex6", - "texttable": "std", - "x": 0.103 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "default", - "priority": 1, - "x1": 0.13, - "x2": 0.115 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "UVWG_4of4": { - "box1": { - "line": "default", - "priority": 1, - "x1": 0.58, - "x2": 0.95, - "y1": 0.12, - "y2": 0.42 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.920000016689, - "y1": 0.300000011921, - "y2": 0.879999995232 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.910000026226, - "y1": 0.319999992847, - "y2": 0.860000014305 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.0, - "y1": 0.0, - "y2": 0.0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex4t", - "texttable": "default", - "x": 0.5, - "y": 0.975 - }, - "comment2": { - "priority": 0, - "textorientation": "tex4y", - "texttable": "default", - "x": 0.025, - "y": 0.73 - }, - "comment3": { - "priority": 1, - "textorientation": "tex4x", - "texttable": "default", - "x": 0.77, - "y": 0.08 - }, - "comment4": { - "priority": 1, - "textorientation": "tex4m", - "texttable": "default", - "x": 0.643, - "y": 0.44 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.75, - "y": 0.922999978065 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.850000023842, - "y": 0.922999978065 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.58, - "x2": 0.95, - "y1": 0.12, - "y2": 0.42 - }, - "dataname": { - "priority": 0, - "textorientation": "texd", - "texttable": "default", - "x": 0.045, - "y": 0.96 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "x1": 0.8, - "x2": 0.9, - "y1": 0.7, - "y2": 0.71 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.560000002384, - "y2": 0.560000002384 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0.5, - "x2": 0.5, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.52999997139, - "y2": 0.52999997139 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.990000009537, - "y2": 0.990000009537 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0329999998212 - }, - "max": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.9, - "y": 0.92 - }, - "mean": { - "format": "default", - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.4, - "y": 0.885 - }, - "min": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.8, - "y": 0.92 - }, - "source": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.065, - "y": 0.885 - }, - "title": { - "priority": 0, - "textorientation": "texot", - "texttable": "default", - "x": 0.5, - "y": 0.96 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0529999993742 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "tvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.883000016212 - }, - "units": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.78, - "y": 0.885 - }, - "xlabel1": { - "priority": 1, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.1 - }, - "xlabel2": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.870000004768 - }, - "xmintic1": { - "line": "default", - "priority": 0, - "y1": 0.58, - "y2": 0.57 - }, - "xmintic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.860000014305 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.53 - }, - "xtic1": { - "line": "default", - "priority": 1, - "y1": 0.12, - "y2": 0.109 - }, - "xtic2": { - "line": "default", - "priority": 0, - "y1": 0.93, - "y2": 0.945 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.600000023842, - "y": 0.277000010014 - }, - "xvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.941999971867 - }, - "ylabel1": { - "priority": 1, - "textorientation": "defright", - "texttable": "default", - "x": 0.565 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.959999978542 - }, - "ymintic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0450000017881 - }, - "ymintic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.954999983311 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0168999992311, - "y": 0.420033991337 - }, - "ytic1": { - "line": "default", - "priority": 1, - "x1": 0.58, - "x2": 0.565 - }, - "ytic2": { - "line": "default", - "priority": 0, - "x1": 0.75, - "x2": 0.774 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.019999999553, - "y": 0.658999979496 - }, - "yvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.922999978065 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.902999997139 - } - }, - "UVWG_4of6": { - "box1": { - "line": "default", - "priority": 1, - "x1": 0.58, - "x2": 0.92, - "y1": 0.38, - "y2": 0.62 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex6t", - "texttable": "default", - "x": 0.5, - "y": 0.985 - }, - "comment2": { - "priority": 0, - "textorientation": "tex6y", - "texttable": "default", - "x": 0.05, - "y": 0.81 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.2, - "y": 0.025 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.58, - "x2": 0.92, - "y1": 0.38, - "y2": 0.62 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "texcent", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.68, - "y2": 0.9 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.92 - }, - "mean": { - "format": "AMIP", - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.965 - }, - "min": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.94 - }, - "source": { - "priority": 1, - "textorientation": "tex6s", - "texttable": "default", - "x": 0.75, - "y": 0.63 - }, - "title": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.99 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.965 - }, - "xlabel1": { - "priority": 1, - "textorientation": "tex6", - "texttable": "std", - "y": 0.36 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.5 - }, - "xtic1": { - "line": "default", - "priority": 1, - "y1": 0.38, - "y2": 0.369 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 1, - "textorientation": "tex6", - "texttable": "std", - "x": 0.5535 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "default", - "priority": 1, - "x1": 0.58, - "x2": 0.565 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "UVWG_5of6": { - "box1": { - "line": "default", - "priority": 1, - "x1": 0.13, - "x2": 0.46, - "y1": 0.07, - "y2": 0.31 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex6t", - "texttable": "default", - "x": 0.5, - "y": 0.985 - }, - "comment2": { - "priority": 1, - "textorientation": "tex6y", - "texttable": "default", - "x": 0.05, - "y": 0.18 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.2, - "y": 0.025 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.13, - "x2": 0.46, - "y1": 0.07, - "y2": 0.31 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "texcent", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.68, - "y2": 0.9 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.92 - }, - "mean": { - "format": "AMIP", - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.965 - }, - "min": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.94 - }, - "source": { - "priority": 1, - "textorientation": "tex6s", - "texttable": "default", - "x": 0.295, - "y": 0.32 - }, - "title": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.99 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.965 - }, - "xlabel1": { - "priority": 1, - "textorientation": "tex6", - "texttable": "std", - "y": 0.05 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.5 - }, - "xtic1": { - "line": "default", - "priority": 1, - "y1": 0.07, - "y2": 0.059 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 1, - "textorientation": "tex6", - "texttable": "std", - "x": 0.103 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "default", - "priority": 1, - "x1": 0.13, - "x2": 0.115 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "UVWG_6of6": { - "box1": { - "line": "default", - "priority": 1, - "x1": 0.58, - "x2": 0.92, - "y1": 0.07, - "y2": 0.31 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex6t", - "texttable": "default", - "x": 0.5, - "y": 0.985 - }, - "comment2": { - "priority": 0, - "textorientation": "tex6y", - "texttable": "default", - "x": 0.05, - "y": 0.81 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.2, - "y": 0.025 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.58, - "x2": 0.92, - "y1": 0.07, - "y2": 0.31 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "texcent", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.68, - "y2": 0.9 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.92 - }, - "mean": { - "format": "AMIP", - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.965 - }, - "min": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.94 - }, - "source": { - "priority": 1, - "textorientation": "tex6s", - "texttable": "default", - "x": 0.75, - "y": 0.32 - }, - "title": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.99 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.965 - }, - "xlabel1": { - "priority": 1, - "textorientation": "tex6", - "texttable": "std", - "y": 0.05 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.5 - }, - "xtic1": { - "line": "default", - "priority": 1, - "y1": 0.07, - "y2": 0.059 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 1, - "textorientation": "tex6", - "texttable": "std", - "x": 0.5535 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "default", - "priority": 1, - "x1": 0.58, - "x2": 0.565 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "UVWG_DUD": { - "box1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.920000016689, - "y1": 0.300000011921, - "y2": 0.879999995232 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.910000026226, - "y1": 0.319999992847, - "y2": 0.860000014305 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.0, - "y1": 0.0, - "y2": 0.0 - }, - "comment1": { - "priority": 0, - "textorientation": "texss", - "texttable": "default", - "x": 0.835, - "y": 0.96 - }, - "comment2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.975000023842 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.995000004768 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.10000000149, - "y": 0.999000012875 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.75, - "y": 0.922999978065 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.850000023842, - "y": 0.922999978065 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "dataname": { - "priority": 0, - "textorientation": "texd", - "texttable": "default", - "x": 0.045, - "y": 0.96 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.129999995232, - "y2": 0.159999996424 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.560000002384, - "y2": 0.560000002384 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0.5, - "x2": 0.5, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.52999997139, - "y2": 0.52999997139 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.990000009537, - "y2": 0.990000009537 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0329999998212 - }, - "max": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.9, - "y": 0.92 - }, - "mean": { - "format": "default", - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.4, - "y": 0.885 - }, - "min": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.8, - "y": 0.92 - }, - "source": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.065, - "y": 0.885 - }, - "title": { - "priority": 0, - "textorientation": "texot", - "texttable": "default", - "x": 0.5, - "y": 0.96 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0529999993742 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "tvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.883000016212 - }, - "units": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.78, - "y": 0.885 - }, - "xlabel1": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.234999999404 - }, - "xlabel2": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.870000004768 - }, - "xmintic1": { - "line": "default", - "priority": 0, - "y1": 0.259999990463, - "y2": 0.256999999285 - }, - "xmintic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.860000014305 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.277000010014 - }, - "xtic1": { - "line": "default", - "priority": 0, - "y1": 0.259999990463, - "y2": 0.24699999392 - }, - "xtic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.871999979019 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.600000023842, - "y": 0.277000010014 - }, - "xvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.941999971867 - }, - "ylabel1": { - "priority": 0, - "textorientation": "defright", - "texttable": "default", - "x": 0.0399999991059 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.959999978542 - }, - "ymintic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0450000017881 - }, - "ymintic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.954999983311 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0168999992311, - "y": 0.420033991337 - }, - "ytic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0399999991059 - }, - "ytic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.959999978542 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.019999999553, - "y": 0.658999979496 - }, - "yvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.922999978065 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.902999997139 - } - }, - "UVWG_DUD_1of3": { - "box1": { - "line": "default", - "priority": 0, - "x1": 0.06, - "x2": 0.8, - "y1": 0.68, - "y2": 0.95 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 0, - "textorientation": "texssu", - "texttable": "default", - "x": 0.835, - "y": 0.97 - }, - "comment2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.06, - "x2": 0.8, - "y1": 0.68, - "y2": 0.95 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 1, - "textorientation": "7center", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.68, - "y2": 0.9 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.93, - "y": 0.92 - }, - "mean": { - "format": "AMIP", - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.965 - }, - "min": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.845, - "y": 0.92 - }, - "source": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.065, - "y": 0.965 - }, - "title": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.99 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.965 - }, - "xlabel1": { - "priority": 0, - "textorientation": "7rcc", - "texttable": "std", - "y": 0.684 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xtic1": { - "line": "std", - "priority": 0, - "y1": 0.684, - "y2": 0.692 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 0, - "textorientation": "7right", - "texttable": "std", - "x": 0.143 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "std", - "priority": 0, - "x1": 0.143, - "x2": 0.15 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "UVWG_DUD_1of4": { - "box1": { - "line": "default", - "priority": 0, - "x1": 0.1, - "x2": 0.47, - "y1": 0.58, - "y2": 0.88 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.920000016689, - "y1": 0.300000011921, - "y2": 0.879999995232 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.910000026226, - "y1": 0.319999992847, - "y2": 0.860000014305 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.0, - "y1": 0.0, - "y2": 0.0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex4t", - "texttable": "default", - "x": 0.5, - "y": 0.975 - }, - "comment2": { - "priority": 0, - "textorientation": "tex4y", - "texttable": "default", - "x": 0.025, - "y": 0.73 - }, - "comment3": { - "priority": 0, - "textorientation": "tex4x", - "texttable": "default", - "x": 0.29, - "y": 0.54 - }, - "comment4": { - "priority": 0, - "textorientation": "tex4m", - "texttable": "default", - "x": 0.16, - "y": 0.9 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.75, - "y": 0.922999978065 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.850000023842, - "y": 0.922999978065 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.1, - "x2": 0.47, - "y1": 0.58, - "y2": 0.88 - }, - "dataname": { - "priority": 0, - "textorientation": "texd", - "texttable": "default", - "x": 0.045, - "y": 0.96 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "x1": 0.8, - "x2": 0.9, - "y1": 0.7, - "y2": 0.71 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.560000002384, - "y2": 0.560000002384 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0.5, - "x2": 0.5, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.52999997139, - "y2": 0.52999997139 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.990000009537, - "y2": 0.990000009537 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0329999998212 - }, - "max": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.9, - "y": 0.92 - }, - "mean": { - "format": "default", - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.4, - "y": 0.885 - }, - "min": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.8, - "y": 0.92 - }, - "source": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.065, - "y": 0.885 - }, - "title": { - "priority": 0, - "textorientation": "texot", - "texttable": "default", - "x": 0.5, - "y": 0.96 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0529999993742 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "tvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.883000016212 - }, - "units": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.78, - "y": 0.885 - }, - "xlabel1": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.56 - }, - "xlabel2": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.870000004768 - }, - "xmintic1": { - "line": "default", - "priority": 0, - "y1": 0.58, - "y2": 0.57 - }, - "xmintic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.860000014305 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.53 - }, - "xtic1": { - "line": "default", - "priority": 0, - "y1": 0.58, - "y2": 0.569 - }, - "xtic2": { - "line": "default", - "priority": 0, - "y1": 0.93, - "y2": 0.945 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.600000023842, - "y": 0.277000010014 - }, - "xvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.941999971867 - }, - "ylabel1": { - "priority": 0, - "textorientation": "defright", - "texttable": "default", - "x": 0.085 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.959999978542 - }, - "ymintic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0450000017881 - }, - "ymintic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.954999983311 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0168999992311, - "y": 0.420033991337 - }, - "ytic1": { - "line": "default", - "priority": 0, - "x1": 0.1, - "x2": 0.085 - }, - "ytic2": { - "line": "default", - "priority": 0, - "x1": 0.75, - "x2": 0.774 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.019999999553, - "y": 0.658999979496 - }, - "yvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.922999978065 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.902999997139 - } - }, - "UVWG_DUD_1of6": { - "box1": { - "line": "default", - "priority": 0, - "x1": 0.13, - "x2": 0.46, - "y1": 0.69, - "y2": 0.93 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex6t", - "texttable": "default", - "x": 0.5, - "y": 0.985 - }, - "comment2": { - "priority": 0, - "textorientation": "tex6y", - "texttable": "default", - "x": 0.05, - "y": 0.81 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.2, - "y": 0.025 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.13, - "x2": 0.46, - "y1": 0.69, - "y2": 0.93 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "texcent", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.68, - "y2": 0.9 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.92 - }, - "mean": { - "format": "AMIP", - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.965 - }, - "min": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.94 - }, - "source": { - "priority": 0, - "textorientation": "tex6s", - "texttable": "default", - "x": 0.295, - "y": 0.94 - }, - "title": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.99 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.965 - }, - "xlabel1": { - "priority": 0, - "textorientation": "tex6", - "texttable": "std", - "y": 0.67 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.5 - }, - "xtic1": { - "line": "default", - "priority": 0, - "y1": 0.69, - "y2": 0.679 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 0, - "textorientation": "tex6", - "texttable": "std", - "x": 0.103 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "default", - "priority": 0, - "x1": 0.13, - "x2": 0.115 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "UVWG_DUD_2of3": { - "box1": { - "line": "default", - "priority": 0, - "x1": 0.06, - "x2": 0.8, - "y1": 0.35, - "y2": 0.62 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 0, - "textorientation": "texssu", - "texttable": "default", - "x": 0.835, - "y": 0.97 - }, - "comment2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.06, - "x2": 0.8, - "y1": 0.35, - "y2": 0.62 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 1, - "textorientation": "7center", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.35, - "y2": 0.57 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.93, - "y": 0.59 - }, - "mean": { - "format": "AMIP", - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.635 - }, - "min": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.845, - "y": 0.59 - }, - "source": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.065, - "y": 0.635 - }, - "title": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.66 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.635 - }, - "xlabel1": { - "priority": 0, - "textorientation": "7rcc", - "texttable": "std", - "y": 0.684 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xtic1": { - "line": "std", - "priority": 0, - "y1": 0.684, - "y2": 0.692 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 0, - "textorientation": "7right", - "texttable": "std", - "x": 0.143 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "std", - "priority": 0, - "x1": 0.143, - "x2": 0.15 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "UVWG_DUD_2of4": { - "box1": { - "line": "default", - "priority": 0, - "x1": 0.58, - "x2": 0.95, - "y1": 0.58, - "y2": 0.88 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.920000016689, - "y1": 0.300000011921, - "y2": 0.879999995232 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.910000026226, - "y1": 0.319999992847, - "y2": 0.860000014305 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.0, - "y1": 0.0, - "y2": 0.0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex4t", - "texttable": "default", - "x": 0.5, - "y": 0.975 - }, - "comment2": { - "priority": 0, - "textorientation": "tex4y", - "texttable": "default", - "x": 0.025, - "y": 0.73 - }, - "comment3": { - "priority": 0, - "textorientation": "tex4x", - "texttable": "default", - "x": 0.77, - "y": 0.54 - }, - "comment4": { - "priority": 0, - "textorientation": "tex4m", - "texttable": "default", - "x": 0.643, - "y": 0.9 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.75, - "y": 0.922999978065 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.850000023842, - "y": 0.922999978065 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.58, - "x2": 0.95, - "y1": 0.58, - "y2": 0.88 - }, - "dataname": { - "priority": 0, - "textorientation": "texd", - "texttable": "default", - "x": 0.045, - "y": 0.96 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "x1": 0.8, - "x2": 0.9, - "y1": 0.7, - "y2": 0.71 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.560000002384, - "y2": 0.560000002384 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0.5, - "x2": 0.5, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.52999997139, - "y2": 0.52999997139 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.990000009537, - "y2": 0.990000009537 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0329999998212 - }, - "max": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.9, - "y": 0.92 - }, - "mean": { - "format": "default", - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.4, - "y": 0.885 - }, - "min": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.8, - "y": 0.92 - }, - "source": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.065, - "y": 0.885 - }, - "title": { - "priority": 0, - "textorientation": "texot", - "texttable": "default", - "x": 0.5, - "y": 0.96 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0529999993742 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "tvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.883000016212 - }, - "units": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.78, - "y": 0.885 - }, - "xlabel1": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.56 - }, - "xlabel2": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.870000004768 - }, - "xmintic1": { - "line": "default", - "priority": 0, - "y1": 0.58, - "y2": 0.57 - }, - "xmintic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.860000014305 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.53 - }, - "xtic1": { - "line": "default", - "priority": 0, - "y1": 0.58, - "y2": 0.569 - }, - "xtic2": { - "line": "default", - "priority": 0, - "y1": 0.93, - "y2": 0.945 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.600000023842, - "y": 0.277000010014 - }, - "xvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.941999971867 - }, - "ylabel1": { - "priority": 0, - "textorientation": "defright", - "texttable": "default", - "x": 0.565 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.959999978542 - }, - "ymintic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0450000017881 - }, - "ymintic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.954999983311 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0168999992311, - "y": 0.420033991337 - }, - "ytic1": { - "line": "default", - "priority": 0, - "x1": 0.58, - "x2": 0.565 - }, - "ytic2": { - "line": "default", - "priority": 0, - "x1": 0.75, - "x2": 0.774 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.019999999553, - "y": 0.658999979496 - }, - "yvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.922999978065 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.902999997139 - } - }, - "UVWG_DUD_2of6": { - "box1": { - "line": "default", - "priority": 0, - "x1": 0.58, - "x2": 0.92, - "y1": 0.69, - "y2": 0.93 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex6t", - "texttable": "default", - "x": 0.5, - "y": 0.985 - }, - "comment2": { - "priority": 0, - "textorientation": "tex6y", - "texttable": "default", - "x": 0.05, - "y": 0.81 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.65, - "y": 0.025 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.58, - "x2": 0.92, - "y1": 0.69, - "y2": 0.93 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "texcent", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.68, - "y2": 0.9 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.92 - }, - "mean": { - "format": "AMIP", - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.965 - }, - "min": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.94 - }, - "source": { - "priority": 0, - "textorientation": "tex6s", - "texttable": "default", - "x": 0.75, - "y": 0.94 - }, - "title": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.99 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.965 - }, - "xlabel1": { - "priority": 0, - "textorientation": "tex6", - "texttable": "std", - "y": 0.67 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.5 - }, - "xtic1": { - "line": "default", - "priority": 0, - "y1": 0.69, - "y2": 0.679 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 0, - "textorientation": "tex6", - "texttable": "std", - "x": 0.5535 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "default", - "priority": 0, - "x1": 0.58, - "x2": 0.565 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "UVWG_DUD_3of3": { - "box1": { - "line": "default", - "priority": 0, - "x1": 0.06, - "x2": 0.8, - "y1": 0.02, - "y2": 0.29 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 0, - "textorientation": "texssu", - "texttable": "default", - "x": 0.835, - "y": 0.97 - }, - "comment2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.06, - "x2": 0.8, - "y1": 0.02, - "y2": 0.29 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 1, - "textorientation": "7center", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.02, - "y2": 0.24 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.93, - "y": 0.26 - }, - "mean": { - "format": "AMIP", - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.305 - }, - "min": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.845, - "y": 0.26 - }, - "source": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.065, - "y": 0.305 - }, - "title": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.33 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.305 - }, - "xlabel1": { - "priority": 0, - "textorientation": "7rcc", - "texttable": "std", - "y": 0.684 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xtic1": { - "line": "std", - "priority": 0, - "y1": 0.684, - "y2": 0.692 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 0, - "textorientation": "7right", - "texttable": "std", - "x": 0.143 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "std", - "priority": 0, - "x1": 0.143, - "x2": 0.15 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "UVWG_DUD_3of4": { - "box1": { - "line": "default", - "priority": 0, - "x1": 0.1, - "x2": 0.47, - "y1": 0.12, - "y2": 0.42 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.920000016689, - "y1": 0.300000011921, - "y2": 0.879999995232 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.910000026226, - "y1": 0.319999992847, - "y2": 0.860000014305 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.0, - "y1": 0.0, - "y2": 0.0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex4t", - "texttable": "default", - "x": 0.5, - "y": 0.975 - }, - "comment2": { - "priority": 0, - "textorientation": "tex4y", - "texttable": "default", - "x": 0.025, - "y": 0.27 - }, - "comment3": { - "priority": 0, - "textorientation": "tex4x", - "texttable": "default", - "x": 0.29, - "y": 0.08 - }, - "comment4": { - "priority": 0, - "textorientation": "tex4m", - "texttable": "default", - "x": 0.16, - "y": 0.44 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.75, - "y": 0.922999978065 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.850000023842, - "y": 0.922999978065 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.1, - "x2": 0.47, - "y1": 0.12, - "y2": 0.42 - }, - "dataname": { - "priority": 0, - "textorientation": "texd", - "texttable": "default", - "x": 0.045, - "y": 0.96 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "x1": 0.8, - "x2": 0.9, - "y1": 0.7, - "y2": 0.71 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.560000002384, - "y2": 0.560000002384 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0.5, - "x2": 0.5, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.52999997139, - "y2": 0.52999997139 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.990000009537, - "y2": 0.990000009537 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0329999998212 - }, - "max": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.9, - "y": 0.92 - }, - "mean": { - "format": "default", - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.4, - "y": 0.885 - }, - "min": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.8, - "y": 0.92 - }, - "source": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.065, - "y": 0.885 - }, - "title": { - "priority": 0, - "textorientation": "texot", - "texttable": "default", - "x": 0.5, - "y": 0.96 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0529999993742 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "tvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.883000016212 - }, - "units": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.78, - "y": 0.885 - }, - "xlabel1": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.1 - }, - "xlabel2": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.870000004768 - }, - "xmintic1": { - "line": "default", - "priority": 0, - "y1": 0.58, - "y2": 0.57 - }, - "xmintic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.860000014305 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.53 - }, - "xtic1": { - "line": "default", - "priority": 0, - "y1": 0.12, - "y2": 0.109 - }, - "xtic2": { - "line": "default", - "priority": 0, - "y1": 0.93, - "y2": 0.945 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.600000023842, - "y": 0.277000010014 - }, - "xvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.941999971867 - }, - "ylabel1": { - "priority": 0, - "textorientation": "defright", - "texttable": "default", - "x": 0.085 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.959999978542 - }, - "ymintic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0450000017881 - }, - "ymintic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.954999983311 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0168999992311, - "y": 0.420033991337 - }, - "ytic1": { - "line": "default", - "priority": 0, - "x1": 0.1, - "x2": 0.085 - }, - "ytic2": { - "line": "default", - "priority": 0, - "x1": 0.75, - "x2": 0.774 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.019999999553, - "y": 0.658999979496 - }, - "yvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.922999978065 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.902999997139 - } - }, - "UVWG_DUD_3of6": { - "box1": { - "line": "default", - "priority": 0, - "x1": 0.13, - "x2": 0.46, - "y1": 0.38, - "y2": 0.62 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex6t", - "texttable": "default", - "x": 0.5, - "y": 0.985 - }, - "comment2": { - "priority": 0, - "textorientation": "tex6y", - "texttable": "default", - "x": 0.05, - "y": 0.5 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.2, - "y": 0.025 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.13, - "x2": 0.46, - "y1": 0.38, - "y2": 0.62 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "texcent", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.68, - "y2": 0.9 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.92 - }, - "mean": { - "format": "AMIP", - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.965 - }, - "min": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.94 - }, - "source": { - "priority": 0, - "textorientation": "tex6s", - "texttable": "default", - "x": 0.295, - "y": 0.63 - }, - "title": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.99 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.965 - }, - "xlabel1": { - "priority": 0, - "textorientation": "tex6", - "texttable": "std", - "y": 0.36 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.5 - }, - "xtic1": { - "line": "default", - "priority": 0, - "y1": 0.38, - "y2": 0.369 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 0, - "textorientation": "tex6", - "texttable": "std", - "x": 0.103 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "default", - "priority": 0, - "x1": 0.13, - "x2": 0.115 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "UVWG_DUD_4of4": { - "box1": { - "line": "default", - "priority": 0, - "x1": 0.58, - "x2": 0.95, - "y1": 0.12, - "y2": 0.42 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.920000016689, - "y1": 0.300000011921, - "y2": 0.879999995232 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.910000026226, - "y1": 0.319999992847, - "y2": 0.860000014305 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.0, - "y1": 0.0, - "y2": 0.0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex4t", - "texttable": "default", - "x": 0.5, - "y": 0.975 - }, - "comment2": { - "priority": 0, - "textorientation": "tex4y", - "texttable": "default", - "x": 0.025, - "y": 0.73 - }, - "comment3": { - "priority": 0, - "textorientation": "tex4x", - "texttable": "default", - "x": 0.77, - "y": 0.08 - }, - "comment4": { - "priority": 0, - "textorientation": "tex4m", - "texttable": "default", - "x": 0.643, - "y": 0.44 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.75, - "y": 0.922999978065 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.850000023842, - "y": 0.922999978065 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.58, - "x2": 0.95, - "y1": 0.12, - "y2": 0.42 - }, - "dataname": { - "priority": 0, - "textorientation": "texd", - "texttable": "default", - "x": 0.045, - "y": 0.96 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0130000002682 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "x1": 0.8, - "x2": 0.9, - "y1": 0.7, - "y2": 0.71 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.949999988079, - "y1": 0.560000002384, - "y2": 0.560000002384 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0.5, - "x2": 0.5, - "y1": 0.259999990463, - "y2": 0.860000014305 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.52999997139, - "y2": 0.52999997139 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0.0, - "x2": 0.899999976158, - "y1": 0.990000009537, - "y2": 0.990000009537 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0329999998212 - }, - "max": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.9, - "y": 0.92 - }, - "mean": { - "format": "default", - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.4, - "y": 0.885 - }, - "min": { - "format": "default", - "priority": 0, - "textorientation": "texo", - "texttable": "default", - "x": 0.8, - "y": 0.92 - }, - "source": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.065, - "y": 0.885 - }, - "title": { - "priority": 0, - "textorientation": "texot", - "texttable": "default", - "x": 0.5, - "y": 0.96 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.0529999993742 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "tvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.883000016212 - }, - "units": { - "priority": 0, - "textorientation": "texs", - "texttable": "default", - "x": 0.78, - "y": 0.885 - }, - "xlabel1": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.1 - }, - "xlabel2": { - "priority": 0, - "textorientation": "defcenter", - "texttable": "default", - "y": 0.870000004768 - }, - "xmintic1": { - "line": "default", - "priority": 0, - "y1": 0.58, - "y2": 0.57 - }, - "xmintic2": { - "line": "default", - "priority": 0, - "y1": 0.860000014305, - "y2": 0.860000014305 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.53 - }, - "xtic1": { - "line": "default", - "priority": 0, - "y1": 0.12, - "y2": 0.109 - }, - "xtic2": { - "line": "default", - "priority": 0, - "y1": 0.93, - "y2": 0.945 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.600000023842, - "y": 0.277000010014 - }, - "xvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.941999971867 - }, - "ylabel1": { - "priority": 0, - "textorientation": "defright", - "texttable": "default", - "x": 0.565 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.959999978542 - }, - "ymintic1": { - "line": "default", - "priority": 0, - "x1": 0.0500000007451, - "x2": 0.0450000017881 - }, - "ymintic2": { - "line": "default", - "priority": 0, - "x1": 0.949999988079, - "x2": 0.954999983311 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0168999992311, - "y": 0.420033991337 - }, - "ytic1": { - "line": "default", - "priority": 0, - "x1": 0.58, - "x2": 0.565 - }, - "ytic2": { - "line": "default", - "priority": 0, - "x1": 0.75, - "x2": 0.774 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.019999999553, - "y": 0.658999979496 - }, - "yvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.922999978065 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.0, - "y": 0.995000004768 - }, - "zvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.800000011921, - "y": 0.902999997139 - } - }, - "UVWG_DUD_4of6": { - "box1": { - "line": "default", - "priority": 0, - "x1": 0.58, - "x2": 0.92, - "y1": 0.38, - "y2": 0.62 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex6t", - "texttable": "default", - "x": 0.5, - "y": 0.985 - }, - "comment2": { - "priority": 0, - "textorientation": "tex6y", - "texttable": "default", - "x": 0.05, - "y": 0.81 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.2, - "y": 0.025 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.58, - "x2": 0.92, - "y1": 0.38, - "y2": 0.62 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "texcent", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.68, - "y2": 0.9 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.92 - }, - "mean": { - "format": "AMIP", - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.965 - }, - "min": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.94 - }, - "source": { - "priority": 0, - "textorientation": "tex6s", - "texttable": "default", - "x": 0.75, - "y": 0.63 - }, - "title": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.99 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.965 - }, - "xlabel1": { - "priority": 0, - "textorientation": "tex6", - "texttable": "std", - "y": 0.36 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.5 - }, - "xtic1": { - "line": "default", - "priority": 0, - "y1": 0.38, - "y2": 0.369 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 0, - "textorientation": "tex6", - "texttable": "std", - "x": 0.5535 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "default", - "priority": 0, - "x1": 0.58, - "x2": 0.565 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "UVWG_DUD_5of6": { - "box1": { - "line": "default", - "priority": 0, - "x1": 0.13, - "x2": 0.46, - "y1": 0.07, - "y2": 0.31 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex6t", - "texttable": "default", - "x": 0.5, - "y": 0.985 - }, - "comment2": { - "priority": 0, - "textorientation": "tex6y", - "texttable": "default", - "x": 0.05, - "y": 0.18 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.2, - "y": 0.025 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.13, - "x2": 0.46, - "y1": 0.07, - "y2": 0.31 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "texcent", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.68, - "y2": 0.9 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.92 - }, - "mean": { - "format": "AMIP", - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.965 - }, - "min": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.94 - }, - "source": { - "priority": 0, - "textorientation": "tex6s", - "texttable": "default", - "x": 0.295, - "y": 0.32 - }, - "title": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.99 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.965 - }, - "xlabel1": { - "priority": 0, - "textorientation": "tex6", - "texttable": "std", - "y": 0.05 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.5 - }, - "xtic1": { - "line": "default", - "priority": 0, - "y1": 0.07, - "y2": 0.059 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 0, - "textorientation": "tex6", - "texttable": "std", - "x": 0.103 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "default", - "priority": 0, - "x1": 0.13, - "x2": 0.115 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "UVWG_DUD_6of6": { - "box1": { - "line": "default", - "priority": 0, - "x1": 0.58, - "x2": 0.92, - "y1": 0.07, - "y2": 0.31 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "comment1": { - "priority": 0, - "textorientation": "tex6t", - "texttable": "default", - "x": 0.5, - "y": 0.985 - }, - "comment2": { - "priority": 0, - "textorientation": "tex6y", - "texttable": "default", - "x": 0.05, - "y": 0.81 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.2, - "y": 0.025 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.58, - "x2": 0.92, - "y1": 0.07, - "y2": 0.31 - }, - "dataname": { - "priority": 0, - "textorientation": "botcenter", - "texttable": "std", - "x": 0.1, - "y": 0.969 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "legend": { - "line": "default", - "priority": 0, - "textorientation": "texcent", - "texttable": "std", - "x1": 0.86, - "x2": 0.9, - "y1": 0.68, - "y2": 0.9 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "max": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.92 - }, - "mean": { - "format": "AMIP", - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.4, - "y": 0.965 - }, - "min": { - "format": "AMIP", - "priority": 0, - "textorientation": "texou", - "texttable": "default", - "x": 0.88, - "y": 0.94 - }, - "source": { - "priority": 0, - "textorientation": "tex6s", - "texttable": "default", - "x": 0.75, - "y": 0.32 - }, - "title": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.4, - "y": 0.99 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "tvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.27, - "y": 0.959 - }, - "units": { - "priority": 0, - "textorientation": "texsu", - "texttable": "default", - "x": 0.78, - "y": 0.965 - }, - "xlabel1": { - "priority": 0, - "textorientation": "tex6", - "texttable": "std", - "y": 0.05 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.689, - "y2": 0.692 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.945 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.5, - "y": 0.5 - }, - "xtic1": { - "line": "default", - "priority": 0, - "y1": 0.07, - "y2": 0.059 - }, - "xtic2": { - "line": "std", - "priority": 0, - "y1": 0.942, - "y2": 0.949 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "xvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ylabel1": { - "priority": 0, - "textorientation": "tex6", - "texttable": "std", - "x": 0.5535 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.147, - "x2": 0.15 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.653 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "ytic1": { - "line": "default", - "priority": 0, - "x1": 0.58, - "x2": 0.565 - }, - "ytic2": { - "line": "std", - "priority": 0, - "x1": 0.65, - "x2": 0.657 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "yvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0, - "y": 0 - }, - "zvalue": { - "format": "AMIP", - "priority": 0, - "textorientation": "botleft", - "texttable": "std", - "x": 0.15, - "y": 0.959 - } - }, - "bold_bot_of3": { - "box1": { - "line": "std", - "priority": 1, - "x1": 0.075, - "x2": 0.525, - "y1": 0.0685, - "y2": 0.2935 - }, - "box2": { - "line": "default", - "priority": 0, - "x1": 0.03, - "x2": 0.03, - "y1": 0.0181, - "y2": 0.0181 - }, - "box3": { - "line": "default", - "priority": 0, - "x1": 0.03, - "x2": 0.03, - "y1": 0.0181, - "y2": 0.0181 - }, - "box4": { - "line": "default", - "priority": 0, - "x1": 0.03, - "x2": 0.03, - "y1": 0.0181, - "y2": 0.0181 - }, - "comment1": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "comment2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "comment3": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "comment4": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "crdate": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "crtime": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "data": { - "priority": 1, - "ratio": -999, - "x1": 0.075, - "x2": 0.525, - "y1": 0.0685, - "y2": 0.2935 - }, - "dataname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "file": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "function": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "legend": { - "line": "std", - "priority": 1, - "textorientation": "center10", - "texttable": "font3", - "x1": 0.075, - "x2": 0.525, - "y1": 0.025, - "y2": 0.04 - }, - "line1": { - "line": "default", - "priority": 0, - "x1": 0.03, - "x2": 0.03, - "y1": 0.0181, - "y2": 0.0181 - }, - "line2": { - "line": "default", - "priority": 0, - "x1": 0.03, - "x2": 0.03, - "y1": 0.0181, - "y2": 0.0181 - }, - "line3": { - "line": "default", - "priority": 0, - "x1": 0.03, - "x2": 0.03, - "y1": 0.0181, - "y2": 0.0181 - }, - "line4": { - "line": "default", - "priority": 0, - "x1": 0, - "x2": 0, - "y1": 0, - "y2": 0 - }, - "logicalmask": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "max": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "mean": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "min": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "source": { - "priority": 1, - "textorientation": "default", - "texttable": "default", - "x": 0.0500000007451, - "y": 0.941999971867 - }, - "title": { - "priority": 1, - "textorientation": "left15", - "texttable": "font3", - "x": 0.552, - "y": 0.169792 - }, - "tname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "transformation": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "tunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "tvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "units": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "xlabel1": { - "priority": 1, - "textorientation": "center10", - "texttable": "font3", - "y": 0.06 - }, - "xlabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "y": 0.0181 - }, - "xmintic1": { - "line": "std", - "priority": 0, - "y1": 0.0685, - "y2": 0.0658 - }, - "xmintic2": { - "line": "std", - "priority": 0, - "y1": 0.2935, - "y2": 0.2962 - }, - "xname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "xtic1": { - "line": "std", - "priority": 1, - "y1": 0.0622, - "y2": 0.0682 - }, - "xtic2": { - "line": "std", - "priority": 1, - "y1": 0.2935, - "y2": 0.2998 - }, - "xunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "xvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "ylabel1": { - "priority": 1, - "textorientation": "right10", - "texttable": "font3", - "x": 0.068 - }, - "ylabel2": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03 - }, - "ymintic1": { - "line": "std", - "priority": 0, - "x1": 0.0705, - "x2": 0.075 - }, - "ymintic2": { - "line": "std", - "priority": 0, - "x1": 0.525, - "x2": 0.5295 - }, - "yname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "ytic1": { - "line": "std", - "priority": 1, - "x1": 0.0705, - "x2": 0.075 - }, - "ytic2": { - "line": "std", - "priority": 1, - "x1": 0.525, - "x2": 0.5295 - }, - "yunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "yvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "zname": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "zunits": { - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - }, - "zvalue": { - "format": "default", - "priority": 0, - "textorientation": "default", - "texttable": "default", - "x": 0.03, - "y": 0.0125 - } - }, "bold_mid_of3": { "box1": { "line": "std", diff --git a/testing/cdms2/test_mpi_write_2.py b/testing/cdms2/test_mpi_write_2.py index fe83ed3a34..0ecb0ddfe8 100644 --- a/testing/cdms2/test_mpi_write_2.py +++ b/testing/cdms2/test_mpi_write_2.py @@ -1,11 +1,6 @@ import cdms2 import numpy -import mpi4py import time -import pdb - -sz = mpi4py.MPI.COMM_WORLD.Get_size() -rk = mpi4py.MPI.COMM_WORLD.Get_rank() # All flags are set to OFF for parallel writing # ---------------------------------------------- @@ -14,6 +9,9 @@ cdms2.setNetcdfShuffleFlag(0) cdms2.setNetcdfDeflateFlag(0) cdms2.setNetcdfDeflateLevelFlag(0) +cdms2.setNetcdfUseParallelFlag(1) +sz = cdms2.getMpiSize() +rk = cdms2.getMpiRank() # Create a 2D array # ----------------- @@ -34,8 +32,9 @@ # ------------------------------ var=[] for i in range(sz): - a.id = "test_mpi_"+str(i) - print a.id + a.id = "var_test_mpi_"+str(i) + if rk == 0: + print a.id Field=cdms2.MV2.array(a) var.append(f.createVariableCopy(Field,axes=grid.getAxisList(), grid=grid)) diff --git a/testing/checkimage.py b/testing/checkimage.py index d446e6f546..5bdeba4c09 100644 --- a/testing/checkimage.py +++ b/testing/checkimage.py @@ -51,7 +51,7 @@ def find_alternates(fname): return results def check_result_image(fname, baselinefname, threshold = defaultThreshold, - baseline = False, cleanup=True): + baseline = True, cleanup=True): testImage = image_from_file(fname) if testImage is None: print "Testing image missing, test failed." diff --git a/testing/vcs/CMakeLists.txt b/testing/vcs/CMakeLists.txt index 7d11fed5a7..e26b339e78 100644 --- a/testing/vcs/CMakeLists.txt +++ b/testing/vcs/CMakeLists.txt @@ -11,6 +11,11 @@ cdat_add_test(vcs_verify_import "${PYTHON_EXECUTABLE}" ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_import.py ) +cdat_add_test(vcs_fillarea_transparency + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_fillarea_transparency.py + "${BASELINE_DIR}/test_vcs_fillarea_transparency.png" +) cdat_add_test(vcs_test_bad_png_path "${PYTHON_EXECUTABLE}" ${cdat_SOURCE_DIR}/testing/vcs/test_bad_png_path.py @@ -23,6 +28,15 @@ cdat_add_test(vcs_test_png_set_size "${PYTHON_EXECUTABLE}" ${cdat_SOURCE_DIR}/testing/vcs/test_png_set_size.py ) +cdat_add_test(vcs_meshfill_missing_vertice + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_meshfill_vertices_issue.py + "${BASELINE_DIR}/test_vcs_meshfill_vertices_issue.png" +) +cdat_add_test(vcs_test_png_metadata + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_png_metadata.py +) cdat_add_test(vcs_test_text_object_as_input.py "${PYTHON_EXECUTABLE}" ${cdat_SOURCE_DIR}/testing/vcs/test_text_object_as_input.py @@ -149,7 +163,7 @@ cdat_add_test(vcs_test_background_mode_rotate ${cdat_SOURCE_DIR}/testing/vcs/test_background_mode_rotate.py ) -# Some vector plot testing +# Some vector plot tests FOREACH(angle -180 -135 -90 -45 0 45 135 90 135 ) cdat_add_test(vcs_test_vectors_angle_${angle} "${PYTHON_EXECUTABLE}" @@ -185,6 +199,11 @@ cdat_add_test(vcs_test_remove_marker_none_1d ${cdat_SOURCE_DIR}/testing/vcs/test_remove_marker_none_1d.py "${BASELINE_DIR}/test_remove_marker_none_1d.png" ) +cdat_add_test(vcs_test_png_window_resize + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_png_window_resize.py + "${BASELINE_DIR}/test_vcs_png_window_resize.png" + ) cdat_add_test(vcs_test_draw_logo_on "${PYTHON_EXECUTABLE}" ${cdat_SOURCE_DIR}/testing/vcs/test_draw_logo_on.py @@ -206,538 +225,631 @@ cdat_add_test(vcs_test_taylor_2_quads ${BASELINE_DIR}/test_vcs_taylor_2quads.png ) -#These test actually plot things need sample data - cdat_add_test(vcs_test_gen_meshfill +############################################################################## +# +# These tests perform plotting but do not need sample data +# +############################################################################## +cdat_add_test(vcs_test_gen_meshfill + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_gen_meshfill.py + "${BASELINE_DIR}/test_vcs_gen_meshfill.png" + ) +cdat_add_test(vcs_setcolormap + "${PYTHON_EXECUTABLE}" + "${cdat_SOURCE_DIR}/testing/vcs/test_vcs_setcolormap.py" + "${BASELINE_DIR}/test_vcs_setcolormap.png" + ) +cdat_add_test(vcs_test_1d_in_boxfill + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_1d_in_boxfill.py + "${BASELINE_DIR}/test_1d_in_boxfill.png" + ) +cdat_add_test(vcs_test_1d_missing + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_1D_missing.py + "${BASELINE_DIR}/test_vcs_1d_missing.png" + ) +cdat_add_test(vcs_test_infinity + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_infinity.py + "${BASELINE_DIR}/infinity.png" + ) +cdat_add_test(test_vcs_1D_datawc + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_1D_datawc.py + "${BASELINE_DIR}/test_vcs_1D_datawc.png" + ) +cdat_add_test(test_vcs_1D_datawc_missing + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_1D_datawc_missing.py + "${BASELINE_DIR}/test_vcs_1D_datawc_missing.png" + ) +cdat_add_test(vcs_test_wmo_marker + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_wmo_w07_marker.py + "${BASELINE_DIR}/wmo_marker.png" + ) +cdat_add_test(vcs_test_wmo_markers + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_wmo_markers.py + "${BASELINE_DIR}/wmo_markers.png" + ) +cdat_add_test(vcs_test_iso_celine_part1 + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_celine_iso_bug.py + "${BASELINE_DIR}/test_celine_iso.png" + ) +cdat_add_test(vcs_test_iso_celine_part2 + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_celine_iso_bug_part2.py + "${BASELINE_DIR}/test_celine_iso_2.png" + ) +cdat_add_test(vcs_test_markers + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_markers.py + "${BASELINE_DIR}/test_markers.png" + ) +cdat_add_test(vcs_test_star_triangle_markers + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_star_triangle_markers.py + "${BASELINE_DIR}/test_star_triangle_markers.png" + ) +cdat_add_test(vcs_test_canvas_background + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_canvas_background.py + "${BASELINE_DIR}/test_canvas_background.png" + ) +cdat_add_test(vcs_test_canvas_background_update + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_canvas_background_update.py + "${BASELINE_DIR}/test_canvas_background_update.png" + ) +cdat_add_test(vcs_test_boxfill_decreasing_latitude + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_decreasing_latitude.py + "${BASELINE_DIR}/test_vcs_boxfill_decreasing_latitude.png" + "${UVCDAT_GIT_TESTDATA_DIR}/data/decreasing_latitude.nc" + ) +cdat_add_test(vcs_test_boxfill_10x10_numpy + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_10x10_numpy.py + "${BASELINE_DIR}/test_vcs_boxfill_10x10_numpy.png" + ) +cdat_add_test(vcs_test_boxfill_10x10_masked_numpy + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_10x10_masked_numpy.py + "${BASELINE_DIR}/test_vcs_boxfill_10x10_masked_numpy.png" + ) +cdat_add_test(vcs_test_1D_with_manyDs + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_1D_with_manyDs.py + "${BASELINE_DIR}/test_1D_with_manyDs.png" + ) +cdat_add_test(vcs_test_1d_marker_not_shown_if_xaxis_flipped + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_1d_marker_not_shown_if_xaxis_flipped.py + "${BASELINE_DIR}/test_1d_marker_not_shown_if_xaxis_flipped.png" + ) +cdat_add_test(vcs_test_png_to_base64 + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_to_base64.py + ) +############################################################################## +# +# These tests perform plotting and need sample data +# +############################################################################## +if (CDAT_DOWNLOAD_SAMPLE_DATA) + FOREACH(gm boxfill isofill meshfill isoline vector) + FOREACH(src vcs canvas gm) + cdat_add_test(test_vcs_colormaps_source_${gm}_${src} + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_colormaps_source.py + -b ${BASELINE_DIR}/test_vcs_colormaps_source_${gm}_${src}.png + -g ${gm} + -s ${src} + ) + ENDFOREACH() + ENDFOREACH() + + cdat_add_test(test_vcs_meshfill_regular_grid + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_meshfill_regular_grid.py + "${BASELINE_DIR}/test_meshfill_regular_grid.png" + ) + cdat_add_test(test_vcs_plot_unstructured_via_boxfill + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_plot_unstructured_via_boxfill.py + "${BASELINE_DIR}/test_plot_unstructured_via_boxfill.png" + ) + cdat_add_test(test_vcs_box_custom_as_def_vistrails_exts "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_gen_meshfill.py - "${BASELINE_DIR}/test_vcs_gen_meshfill.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_box_custom_as_def_vistrails_exts.py + "${BASELINE_DIR}/test_box_custom_as_def_vistrails_exts.png" ) - cdat_add_test(vcs_setcolormap + cdat_add_test(test_vcs_boxfill_custom "${PYTHON_EXECUTABLE}" - "${cdat_SOURCE_DIR}/testing/vcs/test_vcs_setcolormap.py" - "${BASELINE_DIR}/test_vcs_setcolormap.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_custom.py + "${BASELINE_DIR}/test_boxfill_custom.png" ) - cdat_add_test(vcs_test_1d_in_boxfill + cdat_add_test(test_vcs_boxfill_custom_non_default_levels "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_1d_in_boxfill.py - "${BASELINE_DIR}/test_1d_in_boxfill.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_custom_non_default_levels.py + "${BASELINE_DIR}/test_boxfill_custom_no_default_levels.png" ) - cdat_add_test(vcs_test_1d_missing + cdat_add_test(test_vcs_boxfill_custom_ext1 "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_1D_missing.py - "${BASELINE_DIR}/test_vcs_1d_missing.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_custom_ext1.py + "${BASELINE_DIR}/test_boxfill_custom_ext1.png" ) - cdat_add_test(vcs_test_infinity + cdat_add_test(test_vcs_boxfill_custom_ext2 "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_infinity.py - "${BASELINE_DIR}/infinity.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_custom_ext2.py + "${BASELINE_DIR}/test_boxfill_custom_ext2.png" ) - cdat_add_test(test_vcs_1D_datawc + cdat_add_test(test_vcs_boxfill_custom_ext1_ext2 "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_1D_datawc.py - "${BASELINE_DIR}/test_vcs_1D_datawc.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_custom_ext1_ext2.py + "${BASELINE_DIR}/test_boxfill_custom_ext1_ext2.png" ) - cdat_add_test(test_vcs_1D_datawc_missing + cdat_add_test(test_vcs_boxfill_number_color_less_than_number_levels "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_1D_datawc_missing.py - "${BASELINE_DIR}/test_vcs_1D_datawc_missing.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_number_color_less_than_number_levels.py ) - cdat_add_test(vcs_test_wmo_marker + cdat_add_test(test_vcs_boxfill_number_color_more_than_number_levels "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_wmo_w07_marker.py - "${BASELINE_DIR}/wmo_marker.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_number_color_more_than_number_levels.py ) - cdat_add_test(vcs_test_wmo_markers + cdat_add_test(test_vcs_user_passed_date "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_wmo_markers.py - "${BASELINE_DIR}/wmo_markers.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_user_passed_date.py + "${BASELINE_DIR}/test_vcs_user_passed_date.png" ) - cdat_add_test(vcs_test_iso_celine_part1 + cdat_add_test(test_vcs_user_passed_date_as_string "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_celine_iso_bug.py - "${BASELINE_DIR}/test_celine_iso.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_user_passed_date_as_string.py + "${BASELINE_DIR}/test_vcs_user_passed_date_as_string.png" ) - cdat_add_test(vcs_test_iso_celine_part2 + cdat_add_test(test_vcs_auto_time_labels "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_celine_iso_bug_part2.py - "${BASELINE_DIR}/test_celine_iso_2.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_auto_time_labels.py + "${BASELINE_DIR}/test_vcs_auto_time_labels.png" ) - cdat_add_test(vcs_test_markers + cdat_add_test(test_vcs_isofill_data_read_north_to_south "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_markers.py - "${BASELINE_DIR}/test_markers.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_isofill_data_read_north_to_south.py + "${BASELINE_DIR}/test_vcs_isofill_data_read_north_to_south.png" ) - cdat_add_test(vcs_test_star_triangle_markers + cdat_add_test(test_vcs_lon_axes_freak_out "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_star_triangle_markers.py - "${BASELINE_DIR}/test_star_triangle_markers.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_lon_axes_freak_out.py + "${BASELINE_DIR}/test_lon_axes_freak_out.png" ) - cdat_add_test(vcs_test_canvas_background +cdat_add_test(test_vcs_set_colors_name_rgba_1d "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_canvas_background.py - "${BASELINE_DIR}/test_canvas_background.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_settings_color_name_rgba_1d.py + "${BASELINE_DIR}/test_vcs_settings_color_name_rgba_1d.png" ) - cdat_add_test(vcs_test_canvas_background_update +cdat_add_test(test_vcs_set_colors_name_rgba_isoline "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_canvas_background_update.py - "${BASELINE_DIR}/test_canvas_background_update.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_settings_color_name_rgba_isoline.py + "${BASELINE_DIR}/test_vcs_settings_color_name_rgba_isoline.png" ) - cdat_add_test(vcs_test_boxfill_10x10_numpy +cdat_add_test(test_vcs_set_colors_name_rgba_meshfill "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_10x10_numpy.py - "${BASELINE_DIR}/test_vcs_boxfill_10x10_numpy.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_settings_color_name_rgba_meshfill.py + "${BASELINE_DIR}/test_vcs_settings_color_name_rgba_meshfill.png" ) - cdat_add_test(vcs_test_boxfill_10x10_masked_numpy +cdat_add_test(test_vcs_set_colors_name_rgba_boxfill "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_10x10_masked_numpy.py - "${BASELINE_DIR}/test_vcs_boxfill_10x10_masked_numpy.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_settings_color_name_rgba_boxfill.py + "${BASELINE_DIR}/test_vcs_settings_color_name_rgba_boxfill.png" ) - cdat_add_test(vcs_test_1D_with_manyDs +cdat_add_test(test_vcs_set_colors_name_rgba_isofill "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_1D_with_manyDs.py - "${BASELINE_DIR}/test_1D_with_manyDs.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_settings_color_name_rgba.py + "${BASELINE_DIR}/test_vcs_settings_color_name_rgba_isofill.png" ) - cdat_add_test(vcs_test_1d_marker_not_shown_if_xaxis_flipped + cdat_add_test(test_vcs_isofill_mask_cell_shift "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_1d_marker_not_shown_if_xaxis_flipped.py - "${BASELINE_DIR}/test_1d_marker_not_shown_if_xaxis_flipped.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_isofill_mask_cell_shift.py + "${BASELINE_DIR}/test_vcs_isofill_mask_cell_shift.png" ) + cdat_add_test(vcs_test_bad_time_units + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_bad_time_units.py + ) + cdat_add_test(vcs_test_plot_file_varible + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_plot_file_var.py + ) + FOREACH(gm boxfill isofill meshfill) + FOREACH(ori horizontal vertical) + FOREACH(ext1 y n) + FOREACH(ext2 y n) + cdat_add_test(vcs_test_legend_${gm}_${ori}_ext1_${ext1}_ext2_${ext2} + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_legend.py + --gm_type=${gm} + --orientation=${ori} + --ext1=${ext1} + --ext2=${ext2} + "--source=${BASELINE_DIR}/test_vcs_legend_${gm}_${ori}_ext1_${ext1}_ext2_${ext2}.png" + ) + ENDFOREACH(ext2) + ENDFOREACH(ext1) + ENDFOREACH(ori) + ENDFOREACH(gm) + FOREACH(gm boxfill isofill isoline vector meshfill yxvsx xvsy xyvsy 1d scatter) + cdat_add_test(vcs_test_basic_${gm}_transparent + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py + --gm_type=${gm} + --transparent + "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_transparent.png" + ) + cdat_add_test(vcs_test_basic_${gm}_zero + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py + --gm_type=${gm} + --zero + "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_zero.png" + ) + cdat_add_test(vcs_test_basic_${gm} + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py + --gm_type=${gm} + "--source=${BASELINE_DIR}/test_vcs_basic_${gm}.png" + ) + cdat_add_test(vcs_test_basic_${gm}_masked + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py + --gm_type=${gm} + --mask + "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_masked.png" + ) + ENDFOREACH(gm) + cdat_add_test(vcs_test_show + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_show.py + ) + FOREACH(gm boxfill isofill isoline meshfill ) + FOREACH(ptype 0 -3 aeqd) + cdat_add_test(vcs_test_basic_${gm}_masked_${ptype}_proj + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py + --gm_type=${gm} + --mask + --projection=${ptype} + "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_masked_${ptype}_proj.png" + ) + cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_SH + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py + --gm_type=${gm} + --projection=${ptype} + --lat1=-90 + --lat2=0 + "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_SH.png" + ) + cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_SH_-180_180 + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py + --gm_type=${gm} + --projection=${ptype} + --lat1=-90 + --lat2=0 + --lon1=-180 + --lon2=180 + "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_SH_-180_180.png" + ) + cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_SH_0_360 + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py + --gm_type=${gm} + --projection=${ptype} + --lat1=-90 + --lat2=0 + --lon1=0 + --lon2=360 + "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_SH_0_360.png" + ) + cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_NH + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py + --gm_type=${gm} + --projection=${ptype} + --lat1=90 + --lat2=0 + "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_NH.png" + ) + cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_SH_gm + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py + --gm_type=${gm} + --projection=${ptype} + --lat1=-90 + --lat2=0 + --range_via_gm + "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_SH_via_gm.png" + ) + cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_SH_-180_180_gm + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py + --gm_type=${gm} + --projection=${ptype} + --lat1=-90 + --lat2=0 + --lon1=-180 + --lon2=180 + --range_via_gm + "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_SH_-180_180_via_gm.png" + ) + cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_SH_0_360_gm + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py + --gm_type=${gm} + --projection=${ptype} + --lat1=-90 + --lat2=0 + --lon1=0 + --lon2=360 + --range_via_gm + "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_SH_0_360_via_gm.png" + ) + cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_NH_gm + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py + --gm_type=${gm} + --projection=${ptype} + --lat1=90 + --lat2=0 + --range_via_gm + "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_NH_via_gm.png" + ) + cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_NH_gm_flip + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py + --gm_type=${gm} + --projection=${ptype} + --lat1=90 + --lat2=0 + --range_via_gm + --gm_flips_lat_range + "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_gmflip_NH_via_gm.png" + ) + ENDFOREACH(ptype) + ENDFOREACH(gm) - - # These test actually plot things need sample data - if (CDAT_DOWNLOAD_SAMPLE_DATA) - FOREACH(gm boxfill isofill meshfill isoline vector) - FOREACH(src vcs canvas gm) - cdat_add_test(test_vcs_colormaps_source_${gm}_${src} - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_colormaps_source.py - -b ${BASELINE_DIR}/test_vcs_colormaps_source_${gm}_${src}.png - -g ${gm} - -s ${src} - ) - ENDFOREACH() - ENDFOREACH() - - cdat_add_test(test_vcs_meshfill_regular_grid - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_meshfill_regular_grid.py - "${BASELINE_DIR}/test_meshfill_regular_grid.png" + cdat_add_test(vcs_test_isoline_numpy + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_isoline_numpy.py + ${BASELINE_DIR}/test_vcs_isoline_numpy.png ) - cdat_add_test(test_vcs_plot_unstructured_via_boxfill - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_plot_unstructured_via_boxfill.py - "${BASELINE_DIR}/test_plot_unstructured_via_boxfill.png" + cdat_add_test(vcs_test_meshfill_draw_mesh + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_meshfill_draw_mesh.py + ${BASELINE_DIR}/test_meshfill_draw_mesh.png ) - cdat_add_test(test_vcs_box_custom_as_def_vistrails_exts - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_box_custom_as_def_vistrails_exts.py - "${BASELINE_DIR}/test_box_custom_as_def_vistrails_exts.png" - ) - cdat_add_test(test_vcs_boxfill_custom - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_custom.py - "${BASELINE_DIR}/test_boxfill_custom.png" - ) - cdat_add_test(test_vcs_boxfill_custom_non_default_levels - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_custom_non_default_levels.py - "${BASELINE_DIR}/test_boxfill_custom_no_default_levels.png" - ) - cdat_add_test(test_vcs_boxfill_custom_ext1 - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_custom_ext1.py - "${BASELINE_DIR}/test_boxfill_custom_ext1.png" - ) - cdat_add_test(test_vcs_boxfill_custom_ext2 - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_custom_ext2.py - "${BASELINE_DIR}/test_boxfill_custom_ext2.png" - ) - cdat_add_test(test_vcs_boxfill_custom_ext1_ext2 - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_custom_ext1_ext2.py - "${BASELINE_DIR}/test_boxfill_custom_ext1_ext2.png" - ) - cdat_add_test(test_vcs_boxfill_number_color_less_than_number_levels - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_number_color_less_than_number_levels.py - ) - cdat_add_test(test_vcs_boxfill_number_color_more_than_number_levels + # @dlonie is looking into why RH6 fails for these + if (NOT EXISTS /etc/redhat-release) + cdat_add_test(vcs_test_isoline_labels_multi_label_input_types "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_number_color_more_than_number_levels.py + "${cdat_SOURCE_DIR}/testing/vcs/test_vcs_isoline_labels_multi_label_input_types.py" + "${BASELINE_DIR}/test_vcs_isoline_labels_multi_label_input_types.png" ) - cdat_add_test(test_vcs_user_passed_date + cdat_add_test(vcs_test_isoline_labels "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_user_passed_date.py - "${BASELINE_DIR}/test_vcs_user_passed_date.png" + "${cdat_SOURCE_DIR}/testing/vcs/test_isoline_labels.py" + "${BASELINE_DIR}/test_isoline_labels.png" ) - cdat_add_test(test_vcs_user_passed_date_as_string + cdat_add_test(vcs_test_isoline_labelskipdistance "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_user_passed_date_as_string.py - "${BASELINE_DIR}/test_vcs_user_passed_date_as_string.png" + "${cdat_SOURCE_DIR}/testing/vcs/test_isoline_labelskipdistance.py" + "${BASELINE_DIR}/test_isoline_labelskipdistance.png" ) - cdat_add_test(test_vcs_auto_time_labels + cdat_add_test(vcs_test_isofill_isoline_labels "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_auto_time_labels.py - "${BASELINE_DIR}/test_vcs_auto_time_labels.png" + "${cdat_SOURCE_DIR}/testing/vcs/test_isofill_isoline_labels.py" + "${BASELINE_DIR}/test_isofill_isoline_labels.png" ) - cdat_add_test(test_vcs_isofill_data_read_north_to_south + cdat_add_test(vcs_test_isoline_width_stipple "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_isofill_data_read_north_to_south.py - "${BASELINE_DIR}/test_vcs_isofill_data_read_north_to_south.png" + "${cdat_SOURCE_DIR}/testing/vcs/test_isoline_width_stipple.py" + "${BASELINE_DIR}/test_isoline_width_stipple.png" ) - cdat_add_test(test_vcs_lon_axes_freak_out + cdat_add_test(vcs_test_isoline_labels_background "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_lon_axes_freak_out.py - "${BASELINE_DIR}/test_lon_axes_freak_out.png" + "${cdat_SOURCE_DIR}/testing/vcs/test_isoline_labels_background.py" + "${BASELINE_DIR}/test_isoline_labels_background.png" ) - cdat_add_test(test_vcs_isofill_mask_cell_shift - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_isofill_mask_cell_shift.py - "${BASELINE_DIR}/test_vcs_isofill_mask_cell_shift.png" - ) - cdat_add_test(vcs_test_bad_time_units - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_bad_time_units.py - ) - cdat_add_test(vcs_test_plot_file_varible - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_plot_file_var.py - ) - FOREACH(gm boxfill isofill meshfill) - FOREACH(ori horizontal vertical) - FOREACH(ext1 y n) - FOREACH(ext2 y n) - cdat_add_test(vcs_test_legend_${gm}_${ori}_ext1_${ext1}_ext2_${ext2} - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_legend.py - --gm_type=${gm} - --orientation=${ori} - --ext1=${ext1} - --ext2=${ext2} - "--source=${BASELINE_DIR}/test_vcs_legend_${gm}_${ori}_ext1_${ext1}_ext2_${ext2}.png" - ) - ENDFOREACH(ext2) - ENDFOREACH(ext1) - ENDFOREACH(ori) - ENDFOREACH(gm) - FOREACH(gm boxfill isofill isoline vector meshfill yxvsx xvsy xyvsy 1d scatter) - cdat_add_test(vcs_test_basic_${gm}_zero - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py - --gm_type=${gm} - --zero - "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_zero.png" - ) - cdat_add_test(vcs_test_basic_${gm} - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py - --gm_type=${gm} - "--source=${BASELINE_DIR}/test_vcs_basic_${gm}.png" - ) - cdat_add_test(vcs_test_basic_${gm}_masked - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py - --gm_type=${gm} - --mask - "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_masked.png" - ) - ENDFOREACH(gm) - cdat_add_test(vcs_test_show - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_show.py - ) - FOREACH(gm boxfill isofill isoline meshfill ) - FOREACH(ptype 0 -3 aeqd) - cdat_add_test(vcs_test_basic_${gm}_masked_${ptype}_proj - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py - --gm_type=${gm} - --mask - --projection=${ptype} - "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_masked_${ptype}_proj.png" - ) - cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_SH - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py - --gm_type=${gm} - --projection=${ptype} - --lat1=-90 - --lat2=0 - "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_SH.png" - ) - cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_SH_-180_180 - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py - --gm_type=${gm} - --projection=${ptype} - --lat1=-90 - --lat2=0 - --lon1=-180 - --lon2=180 - "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_SH_-180_180.png" - ) - cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_SH_0_360 - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py - --gm_type=${gm} - --projection=${ptype} - --lat1=-90 - --lat2=0 - --lon1=0 - --lon2=360 - "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_SH_0_360.png" - ) - cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_NH - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py - --gm_type=${gm} - --projection=${ptype} - --lat1=90 - --lat2=0 - "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_NH.png" - ) - cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_SH_gm + endif() + cdat_add_test(vcs_test_oned_level_axis + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_oned_level_axis.py + "${BASELINE_DIR}/test_oned_level_axis.png" + ) + cdat_add_test(vcs_test_first_png_blank + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_first_png_blank.py + "${BASELINE_DIR}/first_png_blank.png" + ) + # cdat_add_test(vcs_test_aspect_ratio + # "${PYTHON_EXECUTABLE}" + # ${cdat_SOURCE_DIR}/testing/vcs/test_aspect_ratio.py + # ${cdat_SOURCE_DIR}/testing/vcs/test_aspect_ratio.py + # ) + cdat_add_test(vcs_test_polar_set_opt_param_polar + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_polar_set_opt_param_polar.py + "${BASELINE_DIR}/test_polar_set_opt_param_polar.png" + ) + cdat_add_test(vcs_test_boxfill_lev1_lev2 + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_lev1_lev2.py + "${BASELINE_DIR}/test_boxfill_lev1_lev2.png" + ) + cdat_add_test(vcs_test_boxfill_lev1_lev2_ext1 + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_lev1_lev2_ext1.py + "${BASELINE_DIR}/test_boxfill_lev1_lev2_ext1.png" + ) + cdat_add_test(vcs_test_boxfill_lev1_lev2_ext2 + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_lev1_lev2_ext2.py + "${BASELINE_DIR}/test_boxfill_lev1_lev2_ext2.png" + ) + cdat_add_test(vcs_test_boxfill_lev1_lev2_ext1_ext2 + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_lev1_lev2_ext1_ext2.py + "${BASELINE_DIR}/test_boxfill_lev1_lev2_ext1_ext2.png" + ) + + cdat_add_test(vcs_test_hatches_patterns + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_hatches_patterns.py + "${BASELINE_DIR}/test_vcs_hatches_patterns.png" + ) + FOREACH(gm isofill boxfill meshfill) + FOREACH(style solid pattern hatch) + cdat_add_test(vcs_test_${gm}_${style}_fill_non-contig "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py + "${cdat_SOURCE_DIR}/testing/vcs/test_vcs_gms_patterns_hatches.py" --gm_type=${gm} - --projection=${ptype} - --lat1=-90 - --lat2=0 - --range_via_gm - "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_SH_via_gm.png" + --fill_style=${style} + --non-contiguous + "--source=${BASELINE_DIR}/test_vcs_${gm}_${style}_SH_-180_180_non-contig.png" + "--threshold=45" ) - cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_SH_-180_180_gm + cdat_add_test(vcs_test_${gm}_${style}_fill "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py + "${cdat_SOURCE_DIR}/testing/vcs/test_vcs_gms_patterns_hatches.py" --gm_type=${gm} - --projection=${ptype} - --lat1=-90 - --lat2=0 - --lon1=-180 - --lon2=180 - --range_via_gm - "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_SH_-180_180_via_gm.png" + --fill_style=${style} + "--source=${BASELINE_DIR}/test_vcs_${gm}_${style}_SH_-180_180.png" + "--threshold=45" ) - cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_SH_0_360_gm + cdat_add_test(vcs_test_${gm}_${style}_fill_0_360 "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py + "${cdat_SOURCE_DIR}/testing/vcs/test_vcs_gms_patterns_hatches.py" --gm_type=${gm} - --projection=${ptype} - --lat1=-90 - --lat2=0 + --fill_style=${style} --lon1=0 --lon2=360 - --range_via_gm - "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_SH_0_360_via_gm.png" - ) - cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_NH_gm - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py - --gm_type=${gm} - --projection=${ptype} - --lat1=90 - --lat2=0 - --range_via_gm - "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_NH_via_gm.png" - ) - cdat_add_test(vcs_test_basic_${gm}_${ptype}_proj_NH_gm_flip - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py - --gm_type=${gm} - --projection=${ptype} - --lat1=90 - --lat2=0 - --range_via_gm - --gm_flips_lat_range - "--source=${BASELINE_DIR}/test_vcs_basic_${gm}_${ptype}_proj_gmflip_NH_via_gm.png" + "--source=${BASELINE_DIR}/test_vcs_${gm}_${style}_SH_0_360.png" + "--threshold=45" ) - ENDFOREACH(ptype) - ENDFOREACH(gm) + ENDFOREACH(style) + ENDFOREACH(gm) - cdat_add_test(vcs_test_isoline_numpy - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_isoline_numpy.py - ${BASELINE_DIR}/test_vcs_isoline_numpy.png - ) - cdat_add_test(vcs_test_meshfill_draw_mesh - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_meshfill_draw_mesh.py - ${BASELINE_DIR}/test_meshfill_draw_mesh.png - ) - # @dlonie is looking into why RH6 fails for these - if (NOT EXISTS /etc/redhat-release) - cdat_add_test(vcs_test_isoline_labels_multi_label_input_types - "${PYTHON_EXECUTABLE}" - "${cdat_SOURCE_DIR}/testing/vcs/test_vcs_isoline_labels_multi_label_input_types.py" - "${BASELINE_DIR}/test_vcs_isoline_labels_multi_label_input_types.png" - ) - cdat_add_test(vcs_test_isoline_labels - "${PYTHON_EXECUTABLE}" - "${cdat_SOURCE_DIR}/testing/vcs/test_isoline_labels.py" - "${BASELINE_DIR}/test_isoline_labels.png" - ) - cdat_add_test(vcs_test_isoline_labelskipdistance - "${PYTHON_EXECUTABLE}" - "${cdat_SOURCE_DIR}/testing/vcs/test_isoline_labelskipdistance.py" - "${BASELINE_DIR}/test_isoline_labelskipdistance.png" - ) - cdat_add_test(vcs_test_isofill_isoline_labels - "${PYTHON_EXECUTABLE}" - "${cdat_SOURCE_DIR}/testing/vcs/test_isofill_isoline_labels.py" - "${BASELINE_DIR}/test_isofill_isoline_labels.png" - ) - cdat_add_test(vcs_test_isoline_labels_background + FOREACH(gm isofill meshfill boxfill) + FOREACH(proj robinson) + cdat_add_test(vcs_test_animate_projected_${gm}_${proj} "${PYTHON_EXECUTABLE}" - "${cdat_SOURCE_DIR}/testing/vcs/test_isoline_labels_background.py" - "${BASELINE_DIR}/test_isoline_labels_background.png" + "${cdat_SOURCE_DIR}/testing/vcs/test_vcs_gms_animate_projected_plots.py" + --gm_type=${gm} + --projection_type=${proj} + --source=${BASELINE_DIR}/test_vcs_animate_projected_${gm}_${proj}.png + --threshold=40 ) - endif() - cdat_add_test(vcs_test_oned_level_axis - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_oned_level_axis.py - "${BASELINE_DIR}/test_oned_level_axis.png" - ) - cdat_add_test(vcs_test_first_png_blank - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_first_png_blank.py - "${BASELINE_DIR}/first_png_blank.png" - ) - # cdat_add_test(vcs_test_aspect_ratio - # "${PYTHON_EXECUTABLE}" - # ${cdat_SOURCE_DIR}/testing/vcs/test_aspect_ratio.py - # ${cdat_SOURCE_DIR}/testing/vcs/test_aspect_ratio.py - # ) - cdat_add_test(vcs_test_polar_set_opt_param_polar - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_polar_set_opt_param_polar.py - "${BASELINE_DIR}/test_polar_set_opt_param_polar.png" - ) - cdat_add_test(vcs_test_boxfill_lev1_lev2 - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_lev1_lev2.py - "${BASELINE_DIR}/test_boxfill_lev1_lev2.png" - ) - cdat_add_test(vcs_test_boxfill_lev1_lev2_ext1 - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_lev1_lev2_ext1.py - "${BASELINE_DIR}/test_boxfill_lev1_lev2_ext1.png" - ) - cdat_add_test(vcs_test_boxfill_lev1_lev2_ext2 - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_lev1_lev2_ext2.py - "${BASELINE_DIR}/test_boxfill_lev1_lev2_ext2.png" - ) - cdat_add_test(vcs_test_boxfill_lev1_lev2_ext1_ext2 - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_lev1_lev2_ext1_ext2.py - "${BASELINE_DIR}/test_boxfill_lev1_lev2_ext1_ext2.png" - ) + ENDFOREACH(proj) + ENDFOREACH(gm) - cdat_add_test(vcs_test_hatches_patterns + FOREACH(flip None X XY Y) + cdat_add_test(vcs_test_flip${flip} "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_hatches_patterns.py - "${BASELINE_DIR}/test_vcs_hatches_patterns.png" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_flip${flip}.py + "${BASELINE_DIR}/test_vcs_flip${flip}.png" ) - FOREACH(gm isofill boxfill) - FOREACH(style solid pattern hatch) - cdat_add_test(vcs_test_${gm}_${style}_fill - "${PYTHON_EXECUTABLE}" - "${cdat_SOURCE_DIR}/testing/vcs/test_vcs_gms_patterns_hatches.py" - --gm_type=${gm} - --fill_style=${style} - "--source=${BASELINE_DIR}/test_vcs_${gm}_${style}_SH_-180_180.png" - "--threshold=15" - ) - ENDFOREACH(style) - ENDFOREACH(gm) + ENDFOREACH(flip) - FOREACH(flip None X XY Y) - cdat_add_test(vcs_test_flip${flip} - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_flip${flip}.py - "${BASELINE_DIR}/test_vcs_flip${flip}.png" + if (NOT APPLE) + cdat_add_test(vcs_test_lambert + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_lambert.py + "${BASELINE_DIR}/test_vcs_lambert.png" ) - ENDFOREACH(flip) + endif() - cdat_add_test(vcs_test_boxfill_lev1_lev2_ta_missing - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_lev1_lev2_ta_missing.py - "${BASELINE_DIR}/test_boxfill_lev1_lev2_ta_missing.png" - ) + cdat_add_test(vcs_test_boxfill_lev1_lev2_ta_missing + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_boxfill_lev1_lev2_ta_missing.py + "${BASELINE_DIR}/test_boxfill_lev1_lev2_ta_missing.png" + ) - cdat_add_test(vcs_test_close - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_close.py - "${BASELINE_DIR}/test_vcs_close.png" - ) + cdat_add_test(vcs_test_close + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_close.py + "${BASELINE_DIR}/test_vcs_close.png" + ) - cdat_add_test(vcs_test_basic_isofill_bigvalues - "${PYTHON_EXECUTABLE}" - "${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py" - --gm_type=isofill - --bigvalues - "--source=${BASELINE_DIR}/test_vcs_basic_isofill_bigvalues.png" - ) - cdat_add_test(vcs_test_issue_960_labels - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_issue_960_labels.py - ${BASELINE_DIR}/test_vcs_issue_960_labels_1.png - ${BASELINE_DIR}/test_vcs_issue_960_labels_2.png - ) - cdat_add_test(vcs_test_animate_meshfill + cdat_add_test(vcs_test_basic_isofill_bigvalues + "${PYTHON_EXECUTABLE}" + "${cdat_SOURCE_DIR}/testing/vcs/test_vcs_basic_gms.py" + --gm_type=isofill + --bigvalues + "--source=${BASELINE_DIR}/test_vcs_basic_isofill_bigvalues.png" + ) + cdat_add_test(vcs_test_issue_960_labels + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_issue_960_labels.py + ${BASELINE_DIR}/test_vcs_issue_960_labels_1.png + ${BASELINE_DIR}/test_vcs_issue_960_labels_2.png + ) + cdat_add_test(vcs_test_animate_meshfill + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_animate_meshfill.py + ${BASELINE_DIR} + ) + cdat_add_test(vcs_test_animate_isofill + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_animate_isofill.py + ${BASELINE_DIR} + ) + cdat_add_test(vcs_test_animate_boxfill + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_animate_boxfill.py + ${BASELINE_DIR} + ) + cdat_add_test(vcs_test_animate_isoline + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_animate_isoline.py + ${BASELINE_DIR} + ) + cdat_add_test(vcs_test_animate_isoline_colored + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_animate_isoline_colored.py + ${BASELINE_DIR} + ) + if ( (NOT EXISTS /etc/redhat-release) AND (NOT CDAT_BUILD_OFFSCREEN)) + cdat_add_test(vcs_test_animate_isoline_text_labels "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_animate_meshfill.py + ${cdat_SOURCE_DIR}/testing/vcs/test_animate_isoline_text_labels.py ${BASELINE_DIR} ) - cdat_add_test(vcs_test_animate_isofill + cdat_add_test(vcs_test_animate_isoline_text_labels_colored "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_animate_isofill.py + ${cdat_SOURCE_DIR}/testing/vcs/test_animate_isoline_text_labels_colored.py ${BASELINE_DIR} ) - cdat_add_test(vcs_test_animate_boxfill + cdat_add_test(vcs_test_patterns "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_animate_boxfill.py - ${BASELINE_DIR} + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_patterns.py + "${BASELINE_DIR}/test_vcs_patterns.png" ) - cdat_add_test(vcs_test_animate_isoline + cdat_add_test(vcs_test_vectors_robinson "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_animate_isoline.py - ${BASELINE_DIR} + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_vectors_robinson.py + "${BASELINE_DIR}/test_vcs_vectors_robinson.png" ) - cdat_add_test(vcs_test_animate_isoline_colored + cdat_add_test(vcs_test_vectors_robinson_wrap "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_animate_isoline_colored.py - ${BASELINE_DIR} + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_vectors_robinson_wrap.py + "${BASELINE_DIR}/test_vcs_vectors_robinson_wrap.png" ) - if ( (NOT EXISTS /etc/redhat-release) AND (NOT CDAT_BUILD_OFFSCREEN)) - cdat_add_test(vcs_test_animate_isoline_text_labels - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_animate_isoline_text_labels.py - ${BASELINE_DIR} - ) - cdat_add_test(vcs_test_animate_isoline_text_labels_colored - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_animate_isoline_text_labels_colored.py - ${BASELINE_DIR} - ) - cdat_add_test(vcs_test_patterns - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_patterns.py - "${BASELINE_DIR}/test_vcs_patterns.png" - ) - cdat_add_test(vcs_test_vectors_robinson - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_vectors_robinson.py - "${BASELINE_DIR}/test_vcs_vectors_robinson.png" - ) - cdat_add_test(vcs_test_vectors_robinson_wrap - "${PYTHON_EXECUTABLE}" - ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_vectors_robinson_wrap.py - "${BASELINE_DIR}/test_vcs_vectors_robinson_wrap.png" - ) - endif() endif() +endif() cdat_add_test(vcs_test_endconfigure "${PYTHON_EXECUTABLE}" @@ -785,6 +897,35 @@ cdat_add_test(vcs_test_mercator_edge ${BASELINE_DIR}/test_vcs_mercator_edge.png ) +cdat_add_test(vcs_test_continents + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_continents.py + ${BASELINE_DIR}/test_continents.png +) + +cdat_add_test(vcs_test_large_pattern_hatch + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_large_pattern_hatch.py + ${BASELINE_DIR}/test_vcs_large_pattern_hatch.png +) + +cdat_add_test(vcs_test_matplotlib_colormap + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_matplotlib_colormap.py + ${BASELINE_DIR}/test_matplotlib_colormap.png +) + +cdat_add_test(vcs_test_init_open_sizing + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_init_open_sizing.py +) + +cdat_add_test(vcs_test_autot_axis_titles + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_autot_axis_titles.py + ${BASELINE_DIR}/test_autot_axis_titles_yname.png + ${BASELINE_DIR}/test_autot_axis_titles_xname.png +) add_subdirectory(vtk_ui) add_subdirectory(editors) diff --git a/testing/vcs/editors/test_vcs_editor_marker_delete.py b/testing/vcs/editors/test_vcs_editor_marker_delete.py index 1b59670ec2..64f384adff 100644 --- a/testing/vcs/editors/test_vcs_editor_marker_delete.py +++ b/testing/vcs/editors/test_vcs_editor_marker_delete.py @@ -1,11 +1,7 @@ import vcs import sys -x = vcs.init() -x.open() -# Needs to set the size of window so it is consistent accross -# test platforms -x.geometry(x.bgX,x.bgY) +x = vcs.init(geometry=(800,600)) m = x.createmarker() m.x = .1, @@ -14,7 +10,7 @@ # enable the configurator x.configure() -# plot in the background +# plot dp = x.plot(m) # Grab the initialized configurator @@ -23,7 +19,7 @@ # Make sure the displays are current c.update() -w, h = x.bgX, x.bgY +w, h = 800, 606 # Retrieve the actor at the specified point c.interactor.SetEventInformation(int(.1 * w), int(.1 * h)) @@ -33,26 +29,26 @@ # Make sure we've got the correct editor editor = c.target if editor is None: - print "Did not activate an editor" + print "Could not find an editable object at", int(.1 * w), ",", int(.1 * h) sys.exit(1) -print "Editor activated" +print "Found an editable object" if type(editor) != vcs.editors.marker.MarkerEditor: - print "Did not activate a marker editor" + print "Object found is not a marker" sys.exit(1) -print "Editor is a marker editor" +print "Found a marker object" if editor.marker != m: - print "Did not activate the correct marker editor, expected", m.name, "received", editor.marker.name + print "Did not find the correct marker, expected", m.name, "received", editor.marker.name sys.exit(1) -print "Marker editor is editing the correct marker" +print "Found the correct marker" # Simulate a right click on the marker editor.right_release() # Make sure the editor has been deactivated if c.target == editor: - print "Did not deactivate editor" + print "Did not end edit of object" sys.exit(1) -print "Marker editor deactivated" +print "Marker no longer being edited" # Make sure the marker was deleted if len(m.x) != len(m.y) != len(m.type) != len(m.color) != 0: print "Did not delete all attributes on marker" diff --git a/testing/vcs/test_animate_meshfill.py b/testing/vcs/test_animate_meshfill.py index a13ed35806..78d6b15516 100644 --- a/testing/vcs/test_animate_meshfill.py +++ b/testing/vcs/test_animate_meshfill.py @@ -29,7 +29,7 @@ x.setbgoutputdimensions(1200,1091,units="pixels") gm=x.createmeshfill() -x.plot(s2,gm,bg=1) +x.plot(s2, gm, bg=1) x.animate.create() prefix= os.path.split(__file__)[1][:-3] x.animate.save("%s.mp4"%prefix) diff --git a/testing/vcs/test_autot_axis_titles.py b/testing/vcs/test_autot_axis_titles.py new file mode 100644 index 0000000000..f65e09eb43 --- /dev/null +++ b/testing/vcs/test_autot_axis_titles.py @@ -0,0 +1,43 @@ +import vcs +import cdms2 +import os +import sys + +src_yname = sys.argv[1] +src_xname = sys.argv[2] +pth = os.path.join(os.path.dirname(__file__), "..") +sys.path.append(pth) + +import checkimage + +f = cdms2.open(vcs.sample_data + "/clt.nc") +s = f("clt") +x = vcs.init() +x.setantialiasing(0) +x.drawlogooff() +x.plot(s, bg=1, ratio="autot") +yname = "test_autot_axis_titles_yname.png" +x.png(yname) + +# Work around background resize VTK bug +x.close() +x = vcs.init(bg=True, geometry=(500, 1000)) +x.setantialiasing(0) +x.drawlogooff() +x.plot(s, ratio="autot") +xname = "test_autot_axis_titles_xname.png" +x.png(xname) + +print "yname:", yname +print "src:", src_yname + +ret = checkimage.check_result_image(yname, src_yname, checkimage.defaultThreshold) +if ret > 0: + print "yname image did not match." + sys.exit(ret) + +print "xname:", xname +print "src:", src_xname + +ret = checkimage.check_result_image(xname, src_xname, checkimage.defaultThreshold) +sys.exit(ret) diff --git a/testing/vcs/test_box_custom_as_def_vistrails_exts.py b/testing/vcs/test_box_custom_as_def_vistrails_exts.py index 79788706a0..c012c09ca7 100644 --- a/testing/vcs/test_box_custom_as_def_vistrails_exts.py +++ b/testing/vcs/test_box_custom_as_def_vistrails_exts.py @@ -11,6 +11,7 @@ x=vcs.init() x.drawlogooff() +x.setantialiasing(0) x.setbgoutputdimensions(1200,1091,units="pixels") gm=x.createboxfill() @@ -26,3 +27,4 @@ print "fnm:",fnm print "src:",src ret = checkimage.check_result_image(fnm,src,checkimage.defaultThreshold) +sys.exit(ret) diff --git a/testing/vcs/test_boxfill_decreasing_latitude.py b/testing/vcs/test_boxfill_decreasing_latitude.py new file mode 100755 index 0000000000..009b947a9e --- /dev/null +++ b/testing/vcs/test_boxfill_decreasing_latitude.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python +import cdms2 +import cdutil +import os +import sys +import vcs + +pth = os.path.join(os.path.dirname(__file__), "..") +sys.path.append(pth) +import checkimage + +f = cdms2.open(sys.argv[2]) +ice = f("variable_6") +x = vcs.init() +x.setantialiasing(0) +x.drawlogooff() +x.setbgoutputdimensions(1200, 900, units="pixels") + +#gm = x.createisofill() +#gm.label = "y" +gm = x.createboxfill() +gm.boxfill_type = "custom" + +tmpl = x.createtemplate() +#tmpl.blank() +tmpl.data.priority = 1 +tmpl.data.x1 = .05 +tmpl.data.x2 = .95 +tmpl.data.y1 = .05 +tmpl.data.y2 = .90 +tmpl.title.priority = 1 +tmpl.box2.priority = 1 +tmpl.box2.x1 = .23 +tmpl.box2.x2 = .815 +tmpl.box2.y1 = .11 +tmpl.box2.y2 = .895 +tmpl.title.x = .5 +tmpl.title.y = .95 + +tmpl.legend.priority = 1 +tmpl.legend.x1 = tmpl.box2.x1 - .05 +tmpl.legend.x2 = tmpl.box2.x2 + .05 +tmpl.legend.y1 = .03 +tmpl.legend.y2 = .055 +tmpl.max.priority = 1 + +#tmpl.crdate.priority=1 +#tmpl.crdate.x=.8 +#tmpl.crdate.y=.95 +txt = x.createtext() +txt.height = 20 +#txt.color=242 +txt.valign = "half" +txt.halign = "center" + +tmpl.title.textorientation = txt.To_name +tmpl.title.texttable = txt.Tt_name + +ice.long_name = "September sea ice fraction: 4xCO2 climate, no ocean albedo alteration " +levs = vcs.mkscale(ice.min(), ice.max()) + +cols = vcs.getcolors(levs) +cols[0] = 240 + +gm.levels = levs +gm.fillareacolors = cols +#gm.projection="polar" +gm.datawc_y2 = 30 +gm.datawc_y1 = 90 + +x.plot(ice, gm, tmpl, bg = 1) +fnm = "test_boxfill_decreasing_latitude.png" +x.png(fnm) +ret = checkimage.check_result_image(fnm, sys.argv[1], checkimage.defaultThreshold) +sys.exit(ret) + diff --git a/testing/vcs/test_colorcells.py b/testing/vcs/test_colorcells.py index 0dc81a4217..2021eb5134 100644 --- a/testing/vcs/test_colorcells.py +++ b/testing/vcs/test_colorcells.py @@ -9,12 +9,12 @@ assert(x.colormap=="rainbow") assert(x.getcolormapname()=="rainbow") assert(x.getcolormap().name=="default") -assert(x.getcolorcell(16)==[55,6,98]) -assert(vcs.getcolorcell(16,x)==[55,6,98]) -assert(vcs.getcolorcell(16,b)==[55,6,98]) +assert(x.getcolorcell(16)==[55.,6.,98.,100.]) +assert(vcs.getcolorcell(16,x)==[55.,6.,98.,100.]) +assert(vcs.getcolorcell(16,b)==[55,6.,98.,100.]) vcs.setcolorcell("rainbow",16,100,100,100) -assert(x.getcolorcell(16)==[100,100,100]) +assert(x.getcolorcell(16)==[100.,100.,100.,100.]) x.setcolorcell(16,0,100,0) -assert(x.getcolorcell(16)==[0,100,0]) +assert(x.getcolorcell(16)==[0.,100.,0.,100.]) vcs.setcolorcell(b,16,100,100,100) -assert(x.getcolorcell(16)==[100,100,100]) +assert(x.getcolorcell(16)==[100.,100.,100.,100.]) diff --git a/testing/vcs/test_continents.py b/testing/vcs/test_continents.py new file mode 100644 index 0000000000..3e762ba269 --- /dev/null +++ b/testing/vcs/test_continents.py @@ -0,0 +1,58 @@ +import cdms2 +import os +import sys +import vcs +import EzTemplate + +# Load the clt data: +dataFile = cdms2.open(os.path.join(vcs.sample_data, "clt.nc")) +clt = dataFile("clt", time="1979-1-1", squeeze=1) + + +# Zero out the array so we can see the continents clearly +clt[:] = 0 + +# Initialize canvas: +canvas = vcs.init() +canvas.setantialiasing(0) +canvas.setbgoutputdimensions(1200, 1091, units="pixels") +canvas.drawlogooff() + +# Create and plot quick boxfill with default settings: +boxfill = canvas.createboxfill() +# Change the type +boxfill.boxfill_type = 'custom' +# Set levels to ignore 0 +boxfill.levels = [1, 100] +# Pick a color, any color +boxfill.fillareacolors = [242] + +dataonly = vcs.createtemplate() +dataonly.blank() +dataonly.data.priority = 1 + +multitemplate = EzTemplate.Multi(template=dataonly, rows=4, columns=3) + +line_styles = ['long-dash', 'dot', 'dash', 'dash-dot', 'solid'] + +for i in range(12): + cont_index = i % 6 + 1 + cont_line = vcs.createline() + cont_line.width = i % 3 + 1 + cont_line.type = line_styles[i % 5] + cont_line.color = i + 200 + template = multitemplate.get(i) + canvas.plot(clt, template, boxfill, continents=cont_index, continents_line=cont_line, bg=1) + +# Load the image testing module: +testingDir = os.path.join(os.path.dirname(__file__), "..") +sys.path.append(testingDir) +import checkimage + +# Create the test image and compare: +baseline = sys.argv[1] +testFile = "test_continents.png" +canvas.png(testFile) +ret = checkimage.check_result_image(testFile, baseline, + 25) +sys.exit(ret) diff --git a/testing/vcs/test_isoline_width_stipple.py b/testing/vcs/test_isoline_width_stipple.py new file mode 100644 index 0000000000..b563436c26 --- /dev/null +++ b/testing/vcs/test_isoline_width_stipple.py @@ -0,0 +1,49 @@ +import cdms2 +import os +import sys +import vcs + +baselineImage = sys.argv[1] + +pth = os.path.join(os.path.dirname(__file__), "..") +sys.path.append(pth) +import checkimage # noqa + +dataset = cdms2.open(os.path.join(vcs.sample_data, "clt.nc")) +data = dataset("clt") + +canvas = vcs.init() +canvas.setantialiasing(0) +canvas.setbgoutputdimensions(1200, 1091, units="pixels") +canvas.drawlogooff() + +isoline = canvas.createisoline() +isoline.label = "y" +texts = [] +colors = [] +levels = [] +for i in range(7): + levels.append(i*10) + text = canvas.createtext() + text.color = 255 - 20 * i + text.height = 12 + colors.append(10 + 10 * i) + if i % 2 == 0: + texts.append(text.name) + else: + texts.append(text) +isoline.levels = levels +isoline.text = texts +isoline.linecolors = colors + +isoline.linewidths = (1, 2, 3, 4, 1) +isoline.line = ('dot', 'dash', 'solid', 'dash-dot', 'long-dash', 'dot', 'dash') + +# Next plot the isolines with labels +canvas.plot(data, isoline, bg=1) + +testImage = os.path.abspath("test_isoline_width_stipple.png") +canvas.png(testImage) + +ret = checkimage.check_result_image(testImage, baselineImage, 30) +sys.exit(ret) diff --git a/testing/vcs/test_matplotlib_colormap.py b/testing/vcs/test_matplotlib_colormap.py new file mode 100644 index 0000000000..06b9f49b9b --- /dev/null +++ b/testing/vcs/test_matplotlib_colormap.py @@ -0,0 +1,33 @@ +import cdms2 +import os +import sys +import vcs + +# Load the clt data: +dataFile = cdms2.open(os.path.join(vcs.sample_data, "clt.nc")) +clt = dataFile("clt") +clt = clt(latitude=(-90.0, 90.0), longitude=(-180., 175.), squeeze=1, + time=('1979-1-1 0:0:0.0', '1988-12-1 0:0:0.0')) + +# Initialize canvas: +canvas = vcs.init() +canvas.setantialiasing(0) +canvas.setbgoutputdimensions(1200,1091,units="pixels") +canvas.drawlogooff() + +canvas.setcolormap(vcs.matplotlib2vcs("viridis")) + +canvas.plot(clt, bg=1) + +# Load the image testing module: +testingDir = os.path.join(os.path.dirname(__file__), "..") +sys.path.append(testingDir) +import checkimage + +# Create the test image and compare: +baseline = sys.argv[1] +testFile = "test_matplotlib_colormap.png" +canvas.png(testFile) +ret = checkimage.check_result_image(testFile, baseline, + checkimage.defaultThreshold) +sys.exit(ret) diff --git a/testing/vcs/test_meshfill_mercator.py b/testing/vcs/test_meshfill_mercator.py new file mode 100644 index 0000000000..9c3aaf63bf --- /dev/null +++ b/testing/vcs/test_meshfill_mercator.py @@ -0,0 +1,17 @@ +import vcs +import cdms2 +import os +import sys + +f=cdms2.open(os.path.join(vcs.sample_data,"sampleCurveGrid4.nc")) +s=f("sample") +x=vcs.init() +m=x.createmeshfill() +m.datawc_y1=-85 +m.datawc_y2=85 +p=x.createprojection() +p.type="mercator" +m.projection=p +x.plot(s,m,bg=1) +x.png("meshfill_mercator") +raw_input("Press enter") diff --git a/testing/vcs/test_png_metadata.py b/testing/vcs/test_png_metadata.py new file mode 100644 index 0000000000..be17b2282b --- /dev/null +++ b/testing/vcs/test_png_metadata.py @@ -0,0 +1,15 @@ +# Check if text chunks are saved correctly in a PNG file +import vcs +import os + +x=vcs.init() +x.drawlogooff() +x.setantialiasing(0) + +x.plot([1,2,3,4,5,4,3,2,1],bg=1) + +fnm = "test_png_metadata.png" +m = {'one':'value one','two':'value two'} +x.png(fnm, width=15, metadata=m) +assert(vcs.png_read_metadata(fnm) == m) +os.remove(fnm) diff --git a/testing/vcs/test_png_set_size.py b/testing/vcs/test_png_set_size.py index 4f894b3e34..7044e6caa3 100644 --- a/testing/vcs/test_png_set_size.py +++ b/testing/vcs/test_png_set_size.py @@ -22,9 +22,12 @@ def get_image_info(fnm): fnm = "test_png_set_size.png" x.png(fnm,width=15) +print get_image_info(fnm) assert(get_image_info(fnm) == (15,11)) x.png(fnm,height=16) +print get_image_info(fnm) assert(get_image_info(fnm) == (20,16)) x.png(fnm,width=15,height=12) +print get_image_info(fnm) assert(get_image_info(fnm) == (15,12)) - +os.remove(fnm) diff --git a/testing/vcs/test_to_base64.py b/testing/vcs/test_to_base64.py new file mode 100644 index 0000000000..6b88b35114 --- /dev/null +++ b/testing/vcs/test_to_base64.py @@ -0,0 +1,23 @@ +import vcs,numpy,cdms2,MV2,os,sys + +x = vcs.init() +x.drawlogooff() +x.setbgoutputdimensions(1200, 1091, units="pixels") + +m = x.createmarker() + +m.type = "star" +m.x = [.1] +m.y = [.1] +m.color = 200 +m.size = 50 +display = x.plot(m, bg=1) + +success = 0 +try: + display._repr_png() +except Exception as exc: + print "Conversion to base64 binary string failed.", exc + success = 1 + +sys.exit(success) diff --git a/testing/vcs/test_vcs_basic_gms.py b/testing/vcs/test_vcs_basic_gms.py index ae90a9e3c6..daa144d9dd 100644 --- a/testing/vcs/test_vcs_basic_gms.py +++ b/testing/vcs/test_vcs_basic_gms.py @@ -15,6 +15,7 @@ p.add_argument("--gm_flips_lat_range", dest="flip", action="store_true", help="Set the range via graphic method to flip of data") p.add_argument("--zero", dest="zero", action="store_true", help="Set the data to zero everywhere") p.add_argument("--keep", dest="keep", action="store_true",help="Save image, even if baseline matches.") +p.add_argument("--transparent", dest="transparent", action="store_true",help="Add transparency to colors") dataMods = p.add_mutually_exclusive_group() dataMods.add_argument("--mask", dest="mask", action="store_true",help="mask out part of data") @@ -113,6 +114,12 @@ if args.bigvalues: gm.levels = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 1.e36] +if args.transparent: + cmap = x.createcolormap() + for i in range(256): # tweaks all colors + cmap.setcolorcell(i,100.,0,0,i/2.55) + x.setcolormap(cmap) + if gm_type=="vector": x.plot(u,v,gm,bg=bg) elif gm_type in ["scatter","xvsy"]: @@ -128,11 +135,15 @@ fnm+="_%s_proj" % args.projtype if args.zero: fnm+="_zero" +if args.transparent: + fnm+="_transparent" fnm+=nm_xtra x.png(fnm) print "fnm:",fnm print "src:",src -ret = checkimage.check_result_image(fnm+'.png',src,checkimage.defaultThreshold, cleanup=not args.keep) +if args.show: + raw_input("Press Enter") +ret = checkimage.check_result_image(fnm+'.png',src,20., cleanup=not args.keep) if args.show: raw_input("Press Enter") sys.exit(ret) diff --git a/testing/vcs/test_vcs_boxfill_basics_no_plot.py b/testing/vcs/test_vcs_boxfill_basics_no_plot.py index 6c13d4ad86..7d08a2b75f 100644 --- a/testing/vcs/test_vcs_boxfill_basics_no_plot.py +++ b/testing/vcs/test_vcs_boxfill_basics_no_plot.py @@ -58,7 +58,7 @@ test_values_setting(b,"boxfill_type",['linear', 'log10','custom',0,1,2],['bla',45,(),[],{},None]) test_values_setting(b,["level_1","level_2"],[2,2.,1.e20,],['1',[1,2,3,4],[1,],{3:"3"},None]) test_values_setting(b,"levels",[[1,2,3,4],[1,2.,45.],[[1,2],[4,5],[6,7]]],[1,[1,2,'4'],[],{},{1:'1'},None,[[1,2],[1,2,3]]]) -test_values_setting(b,["color_1","color_2","missing"],[2,"red",242],["foo",-5,345,[],{},None]) +test_values_setting(b,["color_1","color_2","missing"],[2,"red",[100,5.,4],[23,4,5,50],242],["foo",-5,345,[56,],[1,2,3,4,5],[],{},None]) test_values_setting(b,"fillareacolors",[[1,2,3],[1,"red","blue"],None],['1',{},[-3,-5,-6],[1,2,"foo"]]) fa = x.createfillarea() test_values_setting(b,"fillareaindices",[[1,2,3],[1,fa],None],['1',{},[-3,-5,-6],[1,2,"foo"],[0,1,2],[1,23]]) diff --git a/testing/vcs/test_vcs_click_info.py b/testing/vcs/test_vcs_click_info.py index f35b45d125..d7af60bec6 100644 --- a/testing/vcs/test_vcs_click_info.py +++ b/testing/vcs/test_vcs_click_info.py @@ -12,8 +12,8 @@ x.drawlogooff() # Needs to set the size of window so it is consistent accross # test platforms -x.open() -x.geometry(814, 606) +x.open(814, 606) + f = cdms2.open(vcs.sample_data + "/clt.nc") s = f("clt") @@ -27,7 +27,6 @@ i.LeftButtonPressEvent() fnm = "test_vcs_click_info.png" - x.png(fnm, width=814, height= 606) print "fnm:", fnm diff --git a/testing/vcs/test_vcs_configurator_click_label.py b/testing/vcs/test_vcs_configurator_click_label.py index 5cacca4eee..5390970575 100644 --- a/testing/vcs/test_vcs_configurator_click_label.py +++ b/testing/vcs/test_vcs_configurator_click_label.py @@ -6,8 +6,7 @@ x = vcs.init() # Needs to set the size of window so it is consistent accross # test platforms -x.open() -x.geometry(x.bgX,x.bgY) +x.open(800, 606) cltfile = cdms2.open(os.path.join(vcs.sample_data, "clt.nc")) clt = cltfile("clt") @@ -47,7 +46,7 @@ # Make sure the displays are current c.update() -w, h = x.bgX, x.bgY +w, h = 800, 606 # Retrieve the actor at the specified point actor = c.actor_at_point(.1 * w + 5, .9 * h + 5) diff --git a/testing/vcs/test_vcs_configurator_click_marker.py b/testing/vcs/test_vcs_configurator_click_marker.py index 8f835fc366..2322ede816 100644 --- a/testing/vcs/test_vcs_configurator_click_marker.py +++ b/testing/vcs/test_vcs_configurator_click_marker.py @@ -2,7 +2,8 @@ import sys x = vcs.init() - +x.bgX = 800 +x.bgY = 606 m = x.createmarker() m.x = .1, m.y = .1, diff --git a/testing/vcs/test_vcs_configurator_click_text.py b/testing/vcs/test_vcs_configurator_click_text.py index 3a962c8ca9..4233708103 100644 --- a/testing/vcs/test_vcs_configurator_click_text.py +++ b/testing/vcs/test_vcs_configurator_click_text.py @@ -2,7 +2,8 @@ import sys x = vcs.init() - +x.bgX = 800 +x.bgY = 606 t = x.createtext() t.string = "test string" t.x = .1 diff --git a/testing/vcs/test_vcs_dump_json.json b/testing/vcs/test_vcs_dump_json.json index dc1488b8d6..b79b1319c3 100644 --- a/testing/vcs/test_vcs_dump_json.json +++ b/testing/vcs/test_vcs_dump_json.json @@ -124,6 +124,7 @@ 1 ], "fillareaindices": null, + "fillareaopacity": [], "fillareastyle": "solid", "legend": null, "levels": [ @@ -597,26 +598,6 @@ 1e+20 ], "type": "linear" - }, - "linear": { - "parameters": [ - 1e+20, - 1e+20, - 1e+20, - 1e+20, - 1e+20, - 1e+20, - 1e+20, - 1e+20, - 1e+20, - 1e+20, - 1e+20, - 1e+20, - 1e+20, - 1e+20, - 1e+20 - ], - "type": "linear" } }, "Tf": { diff --git a/testing/vcs/test_vcs_fillarea_basics_no_plot.py b/testing/vcs/test_vcs_fillarea_basics_no_plot.py index 292489f00b..870aae9be8 100644 --- a/testing/vcs/test_vcs_fillarea_basics_no_plot.py +++ b/testing/vcs/test_vcs_fillarea_basics_no_plot.py @@ -14,7 +14,7 @@ test_values_setting(f,"style",[f,0,1,2,3,"hatch","pattern","hallow"],[-1,4,"foo",[],{},(),None]) test_values_setting(f,"index",[None,f,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,],[0,21,"foo",[],(),{}]) test_values_setting(f,"color",range(256)) -test_values_setting(f,"color",[f,"red",[2,3,4],None],[-1,256,[[2,3,4],]]) +test_values_setting(f,"color",[f,"red",[2,3,4],[[2,3,4],],[[1,2,3,5],],None],[-1,256,[[2,3,4,6,5],]]) test_values_setting(f,["x","y"],[None,[1,2,3],],[1,"sdf",[1,2,"3"],[[1,2,3],2]]) b = x.createfillarea("test_f_ok",f.name) assert(b.name == "test_f_ok") diff --git a/testing/vcs/test_vcs_fillarea_transparency.py b/testing/vcs/test_vcs_fillarea_transparency.py new file mode 100644 index 0000000000..dc3a8bf4bd --- /dev/null +++ b/testing/vcs/test_vcs_fillarea_transparency.py @@ -0,0 +1,36 @@ +import vcs +import sys,os +pth = os.path.join(os.path.dirname(__file__),"..") +sys.path.append(pth) +import checkimage + +x=vcs.init() +x.setantialiasing(0) +x.drawlogooff() +x.setbgoutputdimensions(1200,1090,units="pixels") + +fa1 = x.createfillarea() + +fa1.x=[.2,.8,.8,.2] +fa1.y = [.2,.2,.8,.8] +fa1.color = 242 + +fa2=x.createfillarea(source = fa1) + +fa2.x = [.1,.9,.9,.1] +fa2.y = [.1,.1,.9,.9] + +cmap = x.createcolormap() +cmap.setcolorcell(242,0,0,100,50) + +fa2.colormap = cmap + +x.plot(fa1,bg=True) +x.plot(fa2,bg=True) + +fnm = os.path.split(__file__[:-2]+"png")[-1] +x.png(fnm) +src = sys.argv[1] + +ret = checkimage.check_result_image(fnm,src,checkimage.defaultThreshold) +sys.exit(ret) diff --git a/testing/vcs/test_vcs_get_set_cmap_colorcell.py b/testing/vcs/test_vcs_get_set_cmap_colorcell.py index 36681ea8d4..4d6481aab9 100644 --- a/testing/vcs/test_vcs_get_set_cmap_colorcell.py +++ b/testing/vcs/test_vcs_get_set_cmap_colorcell.py @@ -6,16 +6,19 @@ cmap = x.createcolormap() rgb = cmap.getcolorcell(25) -assert(rgb == [0,60,100]) +assert(rgb == [0.,60.,100.,100.]) rgb = x.getcolorcell(25) -assert(rgb == [0,60,100]) +assert(rgb == [0.,60.,100.,100.]) rgb = x.getcolorcell(25,x) -assert(rgb == [0,60,100]) +assert(rgb == [0.,60.,100.,100.]) rgb = x.getcolorcell(25,gm) -assert(rgb == [0,60,100]) +assert(rgb == [0.,60.,100.,100.]) cmap.setcolorcell(25,56,23,29) -assert(cmap.index[25] == [56,23,29]) +assert(cmap.index[25] == [56.,23.,29.,100.]) + +cmap.setcolorcell(25,56,23,29,55.7) +assert(cmap.index[25] == [56.,23.,29.,55.7]) diff --git a/testing/vcs/test_vcs_gms_animate_projected_plots.py b/testing/vcs/test_vcs_gms_animate_projected_plots.py new file mode 100644 index 0000000000..2e521cd4ad --- /dev/null +++ b/testing/vcs/test_vcs_gms_animate_projected_plots.py @@ -0,0 +1,82 @@ +# Test animation of projected plots + +import argparse +import cdms2 +import MV2 +import os +import sys +import vcs + +pth = os.path.join(os.path.dirname(__file__), "..") +sys.path.append(pth) +import checkimage # noqa + +p = argparse.ArgumentParser(description="Testing animation of projected plots") +p.add_argument("--gm_type", dest="gm", help="gm to test") +p.add_argument("--projection_type", dest="projtype", default="default", + help="use a specific projection type") +p.add_argument("--source", dest="src", help="path to baseline image") +p.add_argument("--keep", dest="keep", action="store_true", default=False, + help="Save images, even if baseline matches.") +p.add_argument("--threshold", dest="threshold", type=int, + default=checkimage.defaultThreshold, + help="Threshold value for image differnces") + +args = p.parse_args(sys.argv[1:]) + +gm_type = args.gm + +x = vcs.init() +x.setantialiasing(0) +x.drawlogooff() +x.setbgoutputdimensions(1200, 1091, units="pixels") + +s = None + +if gm_type == "meshfill": + f = cdms2.open(os.path.join(vcs.sample_data, "sampleCurveGrid4.nc")) + s2 = f("sample") + + s = MV2.resize(s2, (4, 32, 48)) + t = cdms2.createAxis(range(4)) + t.units = "months since 2015" + t.id = "time" + t.designateTime() + s.setAxis(0, t) + s.setAxis(1, s2.getAxis(0)) + s.setAxis(2, s2.getAxis(1)) + s.setGrid(s2.getGrid()) + for i in range(4): + s[i] = s[i] * (1 + float(i)/10.) +else: + f = cdms2.open(os.path.join(vcs.sample_data, "clt.nc")) + s = f("clt", slice(0, 12)) # read only 12 times steps to speed up things + +gm = vcs.creategraphicsmethod(gm_type, "default") +if args.projtype != "default": + p = vcs.createprojection() + try: + ptype = int(args.projtype) + except: + ptype = args.projtype + p.type = ptype + gm.projection = p + +x.plot(s, gm, bg=1) +x.animate.create() + +prefix = "test_vcs_animate_%s_%s" % (gm_type.lower(), args.projtype.lower()) +x.animate.save("%s.mp4" % prefix) +pngs = x.animate.close(preserve_pngs=True) # so we can look at them again + +ret = 0 +pdir = os.path.split(pngs[0])[0] +p = pdir + os.sep + "anim_0.png" +ret = checkimage.check_result_image(p, args.src, args.threshold) +if ret == 0 and not args.keep: + for f in pngs: + if os.path.isfile(f): + os.remove(f) + os.removedirs(pdir) + os.remove("%s.mp4" % prefix) +sys.exit(ret) diff --git a/testing/vcs/test_vcs_gms_patterns_hatches.py b/testing/vcs/test_vcs_gms_patterns_hatches.py index c92f3e94bf..4030429a0d 100644 --- a/testing/vcs/test_vcs_gms_patterns_hatches.py +++ b/testing/vcs/test_vcs_gms_patterns_hatches.py @@ -8,12 +8,11 @@ pth = os.path.join(os.path.dirname(__file__), "..") sys.path.append(pth) -import checkimage - +import checkimage # noqa p = argparse.ArgumentParser(description="Patterns/hatches testing code for vcs gms") p.add_argument("--source", dest="src", help="source image file") -p.add_argument("--gm_type", dest="gm", help="gm to test") +p.add_argument("--gm_type", dest="gm", help="gm to test", default="isofill") p.add_argument("--fill_style", dest="fill_style", help="Patterns/hatches fill style", default="pattern", type=str) p.add_argument("--show", dest="show", action="store_true", help="show plots on screen (no bg)", default=False) @@ -24,7 +23,8 @@ p.add_argument("--lon2", dest="lon2", default=180, type=float, help="Last Longitude") p.add_argument("--keep", dest="keep", action="store_true", help="Save image, even if baseline matches.") p.add_argument("--threshold", dest="threshold", type=int, default=checkimage.defaultThreshold, - help="Threshold value for image differnces") + help="Default threshold") +p.add_argument("--non-contiguous", dest="contig", default=True, action="store_false", help="use non contiguous levels") args = p.parse_args(sys.argv[1:]) @@ -47,7 +47,11 @@ p.type = ptype gm.projection = p -gm.levels = [220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320] +if args.contig: + gm.levels = [220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320] +else: + gm.levels = [[230,235],[240,245],[250,255],[260,265],[270,275], + [280,285],[290,295],[300,305],[310,315],[320,325]] gm.fillareastyle = args.fill_style gm.fillareacolors = [242, 244, 237, 248, 250, 252, 44, 243, 139, 247] if args.fill_style == "hatch": @@ -60,6 +64,9 @@ if args.gm == "boxfill": gm.boxfill_type = "custom" +if args.gm == "meshfill": + gm.mesh = True + nm_xtra = "" xtra = {} if args.lat1 != args.lat2: @@ -73,6 +80,8 @@ if args.lon1 != args.lon2: xtra["longitude"] = (args.lon1, args.lon2) nm_xtra += "_%i_%i" % (args.lon1, args.lon2) +if not args.contig: + nm_xtra += "_non-contig" xtra["time"] = slice(0, 1) xtra["squeeze"] = 1 @@ -80,7 +89,7 @@ f = cdms2.open(os.path.join(vcs.sample_data, 'tas_ccsr-95a_1979.01-1979.12.nc')) s = f("tas", **xtra) f.close() -gm.list() + x.plot(s, gm, bg=bg) fnm = "test_vcs_%s_%s" % (args.gm.lower(), args.fill_style.lower()) if args.projtype != "default": diff --git a/testing/vcs/test_vcs_init_open_sizing.py b/testing/vcs/test_vcs_init_open_sizing.py new file mode 100644 index 0000000000..c743320784 --- /dev/null +++ b/testing/vcs/test_vcs_init_open_sizing.py @@ -0,0 +1,75 @@ +import vcs +import sys + + +failing = { + "allowed negative value": (250, -1), + "allowed 0 value": (0, 125), + "allowed non-numeric value": "ab", + "allowed too many values": [1, 2, 3], + "allowed no values": [] +} + +for reason in failing: + # Try as dictionary + f = failing[reason] + d = {} + if len(f) == 2: + d = {"width": f[0], "height": f[1]} + elif len(f) > 2: + d = {"width": f[0], "height": f[1], "other": f[2:]} + + try: + vcs.init(geometry=d, bg=True) + except ValueError: + pass + else: + print "Dict", failing + sys.exit(1) + + try: + vcs.init(geometry=f, bg=True) + except ValueError: + pass + else: + print "List/Tuple", failing + sys.exit(1) + +valid = [ + (250, 125), + (1, 1), + (800, 1000) +] + + +def test_canvas_size(c, size, via): + info = c.canvasinfo() + w, h = size + + # Make sure size fits on screen bounds + screen_w, screen_h = c.backend.renWin.GetScreenSize() + if w > screen_w: + w = screen_w + if h > screen_h: + h = screen_h + assert info["width"] == w, "Width via %s incorrect; expected %d, got %d" % (via, w, info["width"]) + assert info["height"] == h, "Height via %s incorrect; expected %d, got %d" % (via, h, info["height"]) + +for size in valid: + w, h = size + d = {"width": w, "height": h} + + c = vcs.init(geometry=d, bg=True) + c.open() + test_canvas_size(c, size, "dict init") + c.close() + + c = vcs.init(geometry=size, bg=True) + c.open() + test_canvas_size(c, size, "list/tuple init") + c.close() + + c = vcs.init(bg=True) + c.open(width=w, height=h) + test_canvas_size(c, size, "open") + c.close() diff --git a/testing/vcs/test_vcs_lambert.py b/testing/vcs/test_vcs_lambert.py new file mode 100644 index 0000000000..17a50209f8 --- /dev/null +++ b/testing/vcs/test_vcs_lambert.py @@ -0,0 +1,27 @@ +import vcs,cdms2 +import os,sys +f = cdms2.open(os.path.join(vcs.sample_data, "clt.nc")) +s = f("clt") +x = vcs.init() +x.setantialiasing(0) +x.drawlogooff() +x.setbgoutputdimensions(1200,1090,units="pixels") +iso = x.createisofill() +p=x.createprojection() +p.type="lambert" + +iso.projection = p +x.plot(s(latitude=(20, 60),longitude=(-140,-20)), iso, bg=True) + +# Load the image testing module: +testingDir = os.path.join(os.path.dirname(__file__), "..") +sys.path.append(testingDir) +import checkimage + +# Create the test image and compare: +baseline = sys.argv[1] +testFile = "test_vcs_lambert.png" +x.png(testFile) +ret = checkimage.check_result_image(testFile, baseline, + checkimage.defaultThreshold) +sys.exit(ret) diff --git a/testing/vcs/test_vcs_large_pattern_hatch.py b/testing/vcs/test_vcs_large_pattern_hatch.py new file mode 100644 index 0000000000..3bcf0827da --- /dev/null +++ b/testing/vcs/test_vcs_large_pattern_hatch.py @@ -0,0 +1,31 @@ +import vcs +import sys +import os + +baseline = sys.argv[1] + +pth = os.path.join(os.path.dirname(__file__), "..") +sys.path.append(pth) +import checkimage + +canvas = vcs.init() +canvas.setantialiasing(0) +canvas.setbgoutputdimensions(1200,1090, units="pixels") +canvas.drawlogooff() + +fillarea = vcs.createfillarea() +fillarea.x = [[0, .33, .33, 0], [.33, .67, .67, .33], [.67, 1, 1, .67]] +fillarea.y = [[0, 0, 1, 1]] * 3 +fillarea.style = ["solid", "pattern", "hatch"] +fillarea.index = [1, 5, 5] +fillarea.color = [50, 50, 50] + +canvas.plot(fillarea, bg=True) + +testImage = os.path.abspath("test_vcs_large_pattern_hatch.png") +canvas.png(testImage) + +ret = checkimage.check_result_image(testImage, baseline, + checkimage.defaultThreshold) + +sys.exit(ret) diff --git a/testing/vcs/test_vcs_meshfill_vertices_issue.py b/testing/vcs/test_vcs_meshfill_vertices_issue.py new file mode 100644 index 0000000000..6317ef0719 --- /dev/null +++ b/testing/vcs/test_vcs_meshfill_vertices_issue.py @@ -0,0 +1,57 @@ +import numpy +import vcs +import sys +import os +pth = os.path.join(os.path.dirname(__file__),"..") +sys.path.append(pth) +import checkimage + +x=vcs.init() + +x.setantialiasing(0) +x.drawlogooff() +x.setbgoutputdimensions(1200, 1090, units="pixels") + +data_values = [ 25, 45, 55.] + +data_lon = [ 5., 10., 15.] +data_lat = [ 5., 10., 15.] + +data_lon_vert = [ + # Triangle (last one missing because traingle has only 3 vertices + [2.5,7.5,5.,1.e20], + # Square + [7.5,12.5,12.5,7.5], + # Diamond + [15.,17.5,15,12.5],] + +data_lat_vert = [ + # triangle + [2.5,2.5,7.5,1.e20], + # square + [7.5,7.5,12.5,12.5], + # diamond + [12.5,15,17.5,15],] + +mesh = numpy.array([data_lat_vert,data_lon_vert]) +print "MESH SHAPE:",mesh.shape,mesh.dtype +mesh = numpy.transpose(mesh,(1,0,2)) +print "MESH SHAPE:",mesh.shape +mesh = numpy.ma.masked_greater(mesh,1.e19) + +""" +print "Triangle lats:" +print mesh[0][0] +print "Triangle lons:" +print mesh[0][1] +""" +m = x.createmeshfill() +m.levels = [20,30,50,70,80] +m.mesh = True + +x.plot(numpy.array(data_values,),mesh,m,bg=True) +x.png("test_vcs_meshfill_vertices_issue.png") +src = sys.argv[1] +ret = checkimage.check_result_image("test_vcs_meshfill_vertices_issue.png", + src, checkimage.defaultThreshold) +sys.exit(ret) diff --git a/testing/vcs/test_vcs_patterns.py b/testing/vcs/test_vcs_patterns.py index d81198a6ce..fed4f41a83 100644 --- a/testing/vcs/test_vcs_patterns.py +++ b/testing/vcs/test_vcs_patterns.py @@ -13,7 +13,7 @@ x = vcs.init() x.setantialiasing(0) x.drawlogooff() -x.setbgoutputdimensions(1200, 1091, units="pixels") +x.setbgoutputdimensions(1200, 1090, units="pixels") iso = vcs.createisofill("isoleg") iso.levels = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100] iso.fillareastyle = "pattern" @@ -25,5 +25,5 @@ print "fnm:", fnm print "src:", src -ret = checkimage.check_result_image(fnm, src, checkimage.defaultThreshold) +ret = checkimage.check_result_image(fnm, src, checkimage.defaultThreshold+5.) sys.exit(ret) diff --git a/testing/vcs/test_vcs_png_window_resize.py b/testing/vcs/test_vcs_png_window_resize.py new file mode 100644 index 0000000000..0adeeb66ba --- /dev/null +++ b/testing/vcs/test_vcs_png_window_resize.py @@ -0,0 +1,20 @@ +import vcs +import sys +import os + +src=sys.argv[1] +pth = os.path.join(os.path.dirname(__file__),"..") +sys.path.append(pth) +import checkimage +x=vcs.init() +x.setantialiasing(0) +x.drawlogooff() +x.open(814,628) +x.plot([1,2,3,4,5,6,7]) +fnm = __file__[:-3]+".png" +x.png(fnm) + +print "fnm:",fnm +print "src:",src +ret = checkimage.check_result_image(fnm,src,checkimage.defaultThreshold) +sys.exit(ret) diff --git a/testing/vcs/test_vcs_settings_color_name_rgba.py b/testing/vcs/test_vcs_settings_color_name_rgba.py new file mode 100644 index 0000000000..0b6aeef22f --- /dev/null +++ b/testing/vcs/test_vcs_settings_color_name_rgba.py @@ -0,0 +1,28 @@ +import vcs +import numpy +import os +import sys +import cdms2 +pth = os.path.join(os.path.dirname(__file__),"..") +sys.path.append(pth) +import checkimage + +x=vcs.init() +x.setantialiasing(0) +x.drawlogooff() +x.setbgoutputdimensions(1200,1090,units="pixels") + +f=cdms2.open(os.path.join(vcs.sample_data,"clt.nc")) +data=f("clt",slice(0,1,)) +gm = x.createisofill() +gm.levels = range(0,110,10) +gm.fillareacolors = ["green","red","blue","bisque","yellow","grey", + [100,0,0,50], [0,100,0],"salmon",[0,0,100,75]] +x.plot(data,gm,bg=True) +fnm = 'test_vcs_settings_color_name_rgba_isofill.png' +src = sys.argv[1] +x.png(fnm) +print "fnm:",fnm +print "src:",src +ret = checkimage.check_result_image(fnm,src,checkimage.defaultThreshold) +sys.exit(ret) diff --git a/testing/vcs/test_vcs_settings_color_name_rgba_1d.py b/testing/vcs/test_vcs_settings_color_name_rgba_1d.py new file mode 100644 index 0000000000..0fe844c203 --- /dev/null +++ b/testing/vcs/test_vcs_settings_color_name_rgba_1d.py @@ -0,0 +1,27 @@ +import vcs +import numpy +import os +import sys +import cdms2 +pth = os.path.join(os.path.dirname(__file__),"..") +sys.path.append(pth) +import checkimage + +x=vcs.init() +x.setantialiasing(0) +x.drawlogooff() +x.setbgoutputdimensions(1200,1090,units="pixels") + +f=cdms2.open(os.path.join(vcs.sample_data,"clt.nc")) +data=f("clt")[:,5,8] +gm = x.create1d() +gm.linecolor="salmon" +gm.markercolor = [0,0,100] +x.plot(data,gm,bg=True) +fnm = 'test_vcs_settings_color_name_rgba_1d.png' +src = sys.argv[1] +x.png(fnm) +print "fnm:",fnm +print "src:",src +ret = checkimage.check_result_image(fnm,src,checkimage.defaultThreshold) +sys.exit(ret) diff --git a/testing/vcs/test_vcs_settings_color_name_rgba_boxfill.py b/testing/vcs/test_vcs_settings_color_name_rgba_boxfill.py new file mode 100644 index 0000000000..043d331c8a --- /dev/null +++ b/testing/vcs/test_vcs_settings_color_name_rgba_boxfill.py @@ -0,0 +1,29 @@ +import vcs +import numpy +import os +import sys +import cdms2 +pth = os.path.join(os.path.dirname(__file__),"..") +sys.path.append(pth) +import checkimage + +x=vcs.init() +x.setantialiasing(0) +x.drawlogooff() +x.setbgoutputdimensions(1200,1090,units="pixels") + +f=cdms2.open(os.path.join(vcs.sample_data,"clt.nc")) +data=f("clt",slice(0,1,)) +gm = x.createboxfill() +gm.boxfill_type = "custom" +gm.levels = range(0,110,10) +gm.fillareacolors = ["green","red","blue","bisque","yellow","grey", + [100,0,0,50], [0,100,0],"salmon",[0,0,100,75]] +x.plot(data,gm,bg=True) +fnm = 'test_vcs_settings_color_name_rgba_boxfill.png' +src = sys.argv[1] +x.png(fnm) +print "fnm:",fnm +print "src:",src +ret = checkimage.check_result_image(fnm,src,checkimage.defaultThreshold) +sys.exit(ret) diff --git a/testing/vcs/test_vcs_settings_color_name_rgba_isoline.py b/testing/vcs/test_vcs_settings_color_name_rgba_isoline.py new file mode 100644 index 0000000000..200293dbee --- /dev/null +++ b/testing/vcs/test_vcs_settings_color_name_rgba_isoline.py @@ -0,0 +1,28 @@ +import vcs +import numpy +import os +import sys +import cdms2 +pth = os.path.join(os.path.dirname(__file__),"..") +sys.path.append(pth) +import checkimage + +x=vcs.init() +x.setantialiasing(0) +x.drawlogooff() +x.setbgoutputdimensions(1200,1090,units="pixels") + +f=cdms2.open(os.path.join(vcs.sample_data,"clt.nc")) +data=f("clt",slice(0,1,)) +gm = x.createisoline() +gm.levels = range(0,110,10) +gm.linecolors = ["green","red","blue","bisque","yellow","grey", + [100,0,0,50], [0,100,0],"salmon",[0,0,100,75]] +x.plot(data,gm,bg=True) +fnm = 'test_vcs_settings_color_name_rgba_isoline.png' +src = sys.argv[1] +x.png(fnm) +print "fnm:",fnm +print "src:",src +ret = checkimage.check_result_image(fnm,src,checkimage.defaultThreshold) +sys.exit(ret) diff --git a/testing/vcs/test_vcs_settings_color_name_rgba_meshfill.py b/testing/vcs/test_vcs_settings_color_name_rgba_meshfill.py new file mode 100644 index 0000000000..4a0858d1d1 --- /dev/null +++ b/testing/vcs/test_vcs_settings_color_name_rgba_meshfill.py @@ -0,0 +1,28 @@ +import vcs +import numpy +import os +import sys +import cdms2 +pth = os.path.join(os.path.dirname(__file__),"..") +sys.path.append(pth) +import checkimage + +x=vcs.init() +x.setantialiasing(0) +x.drawlogooff() +x.setbgoutputdimensions(1200,1090,units="pixels") + +f=cdms2.open(os.path.join(vcs.sample_data,"sampleCurveGrid4.nc")) +data=f("sample") +gm = x.createmeshfill() +gm.levels = range(0,1501,150) +gm.fillareacolors = ["green","red","blue","bisque","yellow","grey", + [100,0,0,50], [0,100,0],"salmon",[0,0,100,75]] +x.plot(data,gm,bg=True) +fnm = 'test_vcs_settings_color_name_rgba_meshfill.png' +src = sys.argv[1] +x.png(fnm) +print "fnm:",fnm +print "src:",src +ret = checkimage.check_result_image(fnm,src,checkimage.defaultThreshold) +sys.exit(ret) diff --git a/testing/vcs/vcs_test_save_td_to_json.json.good b/testing/vcs/vcs_test_save_td_to_json.json.good index 5e53b08f0d..4a43e86397 100644 --- a/testing/vcs/vcs_test_save_td_to_json.json.good +++ b/testing/vcs/vcs_test_save_td_to_json.json.good @@ -45,11 +45,36 @@ null ], "line_color": [ - 1, - 1, - 1, - 1, - 1 + [ + 0.0, + 0.0, + 0.0, + 100.0 + ], + [ + 0.0, + 0.0, + 0.0, + 100.0 + ], + [ + 0.0, + 0.0, + 0.0, + 100.0 + ], + [ + 0.0, + 0.0, + 0.0, + 100.0 + ], + [ + 0.0, + 0.0, + 0.0, + 100.0 + ] ], "line_size": [ 1.0, diff --git a/testing/vcs/vcs_test_save_td_to_py.py.good b/testing/vcs/vcs_test_save_td_to_py.py.good index 6d08b34790..5d3231d344 100644 --- a/testing/vcs/vcs_test_save_td_to_py.py.good +++ b/testing/vcs/vcs_test_save_td_to_py.py.good @@ -35,7 +35,7 @@ __Gtd__vcs_test_save_taylor_to_json_and_python.addMarker( size = 5, xoffset = 2.0380499362945557, yoffset = 1.0833240747451782, - line_color = 1, + line_color = [0.0, 0.0, 0.0, 100.0], line_size = 1.0, line_type = 'solid' ) @@ -51,7 +51,7 @@ __Gtd__vcs_test_save_taylor_to_json_and_python.addMarker( size = 5, xoffset = 2.1889517307281494, yoffset = 1.5037295818328857, - line_color = 1, + line_color = [0.0, 0.0, 0.0, 100.0], line_size = 1.0, line_type = 'solid' ) @@ -67,7 +67,7 @@ __Gtd__vcs_test_save_taylor_to_json_and_python.addMarker( size = 5, xoffset = 2.005732774734497, yoffset = 1.2790908813476562, - line_color = 1, + line_color = [0.0, 0.0, 0.0, 100.0], line_size = 1.0, line_type = 'solid' ) @@ -83,7 +83,7 @@ __Gtd__vcs_test_save_taylor_to_json_and_python.addMarker( size = 5, xoffset = 2.194457530975342, yoffset = 1.4414606094360352, - line_color = 1, + line_color = [0.0, 0.0, 0.0, 100.0], line_size = 1.0, line_type = 'solid' ) @@ -99,7 +99,7 @@ __Gtd__vcs_test_save_taylor_to_json_and_python.addMarker( size = 5, xoffset = 0.0, yoffset = 0.0, - line_color = 1, + line_color = [0.0, 0.0, 0.0, 100.0], line_size = 1.0, line_type = 'solid' )